From 35fe8835c50b580ad644ca04bc5ff63a752c5371 Mon Sep 17 00:00:00 2001 From: Allan Ritchie Date: Sat, 7 Jun 2014 23:35:27 -0400 Subject: [PATCH] Initial commit --- .gitattributes | 63 + .gitignore | 159 ++ .../Acr.XamForms.BarCodeScanner.Droid.csproj | 101 + .../Properties/AssemblyInfo.cs | 10 + .../Resources/Resource.Designer.cs | 95 + .../Resources/Values/Strings.xml | 5 + .../packages.config | 6 + ...r.XamForms.BarCodeScanner.Shared.projitems | 14 + .../Acr.XamForms.BarCodeScanner.Shared.shproj | 12 + .../BarCodeScanner.cs | 92 + ...amForms.BarCodeScanner.WindowsPhone.csproj | 140 ++ .../Properties/AssemblyInfo.cs | 7 + .../packages.config | 6 + .../Acr.XamForms.BarCodeScanner.iOS.csproj | 80 + .../Properties/AssemblyInfo.cs | 6 + .../packages.config | 5 + .../Acr.XamForms.BarCodeScanner.csproj | 54 + Acr.XamForms.BarCodeScanner/BarCodeFormat.cs | 28 + Acr.XamForms.BarCodeScanner/BarCodeResult.cs | 29 + .../BarCodeScannerOptions.cs | 31 + .../IBarCodeScanner.cs | 14 + .../Properties/AssemblyInfo.cs | 6 + .../Acr.XamForms.DeviceInfo.Droid.csproj | 99 + .../DroidDeviceInfoService.cs | 42 + .../Properties/AssemblyInfo.cs | 10 + .../Resources/AboutResources.txt | 50 + .../Resources/Resource.Designer.cs | 60 + .../Resources/Values/Strings.xml | 5 + Acr.XamForms.DeviceInfo.Droid/packages.config | 5 + .../AbstractDeviceInfoService.cs | 21 + .../Acr.XamForms.DeviceInfo.Shared.projitems | 14 + .../Acr.XamForms.DeviceInfo.Shared.shproj | 12 + ...cr.XamForms.DeviceInfo.WindowsPhone.csproj | 136 ++ .../Properties/AssemblyInfo.cs | 6 + .../WinPhoneDeviceInfoService.cs | 57 + .../packages.config | 5 + .../Acr.XamForms.DeviceInfo.iOS.csproj | 78 + .../Properties/AssemblyInfo.cs | 6 + .../iOSDeviceInfoService.cs | 53 + Acr.XamForms.DeviceInfo.iOS/packages.config | 4 + .../Acr.XamForms.DeviceInfo.csproj | 89 + Acr.XamForms.DeviceInfo/IDeviceInfoService.cs | 23 + .../Properties/AssemblyInfo.cs | 6 + .../Acr.XamForms.Mobile.Droid.csproj | 105 + Acr.XamForms.Mobile.Droid/MailService.cs | 11 + Acr.XamForms.Mobile.Droid/PhoneService.cs | 26 + .../Properties/AssemblyInfo.cs | 16 + .../Resources/Resource.Designer.cs | 60 + .../Resources/Values/Strings.xml | 5 + Acr.XamForms.Mobile.Droid/packages.config | 5 + .../Acr.XamForms.Mobile.Shared.projitems | 16 + .../Acr.XamForms.Mobile.Shared.shproj | 12 + .../AddressBookService.cs | 19 + Acr.XamForms.Mobile.Shared/LocationService.cs | 105 + Acr.XamForms.Mobile.Shared/PhotoService.cs | 72 + .../Acr.XamForms.Mobile.WindowsPhone.csproj | 138 ++ .../MailService.cs | 8 + .../PhoneService.cs | 30 + .../PhotoService.cs | 29 + .../Properties/AssemblyInfo.cs | 9 + .../packages.config | 5 + .../Acr.XamForms.Mobile.iOS.csproj | 87 + Acr.XamForms.Mobile.iOS/MailService.cs | 8 + Acr.XamForms.Mobile.iOS/PhoneService.cs | 60 + .../Properties/AssemblyInfo.cs | 17 + Acr.XamForms.Mobile.iOS/packages.config | 4 + .../Acr.XamForms.Mobile.csproj | 77 + Acr.XamForms.Mobile/IAddressBookService.cs | 11 + Acr.XamForms.Mobile/ILocationService.cs | 34 + Acr.XamForms.Mobile/IMailService.cs | 53 + Acr.XamForms.Mobile/IPhoneService.cs | 12 + Acr.XamForms.Mobile/IPhotoService.cs | 14 + Acr.XamForms.Mobile/PhotoResult.cs | 34 + Acr.XamForms.Mobile/Position.cs | 95 + Acr.XamForms.Mobile/PositionErrorEventArgs.cs | 19 + Acr.XamForms.Mobile/PositionEventArgs.cs | 14 + .../Properties/AssemblyInfo.cs | 6 + Acr.XamForms.Mobile/packages.config | 4 + .../Acr.XamForms.Network.Droid.csproj | 98 + .../DroidNetworkService.cs | 45 + .../NetworkConnectionBroadcastReceiver.cs | 26 + .../Properties/AssemblyInfo.cs | 10 + .../Resources/Resource.Designer.cs | 60 + .../Resources/Values/Strings.xml | 5 + Acr.XamForms.Network.Droid/packages.config | 5 + .../Acr.XamForms.Network.WindowsPhone.csproj | 132 ++ .../Properties/AssemblyInfo.cs | 6 + .../WinPhoneNetworkService.cs | 39 + .../packages.config | 5 + .../Acr.XamForms.Network.iOS.csproj | 78 + .../Properties/AssemblyInfo.cs | 6 + Acr.XamForms.Network.iOS/Reachability.cs | 145 ++ Acr.XamForms.Network.iOS/iOSNetworkService.cs | 40 + Acr.XamForms.Network.iOS/packages.config | 4 + .../AbstractNetworkService.cs | 81 + .../Acr.XamForms.Network.csproj | 52 + Acr.XamForms.Network/INetworkService.cs | 15 + .../NetworkStatusChangedEventArgs.cs | 19 + .../Properties/AssemblyInfo.cs | 7 + .../Acr.XamForms.Settings.Droid.csproj | 97 + .../DroidSettingsService.cs | 48 + .../Properties/AssemblyInfo.cs | 6 + .../Resources/Resource.Designer.cs | 60 + .../Resources/Values/Strings.xml | 5 + Acr.XamForms.Settings.Droid/packages.config | 5 + .../Acr.XamForms.Settings.WindowsPhone.csproj | 136 ++ .../Properties/AssemblyInfo.cs | 6 + .../WinPhoneSettingsService.cs | 43 + .../packages.config | 5 + .../Acr.XamForms.Settings.iOS.csproj | 78 + .../Properties/AssemblyInfo.cs | 6 + .../iOSSettingsService.cs | 44 + Acr.XamForms.Settings.iOS/packages.config | 4 + .../AbstractSettingsService.cs | 104 + .../Acr.XamForms.Settings.csproj | 100 + Acr.XamForms.Settings/ISettingsService.cs | 18 + Acr.XamForms.Settings/ObservableDictionary.cs | 255 +++ .../Properties/AssemblyInfo.cs | 6 + .../SettingsServiceExtensions.cs | 89 + Acr.XamForms.Settings/packages.config | 4 + .../Acr.XamForms.UserDialogs.Droid.csproj | 113 ++ Acr.XamForms.UserDialogs.Droid/Droid.cs | 25 + .../DroidProgressDialog.cs | 122 ++ .../DroidUserDialogService.cs | 109 ++ .../Properties/AssemblyInfo.cs | 6 + .../Resources/Resource.Designer.cs | 234 +++ .../Resources/Values/Strings.xml | 5 + .../packages.config | 5 + .../AbstractUserDialogService.cs | 105 + .../Acr.XamForms.UserDialogs.Shared.projitems | 14 + .../Acr.XamForms.UserDialogs.Shared.shproj | 12 + ...r.XamForms.UserDialogs.WindowsPhone.csproj | 142 ++ .../ActionSheetPopUp.cs | 39 + .../ProgressPopUp.cs | 76 + .../Properties/AssemblyInfo.cs | 6 + .../WinPhoneProgressDialog.cs | 105 + .../WinPhoneUserDialogService.cs | 142 ++ .../packages.config | 6 + .../Acr.XamForms.UserDialogs.iOS.csproj | 87 + .../Properties/AssemblyInfo.cs | 6 + .../iOSProgressDialog.cs | 116 ++ .../iOSUserDialogService.cs | 92 + Acr.XamForms.UserDialogs.iOS/packages.config | 4 + .../Acr.XamForms.UserDialogs.csproj | 54 + Acr.XamForms.UserDialogs/ActionSheetOption.cs | 16 + .../ActionSheetOptions.cs | 31 + Acr.XamForms.UserDialogs/IProgressDialog.cs | 17 + .../IUserDialogService.cs | 30 + Acr.XamForms.UserDialogs/PromptResult.cs | 11 + .../Properties/AssemblyInfo.cs | 6 + Acr.XamForms.sln | 1223 ++++++++++++ Acr.XamForms/Acr.XamForms.csproj | 77 + .../ObjectModel/ObservableDictionary.cs | 256 +++ Acr.XamForms/Converters/FileSizeConverter.cs | 40 + Acr.XamForms/Converters/TimeAgoConverter.cs | 55 + Acr.XamForms/Extensions.cs | 12 + Acr.XamForms/Properties/AssemblyInfo.cs | 6 + Acr.XamForms/ViewModels/IViewModel.cs | 13 + Acr.XamForms/ViewModels/ViewModel.cs | 44 + Acr.XamForms/packages.config | 4 + CommonAssemblyInfo.cs | 13 + Components/AndHUD-1.3.1.info | 1 + Components/AndHUD-1.3.1.png | Bin 0 -> 11013 bytes Components/AndHUD-1.3.1/component/Details.md | 38 + .../AndHUD-1.3.1/component/GettingStarted.md | 40 + Components/AndHUD-1.3.1/component/License.md | 191 ++ .../AndHUD-1.3.1/component/Manifest.xml | 16 + .../component/icons/AndHUD_128x128.png | Bin 0 -> 11013 bytes .../component/icons/AndHUD_512x512.png | Bin 0 -> 1052037 bytes .../AndHUD-1.3.1/lib/android/AndHUD.dll | Bin 0 -> 60928 bytes .../samples/AndHUD.Sample/AndHUD.Sample.sln | 24 + .../AndHUD.Sample/AndHUD.Sample.csproj | 80 + .../AndHUD.Sample/Assets/AboutAssets.txt | 19 + .../AndHUD.Sample/MainActivity.cs | 140 ++ .../Properties/AndroidManifest.xml | 6 + .../AndHUD.Sample/Properties/AssemblyInfo.cs | 23 + .../Resources/AboutResources.txt | 44 + .../Resources/Resource.designer.cs | 307 +++ .../drawable-hdpi/ic_questionstatus.png | Bin 0 -> 5332 bytes .../drawable-mdpi/ic_questionstatus.png | Bin 0 -> 2937 bytes .../drawable-xhdpi/ic_questionstatus.png | Bin 0 -> 6178 bytes .../AndHUD.Sample/Resources/drawable/Icon.png | Bin 0 -> 2574 bytes .../AndHUD.Sample/Resources/layout/Main.axml | 14 + .../Resources/values/Strings.xml | 5 + .../AndHUD.Sample/Resources/values/Styles.xml | 9 + Components/btprogresshud-1.10.info | 1 + Components/btprogresshud-1.10.png | Bin 0 -> 9234 bytes .../btprogresshud-1.10/component/Details.md | 33 + .../component/GettingStarted.md | 78 + .../btprogresshud-1.10/component/License.md | 44 + .../btprogresshud-1.10/component/Manifest.xml | 14 + .../component/icons/btprogresshud_128x128.png | Bin 0 -> 9234 bytes .../component/icons/btprogresshud_512x512.png | Bin 0 -> 82636 bytes .../lib/ios/BTProgressHUD.dll | Bin 0 -> 35328 bytes .../BTProgressHUDSample.sln | 32 + .../BTProgressHUDSample/AppDelegate.cs | 47 + .../BTProgressHUDDemo.csproj | 104 + .../BTProgressHUDSample/Default-568h@2x.png | Bin 0 -> 367019 bytes .../BTProgressHUDSample/Default.png | Bin 0 -> 68829 bytes .../BTProgressHUDSample/Default@2x.png | Bin 0 -> 91679 bytes .../BTProgressHUDSample/Info.plist | 26 + .../BTProgressHUDSample/Main.cs | 20 + .../BTProgressHUDSample/MainView.cs | 130 ++ Components/btprogresshud-1.9.info | 1 + Components/btprogresshud-1.9.png | Bin 0 -> 9234 bytes Components/xamarin.mobile-0.7.1.info | 1 + Components/xamarin.mobile-0.7.1.png | Bin 0 -> 15120 bytes .../xamarin.mobile-0.7.1/component/Details.md | 107 + .../component/GettingStarted.md | 117 ++ .../xamarin.mobile-0.7.1/component/License.md | 174 ++ .../component/Manifest.xml | 21 + .../icons/xamarin.mobile_128x128.png | Bin 0 -> 15120 bytes .../icons/xamarin.mobile_512x512.png | Bin 0 -> 155731 bytes .../component/screenshots/screenshot1.jpg | Bin 0 -> 20710 bytes .../docs/xamarin.mobile.source | 6 + .../docs/xamarin.mobile.tree | Bin 0 -> 5563 bytes .../docs/xamarin.mobile.zip | Bin 0 -> 43347 bytes .../lib/android/Xamarin.Mobile.dll | Bin 0 -> 81408 bytes .../lib/android/Xamarin.Mobile.xml | 1740 +++++++++++++++++ .../lib/ios/Xamarin.Mobile.dll | Bin 0 -> 49664 bytes .../lib/ios/Xamarin.Mobile.xml | 1740 +++++++++++++++++ .../lib/winrt/Xamarin.Mobile.dll | Bin 0 -> 31744 bytes .../lib/winrt/Xamarin.Mobile.xml | 1740 +++++++++++++++++ .../lib/wp7/Xamarin.Mobile.dll | Bin 0 -> 35840 bytes .../lib/wp7/Xamarin.Mobile.xml | 1740 +++++++++++++++++ .../lib/wp8/Xamarin.Mobile.dll | Bin 0 -> 35840 bytes .../lib/wp8/Xamarin.Mobile.xml | 1740 +++++++++++++++++ .../ContactsSample/Assets/AboutAssets.txt | 19 + .../ContactsSample/ContactActivity.cs | 72 + .../ContactsSample/Contacts Sample.csproj | 83 + .../ContactsSample/ContactsSample.sln | 25 + .../ContactsSample/MainActivity.cs | 68 + .../Properties/AndroidManifest.xml | 7 + .../ContactsSample/Properties/AssemblyInfo.cs | 40 + .../Resources/Drawable/Icon.png | Bin 0 -> 4147 bytes .../Resources/Layout/contact_view.xml | 20 + .../Resources/Layout/list_item.xml | 7 + .../Resources/Resource.Designer.cs | 93 + .../Resources/Values/Strings.xml | 5 + .../GeolocationSample/Assets/AboutAssets.txt | 19 + .../Geolocation Sample.csproj | 73 + .../GeolocationSample/GeolocationSample.sln | 20 + .../GeolocationSample/MainActivity.cs | 140 ++ .../Properties/AndroidManifest.xml | 8 + .../Properties/AssemblyInfo.cs | 28 + .../Resources/AboutResources.txt | 44 + .../Resources/Resource.designer.cs | 126 ++ .../Resources/drawable/Icon.png | Bin 0 -> 2574 bytes .../Resources/layout/Main.axml | 22 + .../Resources/values/Strings.xml | 8 + .../MediaPickerSample/ImageActivity.cs | 74 + .../MediaPickerSample/MainActivity.cs | 132 ++ .../MediaPicker Sample.csproj | 93 + .../MediaPickerSample/MediaPickerSample.sln | 23 + .../Properties/AndroidManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 41 + .../Resources/AboutResources.txt | 44 + .../Resources/Drawable/Icon.png | Bin 0 -> 4147 bytes .../Resources/Layout/Main.axml | 26 + .../Resources/Resource.Designer.cs | 96 + .../Resources/Values/Strings.xml | 5 + .../MediaPickerSample/VideoActivity.cs | 34 + .../Xamarin.Mobile.Android.Samples.sln | 41 + .../ContactsSample/App.xaml | 19 + .../ContactsSample/App.xaml.cs | 142 ++ .../ContactsSample/ApplicationIcon.png | Bin 0 -> 1881 bytes .../ContactsSample/Background.png | Bin 0 -> 3521 bytes .../ContactsSample/ContactsSample.csproj | 134 ++ .../ContactsSample/MainPage.xaml | 79 + .../ContactsSample/MainPage.xaml.cs | 23 + .../ContactsSample/MainPageViewModel.cs | 102 + .../ContactsSample/Properties/AppManifest.xml | 6 + .../ContactsSample/Properties/AssemblyInfo.cs | 37 + .../Properties/WMAppManifest.xml | 35 + .../ContactsSample/SplashScreenImage.jpg | Bin 0 -> 9417 bytes .../ContactsSample/packages.config | 6 + .../GeolocationSample/App.xaml | 19 + .../GeolocationSample/App.xaml.cs | 142 ++ .../GeolocationSample/ApplicationIcon.png | Bin 0 -> 1881 bytes .../GeolocationSample/Background.png | Bin 0 -> 3521 bytes .../GeolocationSample/DelegatedCommand.cs | 42 + .../GeolocationSample.csproj | 131 ++ .../GeolocationSample/MainPage.xaml | 84 + .../GeolocationSample/MainPage.xaml.cs | 16 + .../GeolocationSample/MainPageViewModel.cs | 154 ++ .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 37 + .../Properties/WMAppManifest.xml | 35 + .../GeolocationSample/SplashScreenImage.jpg | Bin 0 -> 9417 bytes .../GeolocationSample/packages.config | 6 + .../MediaPickerSample/App.xaml | 19 + .../MediaPickerSample/App.xaml.cs | 142 ++ .../MediaPickerSample/ApplicationIcon.png | Bin 0 -> 1881 bytes .../MediaPickerSample/Background.png | Bin 0 -> 3521 bytes .../MediaPickerSample/DelegatedCommand.cs | 42 + .../MediaPickerSample/MainPage.xaml | 44 + .../MediaPickerSample/MainPage.xaml.cs | 13 + .../MediaPickerSample/MainPageViewModel.cs | 112 ++ .../MediaPickerSample.csproj | 131 ++ .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 35 + .../Properties/WMAppManifest.xml | 35 + .../MediaPickerSample/SplashScreenImage.jpg | Bin 0 -> 9417 bytes .../MediaPickerSample/packages.config | 6 + .../Xamarin.Mobile.WP.Samples.sln | 38 + .../ContactsSample/App.xaml | 19 + .../ContactsSample/App.xaml.cs | 142 ++ .../ContactsSample/ApplicationIcon.png | Bin 0 -> 1881 bytes .../ContactsSample/Background.png | Bin 0 -> 3521 bytes .../ContactsSample/ContactsSample.csproj | 146 ++ .../ContactsSample/MainPage.xaml | 79 + .../ContactsSample/MainPage.xaml.cs | 23 + .../ContactsSample/MainPageViewModel.cs | 102 + .../ContactsSample/Properties/AppManifest.xml | 6 + .../ContactsSample/Properties/AssemblyInfo.cs | 37 + .../Properties/WMAppManifest.xml | 51 + .../ContactsSample/SplashScreenImage.jpg | Bin 0 -> 9417 bytes .../SubmissionInfo/Settings.xml | 9 + .../GeolocationSample/App.xaml | 19 + .../GeolocationSample/App.xaml.cs | 142 ++ .../GeolocationSample/ApplicationIcon.png | Bin 0 -> 1881 bytes .../GeolocationSample/Background.png | Bin 0 -> 3521 bytes .../GeolocationSample/DelegatedCommand.cs | 42 + .../GeolocationSample.csproj | 146 ++ .../GeolocationSample/MainPage.xaml | 84 + .../GeolocationSample/MainPage.xaml.cs | 27 + .../GeolocationSample/MainPageViewModel.cs | 154 ++ .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 37 + .../Properties/WMAppManifest.xml | 51 + .../GeolocationSample/SplashScreenImage.jpg | Bin 0 -> 9417 bytes .../SubmissionInfo/Settings.xml | 9 + .../MediaPickerSample/App.xaml | 19 + .../MediaPickerSample/App.xaml.cs | 142 ++ .../MediaPickerSample/ApplicationIcon.png | Bin 0 -> 1881 bytes .../MediaPickerSample/Background.png | Bin 0 -> 3521 bytes .../MediaPickerSample/DelegatedCommand.cs | 42 + .../MediaPickerSample/MainPage.xaml | 44 + .../MediaPickerSample/MainPage.xaml.cs | 13 + .../MediaPickerSample/MainPageViewModel.cs | 112 ++ .../MediaPickerSample.csproj | 146 ++ .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 35 + .../Properties/WMAppManifest.xml | 51 + .../MediaPickerSample/SplashScreenImage.jpg | Bin 0 -> 9417 bytes .../Xamarin.Mobile.WP8.Samples.sln | 38 + .../GeolocationSample/App.xaml | 20 + .../GeolocationSample/App.xaml.cs | 83 + .../GeolocationSample/Assets/Logo.png | Bin 0 -> 801 bytes .../GeolocationSample/Assets/SmallLogo.png | Bin 0 -> 329 bytes .../GeolocationSample/Assets/SplashScreen.png | Bin 0 -> 2146 bytes .../GeolocationSample/Assets/StoreLogo.png | Bin 0 -> 429 bytes .../Common/StandardStyles.xaml | 1007 ++++++++++ .../GeolocationSample/DelegatedCommand.cs | 42 + .../GeolocationSample.csproj | 156 ++ .../GeolocationSample/MainPage.xaml | 74 + .../GeolocationSample/MainPage.xaml.cs | 15 + .../GeolocationSample/MainPageViewModel.cs | 154 ++ .../GeolocationSample/Package.appxmanifest | 27 + .../Properties/AssemblyInfo.cs | 29 + .../MediaPickerSample/App.xaml | 20 + .../MediaPickerSample/App.xaml.cs | 83 + .../MediaPickerSample/Assets/Logo.png | Bin 0 -> 801 bytes .../MediaPickerSample/Assets/SmallLogo.png | Bin 0 -> 329 bytes .../MediaPickerSample/Assets/SplashScreen.png | Bin 0 -> 2146 bytes .../MediaPickerSample/Assets/StoreLogo.png | Bin 0 -> 429 bytes .../Common/StandardStyles.xaml | 1007 ++++++++++ .../MediaPickerSample/DelegatedCommand.cs | 42 + .../MediaPickerSample/MainPage.xaml | 46 + .../MediaPickerSample/MainPage.xaml.cs | 65 + .../MediaPickerSample/MainPageViewModel.cs | 212 ++ .../MediaPickerSample.csproj | 156 ++ .../MediaPickerSample/Package.appxmanifest | 30 + .../Properties/AssemblyInfo.cs | 29 + .../Xamarin.Mobile.WinRT.Samples.sln | 72 + .../ContactsSample/AppDelegate.cs | 46 + .../ContactsSample/Contacts Sample.csproj | 90 + .../ContactsSample/Info.plist | 33 + .../ContactsSample/Main.cs | 19 + .../ContactsSample/MainView.cs | 190 ++ .../Resources/Default-568h@2x.png | Bin 0 -> 12651 bytes .../ContactsSample/Resources/Default.png | Bin 0 -> 5281 bytes .../ContactsSample/Resources/Default@2x.png | Bin 0 -> 11793 bytes .../Geolocation/AppDelegate.cs | 38 + .../Geolocation/Geolocation Sample.csproj | 94 + .../Geolocation/Info.plist | 26 + .../Geolocation/Main.cs | 19 + .../Geolocation/Resources/Default-568h@2x.png | Bin 0 -> 12651 bytes .../Geolocation/Resources/Default.png | Bin 0 -> 5281 bytes .../Geolocation/Resources/Default@2x.png | Bin 0 -> 11793 bytes .../Geolocation/SampleViewController.cs | 128 ++ .../SampleViewController.designer.cs | 50 + .../Geolocation/SampleViewController.xib | 598 ++++++ .../MediaPickerSample/AppDelegate.cs | 214 ++ .../MediaPickerSample/Info.plist | 31 + .../MediaPickerSample/Main.cs | 19 + .../MediaPicker Sample.csproj | 91 + ...ediaPickerSampleViewController.designer.cs | 29 + .../Resources/Default-568h@2x.png | Bin 0 -> 12651 bytes .../MediaPickerSample/Resources/Default.png | Bin 0 -> 5281 bytes .../Resources/Default@2x.png | Bin 0 -> 11793 bytes .../Xamarin.Mobile.iOS.Samples.sln | 46 + Samples/Samples.Android/MainActivity.cs | 20 + .../Properties/AndroidManifest.xml | 5 + .../Properties/AssemblyInfo.cs | 26 + .../Resources/Drawable/Icon.png | Bin 0 -> 4147 bytes .../Resources/Resource.Designer.cs | 340 ++++ .../Samples.Android/Samples.Android.csproj | 177 ++ Samples/Samples.Android/packages.config | 6 + Samples/Samples.WinPhone/App.xaml | 20 + Samples/Samples.WinPhone/App.xaml.cs | 202 ++ .../Samples.WinPhone/Assets/AlignmentGrid.png | Bin 0 -> 9042 bytes .../Assets/ApplicationIcon.png | Bin 0 -> 3392 bytes .../Assets/Tiles/FlipCycleTileLarge.png | Bin 0 -> 9930 bytes .../Assets/Tiles/FlipCycleTileMedium.png | Bin 0 -> 9070 bytes .../Assets/Tiles/FlipCycleTileSmall.png | Bin 0 -> 3674 bytes .../Assets/Tiles/IconicTileMediumLarge.png | Bin 0 -> 4937 bytes .../Assets/Tiles/IconicTileSmall.png | Bin 0 -> 3724 bytes Samples/Samples.WinPhone/LocalizedStrings.cs | 12 + Samples/Samples.WinPhone/MainPage.xaml | 16 + Samples/Samples.WinPhone/MainPage.xaml.cs | 16 + .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 37 + .../Properties/WMAppManifest.xml | 38 + .../Resources/AppResources.Designer.cs | 108 + .../Resources/AppResources.resx | 137 ++ .../Samples.WinPhone/Samples.WinPhone.csproj | 248 +++ .../Toolkit.Content/ApplicationBar.Add.png | Bin 0 -> 339 bytes .../Toolkit.Content/ApplicationBar.Cancel.png | Bin 0 -> 350 bytes .../Toolkit.Content/ApplicationBar.Check.png | Bin 0 -> 414 bytes .../Toolkit.Content/ApplicationBar.Delete.png | Bin 0 -> 445 bytes .../Toolkit.Content/ApplicationBar.Select.png | Bin 0 -> 863 bytes Samples/Samples.WinPhone/packages.config | 5 + Samples/Samples.iOS/AppDelegate.cs | 26 + Samples/Samples.iOS/Info.plist | 32 + Samples/Samples.iOS/Main.cs | 13 + .../Samples.iOS/Properties/AssemblyInfo.cs | 36 + Samples/Samples.iOS/Samples.iOS.csproj | 170 ++ Samples/Samples.iOS/packages.config | 4 + Samples/Samples/App.cs | 93 + Samples/Samples/Properties/AssemblyInfo.cs | 30 + Samples/Samples/Samples.csproj | 200 ++ .../Samples/ViewModels/BarCodeViewModel.cs | 71 + .../Samples/ViewModels/DeviceInfoViewModel.cs | 16 + .../Samples/ViewModels/LocationViewModel.cs | 16 + Samples/Samples/ViewModels/MailViewModel.cs | 16 + .../Samples/ViewModels/NetworkViewModel.cs | 48 + Samples/Samples/ViewModels/PhoneViewModel.cs | 18 + Samples/Samples/ViewModels/PhotoViewModel.cs | 57 + .../Samples/ViewModels/SettingsViewModel.cs | 80 + Samples/Samples/ViewModels/SmsViewModel.cs | 18 + .../Samples/ViewModels/UserDialogViewModel.cs | 115 ++ Samples/Samples/Views/BarCodeView.xaml | 49 + Samples/Samples/Views/BarCodeView.xaml.cs | 12 + Samples/Samples/Views/DeviceInfoView.xaml | 15 + Samples/Samples/Views/DeviceInfoView.xaml.cs | 13 + Samples/Samples/Views/HomeView.cs | 51 + Samples/Samples/Views/LocationView.xaml | 6 + Samples/Samples/Views/LocationView.xaml.cs | 13 + Samples/Samples/Views/MailView.xaml | 6 + Samples/Samples/Views/MailView.xaml.cs | 13 + Samples/Samples/Views/NetworkView.xaml | 25 + Samples/Samples/Views/NetworkView.xaml.cs | 13 + Samples/Samples/Views/PhoneView.xaml | 6 + Samples/Samples/Views/PhoneView.xaml.cs | 13 + Samples/Samples/Views/PhotoView.xaml | 6 + Samples/Samples/Views/PhotoView.xaml.cs | 13 + Samples/Samples/Views/SettingsView.xaml | 6 + Samples/Samples/Views/SettingsView.xaml.cs | 13 + Samples/Samples/Views/SmsView.xaml | 6 + Samples/Samples/Views/SmsView.xaml.cs | 13 + Samples/Samples/Views/UserDialogView.xaml | 19 + Samples/Samples/Views/UserDialogView.xaml.cs | 13 + Samples/Samples/packages.config | 5 + license.txt | 30 + nuspec/Acr.XamForms.BarCodeScanner.nuspec | 47 + nuspec/Acr.XamForms.DeviceInfo.nuspec | 38 + nuspec/Acr.XamForms.Network.nuspec | 38 + nuspec/Acr.XamForms.Settings.nuspec | 39 + nuspec/Acr.XamForms.UserDialogs.nuspec | 43 + nuspec/Acr.XamForms.nuspec | 21 + nuspec/nuget.exe | Bin 0 -> 806912 bytes nuspec/pack.cmd | 9 + readme.md | 72 + 484 files changed, 32726 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Acr.XamForms.BarCodeScanner.Droid/Acr.XamForms.BarCodeScanner.Droid.csproj create mode 100644 Acr.XamForms.BarCodeScanner.Droid/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.BarCodeScanner.Droid/Resources/Resource.Designer.cs create mode 100644 Acr.XamForms.BarCodeScanner.Droid/Resources/Values/Strings.xml create mode 100644 Acr.XamForms.BarCodeScanner.Droid/packages.config create mode 100644 Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.projitems create mode 100644 Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.shproj create mode 100644 Acr.XamForms.BarCodeScanner.Shared/BarCodeScanner.cs create mode 100644 Acr.XamForms.BarCodeScanner.WindowsPhone/Acr.XamForms.BarCodeScanner.WindowsPhone.csproj create mode 100644 Acr.XamForms.BarCodeScanner.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.BarCodeScanner.WindowsPhone/packages.config create mode 100644 Acr.XamForms.BarCodeScanner.iOS/Acr.XamForms.BarCodeScanner.iOS.csproj create mode 100644 Acr.XamForms.BarCodeScanner.iOS/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.BarCodeScanner.iOS/packages.config create mode 100644 Acr.XamForms.BarCodeScanner/Acr.XamForms.BarCodeScanner.csproj create mode 100644 Acr.XamForms.BarCodeScanner/BarCodeFormat.cs create mode 100644 Acr.XamForms.BarCodeScanner/BarCodeResult.cs create mode 100644 Acr.XamForms.BarCodeScanner/BarCodeScannerOptions.cs create mode 100644 Acr.XamForms.BarCodeScanner/IBarCodeScanner.cs create mode 100644 Acr.XamForms.BarCodeScanner/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.DeviceInfo.Droid/Acr.XamForms.DeviceInfo.Droid.csproj create mode 100644 Acr.XamForms.DeviceInfo.Droid/DroidDeviceInfoService.cs create mode 100644 Acr.XamForms.DeviceInfo.Droid/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.DeviceInfo.Droid/Resources/AboutResources.txt create mode 100644 Acr.XamForms.DeviceInfo.Droid/Resources/Resource.Designer.cs create mode 100644 Acr.XamForms.DeviceInfo.Droid/Resources/Values/Strings.xml create mode 100644 Acr.XamForms.DeviceInfo.Droid/packages.config create mode 100644 Acr.XamForms.DeviceInfo.Shared/AbstractDeviceInfoService.cs create mode 100644 Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.projitems create mode 100644 Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.shproj create mode 100644 Acr.XamForms.DeviceInfo.WindowsPhone/Acr.XamForms.DeviceInfo.WindowsPhone.csproj create mode 100644 Acr.XamForms.DeviceInfo.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.DeviceInfo.WindowsPhone/WinPhoneDeviceInfoService.cs create mode 100644 Acr.XamForms.DeviceInfo.WindowsPhone/packages.config create mode 100644 Acr.XamForms.DeviceInfo.iOS/Acr.XamForms.DeviceInfo.iOS.csproj create mode 100644 Acr.XamForms.DeviceInfo.iOS/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.DeviceInfo.iOS/iOSDeviceInfoService.cs create mode 100644 Acr.XamForms.DeviceInfo.iOS/packages.config create mode 100644 Acr.XamForms.DeviceInfo/Acr.XamForms.DeviceInfo.csproj create mode 100644 Acr.XamForms.DeviceInfo/IDeviceInfoService.cs create mode 100644 Acr.XamForms.DeviceInfo/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Mobile.Droid/Acr.XamForms.Mobile.Droid.csproj create mode 100644 Acr.XamForms.Mobile.Droid/MailService.cs create mode 100644 Acr.XamForms.Mobile.Droid/PhoneService.cs create mode 100644 Acr.XamForms.Mobile.Droid/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Mobile.Droid/Resources/Resource.Designer.cs create mode 100644 Acr.XamForms.Mobile.Droid/Resources/Values/Strings.xml create mode 100644 Acr.XamForms.Mobile.Droid/packages.config create mode 100644 Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.projitems create mode 100644 Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.shproj create mode 100644 Acr.XamForms.Mobile.Shared/AddressBookService.cs create mode 100644 Acr.XamForms.Mobile.Shared/LocationService.cs create mode 100644 Acr.XamForms.Mobile.Shared/PhotoService.cs create mode 100644 Acr.XamForms.Mobile.WindowsPhone/Acr.XamForms.Mobile.WindowsPhone.csproj create mode 100644 Acr.XamForms.Mobile.WindowsPhone/MailService.cs create mode 100644 Acr.XamForms.Mobile.WindowsPhone/PhoneService.cs create mode 100644 Acr.XamForms.Mobile.WindowsPhone/PhotoService.cs create mode 100644 Acr.XamForms.Mobile.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Mobile.WindowsPhone/packages.config create mode 100644 Acr.XamForms.Mobile.iOS/Acr.XamForms.Mobile.iOS.csproj create mode 100644 Acr.XamForms.Mobile.iOS/MailService.cs create mode 100644 Acr.XamForms.Mobile.iOS/PhoneService.cs create mode 100644 Acr.XamForms.Mobile.iOS/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Mobile.iOS/packages.config create mode 100644 Acr.XamForms.Mobile/Acr.XamForms.Mobile.csproj create mode 100644 Acr.XamForms.Mobile/IAddressBookService.cs create mode 100644 Acr.XamForms.Mobile/ILocationService.cs create mode 100644 Acr.XamForms.Mobile/IMailService.cs create mode 100644 Acr.XamForms.Mobile/IPhoneService.cs create mode 100644 Acr.XamForms.Mobile/IPhotoService.cs create mode 100644 Acr.XamForms.Mobile/PhotoResult.cs create mode 100644 Acr.XamForms.Mobile/Position.cs create mode 100644 Acr.XamForms.Mobile/PositionErrorEventArgs.cs create mode 100644 Acr.XamForms.Mobile/PositionEventArgs.cs create mode 100644 Acr.XamForms.Mobile/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Mobile/packages.config create mode 100644 Acr.XamForms.Network.Droid/Acr.XamForms.Network.Droid.csproj create mode 100644 Acr.XamForms.Network.Droid/DroidNetworkService.cs create mode 100644 Acr.XamForms.Network.Droid/NetworkConnectionBroadcastReceiver.cs create mode 100644 Acr.XamForms.Network.Droid/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Network.Droid/Resources/Resource.Designer.cs create mode 100644 Acr.XamForms.Network.Droid/Resources/Values/Strings.xml create mode 100644 Acr.XamForms.Network.Droid/packages.config create mode 100644 Acr.XamForms.Network.WindowsPhone/Acr.XamForms.Network.WindowsPhone.csproj create mode 100644 Acr.XamForms.Network.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Network.WindowsPhone/WinPhoneNetworkService.cs create mode 100644 Acr.XamForms.Network.WindowsPhone/packages.config create mode 100644 Acr.XamForms.Network.iOS/Acr.XamForms.Network.iOS.csproj create mode 100644 Acr.XamForms.Network.iOS/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Network.iOS/Reachability.cs create mode 100644 Acr.XamForms.Network.iOS/iOSNetworkService.cs create mode 100644 Acr.XamForms.Network.iOS/packages.config create mode 100644 Acr.XamForms.Network/AbstractNetworkService.cs create mode 100644 Acr.XamForms.Network/Acr.XamForms.Network.csproj create mode 100644 Acr.XamForms.Network/INetworkService.cs create mode 100644 Acr.XamForms.Network/NetworkStatusChangedEventArgs.cs create mode 100644 Acr.XamForms.Network/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Settings.Droid/Acr.XamForms.Settings.Droid.csproj create mode 100644 Acr.XamForms.Settings.Droid/DroidSettingsService.cs create mode 100644 Acr.XamForms.Settings.Droid/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Settings.Droid/Resources/Resource.Designer.cs create mode 100644 Acr.XamForms.Settings.Droid/Resources/Values/Strings.xml create mode 100644 Acr.XamForms.Settings.Droid/packages.config create mode 100644 Acr.XamForms.Settings.WindowsPhone/Acr.XamForms.Settings.WindowsPhone.csproj create mode 100644 Acr.XamForms.Settings.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Settings.WindowsPhone/WinPhoneSettingsService.cs create mode 100644 Acr.XamForms.Settings.WindowsPhone/packages.config create mode 100644 Acr.XamForms.Settings.iOS/Acr.XamForms.Settings.iOS.csproj create mode 100644 Acr.XamForms.Settings.iOS/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Settings.iOS/iOSSettingsService.cs create mode 100644 Acr.XamForms.Settings.iOS/packages.config create mode 100644 Acr.XamForms.Settings/AbstractSettingsService.cs create mode 100644 Acr.XamForms.Settings/Acr.XamForms.Settings.csproj create mode 100644 Acr.XamForms.Settings/ISettingsService.cs create mode 100644 Acr.XamForms.Settings/ObservableDictionary.cs create mode 100644 Acr.XamForms.Settings/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.Settings/SettingsServiceExtensions.cs create mode 100644 Acr.XamForms.Settings/packages.config create mode 100644 Acr.XamForms.UserDialogs.Droid/Acr.XamForms.UserDialogs.Droid.csproj create mode 100644 Acr.XamForms.UserDialogs.Droid/Droid.cs create mode 100644 Acr.XamForms.UserDialogs.Droid/DroidProgressDialog.cs create mode 100644 Acr.XamForms.UserDialogs.Droid/DroidUserDialogService.cs create mode 100644 Acr.XamForms.UserDialogs.Droid/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.UserDialogs.Droid/Resources/Resource.Designer.cs create mode 100644 Acr.XamForms.UserDialogs.Droid/Resources/Values/Strings.xml create mode 100644 Acr.XamForms.UserDialogs.Droid/packages.config create mode 100644 Acr.XamForms.UserDialogs.Shared/AbstractUserDialogService.cs create mode 100644 Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.projitems create mode 100644 Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.shproj create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/Acr.XamForms.UserDialogs.WindowsPhone.csproj create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/ActionSheetPopUp.cs create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/ProgressPopUp.cs create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneProgressDialog.cs create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneUserDialogService.cs create mode 100644 Acr.XamForms.UserDialogs.WindowsPhone/packages.config create mode 100644 Acr.XamForms.UserDialogs.iOS/Acr.XamForms.UserDialogs.iOS.csproj create mode 100644 Acr.XamForms.UserDialogs.iOS/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.UserDialogs.iOS/iOSProgressDialog.cs create mode 100644 Acr.XamForms.UserDialogs.iOS/iOSUserDialogService.cs create mode 100644 Acr.XamForms.UserDialogs.iOS/packages.config create mode 100644 Acr.XamForms.UserDialogs/Acr.XamForms.UserDialogs.csproj create mode 100644 Acr.XamForms.UserDialogs/ActionSheetOption.cs create mode 100644 Acr.XamForms.UserDialogs/ActionSheetOptions.cs create mode 100644 Acr.XamForms.UserDialogs/IProgressDialog.cs create mode 100644 Acr.XamForms.UserDialogs/IUserDialogService.cs create mode 100644 Acr.XamForms.UserDialogs/PromptResult.cs create mode 100644 Acr.XamForms.UserDialogs/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms.sln create mode 100644 Acr.XamForms/Acr.XamForms.csproj create mode 100644 Acr.XamForms/Collections/ObjectModel/ObservableDictionary.cs create mode 100644 Acr.XamForms/Converters/FileSizeConverter.cs create mode 100644 Acr.XamForms/Converters/TimeAgoConverter.cs create mode 100644 Acr.XamForms/Extensions.cs create mode 100644 Acr.XamForms/Properties/AssemblyInfo.cs create mode 100644 Acr.XamForms/ViewModels/IViewModel.cs create mode 100644 Acr.XamForms/ViewModels/ViewModel.cs create mode 100644 Acr.XamForms/packages.config create mode 100644 CommonAssemblyInfo.cs create mode 100644 Components/AndHUD-1.3.1.info create mode 100644 Components/AndHUD-1.3.1.png create mode 100644 Components/AndHUD-1.3.1/component/Details.md create mode 100644 Components/AndHUD-1.3.1/component/GettingStarted.md create mode 100644 Components/AndHUD-1.3.1/component/License.md create mode 100644 Components/AndHUD-1.3.1/component/Manifest.xml create mode 100644 Components/AndHUD-1.3.1/component/icons/AndHUD_128x128.png create mode 100644 Components/AndHUD-1.3.1/component/icons/AndHUD_512x512.png create mode 100644 Components/AndHUD-1.3.1/lib/android/AndHUD.dll create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample.sln create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/AndHUD.Sample.csproj create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Assets/AboutAssets.txt create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/MainActivity.cs create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AndroidManifest.xml create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AssemblyInfo.cs create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/AboutResources.txt create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/Resource.designer.cs create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-hdpi/ic_questionstatus.png create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-mdpi/ic_questionstatus.png create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-xhdpi/ic_questionstatus.png create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable/Icon.png create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/layout/Main.axml create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/values/Strings.xml create mode 100644 Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/values/Styles.xml create mode 100644 Components/btprogresshud-1.10.info create mode 100644 Components/btprogresshud-1.10.png create mode 100644 Components/btprogresshud-1.10/component/Details.md create mode 100644 Components/btprogresshud-1.10/component/GettingStarted.md create mode 100644 Components/btprogresshud-1.10/component/License.md create mode 100644 Components/btprogresshud-1.10/component/Manifest.xml create mode 100644 Components/btprogresshud-1.10/component/icons/btprogresshud_128x128.png create mode 100644 Components/btprogresshud-1.10/component/icons/btprogresshud_512x512.png create mode 100644 Components/btprogresshud-1.10/lib/ios/BTProgressHUD.dll create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample.sln create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/AppDelegate.cs create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/BTProgressHUDDemo.csproj create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/Default-568h@2x.png create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/Default.png create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/Default@2x.png create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/Info.plist create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/Main.cs create mode 100644 Components/btprogresshud-1.10/samples/BTProgressHUDSample/BTProgressHUDSample/MainView.cs create mode 100644 Components/btprogresshud-1.9.info create mode 100644 Components/btprogresshud-1.9.png create mode 100644 Components/xamarin.mobile-0.7.1.info create mode 100644 Components/xamarin.mobile-0.7.1.png create mode 100644 Components/xamarin.mobile-0.7.1/component/Details.md create mode 100644 Components/xamarin.mobile-0.7.1/component/GettingStarted.md create mode 100644 Components/xamarin.mobile-0.7.1/component/License.md create mode 100644 Components/xamarin.mobile-0.7.1/component/Manifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/component/icons/xamarin.mobile_128x128.png create mode 100644 Components/xamarin.mobile-0.7.1/component/icons/xamarin.mobile_512x512.png create mode 100644 Components/xamarin.mobile-0.7.1/component/screenshots/screenshot1.jpg create mode 100644 Components/xamarin.mobile-0.7.1/docs/xamarin.mobile.source create mode 100644 Components/xamarin.mobile-0.7.1/docs/xamarin.mobile.tree create mode 100644 Components/xamarin.mobile-0.7.1/docs/xamarin.mobile.zip create mode 100644 Components/xamarin.mobile-0.7.1/lib/android/Xamarin.Mobile.dll create mode 100644 Components/xamarin.mobile-0.7.1/lib/android/Xamarin.Mobile.xml create mode 100644 Components/xamarin.mobile-0.7.1/lib/ios/Xamarin.Mobile.dll create mode 100644 Components/xamarin.mobile-0.7.1/lib/ios/Xamarin.Mobile.xml create mode 100644 Components/xamarin.mobile-0.7.1/lib/winrt/Xamarin.Mobile.dll create mode 100644 Components/xamarin.mobile-0.7.1/lib/winrt/Xamarin.Mobile.xml create mode 100644 Components/xamarin.mobile-0.7.1/lib/wp7/Xamarin.Mobile.dll create mode 100644 Components/xamarin.mobile-0.7.1/lib/wp7/Xamarin.Mobile.xml create mode 100644 Components/xamarin.mobile-0.7.1/lib/wp8/Xamarin.Mobile.dll create mode 100644 Components/xamarin.mobile-0.7.1/lib/wp8/Xamarin.Mobile.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Assets/AboutAssets.txt create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/ContactActivity.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Contacts Sample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/ContactsSample.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/MainActivity.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Properties/AndroidManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Resources/Drawable/Icon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Resources/Layout/contact_view.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Resources/Layout/list_item.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Resources/Resource.Designer.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/ContactsSample/Resources/Values/Strings.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Assets/AboutAssets.txt create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Geolocation Sample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/GeolocationSample.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/MainActivity.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Properties/AndroidManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Resources/AboutResources.txt create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Resources/Resource.designer.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Resources/drawable/Icon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Resources/layout/Main.axml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/GeolocationSample/Resources/values/Strings.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/ImageActivity.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/MainActivity.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/MediaPicker Sample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/MediaPickerSample.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Properties/AndroidManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Resources/AboutResources.txt create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Resources/Drawable/Icon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Resources/Layout/Main.axml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Resources/Resource.Designer.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/Resources/Values/Strings.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/MediaPickerSample/VideoActivity.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.Android.Samples/Xamarin.Mobile.Android.Samples.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/ApplicationIcon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/Background.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/ContactsSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/Properties/AppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/Properties/WMAppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/SplashScreenImage.jpg create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/ContactsSample/packages.config create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/ApplicationIcon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/Background.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/DelegatedCommand.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/GeolocationSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/Properties/AppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/Properties/WMAppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/SplashScreenImage.jpg create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/GeolocationSample/packages.config create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/ApplicationIcon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/Background.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/DelegatedCommand.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/MediaPickerSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/Properties/AppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/Properties/WMAppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/SplashScreenImage.jpg create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/MediaPickerSample/packages.config create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP.Samples/Xamarin.Mobile.WP.Samples.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/ApplicationIcon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/Background.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/ContactsSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/Properties/AppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/Properties/WMAppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/SplashScreenImage.jpg create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/ContactsSample/SubmissionInfo/Settings.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/ApplicationIcon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/Background.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/DelegatedCommand.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/GeolocationSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/Properties/AppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/Properties/WMAppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/SplashScreenImage.jpg create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/GeolocationSample/SubmissionInfo/Settings.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/ApplicationIcon.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/Background.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/DelegatedCommand.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/MediaPickerSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/Properties/AppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/Properties/WMAppManifest.xml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/MediaPickerSample/SplashScreenImage.jpg create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WP8.Samples/Xamarin.Mobile.WP8.Samples.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Assets/Logo.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Assets/SmallLogo.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Assets/SplashScreen.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Assets/StoreLogo.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Common/StandardStyles.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/DelegatedCommand.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/GeolocationSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Package.appxmanifest create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/GeolocationSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/App.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/App.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Assets/Logo.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Assets/SmallLogo.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Assets/SplashScreen.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Assets/StoreLogo.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Common/StandardStyles.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/DelegatedCommand.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/MainPage.xaml create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/MainPage.xaml.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/MainPageViewModel.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/MediaPickerSample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Package.appxmanifest create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/MediaPickerSample/Properties/AssemblyInfo.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.WinRT.Samples/Xamarin.Mobile.WinRT.Samples.sln create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/AppDelegate.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/Contacts Sample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/Info.plist create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/Main.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/MainView.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/Resources/Default-568h@2x.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/Resources/Default.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/ContactsSample/Resources/Default@2x.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/AppDelegate.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/Geolocation Sample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/Info.plist create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/Main.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/Resources/Default-568h@2x.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/Resources/Default.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/Resources/Default@2x.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/SampleViewController.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/SampleViewController.designer.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Geolocation/SampleViewController.xib create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/AppDelegate.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/Info.plist create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/Main.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/MediaPicker Sample.csproj create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/MediaPickerSampleViewController.designer.cs create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/Resources/Default-568h@2x.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/Resources/Default.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/MediaPickerSample/Resources/Default@2x.png create mode 100644 Components/xamarin.mobile-0.7.1/samples/Xamarin.Mobile.iOS.Samples/Xamarin.Mobile.iOS.Samples.sln create mode 100644 Samples/Samples.Android/MainActivity.cs create mode 100644 Samples/Samples.Android/Properties/AndroidManifest.xml create mode 100644 Samples/Samples.Android/Properties/AssemblyInfo.cs create mode 100644 Samples/Samples.Android/Resources/Drawable/Icon.png create mode 100644 Samples/Samples.Android/Resources/Resource.Designer.cs create mode 100644 Samples/Samples.Android/Samples.Android.csproj create mode 100644 Samples/Samples.Android/packages.config create mode 100644 Samples/Samples.WinPhone/App.xaml create mode 100644 Samples/Samples.WinPhone/App.xaml.cs create mode 100644 Samples/Samples.WinPhone/Assets/AlignmentGrid.png create mode 100644 Samples/Samples.WinPhone/Assets/ApplicationIcon.png create mode 100644 Samples/Samples.WinPhone/Assets/Tiles/FlipCycleTileLarge.png create mode 100644 Samples/Samples.WinPhone/Assets/Tiles/FlipCycleTileMedium.png create mode 100644 Samples/Samples.WinPhone/Assets/Tiles/FlipCycleTileSmall.png create mode 100644 Samples/Samples.WinPhone/Assets/Tiles/IconicTileMediumLarge.png create mode 100644 Samples/Samples.WinPhone/Assets/Tiles/IconicTileSmall.png create mode 100644 Samples/Samples.WinPhone/LocalizedStrings.cs create mode 100644 Samples/Samples.WinPhone/MainPage.xaml create mode 100644 Samples/Samples.WinPhone/MainPage.xaml.cs create mode 100644 Samples/Samples.WinPhone/Properties/AppManifest.xml create mode 100644 Samples/Samples.WinPhone/Properties/AssemblyInfo.cs create mode 100644 Samples/Samples.WinPhone/Properties/WMAppManifest.xml create mode 100644 Samples/Samples.WinPhone/Resources/AppResources.Designer.cs create mode 100644 Samples/Samples.WinPhone/Resources/AppResources.resx create mode 100644 Samples/Samples.WinPhone/Samples.WinPhone.csproj create mode 100644 Samples/Samples.WinPhone/Toolkit.Content/ApplicationBar.Add.png create mode 100644 Samples/Samples.WinPhone/Toolkit.Content/ApplicationBar.Cancel.png create mode 100644 Samples/Samples.WinPhone/Toolkit.Content/ApplicationBar.Check.png create mode 100644 Samples/Samples.WinPhone/Toolkit.Content/ApplicationBar.Delete.png create mode 100644 Samples/Samples.WinPhone/Toolkit.Content/ApplicationBar.Select.png create mode 100644 Samples/Samples.WinPhone/packages.config create mode 100644 Samples/Samples.iOS/AppDelegate.cs create mode 100644 Samples/Samples.iOS/Info.plist create mode 100644 Samples/Samples.iOS/Main.cs create mode 100644 Samples/Samples.iOS/Properties/AssemblyInfo.cs create mode 100644 Samples/Samples.iOS/Samples.iOS.csproj create mode 100644 Samples/Samples.iOS/packages.config create mode 100644 Samples/Samples/App.cs create mode 100644 Samples/Samples/Properties/AssemblyInfo.cs create mode 100644 Samples/Samples/Samples.csproj create mode 100644 Samples/Samples/ViewModels/BarCodeViewModel.cs create mode 100644 Samples/Samples/ViewModels/DeviceInfoViewModel.cs create mode 100644 Samples/Samples/ViewModels/LocationViewModel.cs create mode 100644 Samples/Samples/ViewModels/MailViewModel.cs create mode 100644 Samples/Samples/ViewModels/NetworkViewModel.cs create mode 100644 Samples/Samples/ViewModels/PhoneViewModel.cs create mode 100644 Samples/Samples/ViewModels/PhotoViewModel.cs create mode 100644 Samples/Samples/ViewModels/SettingsViewModel.cs create mode 100644 Samples/Samples/ViewModels/SmsViewModel.cs create mode 100644 Samples/Samples/ViewModels/UserDialogViewModel.cs create mode 100644 Samples/Samples/Views/BarCodeView.xaml create mode 100644 Samples/Samples/Views/BarCodeView.xaml.cs create mode 100644 Samples/Samples/Views/DeviceInfoView.xaml create mode 100644 Samples/Samples/Views/DeviceInfoView.xaml.cs create mode 100644 Samples/Samples/Views/HomeView.cs create mode 100644 Samples/Samples/Views/LocationView.xaml create mode 100644 Samples/Samples/Views/LocationView.xaml.cs create mode 100644 Samples/Samples/Views/MailView.xaml create mode 100644 Samples/Samples/Views/MailView.xaml.cs create mode 100644 Samples/Samples/Views/NetworkView.xaml create mode 100644 Samples/Samples/Views/NetworkView.xaml.cs create mode 100644 Samples/Samples/Views/PhoneView.xaml create mode 100644 Samples/Samples/Views/PhoneView.xaml.cs create mode 100644 Samples/Samples/Views/PhotoView.xaml create mode 100644 Samples/Samples/Views/PhotoView.xaml.cs create mode 100644 Samples/Samples/Views/SettingsView.xaml create mode 100644 Samples/Samples/Views/SettingsView.xaml.cs create mode 100644 Samples/Samples/Views/SmsView.xaml create mode 100644 Samples/Samples/Views/SmsView.xaml.cs create mode 100644 Samples/Samples/Views/UserDialogView.xaml create mode 100644 Samples/Samples/Views/UserDialogView.xaml.cs create mode 100644 Samples/Samples/packages.config create mode 100644 license.txt create mode 100644 nuspec/Acr.XamForms.BarCodeScanner.nuspec create mode 100644 nuspec/Acr.XamForms.DeviceInfo.nuspec create mode 100644 nuspec/Acr.XamForms.Network.nuspec create mode 100644 nuspec/Acr.XamForms.Settings.nuspec create mode 100644 nuspec/Acr.XamForms.UserDialogs.nuspec create mode 100644 nuspec/Acr.XamForms.nuspec create mode 100644 nuspec/nuget.exe create mode 100644 nuspec/pack.cmd create mode 100644 readme.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0c7cda6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,159 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ +packages/ + +# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets +!packages/*/build/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store +*.DotSettings + +*.userprefs diff --git a/Acr.XamForms.BarCodeScanner.Droid/Acr.XamForms.BarCodeScanner.Droid.csproj b/Acr.XamForms.BarCodeScanner.Droid/Acr.XamForms.BarCodeScanner.Droid.csproj new file mode 100644 index 0000000..bc5c0dd --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Droid/Acr.XamForms.BarCodeScanner.Droid.csproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.XamForms.BarCodeScanner.Droid + Acr.XamForms.BarCodeScanner.Droid + 512 + Resources\Resource.Designer.cs + Off + + + v2.3 + 93117e31 + + + true + full + false + ..\bin\Debug\MonoAndroid\ + TRACE;DEBUG;ANDROID + prompt + 4 + x86 + None + + + pdbonly + true + ..\bin\Release\MonoAndroid\ + TRACE;ANDROID + prompt + 4 + false + + + + + + + + + ..\packages\Xamarin.Android.Support.v4.19.0.2\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + True + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\MonoAndroid\zxing.monoandroid.dll + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\MonoAndroid\ZXing.Net.Mobile.dll + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + {1ed7e825-98ed-4740-8dd7-96e4aa3f1128} + Acr.XamForms.BarCodeScanner + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.Droid/Properties/AssemblyInfo.cs b/Acr.XamForms.BarCodeScanner.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6d0d0f9 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Reflection; +using Android.App; + + +[assembly: AssemblyTitle("Acr.XamForms.BarCodeScanner.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: UsesPermission(Android.Manifest.Permission.Camera)] \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.Droid/Resources/Resource.Designer.cs b/Acr.XamForms.BarCodeScanner.Droid/Resources/Resource.Designer.cs new file mode 100644 index 0000000..508fca5 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Droid/Resources/Resource.Designer.cs @@ -0,0 +1,95 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Acr.XamForms.BarCodeScanner.Droid.Resource", IsApplication=false)] + +namespace Acr.XamForms.BarCodeScanner.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f040000 + public static int contentFrame = 2130968576; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f020000 + public static int zxingscanneractivitylayout = 2130837504; + + // aapt resource value: 0x7f020001 + public static int zxingscannerfragmentlayout = 2130837505; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f030001 + public static int ApplicationName = 2130903041; + + // aapt resource value: 0x7f030000 + public static int Hello = 2130903040; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Acr.XamForms.BarCodeScanner.Droid/Resources/Values/Strings.xml b/Acr.XamForms.BarCodeScanner.Droid/Resources/Values/Strings.xml new file mode 100644 index 0000000..8fd1763 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Droid/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + $projectname$ + diff --git a/Acr.XamForms.BarCodeScanner.Droid/packages.config b/Acr.XamForms.BarCodeScanner.Droid/packages.config new file mode 100644 index 0000000..4cd4562 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Droid/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.projitems b/Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.projitems new file mode 100644 index 0000000..c911578 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 6646e5ee-5534-4274-b99f-39ca222b23ef + + + Acr.XamForms.BarCodeScanner.Shared + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.shproj b/Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.shproj new file mode 100644 index 0000000..c3cae6f --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Shared/Acr.XamForms.BarCodeScanner.Shared.shproj @@ -0,0 +1,12 @@ + + + + 6646e5ee-5534-4274-b99f-39ca222b23ef + + + + + + + + diff --git a/Acr.XamForms.BarCodeScanner.Shared/BarCodeScanner.cs b/Acr.XamForms.BarCodeScanner.Shared/BarCodeScanner.cs new file mode 100644 index 0000000..b58d9d7 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.Shared/BarCodeScanner.cs @@ -0,0 +1,92 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Acr.XamForms.BarCodeScanner; +using Xamarin.Forms; +using ZXing; +using ZXing.Mobile; + +[assembly: Dependency(typeof(BarCodeScanner))] + + +namespace Acr.XamForms.BarCodeScanner { + + + public class BarCodeScanner : IBarCodeScanner { + + public BarCodeScannerOptions DefaultOptions { get; private set; } + + + public BarCodeScanner() { + this.DefaultOptions = new BarCodeScannerOptions(); + } + + + public void Read(Action onRead, Action onError, BarCodeScannerOptions options) { + this.ReadAsync(options) + .ContinueWith(x => { + if (x.Exception == null) + onRead(x.Result); + else if (onError != null) + onError(x.Exception); + }); + } + + + public async Task ReadAsync(BarCodeScannerOptions options) { +#if __IOS__ + var scanner = new MobileBarcodeScanner { UseCustomOverlay = false }; +#elif ANDROID + var scanner = new MobileBarcodeScanner(Forms.Context) { UseCustomOverlay = false }; +#elif WINDOWS_PHONE + var scanner = new MobileBarcodeScanner(System.Windows.Deployment.Current.Dispatcher) { UseCustomOverlay = false }; +#endif + options = options ?? this.DefaultOptions; + if (!String.IsNullOrWhiteSpace(options.TopText)) + scanner.TopText = options.TopText; + + if (!String.IsNullOrWhiteSpace(options.BottomText)) + scanner.BottomText = options.BottomText; + + if (!String.IsNullOrWhiteSpace(options.FlashlightText)) + scanner.FlashButtonText = options.FlashlightText; + + if (!String.IsNullOrWhiteSpace(options.CancelText)) + scanner.CancelButtonText = options.CancelText; + + var cfg = GetXingConfig(options); + var result = await scanner.Scan(cfg); + return (result == null || String.IsNullOrWhiteSpace(result.Text) + ? BarCodeResult.Fail + : new BarCodeResult(result.Text, FromXingFormat(result.BarcodeFormat)) + ); + } + + + private static BarCodeFormat FromXingFormat(ZXing.BarcodeFormat format) { + return (BarCodeFormat)Enum.Parse(typeof(BarCodeFormat), format.ToString()); + } + + + private static MobileBarcodeScanningOptions GetXingConfig(BarCodeScannerOptions opts) { + var def = ZXing.Mobile.MobileBarcodeScanningOptions.Default; + + var config = new MobileBarcodeScanningOptions { + AutoRotate = def.AutoRotate, + CharacterSet = opts.CharacterSet ?? def.CharacterSet, + DelayBetweenAnalyzingFrames = opts.DelayBetweenAnalyzingFrames ?? def.DelayBetweenAnalyzingFrames, + InitialDelayBeforeAnalyzingFrames = (opts.InitialDelayBeforeAnalyzingFrames ?? def.InitialDelayBeforeAnalyzingFrames), + PureBarcode = opts.PureBarcode, + TryHarder = opts.TryHarder, + TryInverted = opts.TryInverted, + UseFrontCameraIfAvailable = opts.UseFrontCameraIfAvailable + }; + if (opts.Formats != null && opts.Formats.Count > 0) { + config.PossibleFormats = opts.Formats + .Select(x => (BarcodeFormat)(int)x) + .ToList(); + } + return config; + } + } +} diff --git a/Acr.XamForms.BarCodeScanner.WindowsPhone/Acr.XamForms.BarCodeScanner.WindowsPhone.csproj b/Acr.XamForms.BarCodeScanner.WindowsPhone/Acr.XamForms.BarCodeScanner.WindowsPhone.csproj new file mode 100644 index 0000000..2543795 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.WindowsPhone/Acr.XamForms.BarCodeScanner.WindowsPhone.csproj @@ -0,0 +1,140 @@ + + + + Debug + AnyCPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Acr.XamForms.BarCodeScanner.WindowsPhone + Acr.XamForms.BarCodeScanner.WindowsPhone + WindowsPhone + v8.0 + $(TargetFrameworkVersion) + false + true + 11.0 + true + cc1ed110 + + + true + full + false + ..\bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + ..\Bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\Bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + ..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\wp8\WriteableBitmapExWinPhone.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Platform.WP8.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Xaml.dll + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\wp8\zxing.wp8.0.dll + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\wp8\ZXingNetMobile.dll + + + + + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128} + Acr.XamForms.BarCodeScanner + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.WindowsPhone/Properties/AssemblyInfo.cs b/Acr.XamForms.BarCodeScanner.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..be3539d --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,7 @@ +using System.Reflection; + + +[assembly: AssemblyTitle("Acr.XamForms.BarCodeScanner.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.BarCodeScanner.WindowsPhone/packages.config b/Acr.XamForms.BarCodeScanner.WindowsPhone/packages.config new file mode 100644 index 0000000..8302ef8 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.WindowsPhone/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.iOS/Acr.XamForms.BarCodeScanner.iOS.csproj b/Acr.XamForms.BarCodeScanner.iOS/Acr.XamForms.BarCodeScanner.iOS.csproj new file mode 100644 index 0000000..90a448f --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.iOS/Acr.XamForms.BarCodeScanner.iOS.csproj @@ -0,0 +1,80 @@ + + + + Debug + AnyCPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Acr.XamForms.BarCodeScanner.iOS + Resources + Acr.XamForms.BarCodeScanner.iOS + a44a67a4 + + + true + full + false + ..\bin\Debug\MonoTouch\ + DEBUG + prompt + 4 + false + true + iPhone Developer + + + none + true + ..\bin\Release\MonoTouch\ + prompt + 4 + false + iPhone Developer + + + + CommonAssemblyInfo.cs + + + + + + + + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Platform.iOS.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Xaml.dll + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\MonoTouch\zxing.monotouch.dll + + + ..\packages\ZXing.Net.Mobile.1.4.2.1\lib\MonoTouch\ZXing.Net.Mobile.dll + + + + + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128} + Acr.XamForms.BarCodeScanner + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.iOS/Properties/AssemblyInfo.cs b/Acr.XamForms.BarCodeScanner.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0bb77b6 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.BarCodeScanner.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner.iOS/packages.config b/Acr.XamForms.BarCodeScanner.iOS/packages.config new file mode 100644 index 0000000..65e3764 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner.iOS/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner/Acr.XamForms.BarCodeScanner.csproj b/Acr.XamForms.BarCodeScanner/Acr.XamForms.BarCodeScanner.csproj new file mode 100644 index 0000000..90547ef --- /dev/null +++ b/Acr.XamForms.BarCodeScanner/Acr.XamForms.BarCodeScanner.csproj @@ -0,0 +1,54 @@ + + + + + 10.0 + Debug + AnyCPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128} + Library + Properties + Acr.XamForms.BarCodeScanner + Acr.XamForms.BarCodeScanner + v4.5 + Profile78 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + d8708547 + + + true + full + false + ..\bin\Debug\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\Portable\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner/BarCodeFormat.cs b/Acr.XamForms.BarCodeScanner/BarCodeFormat.cs new file mode 100644 index 0000000..7496a2d --- /dev/null +++ b/Acr.XamForms.BarCodeScanner/BarCodeFormat.cs @@ -0,0 +1,28 @@ +using System; + + +namespace Acr.XamForms.BarCodeScanner { + + public enum BarCodeFormat { + AZTEC = 1, + CODABAR = 2, + CODE_39 = 4, + CODE_93 = 8, + CODE_128 = 16, + DATA_MATRIX = 32, + EAN_8 = 64, + EAN_13 = 128, + ITF = 256, + MAXICODE = 512, + PDF_417 = 1024, + QR_CODE = 2048, + RSS_14 = 4096, + RSS_EXPANDED = 8192, + UPC_A = 16384, + UPC_E = 32768, + UPC_EAN_EXTENSION = 65536, + MSI = 131072, + PLESSEY = 262144, + All_1D = MSI | UPC_E | UPC_A | RSS_EXPANDED | RSS_14 | ITF | EAN_13 | EAN_8 | CODE_128 | CODE_93 | CODE_39 | CODABAR + } +} diff --git a/Acr.XamForms.BarCodeScanner/BarCodeResult.cs b/Acr.XamForms.BarCodeScanner/BarCodeResult.cs new file mode 100644 index 0000000..9371f75 --- /dev/null +++ b/Acr.XamForms.BarCodeScanner/BarCodeResult.cs @@ -0,0 +1,29 @@ +using System; + + +namespace Acr.XamForms.BarCodeScanner { + + public class BarCodeResult { + + public bool Success { get; private set; } + public string Code { get; private set; } + public BarCodeFormat Format { get; private set; } + + + public static BarCodeResult Fail { get; private set; } + + static BarCodeResult() { + Fail = new BarCodeResult { + Success = false + }; + } + + private BarCodeResult() { } + + public BarCodeResult(string code, BarCodeFormat format) { + this.Success = true; + this.Code = code; + this.Format = format; + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner/BarCodeScannerOptions.cs b/Acr.XamForms.BarCodeScanner/BarCodeScannerOptions.cs new file mode 100644 index 0000000..9418c3f --- /dev/null +++ b/Acr.XamForms.BarCodeScanner/BarCodeScannerOptions.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + + +namespace Acr.XamForms.BarCodeScanner { + + public class BarCodeScannerOptions { + + public string TopText { get; set; } + public string BottomText { get; set; } + public string FlashlightText { get; set; } + public string CancelText { get; set; } + + public bool? AutoRotate { get; set; } + public string CharacterSet { get; set; } + public int? DelayBetweenAnalyzingFrames { get; set; } + public bool? PureBarcode { get; set; } + public int? InitialDelayBeforeAnalyzingFrames { get; set; } + public bool? TryHarder { get; set; } + public bool? TryInverted { get; set; } + public bool? UseFrontCameraIfAvailable { get; set; } + + public List Formats { get; set; } + + public BarCodeScannerOptions() { + this.TopText = "Hold the camera up to the barcode\nAbout 6 inches away"; + this.BottomText = "Wait for the barcode to automatically scan"; + this.Formats = new List(3); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.BarCodeScanner/IBarCodeScanner.cs b/Acr.XamForms.BarCodeScanner/IBarCodeScanner.cs new file mode 100644 index 0000000..2e180fd --- /dev/null +++ b/Acr.XamForms.BarCodeScanner/IBarCodeScanner.cs @@ -0,0 +1,14 @@ +using System; +using System.Threading.Tasks; + + +namespace Acr.XamForms.BarCodeScanner { + + public interface IBarCodeScanner { + + BarCodeScannerOptions DefaultOptions { get; } + + void Read(Action onRead, Action onError = null, BarCodeScannerOptions options = null); + Task ReadAsync(BarCodeScannerOptions options = null); + } +} diff --git a/Acr.XamForms.BarCodeScanner/Properties/AssemblyInfo.cs b/Acr.XamForms.BarCodeScanner/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..348847f --- /dev/null +++ b/Acr.XamForms.BarCodeScanner/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.BarCodeScanner")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.Droid/Acr.XamForms.DeviceInfo.Droid.csproj b/Acr.XamForms.DeviceInfo.Droid/Acr.XamForms.DeviceInfo.Droid.csproj new file mode 100644 index 0000000..ec032a9 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/Acr.XamForms.DeviceInfo.Droid.csproj @@ -0,0 +1,99 @@ + + + + Debug + AnyCPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.XamForms.DeviceInfo.Droid + Acr.XamForms.DeviceInfo.Droid + 512 + Resources\Resource.Designer.cs + Off + + + v2.3 + 70973e5f + + + true + full + false + ..\bin\Debug\MonoAndroid\ + DEBUG;TRACE + prompt + 4 + None + + + pdbonly + true + ..\bin\Release\MonoAndroid\ + TRACE + prompt + 4 + false + + + + + + + + + False + ..\packages\Xamarin.Android.Support.v4.19.0.2\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + {62822DE8-CEB9-4602-B780-84E9E3D11B88} + Acr.XamForms.DeviceInfo + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.Droid/DroidDeviceInfoService.cs b/Acr.XamForms.DeviceInfo.Droid/DroidDeviceInfoService.cs new file mode 100644 index 0000000..6a3f198 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/DroidDeviceInfoService.cs @@ -0,0 +1,42 @@ +using System; +using Acr.XamForms.DeviceInfo.Droid; +using Android.Content; +using Android.Content.PM; +using Android.Content.Res; +using Android.Telephony; +using Xamarin.Forms; +using B = Android.OS.Build; + + +[assembly: Dependency(typeof(DroidDeviceInfoService))] + +namespace Acr.XamForms.DeviceInfo.Droid { + + public class DroidDeviceInfoService : AbstractDeviceInfoService { + + public DroidDeviceInfoService() { + this.Manufacturer = B.Manufacturer; + this.Model = B.Model; + this.OperatingSystem = String.Format("{0} - SDK: {1}", B.VERSION.Release, B.VERSION.SdkInt); + this.IsSimulator = B.Product.Equals("google_sdk"); + + var d = Resources.System.DisplayMetrics; + this.ScreenWidth = (int)(d.WidthPixels / d.Density); + this.ScreenHeight = (int)(d.HeightPixels / d.Density); + + var pm = Forms.Context.ApplicationContext.PackageManager; + + this.IsRearCameraAvailable = pm.HasSystemFeature(PackageManager.FeatureCamera); + this.IsFrontCameraAvailable = pm.HasSystemFeature(PackageManager.FeatureCameraFront); + + var tel = (TelephonyManager)Forms.Context.ApplicationContext.GetSystemService(Context.TelephonyService); + this.DeviceId = tel.DeviceId; + + //var filter = new IntentFilter(Intent.ActionBatteryChanged); + //var battery = RegisterReceiver(null, filter); + //var level = battery.GetIntExtra(BatteryManager.ExtraLevel, -1); + //var scale = battery.GetIntExtra(BatteryManager.ExtraScale, -1); + //this.BatteryPercentage = Convert.ToInt32(Math.Floor(level * 100D / scale)); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.Droid/Properties/AssemblyInfo.cs b/Acr.XamForms.DeviceInfo.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7d29750 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Reflection; +using Android.App; + + +[assembly: AssemblyTitle("Acr.XamForms.DeviceInfo.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: UsesPermission(Android.Manifest.Permission.ReadPhoneState)] diff --git a/Acr.XamForms.DeviceInfo.Droid/Resources/AboutResources.txt b/Acr.XamForms.DeviceInfo.Droid/Resources/AboutResources.txt new file mode 100644 index 0000000..194ae28 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/Resources/AboutResources.txt @@ -0,0 +1,50 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.xml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable-hdpi/ + icon.png + + drawable-ldpi/ + icon.png + + drawable-mdpi/ + icon.png + + layout/ + main.xml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called +"Resource" that contains the tokens for each one of the resources included. For example, +for the above Resources layout, this is what the Resource class would expose: + +public class Resource { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main +to reference the layout/main.xml file, or Resource.strings.first_string to reference the first +string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.Droid/Resources/Resource.Designer.cs b/Acr.XamForms.DeviceInfo.Droid/Resources/Resource.Designer.cs new file mode 100644 index 0000000..fe5c4f7 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/Resources/Resource.Designer.cs @@ -0,0 +1,60 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Acr.XamForms.DeviceInfo.Droid.Resource", IsApplication=false)] + +namespace Acr.XamForms.DeviceInfo.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f020001 + public static int ApplicationName = 2130837505; + + // aapt resource value: 0x7f020000 + public static int Hello = 2130837504; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Acr.XamForms.DeviceInfo.Droid/Resources/Values/Strings.xml b/Acr.XamForms.DeviceInfo.Droid/Resources/Values/Strings.xml new file mode 100644 index 0000000..8fd1763 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + $projectname$ + diff --git a/Acr.XamForms.DeviceInfo.Droid/packages.config b/Acr.XamForms.DeviceInfo.Droid/packages.config new file mode 100644 index 0000000..02d6fad --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Droid/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.Shared/AbstractDeviceInfoService.cs b/Acr.XamForms.DeviceInfo.Shared/AbstractDeviceInfoService.cs new file mode 100644 index 0000000..879397d --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Shared/AbstractDeviceInfoService.cs @@ -0,0 +1,21 @@ +using System; + + +namespace Acr.XamForms.DeviceInfo { + + public abstract class AbstractDeviceInfoService : IDeviceInfoService { + + public int ScreenHeight { get; protected set; } + public int ScreenWidth { get; protected set; } + public string DeviceId { get; protected set; } + public string Manufacturer { get; protected set; } + public string Model { get; protected set; } + public string OperatingSystem { get; protected set; } + public bool IsSimulator { get; protected set; } + public bool IsFrontCameraAvailable { get; protected set; } + public bool IsRearCameraAvailable { get; protected set; } + + //public int BatteryPercentage { get; protected set; } + //public BatteryState BatteryState { get; protected set; } + } +} diff --git a/Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.projitems b/Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.projitems new file mode 100644 index 0000000..97dbf5f --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + cf44552e-32ac-4b09-956a-5bf7355812cc + + + Acr.XamForms.DeviceInfo.Shared + + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.shproj b/Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.shproj new file mode 100644 index 0000000..17e299e --- /dev/null +++ b/Acr.XamForms.DeviceInfo.Shared/Acr.XamForms.DeviceInfo.Shared.shproj @@ -0,0 +1,12 @@ + + + + cf44552e-32ac-4b09-956a-5bf7355812cc + + + + + + + + diff --git a/Acr.XamForms.DeviceInfo.WindowsPhone/Acr.XamForms.DeviceInfo.WindowsPhone.csproj b/Acr.XamForms.DeviceInfo.WindowsPhone/Acr.XamForms.DeviceInfo.WindowsPhone.csproj new file mode 100644 index 0000000..426f0eb --- /dev/null +++ b/Acr.XamForms.DeviceInfo.WindowsPhone/Acr.XamForms.DeviceInfo.WindowsPhone.csproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + {18AD7705-C9A9-42C0-9265-14A9559E441F} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Acr.XamForms.DeviceInfo.WindowsPhone + Acr.XamForms.DeviceInfo.WindowsPhone + WindowsPhone + v8.0 + $(TargetFrameworkVersion) + false + true + 11.0 + true + 2c7ef61e + + + true + full + false + ..\bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\bin\Release\WinPhone\ + TRACE + true + true + prompt + 4 + + + true + full + false + ..\Bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\Bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + {62822DE8-CEB9-4602-B780-84E9E3D11B88} + Acr.XamForms.DeviceInfo + + + + + False + ..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Platform.WP8.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.WindowsPhone/Properties/AssemblyInfo.cs b/Acr.XamForms.DeviceInfo.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4e4a5ea --- /dev/null +++ b/Acr.XamForms.DeviceInfo.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.DeviceInfo.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.DeviceInfo.WindowsPhone/WinPhoneDeviceInfoService.cs b/Acr.XamForms.DeviceInfo.WindowsPhone/WinPhoneDeviceInfoService.cs new file mode 100644 index 0000000..422c125 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.WindowsPhone/WinPhoneDeviceInfoService.cs @@ -0,0 +1,57 @@ +using System; +using System.Windows; +using Acr.XamForms.DeviceInfo.WindowsPhone; +using Microsoft.Devices; +using Microsoft.Phone.Info; +using Xamarin.Forms; +using Env = System.Environment; +using DevEnv = Microsoft.Devices.Environment; + +[assembly: Dependency(typeof(WinPhoneDeviceInfoService))] + + +namespace Acr.XamForms.DeviceInfo.WindowsPhone { + + public class WinPhoneDeviceInfoService : AbstractDeviceInfoService { + + public WinPhoneDeviceInfoService() { + this.Manufacturer = DeviceStatus.DeviceManufacturer; + this.Model = DeviceStatus.DeviceName; + this.OperatingSystem = Env.OSVersion.ToString(); + + var deviceIdBytes = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId"); + this.DeviceId = Convert.ToBase64String(deviceIdBytes); + + this.IsRearCameraAvailable = PhotoCamera.IsCameraTypeSupported(CameraType.Primary); + this.IsFrontCameraAvailable = PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing); + this.IsSimulator = (DevEnv.DeviceType == DeviceType.Emulator); + + switch (GetScaleFactor()) { + + case 150: + this.ScreenWidth = 720; + this.ScreenHeight = 1280; + break; + + case 160: + this.ScreenWidth = 768; + this.ScreenHeight = 1280; + break; + + case 100: + default: + this.ScreenWidth = 480; + this.ScreenHeight = 800; + break; + } + } + + + private static int GetScaleFactor() { + var instance = Application.Current.Host.Content; + var getMethod = instance.GetType().GetProperty("ScaleFactor").GetGetMethod(); + var value = (int)getMethod.Invoke(instance, null); + return value; + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.WindowsPhone/packages.config b/Acr.XamForms.DeviceInfo.WindowsPhone/packages.config new file mode 100644 index 0000000..2654900 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.WindowsPhone/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.iOS/Acr.XamForms.DeviceInfo.iOS.csproj b/Acr.XamForms.DeviceInfo.iOS/Acr.XamForms.DeviceInfo.iOS.csproj new file mode 100644 index 0000000..f61e207 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.iOS/Acr.XamForms.DeviceInfo.iOS.csproj @@ -0,0 +1,78 @@ + + + + Debug + AnyCPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Acr.XamForms.DeviceInfo.iOS + Resources + Acr.XamForms.DeviceInfo.iOS + f119638e + + + true + full + false + ..\bin\Debug\MonoTouch\ + DEBUG + prompt + 4 + false + true + iPhone Developer + + + none + true + ..\bin\Release\MonoTouch\ + prompt + 4 + false + iPhone Developer + + + + CommonAssemblyInfo.cs + + + + + + + {62822DE8-CEB9-4602-B780-84E9E3D11B88} + Acr.XamForms.DeviceInfo + + + + + + + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Core.dll + True + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Platform.iOS.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Xaml.dll + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.iOS/Properties/AssemblyInfo.cs b/Acr.XamForms.DeviceInfo.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e387beb --- /dev/null +++ b/Acr.XamForms.DeviceInfo.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.DeviceInfo.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.DeviceInfo.iOS/iOSDeviceInfoService.cs b/Acr.XamForms.DeviceInfo.iOS/iOSDeviceInfoService.cs new file mode 100644 index 0000000..6fe35e3 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.iOS/iOSDeviceInfoService.cs @@ -0,0 +1,53 @@ +using System; +using Acr.XamForms.DeviceInfo.iOS; +using MonoTouch.ObjCRuntime; +using MonoTouch.UIKit; +using Xamarin.Forms; + + +[assembly: Dependency(typeof(iOSDeviceInfoService))] + +namespace Acr.XamForms.DeviceInfo.iOS { + + public class iOSDeviceInfoService : AbstractDeviceInfoService { + + public iOSDeviceInfoService() { + this.Manufacturer = "Apple"; + this.Model = UIDevice.CurrentDevice.Model; + this.OperatingSystem = String.Format("{0} {1}", UIDevice.CurrentDevice.SystemName, UIDevice.CurrentDevice.SystemVersion); + this.DeviceId = UIDevice.CurrentDevice.IdentifierForVendor.AsString(); + + var screen = UIScreen.MainScreen.Bounds; + this.ScreenWidth = (int)screen.Width; + this.ScreenHeight = (int)screen.Height; + this.IsFrontCameraAvailable = UIImagePickerController.IsCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front); + this.IsRearCameraAvailable = UIImagePickerController.IsCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear); + this.IsSimulator = (Runtime.Arch == Arch.SIMULATOR); + + //this.BatteryPercentage = UIDevice.CurrentDevice.BatteryLevel; + } + } +} +/* +UIDevice.CurrentDevice.BatteryMonitoringEnabled = true; +// set the battery level on the progress bar +barBatteryLevel.Progress = UIDevice.CurrentDevice.BatteryLevel; +// the the battery state label +lblBatteryState.Text = UIDevice.CurrentDevice.BatteryState.ToString (); + +// add a notification handler for battery level changes +NSNotificationCenter.DefaultCenter.AddObserver ( + UIDevice.BatteryLevelDidChangeNotification, + (NSNotification n) => { + barBatteryLevel.Progress = UIDevice.CurrentDevice.BatteryLevel; + n.Dispose(); + }); + +// add a notification handler for battery state changes +NSNotificationCenter.DefaultCenter.AddObserver ( + UIDevice.BatteryStateDidChangeNotification, + (NSNotification n) => { + lblBatteryState.Text = UIDevice.CurrentDevice.BatteryState.ToString(); + n.Dispose(); + }); + */ \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo.iOS/packages.config b/Acr.XamForms.DeviceInfo.iOS/packages.config new file mode 100644 index 0000000..e43bf52 --- /dev/null +++ b/Acr.XamForms.DeviceInfo.iOS/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo/Acr.XamForms.DeviceInfo.csproj b/Acr.XamForms.DeviceInfo/Acr.XamForms.DeviceInfo.csproj new file mode 100644 index 0000000..4bab6b0 --- /dev/null +++ b/Acr.XamForms.DeviceInfo/Acr.XamForms.DeviceInfo.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88} + Library + Properties + Acr.XamForms.DeviceInfo + Acr.XamForms.DeviceInfo + v4.5 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile78 + 10.0 + + + + + 12.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + + + + + + + true + full + false + ..\bin\Debug\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\Portable\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/Acr.XamForms.DeviceInfo/IDeviceInfoService.cs b/Acr.XamForms.DeviceInfo/IDeviceInfoService.cs new file mode 100644 index 0000000..6913456 --- /dev/null +++ b/Acr.XamForms.DeviceInfo/IDeviceInfoService.cs @@ -0,0 +1,23 @@ +using System; + + +namespace Acr.XamForms.DeviceInfo { + + public interface IDeviceInfoService { + + int ScreenHeight { get; } + int ScreenWidth { get; } + string DeviceId { get; } + string Manufacturer { get; } + string Model { get; } + string OperatingSystem { get; } + bool IsFrontCameraAvailable { get; } + bool IsRearCameraAvailable { get; } + bool IsSimulator { get; } + + // IsFlashAvailable + // Camera resolution? + //BatteryState BatteryState { get; } + //int BatteryPercentage { get; } + } +} diff --git a/Acr.XamForms.DeviceInfo/Properties/AssemblyInfo.cs b/Acr.XamForms.DeviceInfo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ba4ca0a --- /dev/null +++ b/Acr.XamForms.DeviceInfo/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.DeviceInfo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Mobile.Droid/Acr.XamForms.Mobile.Droid.csproj b/Acr.XamForms.Mobile.Droid/Acr.XamForms.Mobile.Droid.csproj new file mode 100644 index 0000000..089a4db --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/Acr.XamForms.Mobile.Droid.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {07658008-EB02-4C74-B798-0B8ED2BECA6D} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.XamForms.Mobile.Droid + Acr.XamForms.Mobile.Droid + 512 + Resources\Resource.Designer.cs + Off + + + 6d32c78e + v2.3 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + ..\packages\Xamarin.Android.Support.v4.19.0.2\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + True + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + + + ..\Components\xamarin.mobile-0.7.1\lib\android\Xamarin.Mobile.dll + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + {67f9d3a8-f71e-4428-913f-c37ae82cdb24} + Acr.XamForms.Mobile + + + + + False + 0.7.1 + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile.Droid/MailService.cs b/Acr.XamForms.Mobile.Droid/MailService.cs new file mode 100644 index 0000000..64e1252 --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/MailService.cs @@ -0,0 +1,11 @@ +using System; + + +namespace Acr.XamForms.Mobile.Droid { + + public class MailService : IMailService { + + public void Blah() { + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.Mobile.Droid/PhoneService.cs b/Acr.XamForms.Mobile.Droid/PhoneService.cs new file mode 100644 index 0000000..c29cadc --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/PhoneService.cs @@ -0,0 +1,26 @@ +using Android.Net; +using Android.Content; +using Android.Telephony; +using Xamarin.Forms; + + +namespace Acr.XamForms.Mobile.Droid { + + public class PhoneService : IPhoneService { + + #region IPhoneService Members + + public void Call(string person, string number) { + var uri = Uri.Parse("tel:" + number); + var intent = new Intent(Intent.ActionDial, uri); + Forms.Context.StartActivity(intent); + } + + + public void Sms(string number, string message) { + SmsManager.Default.SendTextMessage(number, null, message, null, null); + } + + #endregion + } +} \ No newline at end of file diff --git a/Acr.XamForms.Mobile.Droid/Properties/AssemblyInfo.cs b/Acr.XamForms.Mobile.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..973a096 --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,16 @@ +using System.Reflection; +using Acr.XamForms.Mobile; +using Acr.XamForms.Mobile.Droid; +using Xamarin.Forms; + + +[assembly: AssemblyTitle("Acr.XamForms.Mobile.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: Dependency(typeof(AddressBookService))] +[assembly: Dependency(typeof(LocationService))] +[assembly: Dependency(typeof(MailService))] +[assembly: Dependency(typeof(PhoneService))] +[assembly: Dependency(typeof(PhotoService))] diff --git a/Acr.XamForms.Mobile.Droid/Resources/Resource.Designer.cs b/Acr.XamForms.Mobile.Droid/Resources/Resource.Designer.cs new file mode 100644 index 0000000..ee3941b --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/Resources/Resource.Designer.cs @@ -0,0 +1,60 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Acr.XamForms.Mobile.Droid.Resource", IsApplication=false)] + +namespace Acr.XamForms.Mobile.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f020001 + public static int ApplicationName = 2130837505; + + // aapt resource value: 0x7f020000 + public static int Hello = 2130837504; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Acr.XamForms.Mobile.Droid/Resources/Values/Strings.xml b/Acr.XamForms.Mobile.Droid/Resources/Values/Strings.xml new file mode 100644 index 0000000..8fd1763 --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + $projectname$ + diff --git a/Acr.XamForms.Mobile.Droid/packages.config b/Acr.XamForms.Mobile.Droid/packages.config new file mode 100644 index 0000000..02d6fad --- /dev/null +++ b/Acr.XamForms.Mobile.Droid/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.projitems b/Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.projitems new file mode 100644 index 0000000..c9829c1 --- /dev/null +++ b/Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.projitems @@ -0,0 +1,16 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 1c973cc4-86f0-4798-b128-55fae3aad9e5 + + + Acr.XamForms.Mobile + + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.shproj b/Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.shproj new file mode 100644 index 0000000..3e9d299 --- /dev/null +++ b/Acr.XamForms.Mobile.Shared/Acr.XamForms.Mobile.Shared.shproj @@ -0,0 +1,12 @@ + + + + 1c973cc4-86f0-4798-b128-55fae3aad9e5 + + + + + + + + diff --git a/Acr.XamForms.Mobile.Shared/AddressBookService.cs b/Acr.XamForms.Mobile.Shared/AddressBookService.cs new file mode 100644 index 0000000..5744f12 --- /dev/null +++ b/Acr.XamForms.Mobile.Shared/AddressBookService.cs @@ -0,0 +1,19 @@ +using System; +using XamAddressBook = Xamarin.Contacts.AddressBook; + + +namespace Acr.XamForms.Mobile { + + public class AddressBookService : IAddressBookService { + private readonly XamAddressBook book; + + + public AddressBookService() { +#if __ANDROID__ + this.book = new XamAddressBook(Xamarin.Forms.Forms.Context); +#else + this.book = new XamAddressBook(); +#endif + } + } +} diff --git a/Acr.XamForms.Mobile.Shared/LocationService.cs b/Acr.XamForms.Mobile.Shared/LocationService.cs new file mode 100644 index 0000000..1501e67 --- /dev/null +++ b/Acr.XamForms.Mobile.Shared/LocationService.cs @@ -0,0 +1,105 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Xamarin.Geolocation; + + +namespace Acr.XamForms.Mobile { + + public class LocationService : ILocationService { + private readonly Geolocator locator; + + + public LocationService() { +#if __ANDROID__ + this.locator = new Geolocator(Xamarin.Forms.Forms.Context); +#else + this.locator = new Geolocator(); +#endif + this.locator.PositionChanged += this.OnPositionChanged; + this.locator.PositionError += this.OnPositionError; + } + + + + #region Internals + + private void OnPositionChanged(object sender, Xamarin.Geolocation.PositionEventArgs e) { + if (this.PositionChanged != null) { + var pos = ToFormsPosition(e.Position); + this.PositionChanged(this, new PositionEventArgs(pos)); + } + } + + + private void OnPositionError(object sender, Xamarin.Geolocation.PositionErrorEventArgs e) { + if (this.PositionError != null) { + var error = (e.Error == GeolocationError.Unauthorized + ? GeoLocationError.Unauthorized + : GeoLocationError.PositionUnavailable + ); + this.PositionError(this, new PositionErrorEventArgs(error)); + } + } + + + private static Position ToFormsPosition(Xamarin.Geolocation.Position pos) { + return new Position { + Accuracy = pos.Accuracy, + Altitude = pos.Altitude, + AltitudeAccuracy = pos.AltitudeAccuracy, + Heading = pos.Heading, + Latitude = pos.Latitude, + Longitude = pos.Longitude, + Speed = pos.Speed, + Timestamp = pos.Timestamp + }; + } + + #endregion + + #region ILocationService Members + + public double DesiredAccuracy { + get { return this.locator.DesiredAccuracy; } + set { this.locator.DesiredAccuracy = value; } + } + + + public bool IsListening { + get { return this.locator.IsListening; } + } + + + public bool IsGeoLocationAvailable { + get { return this.locator.IsGeolocationAvailable; } + } + + + public bool SupportsHeading { + get { return this.locator.SupportsHeading; } + } + + + public void StartListening(int minTime, double minDistance, bool includeHeading = false) { + this.locator.StartListening(minTime, minDistance, includeHeading); + } + + + public void StopListening() { + this.locator.StopListening(); + } + + + public async Task GetPositionAsync(int timeout = 30, bool includeHeading = false, CancellationToken cancelToken = default(CancellationToken)) { + var pos = await this.locator.GetPositionAsync(timeout, cancelToken, includeHeading); + return ToFormsPosition(pos); + } + + public event EventHandler PositionChanged; + + public event EventHandler PositionError; + + #endregion + } +} \ No newline at end of file diff --git a/Acr.XamForms.Mobile.Shared/PhotoService.cs b/Acr.XamForms.Mobile.Shared/PhotoService.cs new file mode 100644 index 0000000..f886a42 --- /dev/null +++ b/Acr.XamForms.Mobile.Shared/PhotoService.cs @@ -0,0 +1,72 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Xamarin.Forms; +using Xamarin.Media; + + +namespace Acr.XamForms.Mobile { + + public class PhotoService : IPhotoService { + + public PhotoService() { + var picker = this.CreateMediaPicker(); + this.IsCameraAvailable = picker.IsCameraAvailable && picker.PhotosSupported; + this.IsGalleryAvailable = picker.PhotosSupported; + } +#if __IOS__ + private MediaPicker CreateMediaPicker() { + return new MediaPicker(); + } +#elif __ANDROID__ + private MediaPicker CreateMediaPicker() { + return new MediaPicker(Forms.Context); + } +#elif WINDOWSPHONE + +#endif + + public bool IsGalleryAvailable { get; protected set; } + public bool IsCameraAvailable { get; protected set; } + + + public async Task FromGallery() { + var picker = this.CreateMediaPicker(); + if (!this.IsGalleryAvailable) + throw new Exception("No camera is available"); + + try { + using (var file = await picker.PickPhotoAsync()) + return new PhotoResult(file.Path, File.OpenRead); + } + catch (OperationCanceledException) { + return PhotoResult.Cancelled; + } + } + + + public async Task FromCamera() { + var picker = this.CreateMediaPicker(); + if (!picker.IsCameraAvailable) + throw new Exception("No camera is available"); + + try { + using (var file = await this.UseCamera(picker)) + return new PhotoResult(file.Path, File.OpenRead); + } + catch (OperationCanceledException) { + return PhotoResult.Cancelled; + } + } + + + private async Task UseCamera(MediaPicker picker) { + var fileName = DateTime.Now.Ticks + ".png"; + return await picker.TakePhotoAsync(new StoreCameraMediaOptions { + Directory = "temp", + Name = fileName + //DefaultCamera = CameraDevice.Rear + }); + } + } +} diff --git a/Acr.XamForms.Mobile.WindowsPhone/Acr.XamForms.Mobile.WindowsPhone.csproj b/Acr.XamForms.Mobile.WindowsPhone/Acr.XamForms.Mobile.WindowsPhone.csproj new file mode 100644 index 0000000..a5ad07f --- /dev/null +++ b/Acr.XamForms.Mobile.WindowsPhone/Acr.XamForms.Mobile.WindowsPhone.csproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Acr.XamForms.Mobile.WindowsPhone + Acr.XamForms.Mobile.WindowsPhone + WindowsPhone + v8.0 + $(TargetFrameworkVersion) + false + true + 11.0 + true + 12177796 + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\x86\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\x86\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + ..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Platform.WP8.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Xaml.dll + + + ..\Components\xamarin.mobile-0.7.1\lib\wp8\Xamarin.Mobile.dll + + + + + + + + {67f9d3a8-f71e-4428-913f-c37ae82cdb24} + Acr.XamForms.Mobile + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile.WindowsPhone/MailService.cs b/Acr.XamForms.Mobile.WindowsPhone/MailService.cs new file mode 100644 index 0000000..f5917c0 --- /dev/null +++ b/Acr.XamForms.Mobile.WindowsPhone/MailService.cs @@ -0,0 +1,8 @@ +using System; + + +namespace Acr.XamForms.Mobile.WindowsPhone { + + public class MailService : IMailService { + } +} diff --git a/Acr.XamForms.Mobile.WindowsPhone/PhoneService.cs b/Acr.XamForms.Mobile.WindowsPhone/PhoneService.cs new file mode 100644 index 0000000..c6e1854 --- /dev/null +++ b/Acr.XamForms.Mobile.WindowsPhone/PhoneService.cs @@ -0,0 +1,30 @@ +using System; +using Microsoft.Phone.Tasks; + + +namespace Acr.XamForms.Mobile.WindowsPhone { + + public class PhoneService : IPhoneService { + + #region IPhoneService Members + + public void Call(string name, string number) { + var task = new PhoneCallTask { + DisplayName = name, + PhoneNumber = number + }; + task.Show(); + } + + + public void Sms(string number, string message) { + var task = new SmsComposeTask { + To = number, + Body = message + }; + task.Show(); + } + + #endregion + } +} diff --git a/Acr.XamForms.Mobile.WindowsPhone/PhotoService.cs b/Acr.XamForms.Mobile.WindowsPhone/PhotoService.cs new file mode 100644 index 0000000..f1e0629 --- /dev/null +++ b/Acr.XamForms.Mobile.WindowsPhone/PhotoService.cs @@ -0,0 +1,29 @@ +using System; +using System.Threading.Tasks; + + +namespace Acr.XamForms.Mobile.WindowsPhone { + + public class PhotoService : IPhotoService { + + #region IPhotoService Members + + public bool IsCameraAvailable { + get { throw new NotImplementedException(); } + } + + public bool IsGalleryAvailable { + get { throw new NotImplementedException(); } + } + + public Task FromGallery() { + throw new NotImplementedException(); + } + + public Task FromCamera() { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/Acr.XamForms.Mobile.WindowsPhone/Properties/AssemblyInfo.cs b/Acr.XamForms.Mobile.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..432b47d --- /dev/null +++ b/Acr.XamForms.Mobile.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,9 @@ +using System.Reflection; +using System.Resources; + + +[assembly: AssemblyTitle("Acr.XamForms.Mobile.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: NeutralResourcesLanguageAttribute("en-US")] diff --git a/Acr.XamForms.Mobile.WindowsPhone/packages.config b/Acr.XamForms.Mobile.WindowsPhone/packages.config new file mode 100644 index 0000000..2654900 --- /dev/null +++ b/Acr.XamForms.Mobile.WindowsPhone/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile.iOS/Acr.XamForms.Mobile.iOS.csproj b/Acr.XamForms.Mobile.iOS/Acr.XamForms.Mobile.iOS.csproj new file mode 100644 index 0000000..695e88e --- /dev/null +++ b/Acr.XamForms.Mobile.iOS/Acr.XamForms.Mobile.iOS.csproj @@ -0,0 +1,87 @@ + + + + Debug + iPhoneSimulator + 8.0.30703 + 2.0 + {A2908B9C-D5D0-4715-851D-3EB81AB2E452} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Acr.XamForms.Mobile.iOS + Resources + Acr.XamForms.Mobile.iOS + a8156ecd + + + true + full + false + bin\iPhone\Debug + DEBUG + prompt + 4 + false + true + iPhone Developer + + + none + true + bin\iPhone\Release + prompt + 4 + false + iPhone Developer + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Platform.iOS.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Xaml.dll + + + ..\Components\xamarin.mobile-0.7.1\lib\ios\Xamarin.Mobile.dll + + + + + {67f9d3a8-f71e-4428-913f-c37ae82cdb24} + Acr.XamForms.Mobile + + + + + False + 0.7.1 + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile.iOS/MailService.cs b/Acr.XamForms.Mobile.iOS/MailService.cs new file mode 100644 index 0000000..64de354 --- /dev/null +++ b/Acr.XamForms.Mobile.iOS/MailService.cs @@ -0,0 +1,8 @@ +using System; + + +namespace Acr.XamForms.Mobile.iOS { + + public class MailService : IMailService { + } +} \ No newline at end of file diff --git a/Acr.XamForms.Mobile.iOS/PhoneService.cs b/Acr.XamForms.Mobile.iOS/PhoneService.cs new file mode 100644 index 0000000..e234627 --- /dev/null +++ b/Acr.XamForms.Mobile.iOS/PhoneService.cs @@ -0,0 +1,60 @@ +using System; +using MonoTouch.Foundation; +using MonoTouch.UIKit; + + +namespace Acr.XamForms.Mobile.iOS { + + public class PhoneService : IPhoneService { + + #region IPhoneService Members + + public void Call(string person, string number) { + var url = new NSUrl("tel:" + number); + UIApplication.SharedApplication.OpenUrl(url); + } + + + public void Sms(string number, string message) { + var smsTo = NSUrl.FromString("sms:" + number); + if (UIApplication.SharedApplication.CanOpenUrl(smsTo)) { + UIApplication.SharedApplication.OpenUrl(smsTo); + } else { + // warn the user, or hide the button... + } + } + + #endregion + +/* + private readonly IMvxTouchModalHost _modalHost; + private MFMessageComposeViewController _sms; + + public SmsTask() + { + _modalHost = Mvx.Resolve(); + } + + public void SendSMS(string body, string phoneNumber) + { + if (!MFMessageComposeViewController.CanSendText) + return; + + _sms = new MFMessageComposeViewController {Body = body, Recipients = new[] {phoneNumber}}; + _sms.Finished += HandleSmsFinished; + + _modalHost.PresentModalViewController(_sms, true); + } + + private void HandleSmsFinished(object sender, MFMessageComposeResultEventArgs e) + { + var uiViewController = sender as UIViewController; + if (uiViewController == null) + throw new ArgumentException("sender"); + + uiViewController.DismissViewController(true, () => {}); + _modalHost.NativeModalViewControllerDisappearedOnItsOwn(); + } + */ + } +} \ No newline at end of file diff --git a/Acr.XamForms.Mobile.iOS/Properties/AssemblyInfo.cs b/Acr.XamForms.Mobile.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c0b9997 --- /dev/null +++ b/Acr.XamForms.Mobile.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,17 @@ +using System.Reflection; +using Acr.XamForms.Mobile; +using Acr.XamForms.Mobile.iOS; +using Xamarin.Forms; + + +[assembly: AssemblyTitle("Acr.XamForms.Mobile.iOS")] +[assembly: AssemblyDescription("")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: Dependency(typeof(AddressBookService))] +[assembly: Dependency(typeof(LocationService))] +[assembly: Dependency(typeof(MailService))] +[assembly: Dependency(typeof(PhoneService))] +[assembly: Dependency(typeof(PhotoService))] diff --git a/Acr.XamForms.Mobile.iOS/packages.config b/Acr.XamForms.Mobile.iOS/packages.config new file mode 100644 index 0000000..e43bf52 --- /dev/null +++ b/Acr.XamForms.Mobile.iOS/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile/Acr.XamForms.Mobile.csproj b/Acr.XamForms.Mobile/Acr.XamForms.Mobile.csproj new file mode 100644 index 0000000..5238b9c --- /dev/null +++ b/Acr.XamForms.Mobile/Acr.XamForms.Mobile.csproj @@ -0,0 +1,77 @@ + + + + + 11.0 + Debug + AnyCPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24} + Library + Properties + Acr.XamForms.Mobile + Acr.XamForms.Mobile + v4.5 + Profile78 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + c6b763c2 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + ..\packages\Xamarin.Forms.1.0.6186\lib\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6186\lib\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.Xaml.dll + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Mobile/IAddressBookService.cs b/Acr.XamForms.Mobile/IAddressBookService.cs new file mode 100644 index 0000000..937893c --- /dev/null +++ b/Acr.XamForms.Mobile/IAddressBookService.cs @@ -0,0 +1,11 @@ +using System; +using System.Threading.Tasks; + + +namespace Acr.XamForms.Mobile { + + public interface IAddressBookService { + + //Task RequestPermission(); + } +} \ No newline at end of file diff --git a/Acr.XamForms.Mobile/ILocationService.cs b/Acr.XamForms.Mobile/ILocationService.cs new file mode 100644 index 0000000..033dca2 --- /dev/null +++ b/Acr.XamForms.Mobile/ILocationService.cs @@ -0,0 +1,34 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + + +namespace Acr.XamForms.Mobile { + + public interface ILocationService { + + double DesiredAccuracy { get; set; } + bool IsListening { get; } + bool IsGeoLocationAvailable { get; } + bool SupportsHeading { get; } + + void StartListening(int minTime, double minDistance, bool includeHeading = false); + void StopListening(); + + Task GetPositionAsync(int timeout = 30, bool includeHeading = false, CancellationToken cancelToken = default(CancellationToken)); + event EventHandler PositionChanged; + event EventHandler PositionError; + } +} +/* +using Xamarin.Geolocation; +// ... + +var locator = new Geolocator { DesiredAccuracy = 50 }; +// new Geolocator (this) { ... }; on Android + +Position position = await locator.GetPositionAsync (timeout: 10000); + +Console.WriteLine ("Position Status: {0}", position.Timestamp); +Console.WriteLine ("Position Latitude: {0}", position.Latitude); +Console.WriteLine ("Position Longitude: {0}", position.Longitude);*/ \ No newline at end of file diff --git a/Acr.XamForms.Mobile/IMailService.cs b/Acr.XamForms.Mobile/IMailService.cs new file mode 100644 index 0000000..a6837b6 --- /dev/null +++ b/Acr.XamForms.Mobile/IMailService.cs @@ -0,0 +1,53 @@ +using System; + + +namespace Acr.XamForms.Mobile { + + public interface IMailService { + } +} +/* + public interface IMvxComposeEmailTaskEx + : IMvxComposeEmailTask + { + void ComposeEmail(IEnumerable to, IEnumerable cc, string subject, string body, bool isHtml, IEnumerable attachments); + bool CanSendEmail { get; } + bool CanSendAttachments { get; } + } + + public class EmailAttachment + { + public string ContentType { get; set; } + public string FileName { get; set; } + public Stream Content { get; set; } + } + * + * + public string Build(string to, string cc, string subject, string body) + { + var builder = new StringBuilder(); + builder.Append("mailto:" + to); + + string sep = "?"; + AddParam(builder, "cc", cc, ref sep); + AddParam(builder, "subject", subject, ref sep); + AddParam(builder, "body", body, ref sep); + + var url = builder.ToString(); + return url; + } + + private void AddParam(StringBuilder builder, string param, string value, ref string separator) + { + if (string.IsNullOrWhiteSpace(value)) + { + return; + } + + builder.Append(separator); + separator = "&"; + builder.Append(param); + builder.Append("="); + builder.Append(Uri.EscapeDataString(value)); + } + */ \ No newline at end of file diff --git a/Acr.XamForms.Mobile/IPhoneService.cs b/Acr.XamForms.Mobile/IPhoneService.cs new file mode 100644 index 0000000..3eaa468 --- /dev/null +++ b/Acr.XamForms.Mobile/IPhoneService.cs @@ -0,0 +1,12 @@ +using System; + + +namespace Acr.XamForms.Mobile { + + public interface IPhoneService { + + void Call(string person, string number); + void Sms(string number, string message); + //bool IsRoaming IsAvailable + } +} diff --git a/Acr.XamForms.Mobile/IPhotoService.cs b/Acr.XamForms.Mobile/IPhotoService.cs new file mode 100644 index 0000000..f4867a4 --- /dev/null +++ b/Acr.XamForms.Mobile/IPhotoService.cs @@ -0,0 +1,14 @@ +using System; +using System.Threading.Tasks; + + +namespace Acr.XamForms.Mobile { + + public interface IPhotoService { + + bool IsCameraAvailable { get; } + bool IsGalleryAvailable { get; } + Task FromGallery(); + Task FromCamera(); + } +} diff --git a/Acr.XamForms.Mobile/PhotoResult.cs b/Acr.XamForms.Mobile/PhotoResult.cs new file mode 100644 index 0000000..cb78f9e --- /dev/null +++ b/Acr.XamForms.Mobile/PhotoResult.cs @@ -0,0 +1,34 @@ +using System; +using System.IO; + + +namespace Acr.XamForms.Mobile { + + public class PhotoResult { + + public static readonly PhotoResult Cancelled = new PhotoResult(); + private readonly Func getStream; + + public bool IsCancelled { get; private set; } + public string Path { get; private set; } + + + private PhotoResult() { + this.IsCancelled = true; + } + + + public PhotoResult(string path, Func getStream) { + this.Path = path; + this.getStream = getStream; + } + + + public Stream GetStream() { + if (getStream == null) + throw new Exception("Stream is not available"); + + return getStream(this.Path); + } + } +} diff --git a/Acr.XamForms.Mobile/Position.cs b/Acr.XamForms.Mobile/Position.cs new file mode 100644 index 0000000..d35d9d9 --- /dev/null +++ b/Acr.XamForms.Mobile/Position.cs @@ -0,0 +1,95 @@ +using System; + + +namespace Acr.XamForms.Mobile { + + public class Position { + + public DateTimeOffset Timestamp { get; set; } + + /// + /// Gets or sets the latitude. + /// + /// + /// + /// The latitude. + /// + /// + /// + public double Latitude { get; set; } + + /// + /// Gets or sets the longitude. + /// + /// + /// + /// The longitude. + /// + /// + /// + public double Longitude { get; set; } + + /// + /// Gets or sets the altitude in meters relative to sea level. + /// + /// + /// + /// The altitude in meters, relative to seal level. + /// + /// + /// + public double Altitude { get; set; } + + /// + /// Gets or sets the potential position error radius in meters. + /// + /// + /// + /// The potential position error radius in meters of the and members. + /// + /// + /// + /// This may be higher or lower than the . + /// + public double Accuracy { get; set; } + + /// + /// Gets or sets the potential altitude error range in meters. + /// + /// + /// + /// The potential error, in meters, of the member. + /// + /// + /// + /// Not currently supported on Android, will always read 0. + /// + public double AltitudeAccuracy { get; set; } + + /// + /// Gets or sets the heading in degrees relative to true North. + /// + /// + /// + /// Heading relative to true north. + /// + /// + /// + /// Use to determine whether this property will contain a value. + /// + public double Heading { get; set; } + + /// + /// Gets or sets the speed in meters per second. + /// + /// + /// + /// The speed of the device, in meters per second, when the position was recorded. + /// + /// + /// + /// This value is only for the speed at the instant the position was recorded, as such it may vary wildly. + /// + public double Speed { get; set; } + } +} diff --git a/Acr.XamForms.Mobile/PositionErrorEventArgs.cs b/Acr.XamForms.Mobile/PositionErrorEventArgs.cs new file mode 100644 index 0000000..e784ee1 --- /dev/null +++ b/Acr.XamForms.Mobile/PositionErrorEventArgs.cs @@ -0,0 +1,19 @@ +using System; + + +namespace Acr.XamForms.Mobile { + + public enum GeoLocationError { + PositionUnavailable, + Unauthorized + } + + + public class PositionErrorEventArgs : EventArgs { + public GeoLocationError Error { get; private set; } + + public PositionErrorEventArgs(GeoLocationError error) { + this.Error = error; + } + } +} diff --git a/Acr.XamForms.Mobile/PositionEventArgs.cs b/Acr.XamForms.Mobile/PositionEventArgs.cs new file mode 100644 index 0000000..c4a9355 --- /dev/null +++ b/Acr.XamForms.Mobile/PositionEventArgs.cs @@ -0,0 +1,14 @@ +using System; + + +namespace Acr.XamForms.Mobile { + + public class PositionEventArgs : EventArgs { + public Position Position { get; private set; } + + + public PositionEventArgs(Position position) { + this.Position = position; + } + } +} diff --git a/Acr.XamForms.Mobile/Properties/AssemblyInfo.cs b/Acr.XamForms.Mobile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..251e83e --- /dev/null +++ b/Acr.XamForms.Mobile/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Mobile")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Mobile/packages.config b/Acr.XamForms.Mobile/packages.config new file mode 100644 index 0000000..26f3651 --- /dev/null +++ b/Acr.XamForms.Mobile/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network.Droid/Acr.XamForms.Network.Droid.csproj b/Acr.XamForms.Network.Droid/Acr.XamForms.Network.Droid.csproj new file mode 100644 index 0000000..9a32e90 --- /dev/null +++ b/Acr.XamForms.Network.Droid/Acr.XamForms.Network.Droid.csproj @@ -0,0 +1,98 @@ + + + + Debug + AnyCPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.XamForms.Network.Droid + Acr.XamForms.Network.Droid + 512 + Resources\Resource.Designer.cs + Off + + + v2.3 + 485cbf9f + + + true + full + false + ..\bin\Debug\MonoAndroid\ + DEBUG;TRACE + prompt + 4 + None + + + pdbonly + true + ..\bin\Release\MonoAndroid\ + TRACE + prompt + 4 + false + + + + + + + + + False + ..\packages\Xamarin.Android.Support.v4.19.0.2\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C} + Acr.XamForms.Network + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network.Droid/DroidNetworkService.cs b/Acr.XamForms.Network.Droid/DroidNetworkService.cs new file mode 100644 index 0000000..59218d9 --- /dev/null +++ b/Acr.XamForms.Network.Droid/DroidNetworkService.cs @@ -0,0 +1,45 @@ +using System; +using System.Threading.Tasks; +using Acr.XamForms.Network.Droid; +using Android.App; +using Android.Net; +using Java.Net; +using Xamarin.Forms; + +[assembly: Dependency(typeof(DroidNetworkService))] + + +namespace Acr.XamForms.Network.Droid { + + public class DroidNetworkService : AbstractNetworkService { + + public DroidNetworkService() { + NetworkConnectionBroadcastReceiver.OnChange = this.SetFromInfo; + var manager = (ConnectivityManager)Forms.Context.ApplicationContext.GetSystemService(Application.ConnectivityService); + this.SetFromInfo(manager.ActiveNetworkInfo); + } + + + private void SetFromInfo(NetworkInfo network) { + this.SetStatus( + network.IsConnected, + (network != null && network.Type == ConnectivityType.Wifi), + (network != null && network.Type == ConnectivityType.Mobile) + ); + } + + + public override Task IsHostReachable(string host) { + return Task.Run(() => { + try { + return InetAddress + .GetByName(host) + .IsReachable(5000); + } + catch { + return false; + } + }); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.Network.Droid/NetworkConnectionBroadcastReceiver.cs b/Acr.XamForms.Network.Droid/NetworkConnectionBroadcastReceiver.cs new file mode 100644 index 0000000..16480a1 --- /dev/null +++ b/Acr.XamForms.Network.Droid/NetworkConnectionBroadcastReceiver.cs @@ -0,0 +1,26 @@ +using System; +using Android.App; +using Android.Content; +using Android.Net; + + +namespace Acr.XamForms.Network.Droid { + + [BroadcastReceiver(Enabled = true, Label = "Network Status Receiver")] + [IntentFilter(new string[] { "android.net.conn.CONNECTIVITY_CHANGE" })] + public class NetworkConnectionBroadcastReceiver : BroadcastReceiver { + internal static Action OnChange { get; set; } + + + public override void OnReceive(Context context, Intent intent) { + if (intent.Extras == null || OnChange == null) + return; + + var ni = intent.Extras.Get(ConnectivityManager.ExtraNetworkInfo) as NetworkInfo; + if (ni == null) + return; + + OnChange(ni); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.Network.Droid/Properties/AssemblyInfo.cs b/Acr.XamForms.Network.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..55c3292 --- /dev/null +++ b/Acr.XamForms.Network.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Reflection; +using Android.App; + + +[assembly: AssemblyTitle("Acr.XamForms.Network.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: UsesPermission(Android.Manifest.Permission.Internet)] \ No newline at end of file diff --git a/Acr.XamForms.Network.Droid/Resources/Resource.Designer.cs b/Acr.XamForms.Network.Droid/Resources/Resource.Designer.cs new file mode 100644 index 0000000..fed4608 --- /dev/null +++ b/Acr.XamForms.Network.Droid/Resources/Resource.Designer.cs @@ -0,0 +1,60 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Acr.XamForms.Network.Droid.Resource", IsApplication=false)] + +namespace Acr.XamForms.Network.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f020001 + public static int ApplicationName = 2130837505; + + // aapt resource value: 0x7f020000 + public static int Hello = 2130837504; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Acr.XamForms.Network.Droid/Resources/Values/Strings.xml b/Acr.XamForms.Network.Droid/Resources/Values/Strings.xml new file mode 100644 index 0000000..8fd1763 --- /dev/null +++ b/Acr.XamForms.Network.Droid/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + $projectname$ + diff --git a/Acr.XamForms.Network.Droid/packages.config b/Acr.XamForms.Network.Droid/packages.config new file mode 100644 index 0000000..02d6fad --- /dev/null +++ b/Acr.XamForms.Network.Droid/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network.WindowsPhone/Acr.XamForms.Network.WindowsPhone.csproj b/Acr.XamForms.Network.WindowsPhone/Acr.XamForms.Network.WindowsPhone.csproj new file mode 100644 index 0000000..0d52afe --- /dev/null +++ b/Acr.XamForms.Network.WindowsPhone/Acr.XamForms.Network.WindowsPhone.csproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Acr.XamForms.Network.WindowsPhone + Acr.XamForms.Network.WindowsPhone + WindowsPhone + v8.0 + $(TargetFrameworkVersion) + false + true + 11.0 + true + bd692559 + + + true + full + false + ..\bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + ..\Bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\Bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + + + + + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C} + Acr.XamForms.Network + + + + + False + ..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Platform.WP8.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network.WindowsPhone/Properties/AssemblyInfo.cs b/Acr.XamForms.Network.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a4efe01 --- /dev/null +++ b/Acr.XamForms.Network.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Network.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms.Network.WindowsPhone/WinPhoneNetworkService.cs b/Acr.XamForms.Network.WindowsPhone/WinPhoneNetworkService.cs new file mode 100644 index 0000000..5c41cf0 --- /dev/null +++ b/Acr.XamForms.Network.WindowsPhone/WinPhoneNetworkService.cs @@ -0,0 +1,39 @@ +using System; +using System.Threading.Tasks; +using Acr.XamForms.Network.WindowsPhone; +using Microsoft.Phone.Net.NetworkInformation; +using Xamarin.Forms; + + +[assembly: Dependency(typeof(WinPhoneNetworkService))] + + +namespace Acr.XamForms.Network.WindowsPhone { + + public class WinPhoneNetworkService : AbstractNetworkService { + + public WinPhoneNetworkService() { + DeviceNetworkInformation.NetworkAvailabilityChanged += this.OnNetworkAvailabilityChanged; + this.SetStatus( + DeviceNetworkInformation.IsNetworkAvailable, + DeviceNetworkInformation.IsWiFiEnabled, + DeviceNetworkInformation.IsCellularDataEnabled + ); + } + + + private void OnNetworkAvailabilityChanged(object sender, NetworkNotificationEventArgs e) { + this.SetStatus( + DeviceNetworkInformation.IsNetworkAvailable, + DeviceNetworkInformation.IsWiFiEnabled, + DeviceNetworkInformation.IsCellularDataEnabled + ); + } + + + public override Task IsHostReachable(string host) { + // TODO + return null; + } + } +} diff --git a/Acr.XamForms.Network.WindowsPhone/packages.config b/Acr.XamForms.Network.WindowsPhone/packages.config new file mode 100644 index 0000000..2654900 --- /dev/null +++ b/Acr.XamForms.Network.WindowsPhone/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network.iOS/Acr.XamForms.Network.iOS.csproj b/Acr.XamForms.Network.iOS/Acr.XamForms.Network.iOS.csproj new file mode 100644 index 0000000..d680d3d --- /dev/null +++ b/Acr.XamForms.Network.iOS/Acr.XamForms.Network.iOS.csproj @@ -0,0 +1,78 @@ + + + + Debug + AnyCPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Acr.XamForms.Network.iOS + Resources + Acr.XamForms.Network.iOS + 7cb399b6 + + + true + full + false + ..\bin\Debug\MonoTouch\ + DEBUG + prompt + 4 + false + true + iPhone Developer + + + none + true + ..\bin\Release\MonoTouch\ + prompt + 4 + false + iPhone Developer + + + + CommonAssemblyInfo.cs + + + + + + + + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C} + Acr.XamForms.Network + + + + + + + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Platform.iOS.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Xaml.dll + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network.iOS/Properties/AssemblyInfo.cs b/Acr.XamForms.Network.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7c4b086 --- /dev/null +++ b/Acr.XamForms.Network.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Network.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms.Network.iOS/Reachability.cs b/Acr.XamForms.Network.iOS/Reachability.cs new file mode 100644 index 0000000..1c4f85c --- /dev/null +++ b/Acr.XamForms.Network.iOS/Reachability.cs @@ -0,0 +1,145 @@ +// PROVIDED BY XAMARIN SAMPLES +using System; +using System.Net; +using MonoTouch.SystemConfiguration; +using MonoTouch.CoreFoundation; + +namespace Acr.XamForms.Network.iOS { + + public enum NetworkStatus { + NotReachable, + ReachableViaCarrierDataNetwork, + ReachableViaWiFiNetwork + } + + public static class Reachability { + public static string HostName = "www.google.com"; + + public static bool IsReachableWithoutRequiringConnection(NetworkReachabilityFlags flags) { + // Is it reachable with the current network configuration? + bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0; + + // Do we need a connection to reach it? + bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0; + + // Since the network stack will automatically try to get the WAN up, + // probe that + if ((flags & NetworkReachabilityFlags.IsWWAN) != 0) + noConnectionRequired = true; + + return isReachable && noConnectionRequired; + } + + // Is the host reachable with the current network configuration + public static bool IsHostReachable(string host) { + if (host == null || host.Length == 0) + return false; + + using (var r = new NetworkReachability(host)) { + NetworkReachabilityFlags flags; + + if (r.TryGetFlags(out flags)) { + return IsReachableWithoutRequiringConnection(flags); + } + } + return false; + } + + // + // Raised every time there is an interesting reachable event, + // we do not even pass the info as to what changed, and + // we lump all three status we probe into one + // + public static event EventHandler ReachabilityChanged; + + static void OnChange(NetworkReachabilityFlags flags) { + var h = ReachabilityChanged; + if (h != null) + h(null, EventArgs.Empty); + } + + // + // Returns true if it is possible to reach the AdHoc WiFi network + // and optionally provides extra network reachability flags as the + // out parameter + // + static NetworkReachability adHocWiFiNetworkReachability; + public static bool IsAdHocWiFiNetworkAvailable(out NetworkReachabilityFlags flags) { + if (adHocWiFiNetworkReachability == null) { + adHocWiFiNetworkReachability = new NetworkReachability(new IPAddress(new byte[] { 169, 254, 0, 0 })); + adHocWiFiNetworkReachability.SetCallback(OnChange); + adHocWiFiNetworkReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault); + } + + if (!adHocWiFiNetworkReachability.TryGetFlags(out flags)) + return false; + + return IsReachableWithoutRequiringConnection(flags); + } + + static NetworkReachability defaultRouteReachability; + static bool IsNetworkAvailable(out NetworkReachabilityFlags flags) { + if (defaultRouteReachability == null) { + defaultRouteReachability = new NetworkReachability(new IPAddress(0)); + defaultRouteReachability.SetCallback(OnChange); + defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault); + } + if (!defaultRouteReachability.TryGetFlags(out flags)) + return false; + return IsReachableWithoutRequiringConnection(flags); + } + + static NetworkReachability remoteHostReachability; + public static NetworkStatus RemoteHostStatus() { + NetworkReachabilityFlags flags; + bool reachable; + + if (remoteHostReachability == null) { + remoteHostReachability = new NetworkReachability(HostName); + + // Need to probe before we queue, or we wont get any meaningful values + // this only happens when you create NetworkReachability from a hostname + reachable = remoteHostReachability.TryGetFlags(out flags); + + remoteHostReachability.SetCallback(OnChange); + remoteHostReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault); + } + else + reachable = remoteHostReachability.TryGetFlags(out flags); + + if (!reachable) + return NetworkStatus.NotReachable; + + if (!IsReachableWithoutRequiringConnection(flags)) + return NetworkStatus.NotReachable; + + if ((flags & NetworkReachabilityFlags.IsWWAN) != 0) + return NetworkStatus.ReachableViaCarrierDataNetwork; + + return NetworkStatus.ReachableViaWiFiNetwork; + } + + public static NetworkStatus InternetConnectionStatus() { + NetworkReachabilityFlags flags; + bool defaultNetworkAvailable = IsNetworkAvailable(out flags); + if (defaultNetworkAvailable) { + if ((flags & NetworkReachabilityFlags.IsDirect) != 0) + return NetworkStatus.NotReachable; + } + else if ((flags & NetworkReachabilityFlags.IsWWAN) != 0) + return NetworkStatus.ReachableViaCarrierDataNetwork; + else if (flags == 0) + return NetworkStatus.NotReachable; + return NetworkStatus.ReachableViaWiFiNetwork; + } + + public static NetworkStatus LocalWifiConnectionStatus() { + NetworkReachabilityFlags flags; + if (IsAdHocWiFiNetworkAvailable(out flags)) { + if ((flags & NetworkReachabilityFlags.IsDirect) != 0) + return NetworkStatus.ReachableViaWiFiNetwork; + } + return NetworkStatus.NotReachable; + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.Network.iOS/iOSNetworkService.cs b/Acr.XamForms.Network.iOS/iOSNetworkService.cs new file mode 100644 index 0000000..ce9d8e1 --- /dev/null +++ b/Acr.XamForms.Network.iOS/iOSNetworkService.cs @@ -0,0 +1,40 @@ +using System; +using System.Threading.Tasks; +using Acr.XamForms.Network.iOS; +using Xamarin.Forms; + +[assembly: Dependency(typeof(iOSNetworkService))] + + +namespace Acr.XamForms.Network.iOS { + + public class iOSNetworkService : AbstractNetworkService { + + public iOSNetworkService() { + this.SetInfo(); + Reachability.ReachabilityChanged += (s, e) => this.SetInfo(); + } + + + public override Task IsHostReachable(string host) { + return Task.Run(() => Reachability.IsHostReachable(host)); + } + + + private void SetInfo() { + switch (Reachability.InternetConnectionStatus()) { + case NetworkStatus.NotReachable: + this.SetStatus(false, false, false); + break; + + case NetworkStatus.ReachableViaCarrierDataNetwork: + this.SetStatus(true, false, true); + break; + + case NetworkStatus.ReachableViaWiFiNetwork: + this.SetStatus(true, false, true); + break; + } + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.Network.iOS/packages.config b/Acr.XamForms.Network.iOS/packages.config new file mode 100644 index 0000000..e43bf52 --- /dev/null +++ b/Acr.XamForms.Network.iOS/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network/AbstractNetworkService.cs b/Acr.XamForms.Network/AbstractNetworkService.cs new file mode 100644 index 0000000..65a924b --- /dev/null +++ b/Acr.XamForms.Network/AbstractNetworkService.cs @@ -0,0 +1,81 @@ +using System; +using System.ComponentModel; +using System.Threading.Tasks; + + +namespace Acr.XamForms.Network { + + public abstract class AbstractNetworkService : INetworkService, INotifyPropertyChanged { + + protected void SetStatus(bool connected, bool wifi, bool mobile) { + this.IsConnected = connected; + this.IsWifi = wifi; + this.IsMobile = mobile; + this.OnNetworkStatusChanged(); + } + + #region INetworkService Members + + public event EventHandler NetworkStatusChanged; + + public abstract Task IsHostReachable(string host); + + + private bool connected; + public bool IsConnected { + get { return this.connected; } + private set { + if (this.connected == value) + return; + + this.connected = value; + this.OnPropertyChanged("IsConnected"); + } + } + + + private bool wifi; + public bool IsWifi { + get { return this.wifi; } + private set { + if (this.wifi == value) + return; + + this.wifi = value; + this.OnPropertyChanged("IsWifi"); + } + } + + + private bool mobile; + public bool IsMobile { + get { return this.mobile; } + private set { + if (this.mobile == value) + return; + + this.mobile = value; + this.OnPropertyChanged("IsMobile"); + } + } + + + protected virtual void OnNetworkStatusChanged() { + if (this.NetworkStatusChanged != null) + this.NetworkStatusChanged(this, new NetworkStatusChangedEventArgs(this.IsConnected, this.IsWifi, this.IsMobile)); + } + + #endregion + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + private void OnPropertyChanged(string propertyName) { + if (this.PropertyChanged != null) { + this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + + #endregion + } +} diff --git a/Acr.XamForms.Network/Acr.XamForms.Network.csproj b/Acr.XamForms.Network/Acr.XamForms.Network.csproj new file mode 100644 index 0000000..dfd0a5a --- /dev/null +++ b/Acr.XamForms.Network/Acr.XamForms.Network.csproj @@ -0,0 +1,52 @@ + + + + + 10.0 + Debug + AnyCPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C} + Library + Properties + Acr.XamForms.Network + Acr.XamForms.Network + v4.5 + Profile78 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + ..\bin\Debug\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\Portable\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Network/INetworkService.cs b/Acr.XamForms.Network/INetworkService.cs new file mode 100644 index 0000000..0386241 --- /dev/null +++ b/Acr.XamForms.Network/INetworkService.cs @@ -0,0 +1,15 @@ +using System; +using System.Threading.Tasks; + + +namespace Acr.XamForms.Network { + + public interface INetworkService { + + bool IsConnected { get; } + bool IsWifi { get; } + bool IsMobile { get; } + Task IsHostReachable(string host); + event EventHandler NetworkStatusChanged; + } +} diff --git a/Acr.XamForms.Network/NetworkStatusChangedEventArgs.cs b/Acr.XamForms.Network/NetworkStatusChangedEventArgs.cs new file mode 100644 index 0000000..e438974 --- /dev/null +++ b/Acr.XamForms.Network/NetworkStatusChangedEventArgs.cs @@ -0,0 +1,19 @@ +using System; + + +namespace Acr.XamForms.Network { + + public class NetworkStatusChangedEventArgs : EventArgs { + + public bool IsConnected { get; private set; } + public bool IsWifi { get; private set; } + public bool IsMobile { get; private set; } + + + public NetworkStatusChangedEventArgs(bool connected, bool wifi, bool mobile) { + this.IsConnected = connected; + this.IsWifi = wifi; + this.IsMobile = mobile; + } + } +} diff --git a/Acr.XamForms.Network/Properties/AssemblyInfo.cs b/Acr.XamForms.Network/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..aa49e23 --- /dev/null +++ b/Acr.XamForms.Network/Properties/AssemblyInfo.cs @@ -0,0 +1,7 @@ +using System.Reflection; + + +[assembly: AssemblyTitle("Acr.XamForms.Network")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Settings.Droid/Acr.XamForms.Settings.Droid.csproj b/Acr.XamForms.Settings.Droid/Acr.XamForms.Settings.Droid.csproj new file mode 100644 index 0000000..4d473a4 --- /dev/null +++ b/Acr.XamForms.Settings.Droid/Acr.XamForms.Settings.Droid.csproj @@ -0,0 +1,97 @@ + + + + Debug + AnyCPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.XamForms.Settings.Droid + Acr.XamForms.Settings.Droid + 512 + Resources\Resource.Designer.cs + Off + + + v2.3 + 1de57494 + + + true + full + false + ..\bin\Debug\MonoAndroid\ + DEBUG;TRACE + prompt + 4 + None + + + pdbonly + true + ..\bin\Release\MonoAndroid\ + TRACE + prompt + 4 + false + + + + + + + + + False + ..\packages\Xamarin.Android.Support.v4.19.0.2\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + {90AB40EB-C012-482C-8C61-FCF2BA56FB60} + Acr.XamForms.Settings + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings.Droid/DroidSettingsService.cs b/Acr.XamForms.Settings.Droid/DroidSettingsService.cs new file mode 100644 index 0000000..1e8333b --- /dev/null +++ b/Acr.XamForms.Settings.Droid/DroidSettingsService.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Acr.XamForms.Settings.Droid; +using Android.Content; +using Android.Preferences; +using Xamarin.Forms; + + +[assembly: Dependency(typeof(DroidSettingsService))] + + +namespace Acr.XamForms.Settings.Droid { + + public class DroidSettingsService : AbstractSettingsService { + private ISharedPreferences prefs; + + + protected override IDictionary GetNativeSettings() { + this.prefs = PreferenceManager.GetDefaultSharedPreferences(Forms.Context.ApplicationContext); + return this.prefs.All.ToDictionary(y => y.Key, y => y.Value.ToString()); + } + + + protected override void SaveSetting(string key, string value) { + using (var editor = this.prefs.Edit()) { + editor.PutString(key, value); + editor.Commit(); + } + } + + + protected override void RemoveSetting(string key) { + using (var editor = this.prefs.Edit()) { + editor.Remove(key); + editor.Commit(); + } + } + + + protected override void ClearSettings() { + using (var editor = this.prefs.Edit()) { + editor.Clear(); + editor.Commit(); + } + } + } +} diff --git a/Acr.XamForms.Settings.Droid/Properties/AssemblyInfo.cs b/Acr.XamForms.Settings.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a9f363b --- /dev/null +++ b/Acr.XamForms.Settings.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Settings.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Settings.Droid/Resources/Resource.Designer.cs b/Acr.XamForms.Settings.Droid/Resources/Resource.Designer.cs new file mode 100644 index 0000000..f2e09d0 --- /dev/null +++ b/Acr.XamForms.Settings.Droid/Resources/Resource.Designer.cs @@ -0,0 +1,60 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Acr.XamForms.Settings.Droid.Resource", IsApplication=false)] + +namespace Acr.XamForms.Settings.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f020001 + public static int ApplicationName = 2130837505; + + // aapt resource value: 0x7f020000 + public static int Hello = 2130837504; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Acr.XamForms.Settings.Droid/Resources/Values/Strings.xml b/Acr.XamForms.Settings.Droid/Resources/Values/Strings.xml new file mode 100644 index 0000000..8fd1763 --- /dev/null +++ b/Acr.XamForms.Settings.Droid/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + $projectname$ + diff --git a/Acr.XamForms.Settings.Droid/packages.config b/Acr.XamForms.Settings.Droid/packages.config new file mode 100644 index 0000000..be6f8ef --- /dev/null +++ b/Acr.XamForms.Settings.Droid/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings.WindowsPhone/Acr.XamForms.Settings.WindowsPhone.csproj b/Acr.XamForms.Settings.WindowsPhone/Acr.XamForms.Settings.WindowsPhone.csproj new file mode 100644 index 0000000..5e48451 --- /dev/null +++ b/Acr.XamForms.Settings.WindowsPhone/Acr.XamForms.Settings.WindowsPhone.csproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Acr.XamForms.Settings.WindowsPhone + Acr.XamForms.Settings.WindowsPhone + WindowsPhone + v8.0 + $(TargetFrameworkVersion) + false + true + 11.0 + true + f67290e3 + + + true + full + false + ..\bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + ..\Bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\Bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + {90AB40EB-C012-482C-8C61-FCF2BA56FB60} + Acr.XamForms.Settings + + + + + False + ..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Platform.WP8.dll + True + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings.WindowsPhone/Properties/AssemblyInfo.cs b/Acr.XamForms.Settings.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a5c7635 --- /dev/null +++ b/Acr.XamForms.Settings.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Settings.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Settings.WindowsPhone/WinPhoneSettingsService.cs b/Acr.XamForms.Settings.WindowsPhone/WinPhoneSettingsService.cs new file mode 100644 index 0000000..89385d3 --- /dev/null +++ b/Acr.XamForms.Settings.WindowsPhone/WinPhoneSettingsService.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.IO.IsolatedStorage; +using System.Linq; +using Acr.XamForms.Settings.WindowsPhone; +using Xamarin.Forms; + + +[assembly: Dependency(typeof(WinPhoneSettingsService))] + + +namespace Acr.XamForms.Settings.WindowsPhone { + + public class WinPhoneSettingsService : AbstractSettingsService { + + protected IsolatedStorageSettings Set { + get { return IsolatedStorageSettings.ApplicationSettings; } + } + + + protected override IDictionary GetNativeSettings() { + return this.Set.ToDictionary(x => x.Key, x => x.Value.ToString());; + } + + + protected override void SaveSetting(string key, string value) { + this.Set[key] = value; + this.Set.Save(); + } + + + protected override void RemoveSetting(string key) { + this.Set.Remove(key); + this.Set.Save(); + } + + + protected override void ClearSettings() { + this.Set.Clear(); + this.Set.Save(); + } + } +} diff --git a/Acr.XamForms.Settings.WindowsPhone/packages.config b/Acr.XamForms.Settings.WindowsPhone/packages.config new file mode 100644 index 0000000..2654900 --- /dev/null +++ b/Acr.XamForms.Settings.WindowsPhone/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings.iOS/Acr.XamForms.Settings.iOS.csproj b/Acr.XamForms.Settings.iOS/Acr.XamForms.Settings.iOS.csproj new file mode 100644 index 0000000..3afb7be --- /dev/null +++ b/Acr.XamForms.Settings.iOS/Acr.XamForms.Settings.iOS.csproj @@ -0,0 +1,78 @@ + + + + Debug + AnyCPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Acr.XamForms.Settings.iOS + Resources + Acr.XamForms.Settings.iOS + e83c4eec + + + true + full + false + ..\bin\Debug\MonoTouch\ + DEBUG + prompt + 4 + false + true + iPhone Developer + + + none + true + ..\bin\Release\MonoTouch\ + prompt + 4 + false + iPhone Developer + + + + CommonAssemblyInfo.cs + + + + + + + {90AB40EB-C012-482C-8C61-FCF2BA56FB60} + Acr.XamForms.Settings + + + + + + + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Core.dll + True + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Platform.iOS.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Xaml.dll + True + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings.iOS/Properties/AssemblyInfo.cs b/Acr.XamForms.Settings.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..dd35001 --- /dev/null +++ b/Acr.XamForms.Settings.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Settings.Touch")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Settings.iOS/iOSSettingsService.cs b/Acr.XamForms.Settings.iOS/iOSSettingsService.cs new file mode 100644 index 0000000..e5c59ed --- /dev/null +++ b/Acr.XamForms.Settings.iOS/iOSSettingsService.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Acr.XamForms.Settings.iOS; +using MonoTouch.Foundation; +using Xamarin.Forms; + +[assembly: Dependency(typeof(iOSSettingsService))] + + +namespace Acr.XamForms.Settings.iOS { + + public class iOSSettingsService : AbstractSettingsService { + + protected NSUserDefaults Cfg { + get { return NSUserDefaults.StandardUserDefaults; } + } + + + protected override IDictionary GetNativeSettings() { + return this.Cfg + .AsDictionary() + .ToDictionary(x => x.Key.ToString(), x => x.Value.ToString()); + } + + + protected override void SaveSetting(string key, string value) { + this.Cfg.SetString(value, key); + this.Cfg.Synchronize(); + } + + + protected override void ClearSettings() { + this.Cfg.RemovePersistentDomain(NSBundle.MainBundle.BundleIdentifier); + this.Cfg.Synchronize(); + } + + + protected override void RemoveSetting(string key) { + this.Cfg.RemoveObject(key); + this.Cfg.Synchronize(); + } + } +} diff --git a/Acr.XamForms.Settings.iOS/packages.config b/Acr.XamForms.Settings.iOS/packages.config new file mode 100644 index 0000000..e43bf52 --- /dev/null +++ b/Acr.XamForms.Settings.iOS/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings/AbstractSettingsService.cs b/Acr.XamForms.Settings/AbstractSettingsService.cs new file mode 100644 index 0000000..7ee9434 --- /dev/null +++ b/Acr.XamForms.Settings/AbstractSettingsService.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.Linq; + + +namespace Acr.XamForms.Settings { + + public abstract class AbstractSettingsService : ISettingsService { + + public IDictionary All { get; private set; } + + + protected AbstractSettingsService() { + this.Resync(); + } + + #region Internals + + /// + /// This resynchronizes the settings from the native settings dictionary + /// + /// + /// + public virtual void Resync() { + var settings = this.GetNativeSettings(); + + if (this.All == null) { + var observable = new ObservableDictionary(settings); + observable.CollectionChanged += this.OnCollectionChanged; + this.All = observable; + } + else { + this.All.Clear(); + foreach (var set in settings) + this.All.Add(set); + } + } + + + protected abstract IDictionary GetNativeSettings(); + + protected abstract void SaveSetting(string key, string value); + protected abstract void RemoveSetting(string key); + protected abstract void ClearSettings(); + + + private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { + switch (e.Action) { + case NotifyCollectionChangedAction.Add: + case NotifyCollectionChangedAction.Replace: + var saves = e.NewItems.Cast>(); + foreach (var item in saves) + this.SaveSetting(item.Key, item.Value); + break; + + case NotifyCollectionChangedAction.Remove: + var dels = e.OldItems.Cast>(); + foreach (var item in dels) + this.RemoveSetting(item.Key); + break; + + case NotifyCollectionChangedAction.Reset: + this.ClearSettings(); + break; + } + } + + #endregion + + #region ISettingsService Members + + public virtual string Get(string key, string defaultValue = null) { + return (this.All.ContainsKey(key) + ? this.All[key] + : defaultValue + ); + } + + + public virtual void Set(string key, string value) { + this.All[key] = value; + } + + + public virtual void Remove(string key) { + if (this.All.ContainsKey(key)) + this.All.Remove(key); + } + + + public virtual void Clear() { + this.All.Clear(); + } + + + public virtual bool Contains(string key) { + return this.All.ContainsKey(key); + } + + #endregion + } +} diff --git a/Acr.XamForms.Settings/Acr.XamForms.Settings.csproj b/Acr.XamForms.Settings/Acr.XamForms.Settings.csproj new file mode 100644 index 0000000..cdbaaeb --- /dev/null +++ b/Acr.XamForms.Settings/Acr.XamForms.Settings.csproj @@ -0,0 +1,100 @@ + + + + + Debug + AnyCPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60} + Library + Properties + Acr.XamForms.Settings + Acr.XamForms.Settings + v4.5 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile78 + 10.0 + + + + + 12.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + + + + + + + true + full + false + ..\bin\Debug\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\Portable\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + ..\packages\Newtonsoft.Json.6.0.3\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll + + + + + \ No newline at end of file diff --git a/Acr.XamForms.Settings/ISettingsService.cs b/Acr.XamForms.Settings/ISettingsService.cs new file mode 100644 index 0000000..4dcc568 --- /dev/null +++ b/Acr.XamForms.Settings/ISettingsService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + + +namespace Acr.XamForms.Settings { + + public interface ISettingsService { + + IDictionary All { get; } + + string Get(string key, string defaultValue = null); + void Set(string key, string value); + void Remove(string key); + void Clear(); + void Resync(); + bool Contains(string key); + } +} diff --git a/Acr.XamForms.Settings/ObservableDictionary.cs b/Acr.XamForms.Settings/ObservableDictionary.cs new file mode 100644 index 0000000..4751659 --- /dev/null +++ b/Acr.XamForms.Settings/ObservableDictionary.cs @@ -0,0 +1,255 @@ +//http://blogs.microsoft.co.il/blogs/shimmy/archive/2010/12/26/observabledictionary-lt-tkey-tvalue-gt-c.aspx +using System; +using System.Linq; +using System.ComponentModel; +using System.Collections.Generic; +using System.Collections.Specialized; + +namespace System.Collections.ObjectModel +{ + internal class ObservableDictionary : IDictionary, INotifyCollectionChanged, INotifyPropertyChanged + { + private const string CountString = "Count"; + private const string IndexerName = "Item[]"; + private const string KeysName = "Keys"; + private const string ValuesName = "Values"; + + private IDictionary _Dictionary; + protected IDictionary Dictionary + { + get { return _Dictionary; } + } + + #region Constructors + public ObservableDictionary() + { + _Dictionary = new Dictionary(); + } + public ObservableDictionary(IDictionary dictionary) + { + _Dictionary = new Dictionary(dictionary); + } + public ObservableDictionary(IEqualityComparer comparer) + { + _Dictionary = new Dictionary(comparer); + } + public ObservableDictionary(int capacity) + { + _Dictionary = new Dictionary(capacity); + } + public ObservableDictionary(IDictionary dictionary, IEqualityComparer comparer) + { + _Dictionary = new Dictionary(dictionary, comparer); + } + public ObservableDictionary(int capacity, IEqualityComparer comparer) + { + _Dictionary = new Dictionary(capacity, comparer); + } + #endregion + + #region IDictionary Members + + public void Add(TKey key, TValue value) + { + Insert(key, value, true); + } + + public bool ContainsKey(TKey key) + { + return Dictionary.ContainsKey(key); + } + + public ICollection Keys + { + get { return Dictionary.Keys; } + } + + public bool Remove(TKey key) + { + if (key == null) throw new ArgumentNullException("key"); + + TValue value; + Dictionary.TryGetValue(key, out value); + var removed = Dictionary.Remove(key); + if (removed) + OnCollectionChanged(NotifyCollectionChangedAction.Remove, new KeyValuePair(key, value)); + return removed; + } + + public bool TryGetValue(TKey key, out TValue value) + { + return Dictionary.TryGetValue(key, out value); + } + + public ICollection Values + { + get { return Dictionary.Values; } + } + + public TValue this[TKey key] + { + get + { + return Dictionary[key]; + } + set + { + Insert(key, value, false); + } + } + + #endregion + + #region ICollection> Members + + public void Add(KeyValuePair item) + { + Insert(item.Key, item.Value, true); + } + + public void Clear() + { + if (Dictionary.Count > 0) + { + Dictionary.Clear(); + OnCollectionChanged(); + } + } + + public bool Contains(KeyValuePair item) + { + return Dictionary.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + Dictionary.CopyTo(array, arrayIndex); + } + + public int Count + { + get { return Dictionary.Count; } + } + + public bool IsReadOnly + { + get { return Dictionary.IsReadOnly; } + } + + public bool Remove(KeyValuePair item) + { + return Remove(item.Key); + } + + + #endregion + + #region IEnumerable> Members + + public IEnumerator> GetEnumerator() + { + return Dictionary.GetEnumerator(); + } + + #endregion + + #region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)Dictionary).GetEnumerator(); + } + + #endregion + + #region INotifyCollectionChanged Members + + public event NotifyCollectionChangedEventHandler CollectionChanged; + + #endregion + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + #endregion + + public void AddRange(IDictionary items) + { + if (items == null) throw new ArgumentNullException("items"); + + if (items.Count > 0) + { + if (Dictionary.Count > 0) + { + if (items.Keys.Any((k) => Dictionary.ContainsKey(k))) + throw new ArgumentException("An item with the same key has already been added."); + else + foreach (var item in items) Dictionary.Add(item); + } + else + _Dictionary = new Dictionary(items); + + OnCollectionChanged(NotifyCollectionChangedAction.Add, items.ToArray()); + } + } + + private void Insert(TKey key, TValue value, bool add) + { + if (key == null) throw new ArgumentNullException("key"); + + TValue item; + if (Dictionary.TryGetValue(key, out item)) + { + if (add) throw new ArgumentException("An item with the same key has already been added."); + if (Equals(item, value)) return; + Dictionary[key] = value; + + OnCollectionChanged(NotifyCollectionChangedAction.Replace, new KeyValuePair(key, value), new KeyValuePair(key, item)); + } + else + { + Dictionary[key] = value; + + OnCollectionChanged(NotifyCollectionChangedAction.Add, new KeyValuePair(key, value)); + } + } + + private void OnPropertyChanged() + { + OnPropertyChanged(CountString); + OnPropertyChanged(IndexerName); + OnPropertyChanged(KeysName); + OnPropertyChanged(ValuesName); + } + + protected virtual void OnPropertyChanged(string propertyName) + { + if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + + private void OnCollectionChanged() + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + } + + private void OnCollectionChanged(NotifyCollectionChangedAction action, KeyValuePair changedItem) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, changedItem)); + } + + private void OnCollectionChanged(NotifyCollectionChangedAction action, KeyValuePair newItem, KeyValuePair oldItem) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItem, oldItem)); + } + + private void OnCollectionChanged(NotifyCollectionChangedAction action, IList newItems) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItems)); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.Settings/Properties/AssemblyInfo.cs b/Acr.XamForms.Settings/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7f694e5 --- /dev/null +++ b/Acr.XamForms.Settings/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.Settings")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.Settings/SettingsServiceExtensions.cs b/Acr.XamForms.Settings/SettingsServiceExtensions.cs new file mode 100644 index 0000000..d2b83f6 --- /dev/null +++ b/Acr.XamForms.Settings/SettingsServiceExtensions.cs @@ -0,0 +1,89 @@ +using System; +using Newtonsoft.Json; + + +namespace Acr.XamForms.Settings { + + public static class SettingsServiceExtensions { + + public static void SetObject(this ISettingsService settings, string key, object obj) { + var value = JsonConvert.SerializeObject(obj); + settings.Set(key, value); + } + + + public static T GetObject(this ISettingsService settings, string key) where T : class { + var value = settings.Get(key); + if (String.IsNullOrWhiteSpace(value)) + return null; + + return JsonConvert.DeserializeObject(value); + } + + + public static void SetIfNotSet(this ISettingsService settings, string key, object obj) { + if (!settings.Contains(key)) + settings.Set(key, JsonConvert.SerializeObject(obj)); + } + + + public static void SetIfNotSet(this ISettingsService settings, string key, string value) { + if (settings.Contains(key)) + settings.Set(key, value); + } + + + public static int GetInt(this ISettingsService settings, string key, int defaultValue = 0) { + var value = settings.Get(key); + var r = defaultValue; + if (!Int32.TryParse(value, out r)) + return defaultValue; + + return r; + } + + + public static long GetLong(this ISettingsService settings, string key, long defaultValue = 0) { + return Int64.Parse(settings.Get(key, defaultValue.ToString())); + } + + + public static void SetDateTime(this ISettingsService settings, string key, DateTime dateTime) { + settings.Set(key, dateTime.ToString()); + } + + + public static DateTime? GetDateTime(this ISettingsService settings, string key, DateTime? defaultValue = null) { + var s = settings.Get(key); + if (s == null) + return defaultValue; + + return DateTime.Parse(s); + } + + + public static void SetDateTimeOffset(this ISettingsService settings, string key, DateTimeOffset dateTime) { + settings.Set(key, dateTime.ToString()); + } + + + public static DateTimeOffset? GetDateTimeOffset(this ISettingsService settings, string key, DateTimeOffset? defaultValue = null) { + var s = settings.Get(key); + if (s == null) + return defaultValue; + + return DateTimeOffset.Parse(s); + } + + + public static void SetTimeSpan(this ISettingsService settings, string key, TimeSpan ts) { + settings.Set(key, ts.Ticks.ToString()); + } + + + public static TimeSpan GetTimeSpan(this ISettingsService settings, string key) { + var num = settings.GetLong(key, 0); + return TimeSpan.FromTicks(num); + } + } +} diff --git a/Acr.XamForms.Settings/packages.config b/Acr.XamForms.Settings/packages.config new file mode 100644 index 0000000..e8c5e26 --- /dev/null +++ b/Acr.XamForms.Settings/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Droid/Acr.XamForms.UserDialogs.Droid.csproj b/Acr.XamForms.UserDialogs.Droid/Acr.XamForms.UserDialogs.Droid.csproj new file mode 100644 index 0000000..d4baa18 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/Acr.XamForms.UserDialogs.Droid.csproj @@ -0,0 +1,113 @@ + + + + Debug + AnyCPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.XamForms.UserDialogs.Droid + Acr.XamForms.UserDialogs.Droid + 512 + Resources\Resource.Designer.cs + Off + + + v2.3 + a71dc4d3 + + + true + full + false + ..\bin\Debug\MonoAndroid\ + DEBUG;TRACE + prompt + 4 + None + + + pdbonly + true + ..\bin\Release\MonoAndroid\ + TRACE + prompt + 4 + false + + + + ..\Components\AndHUD-1.3.1\lib\android\AndHUD.dll + + + + + + + + False + ..\packages\Xamarin.Android.Support.v4.19.0.2\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll + True + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1} + Acr.XamForms.UserDialogs + + + + + 1.3.1 + False + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Droid/Droid.cs b/Acr.XamForms.UserDialogs.Droid/Droid.cs new file mode 100644 index 0000000..f13904f --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/Droid.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading; +using Android.App; + + +namespace Acr.XamForms.UserDialogs.Droid { + + public static class Droid { + + public static void RequestMainThread(Action action) { + if (Application.SynchronizationContext == SynchronizationContext.Current) + action(); + else + Application.SynchronizationContext.Post(x => MaskException(action), null); + } + + + public static void MaskException(Action action) { + try { + action(); + } + catch { } + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Droid/DroidProgressDialog.cs b/Acr.XamForms.UserDialogs.Droid/DroidProgressDialog.cs new file mode 100644 index 0000000..b700056 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/DroidProgressDialog.cs @@ -0,0 +1,122 @@ +using System; +using AndroidHUD; +using Xamarin.Forms; + + +namespace Acr.XamForms.UserDialogs.Droid { + + public class DroidProgressDialog : IProgressDialog { + + #region IProgressDialog Members + + private string title; + public virtual string Title { + get { return this.title; } + set { + if (this.title == value) + return; + + this.title = value; + this.Refresh(); + } + } + + + private int percentComplete; + public virtual int PercentComplete { + get { return this.percentComplete; } + set { + if (this.percentComplete == value) + return; + + if (value > 100) { + this.percentComplete = 100; + } + else if (value < 0) { + this.percentComplete = 0; + } + else { + this.percentComplete = value; + } + this.Refresh(); + } + } + + + public virtual bool IsDeterministic { get; set; } + public virtual bool IsShowing { get; private set; } + + + private Action cancelAction; + private string cancelText; + public virtual void SetCancel(Action onCancel, string cancel) { + this.cancelAction = onCancel; + this.cancelText = cancel; + } + + + public virtual void Show() { + if (this.IsShowing) + return; + + this.IsShowing = true; + this.Refresh(); + } + + + public virtual void Hide() { + this.IsShowing = false; + Droid.RequestMainThread(() => AndHUD.Shared.Dismiss(Forms.Context)); + } + + #endregion + + #region IDisposable Members + + public virtual void Dispose() { + this.Hide(); + } + + #endregion + + #region Internals + + protected virtual void Refresh() { + if (!this.IsShowing) + return; + + var p = -1; + var txt = this.Title; + if (this.IsDeterministic) { + p = this.PercentComplete; + if (!String.IsNullOrWhiteSpace(txt)) + txt += "\n"; + + txt += p + "%\n"; + } + + if (this.cancelAction != null) + txt += "\n" + this.cancelText; + + Droid.RequestMainThread(() => AndHUD.Shared.Show( + Forms.Context, + txt, + p, + MaskType.Black, + null, + this.OnCancelClick + )); + } + + + private void OnCancelClick() { + if (this.cancelAction == null) + return; + + this.Hide(); + this.cancelAction(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Droid/DroidUserDialogService.cs b/Acr.XamForms.UserDialogs.Droid/DroidUserDialogService.cs new file mode 100644 index 0000000..cfb6017 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/DroidUserDialogService.cs @@ -0,0 +1,109 @@ +using System; +using System.Linq; +using Acr.XamForms.UserDialogs.Droid; +using Android.App; +using Android.Widget; +using AndroidHUD; +using Xamarin.Forms; + + +[assembly: Dependency(typeof(DroidUserDialogService))] + + +namespace Acr.XamForms.UserDialogs.Droid { + + public class DroidUserDialogService : AbstractUserDialogService { + + public override void Alert(string message, string title, string okText, Action onOk) { + Droid.RequestMainThread(() => + new AlertDialog + .Builder(Forms.Context) + .SetMessage(message) + .SetTitle(title) + .SetPositiveButton(okText, (o, e) => { + if (onOk != null) + onOk(); + }) + .Show() + ); + } + + + public override void ActionSheet(ActionSheetOptions options) { + var array = options + .Options + .Select(x => x.Text) + .ToArray(); + + Droid.RequestMainThread(() => + new AlertDialog + .Builder(Forms.Context) + .SetTitle(options.Title) + .SetItems(array, (sender, args) => options.Options[args.Which].Action()) + .Show() + ); + } + + + public override void Confirm(string message, Action onConfirm, string title, string okText, string cancelText) { + Droid.RequestMainThread(() => + new AlertDialog + .Builder(Forms.Context) + .SetMessage(message) + .SetTitle(title) + .SetPositiveButton(okText, (o, e) => onConfirm(true)) + .SetNegativeButton(cancelText, (o, e) => onConfirm(false)) + .Show() + ); + } + + + public override void Prompt(string message, Action promptResult, string title, string okText, string cancelText, string hint) { + Droid.RequestMainThread(() => { + var txt = new EditText(Forms.Context) { + Hint = hint + }; + + new AlertDialog + .Builder(Forms.Context) + .SetMessage(message) + .SetTitle(title) + .SetView(txt) + .SetPositiveButton(okText, (o, e) => + promptResult(new PromptResult { + Ok = true, + Text = txt.Text + }) + ) + .SetNegativeButton(cancelText, (o, e) => + promptResult(new PromptResult { + Ok = false, + Text = txt.Text + }) + ) + .Show(); + }); + } + + + public override void Toast(string message, int timeoutSeconds, Action onClick) { + Droid.RequestMainThread(() => { + onClick = onClick ?? (() => {}); + + AndHUD.Shared.ShowToast( + Forms.Context, + message, + MaskType.Clear, + TimeSpan.FromSeconds(timeoutSeconds), + false, + onClick + ); + }); + } + + + protected override DroidProgressDialog CreateProgressDialogInstance() { + return new DroidProgressDialog(); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Droid/Properties/AssemblyInfo.cs b/Acr.XamForms.UserDialogs.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ffee5e4 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.UserDialogs.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Droid/Resources/Resource.Designer.cs b/Acr.XamForms.UserDialogs.Droid/Resources/Resource.Designer.cs new file mode 100644 index 0000000..10194df --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/Resources/Resource.Designer.cs @@ -0,0 +1,234 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Acr.XamForms.UserDialogs.Droid.Resource", IsApplication=false)] + +namespace Acr.XamForms.UserDialogs.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public partial class Attribute + { + + // aapt resource value: 0x7f010003 + public static int ahBarColor = 2130771971; + + // aapt resource value: 0x7f01000b + public static int ahBarLength = 2130771979; + + // aapt resource value: 0x7f01000a + public static int ahBarWidth = 2130771978; + + // aapt resource value: 0x7f010008 + public static int ahCircleColor = 2130771976; + + // aapt resource value: 0x7f010007 + public static int ahDelayMillis = 2130771975; + + // aapt resource value: 0x7f010009 + public static int ahRadius = 2130771977; + + // aapt resource value: 0x7f010004 + public static int ahRimColor = 2130771972; + + // aapt resource value: 0x7f010005 + public static int ahRimWidth = 2130771973; + + // aapt resource value: 0x7f010006 + public static int ahSpinSpeed = 2130771974; + + // aapt resource value: 0x7f010000 + public static int ahText = 2130771968; + + // aapt resource value: 0x7f010001 + public static int ahTextColor = 2130771969; + + // aapt resource value: 0x7f010002 + public static int ahTextSize = 2130771970; + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public static int ic_errorstatus = 2130837504; + + // aapt resource value: 0x7f020001 + public static int ic_successstatus = 2130837505; + + // aapt resource value: 0x7f020002 + public static int roundedbg = 2130837506; + + // aapt resource value: 0x7f020003 + public static int roundedbgdark = 2130837507; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f050002 + public static int loadingImage = 2131034114; + + // aapt resource value: 0x7f050000 + public static int loadingProgressBar = 2131034112; + + // aapt resource value: 0x7f050003 + public static int loadingProgressWheel = 2131034115; + + // aapt resource value: 0x7f050001 + public static int textViewStatus = 2131034113; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public static int loading = 2130903040; + + // aapt resource value: 0x7f030001 + public static int loadingimage = 2130903041; + + // aapt resource value: 0x7f030002 + public static int loadingprogress = 2130903042; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040002 + public static int ApplicationName = 2130968578; + + // aapt resource value: 0x7f040001 + public static int Hello = 2130968577; + + // aapt resource value: 0x7f040000 + public static int library_name = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + + public partial class Styleable + { + + public static int[] ProgressWheel = new int[] { + 2130771968, + 2130771969, + 2130771970, + 2130771971, + 2130771972, + 2130771973, + 2130771974, + 2130771975, + 2130771976, + 2130771977, + 2130771978, + 2130771979}; + + // aapt resource value: 3 + public static int ProgressWheel_ahBarColor = 3; + + // aapt resource value: 11 + public static int ProgressWheel_ahBarLength = 11; + + // aapt resource value: 10 + public static int ProgressWheel_ahBarWidth = 10; + + // aapt resource value: 8 + public static int ProgressWheel_ahCircleColor = 8; + + // aapt resource value: 7 + public static int ProgressWheel_ahDelayMillis = 7; + + // aapt resource value: 9 + public static int ProgressWheel_ahRadius = 9; + + // aapt resource value: 4 + public static int ProgressWheel_ahRimColor = 4; + + // aapt resource value: 5 + public static int ProgressWheel_ahRimWidth = 5; + + // aapt resource value: 6 + public static int ProgressWheel_ahSpinSpeed = 6; + + // aapt resource value: 0 + public static int ProgressWheel_ahText = 0; + + // aapt resource value: 1 + public static int ProgressWheel_ahTextColor = 1; + + // aapt resource value: 2 + public static int ProgressWheel_ahTextSize = 2; + + static Styleable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Styleable() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Acr.XamForms.UserDialogs.Droid/Resources/Values/Strings.xml b/Acr.XamForms.UserDialogs.Droid/Resources/Values/Strings.xml new file mode 100644 index 0000000..8fd1763 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + $projectname$ + diff --git a/Acr.XamForms.UserDialogs.Droid/packages.config b/Acr.XamForms.UserDialogs.Droid/packages.config new file mode 100644 index 0000000..02d6fad --- /dev/null +++ b/Acr.XamForms.UserDialogs.Droid/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Shared/AbstractUserDialogService.cs b/Acr.XamForms.UserDialogs.Shared/AbstractUserDialogService.cs new file mode 100644 index 0000000..153b855 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Shared/AbstractUserDialogService.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + + +namespace Acr.XamForms.UserDialogs { + + public abstract class AbstractUserDialogService : IUserDialogService { + + public abstract void ActionSheet(ActionSheetOptions options); + public abstract void Alert(string message, string title, string okText, Action onOk); + public abstract void Confirm(string message, Action onConfirm, string title, string okText, string cancelText); + public abstract void Prompt(string message, Action promptResult, string title, string okText, string cancelText, string hint); + public abstract void Toast(string message, int timeoutSeconds, Action onClick); + + public abstract IProgressDialog Progress(string title, Action onCancel, string cancelText, bool show); + public abstract IProgressDialog Loading(string title, Action onCancel, string cancelText, bool show); + + + private IProgressDialog loading; + public virtual void ShowLoading(string title) { + if (this.loading == null) { + this.Loading(title, null, null, true); + } + } + + + public virtual void HideLoading() { + if (this.loading != null) { + this.loading.Dispose(); + this.loading = null; + } + } + + + public void ActionSheet(string title, params ActionSheetOption[] options) { + this.ActionSheet(new ActionSheetOptions { + Title = title, + Options = options.ToList() + }); + } + + + public void ActionSheet(Action config) { + var options = new ActionSheetOptions { + Options = new List() + }; + config(options); + this.ActionSheet(options); + } + + + public Task AlertAsync(string message, string title, string okText) { + var tcs = new TaskCompletionSource(); + this.Alert(message, title, okText, () => tcs.SetResult(null)); + return tcs.Task; + } + + + public Task ConfirmAsync(string message, string title, string okText, string cancelText) { + var tcs = new TaskCompletionSource(); + this.Confirm(message, tcs.SetResult, title, okText, cancelText); + return tcs.Task; + } + + + public Task PromptAsync(string message, string title, string okText, string cancelText, string hint) { + var tcs = new TaskCompletionSource(); + this.Prompt(message, tcs.SetResult, title, okText, cancelText, hint); + return tcs.Task; + } + } + + + public abstract class AbstractUserDialogService : AbstractUserDialogService where T : IProgressDialog { + + protected abstract T CreateProgressDialogInstance(); + + + protected virtual T CreateProgressDialog(string title, bool isdeterministic, Action onCancel, string cancelText, bool show) { + var dlg = this.CreateProgressDialogInstance(); + dlg.Title = title; + dlg.IsDeterministic = isdeterministic; + + if (onCancel != null) + dlg.SetCancel(onCancel, cancelText); + + if (show) + dlg.Show(); + + return dlg; + } + + + public override IProgressDialog Progress(string title, Action onCancel, string cancelText, bool show) { + return this.CreateProgressDialog(title, true, onCancel, cancelText, show); + } + + + public override IProgressDialog Loading(string title, Action onCancel, string cancelText, bool show) { + return this.CreateProgressDialog(title, false, onCancel, cancelText, show); + } + } +} diff --git a/Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.projitems b/Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.projitems new file mode 100644 index 0000000..4353813 --- /dev/null +++ b/Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + f462f2e4-09fa-4d5b-8be8-3d24b3b5bd86 + + + Acr.XamForms.UserDialogs.Shared + + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.shproj b/Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.shproj new file mode 100644 index 0000000..7e8366a --- /dev/null +++ b/Acr.XamForms.UserDialogs.Shared/Acr.XamForms.UserDialogs.Shared.shproj @@ -0,0 +1,12 @@ + + + + f462f2e4-09fa-4d5b-8be8-3d24b3b5bd86 + + + + + + + + diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/Acr.XamForms.UserDialogs.WindowsPhone.csproj b/Acr.XamForms.UserDialogs.WindowsPhone/Acr.XamForms.UserDialogs.WindowsPhone.csproj new file mode 100644 index 0000000..bff37af --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/Acr.XamForms.UserDialogs.WindowsPhone.csproj @@ -0,0 +1,142 @@ + + + + Debug + AnyCPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Acr.XamForms.UserDialogs.WindowsPhone + Acr.XamForms.UserDialogs.WindowsPhone + WindowsPhone + v8.0 + $(TargetFrameworkVersion) + false + true + 11.0 + true + 204c2290 + + + true + full + false + ..\bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + ..\Bin\Debug\WinPhone\ + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + ..\Bin\Release\WinPhone\ + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + ..\packages\Coding4Fun.Toolkit.Controls.2.0.7\lib\windowsphone8\Coding4Fun.Toolkit.Controls.dll + + + ..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll + True + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Platform.WP8.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\WP80\Xamarin.Forms.Xaml.dll + + + + + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1} + Acr.XamForms.UserDialogs + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/ActionSheetPopUp.cs b/Acr.XamForms.UserDialogs.WindowsPhone/ActionSheetPopUp.cs new file mode 100644 index 0000000..ff0f147 --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/ActionSheetPopUp.cs @@ -0,0 +1,39 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using Coding4Fun.Toolkit.Controls; + + +namespace Acr.XamForms.UserDialogs.WindowsPhone { + + public class ActionSheetPopUp : MessagePrompt { + + public override void OnApplyTemplate() { + base.OnApplyTemplate(); + + this.ActionButtonArea.Children.Clear(); + + var stackPanel = new StackPanel { + Orientation = Orientation.Vertical, + Margin = new Thickness() + }; + this.ActionPopUpButtons.ForEach(stackPanel.Children.Add); + this.ActionButtonArea.Children.Add(stackPanel); + } + + + public void AddButton(string text, Action action) { + var btn = new Button { + Content = text, + HorizontalAlignment = HorizontalAlignment.Stretch, + HorizontalContentAlignment = HorizontalAlignment.Stretch + }; + btn.Click += (sender, args) => { + this.Hide(); + if (action != null) + action(); + }; + this.ActionPopUpButtons.Add(btn); + } + } +} diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/ProgressPopUp.cs b/Acr.XamForms.UserDialogs.WindowsPhone/ProgressPopUp.cs new file mode 100644 index 0000000..8eb8fad --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/ProgressPopUp.cs @@ -0,0 +1,76 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using Coding4Fun.Toolkit.Controls; + + +namespace Acr.XamForms.UserDialogs.WindowsPhone { + + public class ProgressPopUp : MessagePrompt { + + private readonly TextBlock percentText = new TextBlock { + HorizontalAlignment = HorizontalAlignment.Center + }; + private readonly Button cancelButton = new Button { + Visibility = Visibility.Collapsed, + HorizontalAlignment = HorizontalAlignment.Center + }; + private readonly ProgressBar progressBar = new ProgressBar { + HorizontalAlignment = HorizontalAlignment.Stretch + }; + + + public bool IsIndeterminate { + get { return this.progressBar.IsIndeterminate; } + set { + this.progressBar.IsIndeterminate = value; + this.percentText.Visibility = (value + ? Visibility.Collapsed + : Visibility.Visible + ); + } + } + + + public string LoadingText { + get { return this.Title; } + set { this.Title = value; } + } + + + public string CompletionText { + get { return this.percentText.Text; } + set { this.percentText.Text = value; } + } + + + public int PercentComplete { + get { return Convert.ToInt32(this.progressBar.Value); } + set { this.progressBar.Value = value; } + } + + + public void SetCancel(Action action, string cancelText) { + this.cancelButton.Click += (sender, args) => action(); + this.cancelButton.Content = cancelText; + this.cancelButton.Visibility = Visibility.Visible; + } + + + public override void OnApplyTemplate() { + base.OnApplyTemplate(); + this.ActionButtonArea.Children.Clear(); + + var stackPanel = new StackPanel { + Orientation = Orientation.Vertical, + Margin = new Thickness(), + HorizontalAlignment = HorizontalAlignment.Stretch + }; + stackPanel.Children.Add(this.progressBar); + stackPanel.Children.Add(this.percentText); + stackPanel.Children.Add(this.cancelButton); + + this.ActionButtonArea.Children.Add(stackPanel); + } + } +} diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/Properties/AssemblyInfo.cs b/Acr.XamForms.UserDialogs.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..50cecac --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.UserDialogs.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneProgressDialog.cs b/Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneProgressDialog.cs new file mode 100644 index 0000000..a2a78fb --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneProgressDialog.cs @@ -0,0 +1,105 @@ +using System; +using System.Windows; + + +namespace Acr.XamForms.UserDialogs.WindowsPhone { + + public class WinPhoneProgressDialog : IProgressDialog { + private readonly ProgressPopUp progress = new ProgressPopUp(); + + #region IProgressDialog Members + + private string text; + public string Title { + get { return this.text; } + set { + if (this.text == value) + return; + + this.text = value; + this.Refresh(); + } + } + + + private int percentComplete; + public int PercentComplete { + get { return this.percentComplete; } + set { + if (this.percentComplete == value) + return; + + if (value > 100) { + this.percentComplete = 100; + } + else if (value < 0) { + this.percentComplete = 0; + } + else { + this.percentComplete = value; + } + this.percentComplete = value; + this.Refresh(); + } + } + + + public bool IsDeterministic { + get { return !this.progress.IsIndeterminate; } + set { this.progress.IsIndeterminate = !value; } + } + + + public bool IsShowing { get; private set; } + + + public void SetCancel(Action onCancel, string cancelText) { + this.progress.SetCancel(onCancel, cancelText); + } + + + public void Show() { + if (this.IsShowing) + return; + + this.IsShowing = true; + this.Dispatch(this.progress.Show); + } + + + public void Hide() { + if (!this.IsShowing) + return; + + this.IsShowing = false; + this.Dispatch(this.progress.Hide); + } + + + protected void Dispatch(Action action) { + Deployment.Current.Dispatcher.BeginInvoke(action); + } + + + private void Refresh() { + this.Dispatch(() => { + this.progress.LoadingText = this.text; + if (this.IsDeterministic) { + this.progress.PercentComplete = this.percentComplete; + this.progress.CompletionText = this.percentComplete + "%"; + } + }); + } + + + #endregion + + #region IDisposable Members + + public void Dispose() { + this.Hide(); + } + + #endregion + } +} diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneUserDialogService.cs b/Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneUserDialogService.cs new file mode 100644 index 0000000..2ad2a89 --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/WinPhoneUserDialogService.cs @@ -0,0 +1,142 @@ +using System; +using System.Linq; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using Acr.XamForms.UserDialogs.WindowsPhone; +using Coding4Fun.Toolkit.Controls; +using Xamarin.Forms; +using Button = System.Windows.Controls.Button; + + +[assembly: Dependency(typeof(WinPhoneUserDialogService))] + +namespace Acr.XamForms.UserDialogs.WindowsPhone { + + public class WinPhoneUserDialogService : AbstractUserDialogService { + + public override void ActionSheet(ActionSheetOptions options) { + this.Dispatch(() => { + var alert = new ActionSheetPopUp { Title = options.Title }; + alert.ActionPopUpButtons.Clear(); + options.Options.ToList().ForEach(x => alert.AddButton(x.Text, x.Action)); + alert.Show(); + }); + } + + + public override void Alert(string message, string title, string okText, Action onOk) { + this.Dispatch(() => { + var alert = new MessagePrompt { + Title = title, + Message = message + }; + var btn = new Button { Content = okText }; + btn.Click += (sender, args) => alert.Hide(); + + if (onOk != null) { + alert.Completed += (sender, args) => onOk(); + } + alert.ActionPopUpButtons.Clear(); + alert.ActionPopUpButtons.Add(btn); + alert.Show(); + }); + } + + + public override void Confirm(string message, Action onConfirm, string title, string okText, string cancelText) { + this.Dispatch(() => { + var alert = new MessagePrompt { + Title = title, + Message = message + }; + var btnYes = new Button { Content = okText }; + btnYes.Click += (sender, args) => { + alert.Hide(); + onConfirm(true); + }; + + var btnNo = new Button { Content = cancelText }; + btnNo.Click += (sender, args) => { + alert.Hide(); + onConfirm(false); + }; + + alert.ActionPopUpButtons.Clear(); + alert.ActionPopUpButtons.Add(btnYes); + alert.ActionPopUpButtons.Add(btnNo); + alert.Show(); + }); + } + + + public override void Prompt(string message, Action promptResult, string title, string okText, string cancelText, string hint) { + this.Dispatch(() => { + var yes = false; + + var input = new InputPrompt { + Title = title, + Message = message, + IsCancelVisible = true, + }; + input.ActionPopUpButtons.Clear(); + + var btnYes = new Button { Content = okText }; + btnYes.Click += (sender, args) => { + yes = true; + input.Hide(); + }; + + var btnNo = new Button { Content = cancelText }; + btnNo.Click += (sender, args) => input.Hide(); + + input.ActionPopUpButtons.Clear(); + input.ActionPopUpButtons.Add(btnYes); + input.ActionPopUpButtons.Add(btnNo); + + input.Completed += (sender, args) => promptResult(new PromptResult { + Ok = yes, + Text = input.Value + }); + input.Show(); + }); + } + + + public override void Toast(string message, int timeoutSeconds, Action onClick) { + this.Dispatch(() => { + var toast = new ToastPrompt { + Message = message, + MillisecondsUntilHidden = timeoutSeconds * 1000 + }; + if (onClick != null) { + toast.Tap += (sender, args) => onClick(); + } + toast.Show(); + }); + } + + + protected virtual void Dispatch(Action action) { + Deployment.Current.Dispatcher.BeginInvoke(action); + } + + + protected override WinPhoneProgressDialog CreateProgressDialogInstance() { + return new WinPhoneProgressDialog(); + } + + + protected virtual Popup CreatePopup(UserControl control) { + var size = Application.Current.RootVisual.RenderSize; + + return new Popup { + VerticalOffset = (size.Width - control.ActualWidth) / 2, + HorizontalOffset = (size.Height - control.ActualHeight) / 2, + Width = size.Width, + Height = size.Height, + Child = control + }; + } + } +} diff --git a/Acr.XamForms.UserDialogs.WindowsPhone/packages.config b/Acr.XamForms.UserDialogs.WindowsPhone/packages.config new file mode 100644 index 0000000..9396818 --- /dev/null +++ b/Acr.XamForms.UserDialogs.WindowsPhone/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.iOS/Acr.XamForms.UserDialogs.iOS.csproj b/Acr.XamForms.UserDialogs.iOS/Acr.XamForms.UserDialogs.iOS.csproj new file mode 100644 index 0000000..d5e3d0c --- /dev/null +++ b/Acr.XamForms.UserDialogs.iOS/Acr.XamForms.UserDialogs.iOS.csproj @@ -0,0 +1,87 @@ + + + + Debug + AnyCPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Acr.XamForms.UserDialogs.iOS + Resources + Acr.XamForms.UserDialogs.iOS + 3d1244c4 + + + true + full + false + ..\bin\Debug\MonoTouch\ + DEBUG + prompt + 4 + false + true + iPhone Developer + + + none + true + ..\bin\Release\MonoTouch\ + prompt + 4 + false + iPhone Developer + + + + CommonAssemblyInfo.cs + + + + + + + + ..\Components\btprogresshud-1.9\lib\ios\BTProgressHUD.dll + + + + + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Core.dll + + + False + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Platform.iOS.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\MonoTouch10\Xamarin.Forms.Xaml.dll + + + + + {fb69b463-0dd5-49d2-afed-6e3a31eb37a1} + Acr.XamForms.UserDialogs + + + + + False + 1.10 + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.iOS/Properties/AssemblyInfo.cs b/Acr.XamForms.UserDialogs.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0f4ed70 --- /dev/null +++ b/Acr.XamForms.UserDialogs.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.UserDialogs.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.UserDialogs.iOS/iOSProgressDialog.cs b/Acr.XamForms.UserDialogs.iOS/iOSProgressDialog.cs new file mode 100644 index 0000000..41a05d2 --- /dev/null +++ b/Acr.XamForms.UserDialogs.iOS/iOSProgressDialog.cs @@ -0,0 +1,116 @@ +using System; +using BigTed; + + +namespace Acr.XamForms.UserDialogs.iOS { + + public class iOSProgressDialog : IProgressDialog { + + #region IProgressDialog Members + + private string title; + public virtual string Title { + get { return this.title; } + set { + if (this.title == value) + return; + + this.title = value; + this.Refresh(); + } + } + + + private int percentComplete; + public virtual int PercentComplete { + get { return this.percentComplete; } + set { + if (this.percentComplete == value) + return; + + if (value > 100) { + this.percentComplete = 100; + } + else if (value < 0) { + this.percentComplete = 0; + } + else { + this.percentComplete = value; + } + + this.Refresh(); + } + } + + + public virtual bool IsDeterministic { get; set; } + public virtual bool IsShowing { get; private set; } + + + private string cancelText; + private Action cancelAction; + public virtual void SetCancel(Action onCancel, string cancel) { + this.cancelAction = onCancel; + this.cancelText = cancel; + this.Refresh(); + } + + + public virtual void Show() { + this.IsShowing = true; + this.Refresh(); + } + + + public virtual void Hide() { + this.IsShowing = false; + BTProgressHUD.Dismiss(); + } + + #endregion + + #region IDisposable Members + + public virtual void Dispose() { + this.Hide(); + } + + #endregion + + #region Internals + + protected virtual void Refresh() { + if (!this.IsShowing) + return; + + var txt = this.Title; + float p = -1; + if (this.IsDeterministic) { + p = (float)this.PercentComplete / 100; + if (!String.IsNullOrWhiteSpace(txt)) { + txt += "... "; + } + txt += this.PercentComplete + "%"; + } + + if (this.cancelAction == null) { + BTProgressHUD.Show( + this.Title, + p, + ProgressHUD.MaskType.Black + ); + } + else { + BTProgressHUD.Show( + this.cancelText, + this.cancelAction, + txt, + p, + ProgressHUD.MaskType.Black + ); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.iOS/iOSUserDialogService.cs b/Acr.XamForms.UserDialogs.iOS/iOSUserDialogService.cs new file mode 100644 index 0000000..3a438e0 --- /dev/null +++ b/Acr.XamForms.UserDialogs.iOS/iOSUserDialogService.cs @@ -0,0 +1,92 @@ +using System; +using System.Linq; +using Acr.XamForms.UserDialogs.iOS; +using BigTed; +using MonoTouch.UIKit; +using Xamarin.Forms; + + +[assembly: Dependency(typeof(iOSUserDialogService))] + +namespace Acr.XamForms.UserDialogs.iOS { + + public class iOSUserDialogService : AbstractUserDialogService { + + public override void ActionSheet(ActionSheetOptions options) { + this.Dispatch(() => { + var action = new UIActionSheet(options.Title); + options.Options.ToList().ForEach(x => action.AddButton(x.Text)); + //if (options.Cancel != null) { + // action.AddButton(options.Cancel.Text); + // action.CancelButtonIndex = options.Options.Count + 1; + //} + + action.Clicked += (sender, btn) => options.Options[btn.ButtonIndex].Action(); + var view = UIApplication.SharedApplication.KeyWindow.RootViewController.View; + action.ShowInView(view); + }); + } + + + public override void Alert(string message, string title, string okText, Action onOk) { + this.Dispatch(() => { + var dlg = new UIAlertView(title ?? String.Empty, message, null, null, okText); + if (onOk != null) { + dlg.Clicked += (s, e) => onOk(); + } + dlg.Show(); + }); + } + + + public override void Confirm(string message, Action onConfirm, string title, string okText, string cancelText) { + this.Dispatch(() => { + var dlg = new UIAlertView(title ?? String.Empty, message, null, cancelText, okText); + dlg.Clicked += (s, e) => { + var ok = (dlg.CancelButtonIndex != e.ButtonIndex); + onConfirm(ok); + }; + dlg.Show(); + }); + } + + + public override void Toast(string message, int timeoutSeconds, Action onClick) { + // TODO: no click callback in showtoast at the moment + this.Dispatch(() => { + var ms = timeoutSeconds * 1000; + BTProgressHUD.ShowToast(message, false, ms); + }); + + } + + + public override void Prompt(string message, Action promptResult, string title, string okText, string cancelText, string hint) { + this.Dispatch(() => { + var result = new PromptResult(); + var dlg = new UIAlertView(title ?? String.Empty, message, null, cancelText, okText) { + AlertViewStyle = UIAlertViewStyle.PlainTextInput + }; + var txt = dlg.GetTextField(0); + txt.Placeholder = hint; + + dlg.Clicked += (s, e) => { + result.Ok = (dlg.CancelButtonIndex != e.ButtonIndex); + result.Text = txt.Text; + promptResult(result); + }; + dlg.Show(); + }); + } + + + protected override iOSProgressDialog CreateProgressDialogInstance() { + return new iOSProgressDialog(); + } + + + protected virtual void Dispatch(Action action) { + UIApplication.SharedApplication.InvokeOnMainThread(() => action()); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs.iOS/packages.config b/Acr.XamForms.UserDialogs.iOS/packages.config new file mode 100644 index 0000000..e43bf52 --- /dev/null +++ b/Acr.XamForms.UserDialogs.iOS/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs/Acr.XamForms.UserDialogs.csproj b/Acr.XamForms.UserDialogs/Acr.XamForms.UserDialogs.csproj new file mode 100644 index 0000000..050596d --- /dev/null +++ b/Acr.XamForms.UserDialogs/Acr.XamForms.UserDialogs.csproj @@ -0,0 +1,54 @@ + + + + + 10.0 + Debug + AnyCPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1} + Library + Properties + Acr.XamForms.UserDialogs + Acr.XamForms.UserDialogs + v4.5 + Profile78 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + ..\bin\Debug\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\Portable\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + + + \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs/ActionSheetOption.cs b/Acr.XamForms.UserDialogs/ActionSheetOption.cs new file mode 100644 index 0000000..d277c67 --- /dev/null +++ b/Acr.XamForms.UserDialogs/ActionSheetOption.cs @@ -0,0 +1,16 @@ +using System; + + +namespace Acr.XamForms.UserDialogs { + + public class ActionSheetOption { + + public string Text { get; set; } + public Action Action { get; set; } + + public ActionSheetOption(string text, Action action = null) { + this.Text = text; + this.Action = (action ?? (() => {})); + } + } +} diff --git a/Acr.XamForms.UserDialogs/ActionSheetOptions.cs b/Acr.XamForms.UserDialogs/ActionSheetOptions.cs new file mode 100644 index 0000000..39c5d2b --- /dev/null +++ b/Acr.XamForms.UserDialogs/ActionSheetOptions.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + + +namespace Acr.XamForms.UserDialogs { + + public class ActionSheetOptions { + + public string Title { get; set; } + //public SheetOption Cancel { get; set; } + public IList Options { get; set; } + + + public ActionSheetOptions SetTitle(string title) { + this.Title = title; + return this; + } + + + //public ActionSheetOptions SetCancel(string text = "Cancel", Action action = null) { + // this.Cancel = new SheetOption(text, action); + // return this; + //} + + + public ActionSheetOptions Add(string text, Action action = null) { + this.Options.Add(new ActionSheetOption(text, action)); + return this; + } + } +} diff --git a/Acr.XamForms.UserDialogs/IProgressDialog.cs b/Acr.XamForms.UserDialogs/IProgressDialog.cs new file mode 100644 index 0000000..5f21c9e --- /dev/null +++ b/Acr.XamForms.UserDialogs/IProgressDialog.cs @@ -0,0 +1,17 @@ +using System; + + +namespace Acr.XamForms.UserDialogs { + + public interface IProgressDialog : IDisposable { + + string Title { get; set; } + int PercentComplete { get; set; } + bool IsDeterministic { get; set; } + bool IsShowing { get; } + void SetCancel(Action onCancel, string cancelText = "Cancel"); + + void Show(); + void Hide(); + } +} diff --git a/Acr.XamForms.UserDialogs/IUserDialogService.cs b/Acr.XamForms.UserDialogs/IUserDialogService.cs new file mode 100644 index 0000000..187b0d0 --- /dev/null +++ b/Acr.XamForms.UserDialogs/IUserDialogService.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; + + +namespace Acr.XamForms.UserDialogs { + + public interface IUserDialogService { + + void Alert(string message, string title = null, string okText = "OK", Action onOk = null); + Task AlertAsync(string message, string title = null, string okText = "OK"); + + void ActionSheet(string title = null, params ActionSheetOption[] options); + void ActionSheet(Action config); + void ActionSheet(ActionSheetOptions options); + + void Confirm(string message, Action onConfirm, string title = null, string okText = "OK", string cancelText = "Cancel"); + Task ConfirmAsync(string message, string title = null, string okText = "OK", string cancelText = "Cancel"); + + void Prompt(string message, Action promptResult, string title = null, string okText = "OK", string cancelText = "Cancel", string hint = null); + Task PromptAsync(string message, string title = null, string okText = "OK", string cancelText = "Cancel", string hint = null); + + IProgressDialog Progress(string title = null, Action onCancel = null, string cancelText = "Cancel", bool show = true); + IProgressDialog Loading(string title = "Loading", Action onCancel = null, string cancelText = "Cancel", bool show = true); + + void ShowLoading(string title = "Loading"); + void HideLoading(); + + void Toast(string message, int timeoutSeconds = 3, Action onClick = null); + } +} \ No newline at end of file diff --git a/Acr.XamForms.UserDialogs/PromptResult.cs b/Acr.XamForms.UserDialogs/PromptResult.cs new file mode 100644 index 0000000..8fc89a3 --- /dev/null +++ b/Acr.XamForms.UserDialogs/PromptResult.cs @@ -0,0 +1,11 @@ +using System; + +namespace Acr.XamForms.UserDialogs { + + public class PromptResult { + + public bool Ok { get; set; } + public string Text { get; set;} + } +} + diff --git a/Acr.XamForms.UserDialogs/Properties/AssemblyInfo.cs b/Acr.XamForms.UserDialogs/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..535d3e3 --- /dev/null +++ b/Acr.XamForms.UserDialogs/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms.UserDialogs")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Acr.XamForms.sln b/Acr.XamForms.sln new file mode 100644 index 0000000..a842abf --- /dev/null +++ b/Acr.XamForms.sln @@ -0,0 +1,1223 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.30501.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Common", ".Common", "{E950E9B4-0546-4D84-A7CC-F17474D230CC}" + ProjectSection(SolutionItems) = preProject + CommonAssemblyInfo.cs = CommonAssemblyInfo.cs + license.txt = license.txt + nuspec\nuget.exe = nuspec\nuget.exe + nuspec\pack.cmd = nuspec\pack.cmd + readme.md = readme.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bar Code Scanner", "Bar Code Scanner", "{DD617AB3-E79F-44D8-9ED7-CE7DD06EA51A}" + ProjectSection(SolutionItems) = preProject + nuspec\Acr.XamForms.BarCodeScanner.nuspec = nuspec\Acr.XamForms.BarCodeScanner.nuspec + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "User Dialogs", "User Dialogs", "{402AAF82-296F-4C93-8662-F3BB5185AB91}" + ProjectSection(SolutionItems) = preProject + nuspec\Acr.XamForms.UserDialogs.nuspec = nuspec\Acr.XamForms.UserDialogs.nuspec + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Settings", "Settings", "{F9F600D2-84A0-4195-B06D-B37E9A723130}" + ProjectSection(SolutionItems) = preProject + nuspec\Acr.XamForms.Settings.nuspec = nuspec\Acr.XamForms.Settings.nuspec + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Network", "Network", "{890C6638-BD11-461A-9BBC-BA8C18755709}" + ProjectSection(SolutionItems) = preProject + nuspec\Acr.XamForms.Network.nuspec = nuspec\Acr.XamForms.Network.nuspec + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Device Info", "Device Info", "{14877779-39A8-4F23-AEB3-9780E47B5A04}" + ProjectSection(SolutionItems) = preProject + nuspec\Acr.XamForms.DeviceInfo.nuspec = nuspec\Acr.XamForms.DeviceInfo.nuspec + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Samples", ".Samples", "{21CC8547-CA75-41BF-91AB-319DCE25B7E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms", "Acr.XamForms\Acr.XamForms.csproj", "{85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xamarin Forms", "Xamarin Forms", "{98DD5441-283D-4D48-AFD1-0522524F20C7}" + ProjectSection(SolutionItems) = preProject + nuspec\Acr.XamForms.nuspec = nuspec\Acr.XamForms.nuspec + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples", "Samples\Samples\Samples.csproj", "{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.iOS", "Samples\Samples.iOS\Samples.iOS.csproj", "{2142B859-21E9-484D-880A-26AD708569DB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Android", "Samples\Samples.Android\Samples.Android.csproj", "{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.WinPhone", "Samples\Samples.WinPhone\Samples.WinPhone.csproj", "{5446C4A3-ED4C-48F0-99BD-F2B60F867475}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.BarCodeScanner", "Acr.XamForms.BarCodeScanner\Acr.XamForms.BarCodeScanner.csproj", "{1ED7E825-98ED-4740-8DD7-96E4AA3F1128}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.BarCodeScanner.Droid", "Acr.XamForms.BarCodeScanner.Droid\Acr.XamForms.BarCodeScanner.Droid.csproj", "{0EF6C543-9A82-4A29-A251-4D0A900232DD}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Acr.XamForms.BarCodeScanner.Shared", "Acr.XamForms.BarCodeScanner.Shared\Acr.XamForms.BarCodeScanner.Shared.shproj", "{6646E5EE-5534-4274-B99F-39CA222B23EF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.BarCodeScanner.iOS", "Acr.XamForms.BarCodeScanner.iOS\Acr.XamForms.BarCodeScanner.iOS.csproj", "{F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.UserDialogs", "Acr.XamForms.UserDialogs\Acr.XamForms.UserDialogs.csproj", "{FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Acr.XamForms.UserDialogs.Shared", "Acr.XamForms.UserDialogs.Shared\Acr.XamForms.UserDialogs.Shared.shproj", "{F462F2E4-09FA-4D5B-8BE8-3D24B3B5BD86}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.BarCodeScanner.WindowsPhone", "Acr.XamForms.BarCodeScanner.WindowsPhone\Acr.XamForms.BarCodeScanner.WindowsPhone.csproj", "{DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.UserDialogs.Droid", "Acr.XamForms.UserDialogs.Droid\Acr.XamForms.UserDialogs.Droid.csproj", "{F68A14AB-0965-4582-9399-F22F5C4CEB15}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.UserDialogs.iOS", "Acr.XamForms.UserDialogs.iOS\Acr.XamForms.UserDialogs.iOS.csproj", "{290F8977-F101-4BD8-8A29-19C78B4EBC23}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.UserDialogs.WindowsPhone", "Acr.XamForms.UserDialogs.WindowsPhone\Acr.XamForms.UserDialogs.WindowsPhone.csproj", "{732D3A68-83F1-4CC0-97CB-AB5095998D70}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.DeviceInfo", "Acr.XamForms.DeviceInfo\Acr.XamForms.DeviceInfo.csproj", "{62822DE8-CEB9-4602-B780-84E9E3D11B88}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Acr.XamForms.DeviceInfo.Shared", "Acr.XamForms.DeviceInfo.Shared\Acr.XamForms.DeviceInfo.Shared.shproj", "{CF44552E-32AC-4B09-956A-5BF7355812CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.DeviceInfo.Droid", "Acr.XamForms.DeviceInfo.Droid\Acr.XamForms.DeviceInfo.Droid.csproj", "{D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.DeviceInfo.iOS", "Acr.XamForms.DeviceInfo.iOS\Acr.XamForms.DeviceInfo.iOS.csproj", "{FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.DeviceInfo.WindowsPhone", "Acr.XamForms.DeviceInfo.WindowsPhone\Acr.XamForms.DeviceInfo.WindowsPhone.csproj", "{18AD7705-C9A9-42C0-9265-14A9559E441F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Network", "Acr.XamForms.Network\Acr.XamForms.Network.csproj", "{3B14346E-92D8-425C-AA46-7DFC88CC6F1C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Network.Droid", "Acr.XamForms.Network.Droid\Acr.XamForms.Network.Droid.csproj", "{872C26AC-5559-4E0D-8B8D-DBF39F7F4331}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Network.iOS", "Acr.XamForms.Network.iOS\Acr.XamForms.Network.iOS.csproj", "{E23D6213-060D-4FD3-9F9D-F49F55F4DB68}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Network.WindowsPhone", "Acr.XamForms.Network.WindowsPhone\Acr.XamForms.Network.WindowsPhone.csproj", "{9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Settings", "Acr.XamForms.Settings\Acr.XamForms.Settings.csproj", "{90AB40EB-C012-482C-8C61-FCF2BA56FB60}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Settings.Droid", "Acr.XamForms.Settings.Droid\Acr.XamForms.Settings.Droid.csproj", "{7A000A7C-9C30-46F3-9994-003D4F70BA0F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Settings.iOS", "Acr.XamForms.Settings.iOS\Acr.XamForms.Settings.iOS.csproj", "{0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Settings.WindowsPhone", "Acr.XamForms.Settings.WindowsPhone\Acr.XamForms.Settings.WindowsPhone.csproj", "{248FFFFA-1E77-4E93-A1ED-236C5501C32A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Mobile", "Acr.XamForms.Mobile\Acr.XamForms.Mobile.csproj", "{67F9D3A8-F71E-4428-913F-C37AE82CDB24}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Mobile.WindowsPhone", "Acr.XamForms.Mobile.WindowsPhone\Acr.XamForms.Mobile.WindowsPhone.csproj", "{D7098843-29D9-4AA9-9B11-C2D938E1AE89}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Mobile.iOS", "Acr.XamForms.Mobile.iOS\Acr.XamForms.Mobile.iOS.csproj", "{A2908B9C-D5D0-4715-851D-3EB81AB2E452}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acr.XamForms.Mobile.Droid", "Acr.XamForms.Mobile.Droid\Acr.XamForms.Mobile.Droid.csproj", "{07658008-EB02-4C74-B798-0B8ED2BECA6D}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Acr.XamForms.Mobile.Shared", "Acr.XamForms.Mobile.Shared\Acr.XamForms.Mobile.Shared.shproj", "{1C973CC4-86F0-4798-B128-55FAE3AAD9E5}" +EndProject +Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + Acr.XamForms.DeviceInfo.Shared\Acr.XamForms.DeviceInfo.Shared.projitems*{cf44552e-32ac-4b09-956a-5bf7355812cc}*SharedItemsImports = 13 + Acr.XamForms.DeviceInfo.Shared\Acr.XamForms.DeviceInfo.Shared.projitems*{d4b35565-a9b3-4b4b-aa68-cce7d5a67f78}*SharedItemsImports = 4 + Acr.XamForms.UserDialogs.Shared\Acr.XamForms.UserDialogs.Shared.projitems*{f462f2e4-09fa-4d5b-8be8-3d24b3b5bd86}*SharedItemsImports = 13 + Acr.XamForms.UserDialogs.Shared\Acr.XamForms.UserDialogs.Shared.projitems*{290f8977-f101-4bd8-8a29-19c78b4ebc23}*SharedItemsImports = 4 + Acr.XamForms.DeviceInfo.Shared\Acr.XamForms.DeviceInfo.Shared.projitems*{18ad7705-c9a9-42c0-9265-14a9559e441f}*SharedItemsImports = 4 + Acr.XamForms.BarCodeScanner.Shared\Acr.XamForms.BarCodeScanner.Shared.projitems*{f1fced90-6343-42b9-8769-5f5b1c5fe1e3}*SharedItemsImports = 4 + Acr.XamForms.Mobile.Shared\Acr.XamForms.Mobile.Shared.projitems*{1c973cc4-86f0-4798-b128-55fae3aad9e5}*SharedItemsImports = 13 + Acr.XamForms.BarCodeScanner.Shared\Acr.XamForms.BarCodeScanner.Shared.projitems*{0ef6c543-9a82-4a29-a251-4d0a900232dd}*SharedItemsImports = 4 + Acr.XamForms.DeviceInfo.Shared\Acr.XamForms.DeviceInfo.Shared.projitems*{fd60e343-6dad-4164-aac2-70b4d8d00ef5}*SharedItemsImports = 4 + Acr.XamForms.Mobile.Shared\Acr.XamForms.Mobile.Shared.projitems*{07658008-eb02-4c74-b798-0b8ed2beca6d}*SharedItemsImports = 4 + Acr.XamForms.BarCodeScanner.Shared\Acr.XamForms.BarCodeScanner.Shared.projitems*{6646e5ee-5534-4274-b99f-39ca222b23ef}*SharedItemsImports = 13 + Acr.XamForms.UserDialogs.Shared\Acr.XamForms.UserDialogs.Shared.projitems*{f68a14ab-0965-4582-9399-f22f5c4ceb15}*SharedItemsImports = 4 + Acr.XamForms.BarCodeScanner.Shared\Acr.XamForms.BarCodeScanner.Shared.projitems*{dc51e5ac-4dfb-449e-95e3-a471c0ebb53c}*SharedItemsImports = 4 + Acr.XamForms.Mobile.Shared\Acr.XamForms.Mobile.Shared.projitems*{a2908b9c-d5d0-4715-851d-3eb81ab2e452}*SharedItemsImports = 4 + Acr.XamForms.UserDialogs.Shared\Acr.XamForms.UserDialogs.Shared.projitems*{732d3a68-83f1-4cc0-97cb-ab5095998d70}*SharedItemsImports = 4 + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Ad-Hoc|Any CPU = Ad-Hoc|Any CPU + Ad-Hoc|ARM = Ad-Hoc|ARM + Ad-Hoc|iPhone = Ad-Hoc|iPhone + Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator + Ad-Hoc|Mixed Platforms = Ad-Hoc|Mixed Platforms + Ad-Hoc|x86 = Ad-Hoc|x86 + AppStore|Any CPU = AppStore|Any CPU + AppStore|ARM = AppStore|ARM + AppStore|iPhone = AppStore|iPhone + AppStore|iPhoneSimulator = AppStore|iPhoneSimulator + AppStore|Mixed Platforms = AppStore|Mixed Platforms + AppStore|x86 = AppStore|x86 + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|Any CPU.Build.0 = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|ARM.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.AppStore|x86.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|ARM.ActiveCfg = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Debug|x86.ActiveCfg = Debug|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|Any CPU.Build.0 = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|ARM.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|iPhone.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D}.Release|x86.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|Any CPU.Build.0 = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|ARM.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.AppStore|x86.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|x86.ActiveCfg = Debug|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Any CPU.Build.0 = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|ARM.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhone.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|x86.ActiveCfg = Release|Any CPU + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|iPhone.Deploy.0 = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Ad-Hoc|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|Mixed Platforms.ActiveCfg = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|Mixed Platforms.Build.0 = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|Mixed Platforms.Deploy.0 = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|ARM.ActiveCfg = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|iPhone.ActiveCfg = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|iPhone.Build.0 = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|iPhone.Deploy.0 = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|iPhoneSimulator.Deploy.0 = AppStore|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|Mixed Platforms.ActiveCfg = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|Mixed Platforms.Build.0 = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|Mixed Platforms.Deploy.0 = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.AppStore|x86.ActiveCfg = AppStore|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|Any CPU.ActiveCfg = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|ARM.ActiveCfg = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.ActiveCfg = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.Build.0 = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.Deploy.0 = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|Mixed Platforms.ActiveCfg = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|Mixed Platforms.Build.0 = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|Mixed Platforms.Deploy.0 = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Debug|x86.ActiveCfg = Debug|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|Any CPU.ActiveCfg = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|ARM.ActiveCfg = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhone.ActiveCfg = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhone.Build.0 = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhone.Deploy.0 = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator + {2142B859-21E9-484D-880A-26AD708569DB}.Release|Mixed Platforms.ActiveCfg = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|Mixed Platforms.Build.0 = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|Mixed Platforms.Deploy.0 = Release|iPhone + {2142B859-21E9-484D-880A-26AD708569DB}.Release|x86.ActiveCfg = Release|iPhone + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|Mixed Platforms.Deploy.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|Any CPU.Build.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|Any CPU.Deploy.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|ARM.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|Mixed Platforms.Deploy.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.AppStore|x86.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|ARM.ActiveCfg = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x86.ActiveCfg = Debug|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.Build.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|ARM.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x86.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|ARM.Build.0 = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|ARM.Deploy.0 = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|Mixed Platforms.Deploy.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|x86.Build.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Ad-Hoc|x86.Deploy.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|Any CPU.Build.0 = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|Any CPU.Deploy.0 = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|ARM.ActiveCfg = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|ARM.Build.0 = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|ARM.Deploy.0 = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|Mixed Platforms.Deploy.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|x86.ActiveCfg = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|x86.Build.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.AppStore|x86.Deploy.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|ARM.ActiveCfg = Debug|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|ARM.Build.0 = Debug|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|ARM.Deploy.0 = Debug|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|Mixed Platforms.Deploy.0 = Debug|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|x86.ActiveCfg = Debug|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|x86.Build.0 = Debug|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Debug|x86.Deploy.0 = Debug|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|Any CPU.Build.0 = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|ARM.ActiveCfg = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|ARM.Build.0 = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|ARM.Deploy.0 = Release|ARM + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|iPhone.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|Mixed Platforms.Build.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|Mixed Platforms.Deploy.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|x86.ActiveCfg = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|x86.Build.0 = Release|x86 + {5446C4A3-ED4C-48F0-99BD-F2B60F867475}.Release|x86.Deploy.0 = Release|x86 + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|Any CPU.Build.0 = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|ARM.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.AppStore|x86.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Debug|x86.ActiveCfg = Debug|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|Any CPU.Build.0 = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|ARM.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|iPhone.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128}.Release|x86.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|Any CPU.Build.0 = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|ARM.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.AppStore|x86.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Debug|x86.ActiveCfg = Debug|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|Any CPU.Build.0 = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|ARM.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|iPhone.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0EF6C543-9A82-4A29-A251-4D0A900232DD}.Release|x86.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|Any CPU.Build.0 = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|ARM.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.AppStore|x86.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|Any CPU.Build.0 = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|ARM.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|iPhone.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3}.Release|x86.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|Any CPU.Build.0 = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|ARM.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.AppStore|x86.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|ARM.ActiveCfg = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Debug|x86.ActiveCfg = Debug|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|Any CPU.Build.0 = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|ARM.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|iPhone.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1}.Release|x86.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|ARM.Build.0 = Release|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Ad-Hoc|x86.Build.0 = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|Any CPU.Build.0 = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|ARM.ActiveCfg = Release|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|ARM.Build.0 = Release|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|x86.ActiveCfg = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.AppStore|x86.Build.0 = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|ARM.ActiveCfg = Debug|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|ARM.Build.0 = Debug|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|x86.ActiveCfg = Debug|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Debug|x86.Build.0 = Debug|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|Any CPU.Build.0 = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|ARM.ActiveCfg = Release|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|ARM.Build.0 = Release|ARM + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|iPhone.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|Mixed Platforms.Build.0 = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|x86.ActiveCfg = Release|x86 + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C}.Release|x86.Build.0 = Release|x86 + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|Any CPU.Build.0 = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|ARM.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.AppStore|x86.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Debug|x86.ActiveCfg = Debug|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|Any CPU.Build.0 = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|ARM.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|iPhone.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F68A14AB-0965-4582-9399-F22F5C4CEB15}.Release|x86.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|Any CPU.Build.0 = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|ARM.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.AppStore|x86.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|ARM.ActiveCfg = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Debug|x86.ActiveCfg = Debug|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|Any CPU.Build.0 = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|ARM.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|iPhone.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {290F8977-F101-4BD8-8A29-19C78B4EBC23}.Release|x86.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|ARM.Build.0 = Release|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Ad-Hoc|x86.Build.0 = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|Any CPU.Build.0 = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|ARM.ActiveCfg = Release|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|ARM.Build.0 = Release|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|x86.ActiveCfg = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.AppStore|x86.Build.0 = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|ARM.ActiveCfg = Debug|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|ARM.Build.0 = Debug|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|x86.ActiveCfg = Debug|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Debug|x86.Build.0 = Debug|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|Any CPU.Build.0 = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|ARM.ActiveCfg = Release|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|ARM.Build.0 = Release|ARM + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|iPhone.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|Mixed Platforms.Build.0 = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|x86.ActiveCfg = Release|x86 + {732D3A68-83F1-4CC0-97CB-AB5095998D70}.Release|x86.Build.0 = Release|x86 + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|Any CPU.Build.0 = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|ARM.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.AppStore|x86.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|ARM.ActiveCfg = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Debug|x86.ActiveCfg = Debug|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|Any CPU.Build.0 = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|ARM.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|iPhone.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {62822DE8-CEB9-4602-B780-84E9E3D11B88}.Release|x86.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|Any CPU.Build.0 = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|ARM.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.AppStore|x86.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|ARM.ActiveCfg = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Debug|x86.ActiveCfg = Debug|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|Any CPU.Build.0 = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|ARM.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|iPhone.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78}.Release|x86.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|Any CPU.Build.0 = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|ARM.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.AppStore|x86.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Debug|x86.ActiveCfg = Debug|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|Any CPU.Build.0 = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|ARM.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|iPhone.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5}.Release|x86.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|ARM.Build.0 = Release|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Ad-Hoc|x86.Build.0 = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|Any CPU.Build.0 = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|ARM.ActiveCfg = Release|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|ARM.Build.0 = Release|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|x86.ActiveCfg = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.AppStore|x86.Build.0 = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|ARM.ActiveCfg = Debug|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|ARM.Build.0 = Debug|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|x86.ActiveCfg = Debug|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Debug|x86.Build.0 = Debug|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|Any CPU.Build.0 = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|ARM.ActiveCfg = Release|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|ARM.Build.0 = Release|ARM + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|iPhone.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|Mixed Platforms.Build.0 = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|x86.ActiveCfg = Release|x86 + {18AD7705-C9A9-42C0-9265-14A9559E441F}.Release|x86.Build.0 = Release|x86 + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|Any CPU.Build.0 = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|ARM.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.AppStore|x86.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Debug|x86.ActiveCfg = Debug|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|Any CPU.Build.0 = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|ARM.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|iPhone.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C}.Release|x86.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|Any CPU.Build.0 = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|ARM.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.AppStore|x86.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|Any CPU.Build.0 = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|ARM.ActiveCfg = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Debug|x86.ActiveCfg = Debug|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|Any CPU.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|Any CPU.Build.0 = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|ARM.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|iPhone.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331}.Release|x86.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|Any CPU.Build.0 = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|ARM.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.AppStore|x86.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Debug|x86.ActiveCfg = Debug|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|Any CPU.Build.0 = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|ARM.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|iPhone.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68}.Release|x86.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|ARM.Build.0 = Release|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Ad-Hoc|x86.Build.0 = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|Any CPU.Build.0 = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|ARM.ActiveCfg = Release|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|ARM.Build.0 = Release|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|x86.ActiveCfg = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.AppStore|x86.Build.0 = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|ARM.ActiveCfg = Debug|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|ARM.Build.0 = Debug|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|x86.ActiveCfg = Debug|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Debug|x86.Build.0 = Debug|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|Any CPU.Build.0 = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|ARM.ActiveCfg = Release|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|ARM.Build.0 = Release|ARM + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|iPhone.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|Mixed Platforms.Build.0 = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|x86.ActiveCfg = Release|x86 + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C}.Release|x86.Build.0 = Release|x86 + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|Any CPU.Build.0 = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|ARM.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.AppStore|x86.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|ARM.ActiveCfg = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Debug|x86.ActiveCfg = Debug|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|Any CPU.Build.0 = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|ARM.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|iPhone.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {90AB40EB-C012-482C-8C61-FCF2BA56FB60}.Release|x86.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|Any CPU.Build.0 = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|ARM.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.AppStore|x86.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|Any CPU.Build.0 = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|ARM.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|iPhone.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7A000A7C-9C30-46F3-9994-003D4F70BA0F}.Release|x86.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|Any CPU.Build.0 = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|ARM.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.AppStore|x86.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Debug|x86.ActiveCfg = Debug|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|Any CPU.Build.0 = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|ARM.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|iPhone.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0}.Release|x86.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|ARM.Build.0 = Release|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Ad-Hoc|x86.Build.0 = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|Any CPU.Build.0 = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|ARM.ActiveCfg = Release|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|ARM.Build.0 = Release|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|x86.ActiveCfg = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.AppStore|x86.Build.0 = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|ARM.ActiveCfg = Debug|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|ARM.Build.0 = Debug|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|x86.ActiveCfg = Debug|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Debug|x86.Build.0 = Debug|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|Any CPU.Build.0 = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|ARM.ActiveCfg = Release|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|ARM.Build.0 = Release|ARM + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|iPhone.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|Mixed Platforms.Build.0 = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|x86.ActiveCfg = Release|x86 + {248FFFFA-1E77-4E93-A1ED-236C5501C32A}.Release|x86.Build.0 = Release|x86 + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|Any CPU.Build.0 = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|ARM.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|x86.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|ARM.ActiveCfg = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|x86.ActiveCfg = Debug|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.Build.0 = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|ARM.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|iPhone.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|x86.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|ARM.Build.0 = Release|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Ad-Hoc|x86.Build.0 = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|Any CPU.Build.0 = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|ARM.ActiveCfg = Release|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|ARM.Build.0 = Release|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|Mixed Platforms.ActiveCfg = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|Mixed Platforms.Build.0 = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|x86.ActiveCfg = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.AppStore|x86.Build.0 = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|ARM.ActiveCfg = Debug|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|ARM.Build.0 = Debug|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|x86.ActiveCfg = Debug|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Debug|x86.Build.0 = Debug|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|Any CPU.Build.0 = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|ARM.ActiveCfg = Release|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|ARM.Build.0 = Release|ARM + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|iPhone.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|Mixed Platforms.Build.0 = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|x86.ActiveCfg = Release|x86 + {D7098843-29D9-4AA9-9B11-C2D938E1AE89}.Release|x86.Build.0 = Release|x86 + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|Any CPU.Build.0 = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|ARM.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.AppStore|x86.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Debug|x86.ActiveCfg = Debug|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|Any CPU.Build.0 = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|ARM.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|iPhone.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A2908B9C-D5D0-4715-851D-3EB81AB2E452}.Release|x86.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|Any CPU.Build.0 = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|ARM.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.AppStore|x86.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|ARM.ActiveCfg = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Debug|x86.ActiveCfg = Debug|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|Any CPU.Build.0 = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|ARM.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|iPhone.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {07658008-EB02-4C74-B798-0B8ED2BECA6D}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {CC18E151-5792-4DA5-ADE6-7CFBA16A593E} = {21CC8547-CA75-41BF-91AB-319DCE25B7E9} + {2142B859-21E9-484D-880A-26AD708569DB} = {21CC8547-CA75-41BF-91AB-319DCE25B7E9} + {3AC4ED82-3D1E-4767-8C17-39EF6337AA64} = {21CC8547-CA75-41BF-91AB-319DCE25B7E9} + {5446C4A3-ED4C-48F0-99BD-F2B60F867475} = {21CC8547-CA75-41BF-91AB-319DCE25B7E9} + {1ED7E825-98ED-4740-8DD7-96E4AA3F1128} = {DD617AB3-E79F-44D8-9ED7-CE7DD06EA51A} + {0EF6C543-9A82-4A29-A251-4D0A900232DD} = {DD617AB3-E79F-44D8-9ED7-CE7DD06EA51A} + {6646E5EE-5534-4274-B99F-39CA222B23EF} = {DD617AB3-E79F-44D8-9ED7-CE7DD06EA51A} + {F1FCED90-6343-42B9-8769-5F5B1C5FE1E3} = {DD617AB3-E79F-44D8-9ED7-CE7DD06EA51A} + {FB69B463-0DD5-49D2-AFED-6E3A31EB37A1} = {402AAF82-296F-4C93-8662-F3BB5185AB91} + {F462F2E4-09FA-4D5B-8BE8-3D24B3B5BD86} = {402AAF82-296F-4C93-8662-F3BB5185AB91} + {DC51E5AC-4DFB-449E-95E3-A471C0EBB53C} = {DD617AB3-E79F-44D8-9ED7-CE7DD06EA51A} + {F68A14AB-0965-4582-9399-F22F5C4CEB15} = {402AAF82-296F-4C93-8662-F3BB5185AB91} + {290F8977-F101-4BD8-8A29-19C78B4EBC23} = {402AAF82-296F-4C93-8662-F3BB5185AB91} + {732D3A68-83F1-4CC0-97CB-AB5095998D70} = {402AAF82-296F-4C93-8662-F3BB5185AB91} + {62822DE8-CEB9-4602-B780-84E9E3D11B88} = {14877779-39A8-4F23-AEB3-9780E47B5A04} + {CF44552E-32AC-4B09-956A-5BF7355812CC} = {14877779-39A8-4F23-AEB3-9780E47B5A04} + {D4B35565-A9B3-4B4B-AA68-CCE7D5A67F78} = {14877779-39A8-4F23-AEB3-9780E47B5A04} + {FD60E343-6DAD-4164-AAC2-70B4D8D00EF5} = {14877779-39A8-4F23-AEB3-9780E47B5A04} + {18AD7705-C9A9-42C0-9265-14A9559E441F} = {14877779-39A8-4F23-AEB3-9780E47B5A04} + {3B14346E-92D8-425C-AA46-7DFC88CC6F1C} = {890C6638-BD11-461A-9BBC-BA8C18755709} + {872C26AC-5559-4E0D-8B8D-DBF39F7F4331} = {890C6638-BD11-461A-9BBC-BA8C18755709} + {E23D6213-060D-4FD3-9F9D-F49F55F4DB68} = {890C6638-BD11-461A-9BBC-BA8C18755709} + {9EAB5CDB-1DA9-48C4-B406-E2B4034BA54C} = {890C6638-BD11-461A-9BBC-BA8C18755709} + {90AB40EB-C012-482C-8C61-FCF2BA56FB60} = {F9F600D2-84A0-4195-B06D-B37E9A723130} + {7A000A7C-9C30-46F3-9994-003D4F70BA0F} = {F9F600D2-84A0-4195-B06D-B37E9A723130} + {0F210FAE-78BB-4D1A-BCC8-ECDABB99ECC0} = {F9F600D2-84A0-4195-B06D-B37E9A723130} + {248FFFFA-1E77-4E93-A1ED-236C5501C32A} = {F9F600D2-84A0-4195-B06D-B37E9A723130} + {67F9D3A8-F71E-4428-913F-C37AE82CDB24} = {98DD5441-283D-4D48-AFD1-0522524F20C7} + {D7098843-29D9-4AA9-9B11-C2D938E1AE89} = {98DD5441-283D-4D48-AFD1-0522524F20C7} + {A2908B9C-D5D0-4715-851D-3EB81AB2E452} = {98DD5441-283D-4D48-AFD1-0522524F20C7} + {07658008-EB02-4C74-B798-0B8ED2BECA6D} = {98DD5441-283D-4D48-AFD1-0522524F20C7} + {1C973CC4-86F0-4798-B128-55FAE3AAD9E5} = {98DD5441-283D-4D48-AFD1-0522524F20C7} + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Sample.Droid\Sample.Droid.csproj + EndGlobalSection +EndGlobal diff --git a/Acr.XamForms/Acr.XamForms.csproj b/Acr.XamForms/Acr.XamForms.csproj new file mode 100644 index 0000000..03549fd --- /dev/null +++ b/Acr.XamForms/Acr.XamForms.csproj @@ -0,0 +1,77 @@ + + + + + 10.0 + Debug + AnyCPU + {85E3C63B-A17E-46EF-87CE-9A8E58FEDE4D} + Library + Properties + Acr.XamForms + Acr.XamForms + v4.5 + Profile78 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 8fd3c6ef + + + true + full + false + ..\bin\Debug\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\Portable\ + TRACE + prompt + 4 + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + ..\packages\Xamarin.Forms.1.0.6197\lib\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.0.6197\lib\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Acr.XamForms/Collections/ObjectModel/ObservableDictionary.cs b/Acr.XamForms/Collections/ObjectModel/ObservableDictionary.cs new file mode 100644 index 0000000..d834e19 --- /dev/null +++ b/Acr.XamForms/Collections/ObjectModel/ObservableDictionary.cs @@ -0,0 +1,256 @@ +//http://blogs.microsoft.co.il/blogs/shimmy/archive/2010/12/26/observabledictionary-lt-tkey-tvalue-gt-c.aspx +using System; +using System.Linq; +using System.ComponentModel; +using System.Collections.Generic; +using System.Collections.Specialized; + +namespace System.Collections.ObjectModel +{ + public class ObservableDictionary : IDictionary, INotifyCollectionChanged, INotifyPropertyChanged + { + private const string CountString = "Count"; + private const string IndexerName = "Item[]"; + private const string KeysName = "Keys"; + private const string ValuesName = "Values"; + + private IDictionary _Dictionary; + protected IDictionary Dictionary + { + get { return _Dictionary; } + } + + #region Constructors + public ObservableDictionary() + { + _Dictionary = new Dictionary(); + } + public ObservableDictionary(IDictionary dictionary) + { + _Dictionary = new Dictionary(dictionary); + } + public ObservableDictionary(IEqualityComparer comparer) + { + _Dictionary = new Dictionary(comparer); + } + public ObservableDictionary(int capacity) + { + _Dictionary = new Dictionary(capacity); + } + public ObservableDictionary(IDictionary dictionary, IEqualityComparer comparer) + { + _Dictionary = new Dictionary(dictionary, comparer); + } + public ObservableDictionary(int capacity, IEqualityComparer comparer) + { + _Dictionary = new Dictionary(capacity, comparer); + } + #endregion + + #region IDictionary Members + + public void Add(TKey key, TValue value) + { + Insert(key, value, true); + } + + public bool ContainsKey(TKey key) + { + return Dictionary.ContainsKey(key); + } + + public ICollection Keys + { + get { return Dictionary.Keys; } + } + + public bool Remove(TKey key) + { + if (key == null) throw new ArgumentNullException("key"); + + TValue value; + Dictionary.TryGetValue(key, out value); + var removed = Dictionary.Remove(key); + if (removed) + //OnCollectionChanged(NotifyCollectionChangedAction.Remove, new KeyValuePair(key, value)); + OnCollectionChanged(); + return removed; + } + + public bool TryGetValue(TKey key, out TValue value) + { + return Dictionary.TryGetValue(key, out value); + } + + public ICollection Values + { + get { return Dictionary.Values; } + } + + public TValue this[TKey key] + { + get + { + return Dictionary[key]; + } + set + { + Insert(key, value, false); + } + } + + #endregion + + #region ICollection> Members + + public void Add(KeyValuePair item) + { + Insert(item.Key, item.Value, true); + } + + public void Clear() + { + if (Dictionary.Count > 0) + { + Dictionary.Clear(); + OnCollectionChanged(); + } + } + + public bool Contains(KeyValuePair item) + { + return Dictionary.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + Dictionary.CopyTo(array, arrayIndex); + } + + public int Count + { + get { return Dictionary.Count; } + } + + public bool IsReadOnly + { + get { return Dictionary.IsReadOnly; } + } + + public bool Remove(KeyValuePair item) + { + return Remove(item.Key); + } + + + #endregion + + #region IEnumerable> Members + + public IEnumerator> GetEnumerator() + { + return Dictionary.GetEnumerator(); + } + + #endregion + + #region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)Dictionary).GetEnumerator(); + } + + #endregion + + #region INotifyCollectionChanged Members + + public event NotifyCollectionChangedEventHandler CollectionChanged; + + #endregion + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + #endregion + + public void AddRange(IDictionary items) + { + if (items == null) throw new ArgumentNullException("items"); + + if (items.Count > 0) + { + if (Dictionary.Count > 0) + { + if (items.Keys.Any((k) => Dictionary.ContainsKey(k))) + throw new ArgumentException("An item with the same key has already been added."); + else + foreach (var item in items) Dictionary.Add(item); + } + else + _Dictionary = new Dictionary(items); + + OnCollectionChanged(NotifyCollectionChangedAction.Add, items.ToArray()); + } + } + + private void Insert(TKey key, TValue value, bool add) + { + if (key == null) throw new ArgumentNullException("key"); + + TValue item; + if (Dictionary.TryGetValue(key, out item)) + { + if (add) throw new ArgumentException("An item with the same key has already been added."); + if (Equals(item, value)) return; + Dictionary[key] = value; + + OnCollectionChanged(NotifyCollectionChangedAction.Replace, new KeyValuePair(key, value), new KeyValuePair(key, item)); + } + else + { + Dictionary[key] = value; + + OnCollectionChanged(NotifyCollectionChangedAction.Add, new KeyValuePair(key, value)); + } + } + + private void OnPropertyChanged() + { + OnPropertyChanged(CountString); + OnPropertyChanged(IndexerName); + OnPropertyChanged(KeysName); + OnPropertyChanged(ValuesName); + } + + protected virtual void OnPropertyChanged(string propertyName) + { + if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + + private void OnCollectionChanged() + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + } + + private void OnCollectionChanged(NotifyCollectionChangedAction action, KeyValuePair changedItem) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, changedItem)); + } + + private void OnCollectionChanged(NotifyCollectionChangedAction action, KeyValuePair newItem, KeyValuePair oldItem) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItem, oldItem)); + } + + private void OnCollectionChanged(NotifyCollectionChangedAction action, IList newItems) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItems)); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms/Converters/FileSizeConverter.cs b/Acr.XamForms/Converters/FileSizeConverter.cs new file mode 100644 index 0000000..92b1051 --- /dev/null +++ b/Acr.XamForms/Converters/FileSizeConverter.cs @@ -0,0 +1,40 @@ +//using System; +//using System.Collections.Generic; +//using System.Globalization; + +//namespace Acr.XamForms.Converters { + +// public class FileSizeConverter : MvxValueConverter { +// private static readonly List suffixes = new List { "bytes", "KB", "MB", "GB", "TB" }; + + +// TODO: multilingual on types above? +// protected override object Convert(long fileSize, Type targetType, object parameter, CultureInfo culture) { +// var pow = Math.Floor((fileSize > 0 ? Math.Log(fileSize) : 0) / Math.Log(1024)); +// pow = Math.Min(pow, suffixes.Count - 1); +// var value = fileSize / Math.Pow(1024, pow); +// return value.ToString(pow == 0 ? "F0" : "F2") + " " + suffixes[(int)pow]; +// } +// } +//} +//using System; +//using System.Globalization; +//using Xamarin.Forms; + +//namespace Crosschat.Client.Views.ValueConverters +//{ +// public class InverterConverter : IValueConverter +// { +// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) +// { +// if (value is bool) +// return !((bool) value); +// return false; +// } + +// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) +// { +// throw new NotSupportedException(); +// } +// } +//} \ No newline at end of file diff --git a/Acr.XamForms/Converters/TimeAgoConverter.cs b/Acr.XamForms/Converters/TimeAgoConverter.cs new file mode 100644 index 0000000..5a60a5f --- /dev/null +++ b/Acr.XamForms/Converters/TimeAgoConverter.cs @@ -0,0 +1,55 @@ +//using System; +//using System.Globalization; +//using Cirrious.CrossCore.Converters; + + +//namespace Acr.XamForms.Converters { + +// public enum TimeAgo { +// Now, +// Seconds, +// Minutes, +// Hours, +// Days +// } + + +// public class TimeAgoConverter : MvxValueConverter { + +// protected override object Convert(DateTime when, Type targetType, object parameter, CultureInfo culture) { +// var difference = (DateTime.UtcNow - when).TotalSeconds; +// TimeAgo format; +// int value = 0; + +// if (difference < 30.0) { +// format = TimeAgo.Now; +// } +// else if (difference < 100) { +// format = TimeAgo.Seconds; +// value = (int)difference; +// } +// else if (difference < 3600) { +// format = TimeAgo.Minutes; +// value = (int)(difference / 60); +// } +// else if (difference < 24 * 3600) { +// format = TimeAgo.Hours; +// value = (int)(difference / (3600)); +// } +// else { +// format = TimeAgo.Days; +// value = (int)(difference / (3600 * 24)); +// } + +// return this.GetString(format, value); +// } + + +// protected virtual string GetString(TimeAgo timeAgo, int value) { +// if (timeAgo == TimeAgo.Now) +// return "Just Now"; + +// return String.Format("{0} {1} ago", value, timeAgo.ToString().ToLower()); +// } +// } +//} \ No newline at end of file diff --git a/Acr.XamForms/Extensions.cs b/Acr.XamForms/Extensions.cs new file mode 100644 index 0000000..d3463ae --- /dev/null +++ b/Acr.XamForms/Extensions.cs @@ -0,0 +1,12 @@ +using System; + + +namespace Acr.XamForms { + + public static class Extensions { + + public static bool IsEmpty(this string @string) { + return String.IsNullOrWhiteSpace(@string); + } + } +} \ No newline at end of file diff --git a/Acr.XamForms/Properties/AssemblyInfo.cs b/Acr.XamForms/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..061e359 --- /dev/null +++ b/Acr.XamForms/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Acr.XamForms")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Acr.XamForms/ViewModels/IViewModel.cs b/Acr.XamForms/ViewModels/IViewModel.cs new file mode 100644 index 0000000..e037840 --- /dev/null +++ b/Acr.XamForms/ViewModels/IViewModel.cs @@ -0,0 +1,13 @@ +using System; +using System.ComponentModel; +using System.Threading.Tasks; + + +namespace Acr.XamForms.ViewModels { + + public interface IViewModel : INotifyPropertyChanged { + + void Init(object args); + Task Start(); + } +} diff --git a/Acr.XamForms/ViewModels/ViewModel.cs b/Acr.XamForms/ViewModels/ViewModel.cs new file mode 100644 index 0000000..f4ec5ce --- /dev/null +++ b/Acr.XamForms/ViewModels/ViewModel.cs @@ -0,0 +1,44 @@ +using System; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; + + +namespace Acr.XamForms.ViewModels { + + public abstract class ViewModel : IViewModel { + + public event PropertyChangedEventHandler PropertyChanged; + + + protected virtual bool SetProperty(ref T property, T value, [CallerMemberName] string propertyName = null){ + if (!Object.Equals(property, value)) { + property = value; + this.OnPropertyChanged(propertyName); + return true; + } + return false; + } + + + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { + if (this.PropertyChanged != null) + this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + + + //protected virtual void NavigateTo() { + // var nav = DependencyService.Get(); + + //} + + + public void Init(object args) { + } + + + public virtual Task Start() { + return Task.FromResult(0); + } + } +} diff --git a/Acr.XamForms/packages.config b/Acr.XamForms/packages.config new file mode 100644 index 0000000..30e670f --- /dev/null +++ b/Acr.XamForms/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/CommonAssemblyInfo.cs b/CommonAssemblyInfo.cs new file mode 100644 index 0000000..e2acd85 --- /dev/null +++ b/CommonAssemblyInfo.cs @@ -0,0 +1,13 @@ +using System.Reflection; + + +#if DEBUG +[assembly: AssemblyConfiguration("DEBUG")] +#else +[assembly: AssemblyConfiguration("")] +#endif +[assembly: AssemblyCompany("Allan Ritchie")] +[assembly: AssemblyProduct("Acr.XamForms")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] \ No newline at end of file diff --git a/Components/AndHUD-1.3.1.info b/Components/AndHUD-1.3.1.info new file mode 100644 index 0000000..0cd55c5 --- /dev/null +++ b/Components/AndHUD-1.3.1.info @@ -0,0 +1 @@ +{"Name":"AndHUD","Id":598,"Alias":"AndHUD","Description":"AndHUD\n==========\n\nAndHUD is a Progress / HUD library for Android which allows you to easily add amazing HUDs to your app!\n\nFeatures\n--------\n - Spinner (with and without Text)\n - Progress (with and without Text)\n - Image (with and without Text)\n - Success / Error (with and without Text)\n - Toasts\n - Xamarin.Android Support\n - Xamarin Component store\n - Similar API and functionality to BTProgressHUD for iOS\n - XHUD Optional API that is in parity with BTProgressHUD\u0027s XHUD API\n \n\nQuick and Simple\n----------------\n```csharp\n//Show a simple status message with an indeterminate spinner and a Clear background\nAndHUD.Shared.Show(myActivity, \"Status Message\", MaskType.Clear);\n\n//Show a progress with a filling circle representing the progress amount, showing 60% full\nAndHUD.Shared.ShowProgress(myActivity, \"Loading… 60%\", 60);\n\n//Show a success image with a message, with a Clear background, and auto-dismiss after 2 seconds\nAndHUD.Shared.ShowSuccess(myActivity, \"It Worked!\", MaskType.Clear, TimeSpan.FromSeconds(2));\n```\n\n\nThanks\n------\nThanks to Nic Wise (@fastchicken) who inspired the creation of this with his component BTProgressHUD https://components.xamarin.com/view/btprogresshud/\n\nIt was so awesome for iOS that I needed to have it on Android as well :)\n\n","Version":"1.3.1","Summary":"Add amazing HUDs to your Android apps.","QuickStart":"AndHUD\n=======\nBy default AndHUD is accessible through the AndHUD.Shared static instance of the class. You are also free to create an instance of AndHUD and use it yourself! \n\n\nGetting Started\n---------------\n```csharp\n//Show a simple status message with an indeterminate spinner and a Clear background\nAndHUD.Shared.Show(myActivity, \"Status Message\", MaskType.Clear);\n\n//Show a progress with a filling circle representing the progress amount, showing 60% full\nAndHUD.Shared.ShowProgress(myActivity, \"Loading… 60%\", 60);\n\n//Show a success image with a message, with a Clear background, and auto-dismiss after 2 seconds\nAndHUD.Shared.ShowSuccess(myActivity, \"It Worked!\", MaskType.Clear, TimeSpan.FromSeconds(2));\n\n//Show an error image with a message with a Dimmed background, and auto-dismiss after 2 seconds\nAndHUD.Shared.ShowError(myActivity, \"It no worked :(\", MaskType.Black, TimeSpan.FromSeconds(2));\n\n//Show a toast, similar to Android toasts, but styled as AndHUD, with a clear background, auto-dismiss after 2 seconds\nAndHUD.Shared.ShowToast(myActivity, \"This is a non-centered Toast…\", MaskType.Clear, TimeSpan.FromSeconds(2));\n\n//Show a custom image with text\nAndHUD.Shared.ShowImage(myActivity, Resource.Drawable.MyCustomImage, \"Custom\");\n\n//Dismiss a HUD that will or will not be automatically timed out\nAndHUD.Shared.Dismiss(myActivity);\n\n//Show a HUD and only close it when it\u0027s clicked\nAndHUD.Shared.ShowToast(this, \"Click this toast to close it!\", MaskType.Clear, null, true, () =\u003e AndHUD.Shared.Dismiss(this));\n```\n\nOther Options\n-------------\n - **MaskType:** By default, MaskType.Black dims the background behind the HUD. Use MaskType.Clear to prevent the dimming. Use MaskType.None to allow interaction with views behind the HUD.\n - **Timeout:** If you provide a timeout, the HUD will automatically be dismissed after the timeout elapses, if you have not already dismissed it manually.\n - **Click Callback:** If you provide a clickCallback parameter, when the HUD is tapped by the user, the action supplied will be executed.\n - **Cancel Callback:** If you provide a cancelCallback parameter, the HUD can be cancelled by the user pressing the back button, which will cause the cancelCallback action to be executed.\n\n","Hash":"f4f320c97af116037eb7aba08ed3a16f","TargetPlatforms":["android"],"TrialHash":null} \ No newline at end of file diff --git a/Components/AndHUD-1.3.1.png b/Components/AndHUD-1.3.1.png new file mode 100644 index 0000000000000000000000000000000000000000..62b45ef2c614d293b87741805aab3bb3f00302e0 GIT binary patch literal 11013 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

}7 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 AndHUD.Shared.Dismiss(this)); +``` + +Other Options +------------- + - **MaskType:** By default, MaskType.Black dims the background behind the HUD. Use MaskType.Clear to prevent the dimming. Use MaskType.None to allow interaction with views behind the HUD. + - **Timeout:** If you provide a timeout, the HUD will automatically be dismissed after the timeout elapses, if you have not already dismissed it manually. + - **Click Callback:** If you provide a clickCallback parameter, when the HUD is tapped by the user, the action supplied will be executed. + - **Cancel Callback:** If you provide a cancelCallback parameter, the HUD can be cancelled by the user pressing the back button, which will cause the cancelCallback action to be executed. + diff --git a/Components/AndHUD-1.3.1/component/License.md b/Components/AndHUD-1.3.1/component/License.md new file mode 100644 index 0000000..37ec93a --- /dev/null +++ b/Components/AndHUD-1.3.1/component/License.md @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Components/AndHUD-1.3.1/component/Manifest.xml b/Components/AndHUD-1.3.1/component/Manifest.xml new file mode 100644 index 0000000..0e78b7a --- /dev/null +++ b/Components/AndHUD-1.3.1/component/Manifest.xml @@ -0,0 +1,16 @@ + + + AndHUD + Redth + https://github.com/Redth/AndHUD + https://github.com/Redth/AndHUD + https://github.com/Redth/AndHUD + 1.3.1 +

Add amazing HUDs to your Android apps. + + + AndHUD Android Sample. + Demonstrates how to implement Android HUD in an Android application + + + \ No newline at end of file diff --git a/Components/AndHUD-1.3.1/component/icons/AndHUD_128x128.png b/Components/AndHUD-1.3.1/component/icons/AndHUD_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..62b45ef2c614d293b87741805aab3bb3f00302e0 GIT binary patch literal 11013 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

}7 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�lI+rP(A9%^%}fb5U3w{SVe7a(C>>wdyQF3AE%ZZ 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

K~f%294Gypnc!v%~5HoJrf$)otJS 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 literal 0 HcmV?d00001 diff --git a/Components/AndHUD-1.3.1/lib/android/AndHUD.dll b/Components/AndHUD-1.3.1/lib/android/AndHUD.dll new file mode 100644 index 0000000000000000000000000000000000000000..d5ddbf7b6e9b6903243e09832e5ab4996e12f962 GIT binary patch literal 60928 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

lm$w|AI7Th_GaD zG)N`Bm3yU_Z-DX10@~Rik*}w0;#&MfJUzKI|H?P!&YA6s)VSgL(&tpMxnpL+OJ(kO zvMTeg4r6E$vdL554IaM>5_-H>ss72f*o-A7+WT?#8LLHjM&mvWx3!*QIWHN7Xn?w$ zKig|M8{K`6@3n<1cfXF-mukP7c#+rWH!^2I*;a@zAaM6pFy*xDlvGKXQ{$(I`p-ua zwo8xl&N7wuc|BX-@=ILWVIZO2J9nw?Zk@n}iOZZu)lxCwGhMH&60M1(v*T z;_eiE(6Ikt^>Mh${M%AS>zj!ykwATqX(l6%YaZO0-R49# zm^O`#HkMpb{5o*nSeajCsn`EeYcyFn?G2gtZy7t~kOb_Psrw1X8ZLWm@wC?}quvvU z?%lwm17cgnZJhZVXCq_wUCv}!M_8y(M@{OD-fZxh9%@o@rMdc$IYZWBSC!W%+jr}R z>ZQS{OP!uPMmoGj>!YdO@jJQf8Z3khH#iofsx{e9xlXu6vXBxy)hMZA-dAI^b!q8e3VU z`N`{nMBbstbJL#BmYcu5ocwfNDE!tU;yUBPJh{=gdz^$?OF4{DtlJw=OPd#t?>#pz zF>$nirm}N?S<`#!_5~+2Q3+?J_-7Kc?Y`5o^5Sa5oyQYw2fX4Kawx88>D-@hv8)cq zQ*o3$k^zcSC?ZZ6ua zyX`}~Jfw4)-K*cK8Sj{h?dD;v^%6ryes;EnDE$4V?6;w9x|=XdV;P=q#97kICSTro zh4YV@_g>S^nzm%3Uh_5Mo%(h%>2ix)l?tQt318+IZ3bF?|BNz{i3YL2lZ#_{=V>lK|7mkJK2w~O@BDVLubxV1i5fiTYXKYMd=-oF9$)sAwL>js^5trqu6 z*o$eR%hp+qidP;)TPCQ#;SlV0KY7<}NIcAJn&rh;cJ>O@Zn*_@qDyWU?g!o!(Y<3J zSC{-P{ZnGccuXg4pPd)uT@lx~XkGsNe&7Rfd$FUzG~knwQi z)s2xmP4r*~lbx@)z7#VRdp-0uLEDzmCnD1~=Tb6T?{4XM=-FA$isGd!?$W%V8uB=U zPR|x+nAS2wV#;zzhI;0^?v|(T;6*1txU|S-qP|g&|JA5FxW7St%k3~6u2fK&$`F3? z>6K@8Te1)DZ_3jhxoLTVyR3VE@yaUi$6k4>c%Cx|*%@rCF!Z(j@SS8F*p zmab~zQAjM1=WfuteqQB!FGtA(cgF2!SE<$Bey*0N6fIm%e0pAMPFE@*uQqMsA{7_dEeZ0KpM z`D1E+wd@VTr!S?C1bu0-#HM}c7bVDxxc$lPl0jT{*5gjH;YK!x6lITEZcR}Wfz_V% z_b9&Nz|$AmPxo9&&->svR?ASUP!KzdC_NHCj^Endo$iDdNtYR`1w3m)UdlLW=n(>aNa7yXA5)J@oT!h#-BY>W8||VUXY^n>V&#Y~-JLh-=o?0b*esFKk7`pgVIREdM8jRou*;H9R#G?;E_x%#Jih6R3I+KQIyl$` z7(2n+X2w>wl9@+s?x>U4Y3WhebpX9?tpHmyI| zkM^0uukt*nC7)#=qu^O|HWjve#>TnV6ZPmek2}E~7k&GQn<^hgA543m9do5ZxsTIq z44!Q~arSm}?Pq-7#(Ij`5`&d(6L>-M-ubB8PhD2BEwqfdp0>M$Zkilce(Y>#wa$l( zk2It75&AsR-|>z7O_yM;x(J2WUOff(;}JXV6UxiOD4haBnMX}m28Rbf_J|fDO<+?Jv*ksQ%W9^#~8N9c0F5CY4eO`~rlF(dxXl5B7G*PD! z`}uSd4OMc)o{I=t-}_m4Pnz zFRtjN!|wxpUb-y4T-FfWBhby7TMI%iT-ze6baQ>6e*Ud%^wp1Q+hHFJP_?f5e)|<) z)88qhjD4=D9$WEG{WLkl=UDTF#5dQ_`_cZu?k%(I-K-Z}q!sVq<-OZ+L}0P?(o}l9 z?Z<_e?KK+e3wZ3SS$s3|^d3Yn+!lKwhOMD?;*X*`WbpNET_2@IquJ@%Xcp5`bV(7- zvq&auZV~ARY!j{giEVbVpHgJc?mUkoODY8W7m_NEYVmSv=XqTv4o$FXF?d zC~3;aHDrN&_fk}a=4oJOZ%V}Up$wx~9@3%~;+v#l_oH`CWnE=xE}w4`Qm`wFqzgpI zt6iNeD41WEd1hE)*xkJ#nb>gt%=w;XqDhP80y&EMd>? z1w~Eg%ga8_mU?qJK>liWPdn+kPU=g`PvUt3O>gPhSQt1^3R+D2oV_1^x~0lkOJHKt z!u-=^#S@{DgtvfnKnvYusIz`S%`TEKI)YwsLf&ycUC zROMY667b5TgR_3xJ~1SomhrR!P0M9}9cfZIDYr)Kl$7{famCS+;E3Z&$eM7J@#3hY zKrqA2toM>x`_mt?ykE71sQR3`HaRGFeVbQ(eoYm7Z?-sKaUAtgXPBzKCqnyZAD%;h z)sS4baN!j~y;tfzuRFfm;WH=Loc103bh+|on~@ZPxIU66kPAyz>@fMbI$G7gmR~FS z@tSI@bkn(_&mmDFkF3`yysY!@h}5;cb(telhQiGb&25oeMIYB6ucOYijQ4X^>&vZ`j$`6m;B( zyd-SAU?yxA}M(HQL%P>3GH`< zsdE8U=s^>g?_X*3bF%pZHzTIeSM>VZB$i&9%vE1IpV0n5YWh;gaq6$=M~F^#EGOf1 zNqBhRVd^Pm=d12&tdj$%@BMc&)l=w8Yur`Qh0m-qNqSOOA}DxdRz5q@sjYu%qPlHH zy`Oz^bNXB^#>5FvZaV#S?~Sz3W_7JQbEW;oCoPkF)ep?ibfbUh*woM>I!MY|~I{ zitD42E3-_hEdCD6V&zxP=BrMf&G^o{;dV?%Lsd~egS+`Gjh%nm6k!h8aLk;w+I#(b zgmTB!Rkp3>8NQI3$|V30Umb z?pj1TNxV7y>>bbBX|6@Riku>qDGIGWU&je|FIB{lO2mBhg zVg9b}MyB-bFID$Wy??nV9{SCY=C5qW9*g!J}YU+W`4qI<=TPad>ZWu^<^GnpfAZ|OGxcCeS}}qYotif;UF=?e!6*;K8+0Z>o3X^%cZ=El-y?Z1zd%h zhdwT!@Hk&o%Ts){No+_cD?{pwx9z(C-e@sHZ0YL873IkWLI)3n>l=PqlRJ7_A7E}6 z#yYN?TM;!(3hx+|ULK}zCZ}%ZQrQoFg<9JwhS3+UZa&ge3nPlnbxfrEpoR#8_or@i z=RDZl5JU#L<6+uYm!9fgXqv@rOFhYIBwJld!QYXJ*t_pw%FUcZaJpVoc%<}wT)oUo z&GFF(P0Z#5H~5qmB?ZP5q{T+F*bkFhh>4zJI&{YVV<6Q>RGQkrYpW_D#eJUASm}ty zMT4O$DeC8MNyp2Yo%%?zJ=%VU%e(7SX4d$twVfLJ2CiTR!snH(f;~m~tjHu9?( zafkne@irBW`E$>`9yXs;uKY!_8=e_!u6Ba^Me#Q9Ri#-1EMW~pvp1P%3+!0aiRra6 z57=%maj>z(Iq5^{gd_@|rjhna z#iFE=#y1f^>;++|@!+!^^<~Fj-W{X#8`zkF(SL5kUxVZE%*0eky5ZkYeA>WRr@CD% z%4EEf@>xq|D|7v-BZ5`XeO~y@l?Pc#7rbf6ypnHfy^Y{iow`Y0ND|;=i%%VD`(*P4Zcc zo4?!5SY-66P40Ah9J*s5ytQYJQsl{7*kL_=L3&fG(&c7Cb4{V<%nfM*Pm(i?llJVy zwTU#r`m{jzwcSkxjsqmlaCWHMgV>a5T`{K3kHmuIk9AqbL9 zPTz=SOCLe?QYq5W%TJu%G_aHm+4|Kokc$Ov=hw+*C&BELjwQbttu&P($fSxlzcVO( z2~U~Ii8tv*>c$jM^0MRn_nkkh_~z9*(AM&sKJN#(?*EG*QWCFXCp=;H%wnC-xf0kfL&h#tM!_ z1T~@LI!a$_v)0*XeD!PI7rpvWg6+qbyqj(pTAbKw#_MEUxTN`EFh&MATH+e*qx4cl z&G`EFL2kkJy7jxc5@vp((KY7-=EBk*a6LNfY+&a>q=jn9J6CvR^n{f<#olgH_lkI! zlo$5y-K?0r#(Le4g){YR#Bl7EnRK=+`RfnYoAcO>AI|VH9vQ)RFqRX=$QW{r9N0c zhmrXG#W&m&v6nV%oUXg_GLvQBm-u z1rxwlopAHcF#bQRy>(Dr!SgT5E{g|PJouu)-F0zycXx*n+}+(Rc<|tsAi*7ig`mOR z65QT??|r}b$9?xz-Fxe8)l{9`>C-(uvr}ifKiz%)2rM~xKDA7P5lq3ES2NnA5ixeJ zDhy6P;JQc_LyDgUz7JBFXKQ(Wvs>`%wnten90>az-W4ulUPE;D&oC(29Ny1*Mp8LZn~3b$ znHry^M|>M(H<}k|BOsBm1THY-`}g7-T-B030;a=$mfU^QJVTOTD^W zux9h1+2Nvi;XddI8$7Sw3| zrln$-lg<|n*+lsADo57EGj(mFe7kFkZt;%^g?;om2|pOcj4 zN%EHR{}Ut18C505b2QIJmqi%Y#hG(QY}6zs%?T{}2BOI60&ee(4J$$S=p$9mNw8;o?mh)Z-Nk09DW{d#XE}PV&C@dLzb_bMZ-d zJ;)F|y8W3hJ0>@7tjqD z%-6U%9C%o-b+dQ>TQgn2en2b0^55+J5KTbPhg?t&AEY^WP7xm$bJhFL6u5Ixw1hmV z&+dmYCb(5*|93LegFjdBq;_mVIm$-i8ymvtCOy5Uh}2z&&wzlqXUeATkGGaBKu!$= zuC9NRD@XWdm)(i;eSw-WPR-DM;E1Dl8o{@Zn=O=>XWmk^HaJF!lUuNCLVpo`qP=&7 zXSV2&U%1HtME>$PdI)_fH*}pI0{_lkog2q-^gjz$`R``nZAEqd3M^~&Kka`xSmnP=v;U)DmH$bm?Eh$-p?>~8g8sd8pytyLaC% zHtkz!np?s2HT2Y&6E7a&9e%oJ~ zY?GM3r-)V1!;jjvt~WNffllsUICD$ac9(Au{gMtgJSw3khu*5e+jMhrgci{hHpMC= zPoRMHkZP);29>TiDgsR~@E}2LPJ?*K16o%oZ5iz|N^@|3wyc~i{w)P(Tb-9y=Lc&j zI1};d2It#r3?d}2YyB~CWN;egJZ-}SznS<)-rE3PDF1cmE5)YZ!L%gQ{PVJn2Mj;1 zEV1NHBz4EHep5KS6T1Qe3hoPzyX$MeF++N_r0&wSmXdqZZsFfE83#f_n#uzEm3Gm_ z>#Eb9n+q+`ko5xmU=+cQF`5TY9aw=qT`uX1L;z zXZhDCKNP1()=)K(&!<(7e$xXy!O7=x!`^8zJE$k=A!=XKGyYx3k)h^%;aR%Snnnbx zi;QhJFt{aJ#^c^(J0VS}p%f`fH=Prx8yF>t|AGtMv{y1PdphO+*7QyzsbiEG>MiD@ z7GNvf>SfR#DhyB?Xs&`>ZPV^+n-SJl{5sW7`{AehK}WXk1sQ z+rORW6CvbHV=w=cyxdHU`!qolJJnye0#L%kG$A{4=`ZHg>j>0xJ~Y{_AVHKN5HGqM#i`#{+|2c! zaI5%RxEcDUd~Tizm=GK-Tca#x0in1X_N&x&8!2^&mnGIR%LX>+ zeaEa3v&FY@cFjdG2f2+zvEC+%6Arlv76ClBV`Q&kg*No}s@aEQAb@5hz0SlJ-|6=o z--oFGqKV+UC!-da*D%c-sM2O~ShYJ#SS$b8&h6I3P_3nB>#$r`PC}9^%hqxCcv|Pu zw5A}g9-Lw?qpN~%N3_oW#~>2IZhW@Dt%zQ=6?oHp650MPSxO6Sx|bo^F{u%I>B--i zm4XuhkHxA%?sZ7(aKvIrY9{+&g%|w={an&g84^WLRE6m|Lpap4#qnr>4AH5&T$*dq zFrNEN)(^kt7SGHoa)Se;YOl?)T4=8?v>`_O)6~dlh=+Cme8bQi0lJfGeJDP9*KfKh zb-TR_M$^-cxI)tkD7>_9eTXvtku^zpAM09rAc?b3RM>8mu8;hEE^nBPqbst|s2<~a zuGMHPZUleE$vK=iB*96i3Bgiladz%bT`Z{piuFGKlJa*JF;)O64K$h^0bbmkeW&Q8 z?q_4VdyK%3f&^iDiwWp?+9HzqKjE=)@h@TpN@vpaX&K!gz0Pk{BXPXdG;7VJ#!Par zwt=Gz)&E4z>&>g<1U9HB+1&H{;sm9=!U*Z_>(CbY_gmLoNh%z?alfrIFS7W%Xw?7Ky7TU zr()JcVWE{JloOHQWY^$_sSQUX>7(^>poL6UZa#orTU;5d>VesF8P3NH=5?#=4hR5H z2qQ86=_Y6PTc^h5$Pmr;}pF6-d>bxp_M4{TT1r0(06qC2d4ACl1ye%hSFWiPN|^3kP+3mV84SJ zqyHsPtKM&8nEK;~htrebC5M(Lw+moLHh3(~z*|_4Ng|c8Rl;(qjwNSaLq~T}fTcV1 zY$gtJK$xsW0s?V-ZT`0n?RP{NC>kf zkD{5A`5Fh=JmjFhl6!wdMxI;2`M6GsZ4Gt>4VI4GHOeSP!o<<7AVs*#JI5+kxG`-% z6p#Zz?(;%2g8@{$CF`>znk=w9Qga1}UGg1dWdOyd<1QP=PX?dS&^-wkT#=+^`doqj zzYo^`>G`h@<4v3W7NY>{RNl9E;HV^_XIwXn&``n_R&f6_4n28dZTrBwsJ5x(_8ZwIBG|>p= z0s+5#4yOUh{-BTqP(@1g*(O7UfRW(mw_iSww~ZIykB$oq3v;S3YA%?+Rh?HKzxL*w z*VpTt#-{o83A5EB;k#~jAg#gg`1Jv{n+Js1LXb!xBEoC%7~mrKb3h)_GrIZTJO%VY zc#PzbcP)8#e}mx%_j$93qG5FKgtol%`v9cqDHj%QFeV=qkz>}mVhVO|-lm~Fgv>Sg zo#p3s#XJ}(Pw!%?@55eJ)@+yyPOsLt^n2!QnxVKj0vuKbW65XVEAj130#>>}x#!+( zg27(wH^b-rd%~-kK~b!?sC)XWq`@TCuYEw3W%Y4#)azh)>QSQ|Q6{$9+Rb`uW3gwO z?Y*H3a4&@#0S@3y^Z@>Wunzl@DrK{uZ#lae) zTzmc9Ku_1Ad*iG1?QT#mLEd?b%9$Y4KCuGYU-{E_+jHndv+oPN(WC|3p7Isx_9{Z= zNZeelsuT$X=UqIsu{Q8~jJL&=wD}Tt0L2nZd+b593zja~S)3XDnQL(TRRy&1>+A9p z!-k<~mcr4c_^Pj@Z-9b74%64?CRO3)nmxEGLu2Nq_Jts4iVetFTv&ivzUF4}SRLG7pqV3LM%@Xriu6D=5-B&Z6oqNAAI zsX<5vIeldc*`2WZVliJb4;x>H%az?#AkSYThA^aQO>!G#x;3365>I>xaK!rh7GS z)K*@$ zqx)l2S758KYki@R7{sTfO%e?g9}^t1Q*b?@X1-mO|F{>TU^#sS9K)37uCaw_#W?OZ z5-n_5wm^v6KtRF32}(uU$&=p{Z-lGrV>hC8$=YyqX=KCn*LqZB#iEu1mOa+y{&7kC zQQ_8nd`Zh+(K1uF4V$x3(F=z}Ya5H=x@KDbuCfR}HMpuaca`Kc|Mu!x!hA92Pwk0J zR%jjXgEgaqO_DwMPF#uFkoZ3EmxK=troy>@$q%*2UxWAFVgu}!wHc{_pw+*sHFn=& zlH2)7r_YO;(Id5!b}tG*tG}#i?7hPjVzP11EI|PzBDE4CtT8~VpGYbvP{^8$$J3cq zFva&UZBInxR^j+1hM%k|uW7C9hzjU~UD;U#TM?6wbD7$wV8T3wzM2p(dl>*^Gfe+5 z`3zkoFXs@wz9ZX8eCp}M5wk>+&B#36~nKeHG%=Xl{PC%3>59`V@J1> z8U5_U&}zd@g0T+u^G~jCTkDywh%4^jExWt813DcyXy8a1gc$NxoGh0cL6p~CNhF=Y z9>DNjXPPtp08NaZC63>@OwTmsh!5uY5BOGrwLLnS>u-3~VU895xI63Q=`C}ubQsZ~ z)!3jiKYIF!N9SC+aGg9^o-?|BM#UdzC{FZwRif_|waU1Ia5GWyouz|ouj9>1%L&{8 z;SkACECovWxH<-;ya{rLpQ>(EjJ#xH-(KZT;6|4iX$-~>uA&J)j8#aN_7Wq>dhWaB zFfo{g@O}zhD}HM%&VNp|+8%A=RY>eLRnXt%99P9DxWNy?4VC-UWL>PQY$u6TWRxpJ zJO%)Ns+$bzyf!MQPl z8lzvo;-2Zh3!Tm%V0SlzQc zj3Aa5ep$2%2IF&S6dn%VP&`x|*}z7IPMqDX3@aQ#)N&AYWT*G}e3X4?4m|cAe2G%h z*N^$oeZC`+^`FX~^#hsC^p$(X*5J{5ij|p|AZ&XeBuatv+Q2jCp6gG;WdJ@E*W9n{ z4uyO{EQH5;n(sbwAdL}9_~GUxfBmsf8>v7^3}an=oRem;%fs{!m&uyjf*V~@UG@mr zq0jE%&(bCuj;X_mPU;?x`WWyIw{Cfbt3SG|MB9=U;8yfWpOus(x-NgMxO455E0xJ* z{dLcNV6FVO>yfQeBc&Lb`Jp9Y`0N z(LU@MVLv8jGjGvGtHv#sZ}#dDWd#Q4awc-WV7*{|qMS!&Tw?P>a$r>$2{7 zH|7noV09bxQc$U+k6CuWOQiGIP+7|(Bqzy*O-$*3 zlu2#{9Z-Qr5YlLA?#w&L(?V}k$tv2)MoeTwT%yzBgHSDq>@92_Y(FWk%8^h<1?kCW zw@X;OvlY9=<$nP?^j>Sl#?$f2N8K5G{GvR;Z}*B5=RaaO>18H;8jl!FG7U^}8eSCK z7pm!UEO)L)k)PCN8#8GnR4de|WULC}NC%}oeh~b_(;vEyYnm`b{3ccNNDtRkFTlIb z|CPZgm}IWU|4r0kPAZLymTG)tvEeAN<8kk?Uomc)H1m&t^cp;^JOKQoL}@jiHemwm zF_*+;+SWYYuS+_>*~(4KQ+bG1Y`GqyJ4wpi-0N?x?41RKJWCz_9{QqNnKXLAa*+2* zspAlm98afGqrs5|BG=Wf+&kr{&lK#32Kg?=b3Qw!(+q_uEGF!5md-Tg*rBO-_o=@PxBgAkY7x| z@LTSc>P3@n2)N6451IgT6-jX;Fa{oXzzj<*8md0!0!Bp&pn*kgO=VYAIPlO2myqe9pIoFYm(KH1&2VtU67?b5|3AhLKCW`ksjG6*xj1&FT-iysRrmVoA+7Ej5(^m3J&qX!DgX5ip7;Eu zRM^5N4WXbKr%Y|%pI>c*X-{H_wZr9-T`L4i2-H{D>?ieG(AU z@j%eNJ81bM!kSb)^_8VD&3E#R&q7ojghCbI zhT+Plc5RKa;noN#Qqu*g6Vl+^TLc~qcSt?k!&q&ZMmcaK+2N`@fFxy#nB=r6Km54Z zD%SKpUnpF^lI^~;9pU?}fcL=(r9*_2 zF%2u-K2ytphv32mA+O&JX4ZF?wrS1Wv7xfmbMN8O7}t!$ylmfvmgZQ%iGTT&bu81u z%cW8A^=%rVrl>+weCs~=H&s=E4~fRHhPMIc_#0!yvF)c?!~+!1+sa~6jQa-{+u$}? ztKR3{j^EoY-~OR?S1Bes9mqWd9nDIc!-;=9$`cnPx&QlQmy8UFrv-!qrN|SUZTZlJ z7&kTA1f$L2eu!yn9C3xkAI=W2$}V$rt5&=_rTTIU1l=EyCK1q+^f>K<1|V zU0s5^SCtvjz6h1F>LY;adQm?aI;@a)b_K}=1}WLvu*0!u(4lF4wV5%g7mHH2Y^4l+xo=Uk0JMjD3_htE8uh@^sziz_QFE?)(IC*dLDOF+WUuIi*ntH|j(ba=u zlO3ILLc%5~$7CTC>x_0L1+;h2Tkhx!b0rZvDwTXXSJfygdK8FDtw`%*K9^9&Ow)z= z1HbI|VybtRPJqGuSN9TUP%8S(lfj^2lRMES{K|~jGj+iA(P$gXVv!;Z4y{YzISvp- zD^iJ$q`p|-0Rx=Mj6ihyx=W*j*< zimoh;Pd_>MU#8(JZcHcTx@@?8ZvIhqQ&#R-24GgGVRex(IoE!Y{Q*|AkIM5{Mntb5yZvIvBd1jQu-ZHe<(; zhwbCQp`n`QQQp`ebx<|+of${lsmIuzM4iPYf{is#uG-Cu$SdIGzfnV;uY(ZfWAMnROB>|8feI;H4;aT436VYf`_(FR zq2pPyU$y#oZb|Uss|}6lK#4(;rT)bE`HfhG;)+4qozR5k&s`&F_ftNlOt@!`o5q?( zOqNzGDWTnWTy={`guW3~C){pRo&6wiQ@e&xC5BUZPkq(jt(u z&Ju$ndZ#qSqBVU2e!hC|qYyfCk&-B5b#IZLby*+ZZtca{0$nYl?-woSsj)3Cy-kYE zln7z2n7&2eC=Y(HriE07Ve_}v&CI>uHSPxd0TqF{)eNnt9ogp=Z6=-VS4rER@u;Vi z$*yT^*&xNA8_5cBPJ6|(Ob-sZi@JZs{>VnT`yN(?YAvhp212BMwW8Kx!x* zvhDMaHPzf$C=e4hOwo+Ax&8ZP@aQ6D9rO_Um_!@CHb3BW8b;D&`aXj!o8wfF6DpvhoC2Owp&G6_!kN@c}egQZA zit~_4_+i=S?`0DRnUQ4^Ck&r^Rw*|r2r-(f=FEG}NzlRhG*OtvWV}HUJju-{)Ub0) zG#l=8f;tu;Wzb&O+D`Scma;Pl3qG^wr`~l^)zVJ1ggPL6fwLmQLPk1rOg5cmuB*Rn ztfM;oo=L%ID-s@B5~w8iT(&HhDoXR~^EvV<)8=HN8ZRDngO=ufZBIqfLpVu5GUA;#r>lzoAA4x3Hh~fkk>LT>@<6a}Rx|4yrUqZQ-jh&h zqYY-QUZTCK7Dr`mMGUmF-SlS%GYv&s;8SK*k%EmOMRZ9zT=DCwl-lp~50eG%J%2kb z$P{z^9TcKTdn(fWn=?(l5(Me{sfE3gXEXXktf+UyYR8W$w_E?RV2Vee$m`hCQ zJ!4xz+fqnArqhCafQk#vtZ+-Qd1K^;0&yjlaAIiu4~8%In(5Me$VK!>9?15T58GTQ zfy2~}IOdFL1|H#GL23VJl2b;vtwJLvaM)x7;<;(Kp^xq=1&Yy@lDkhL*<342S+jN9 zYe&$Wt>AE?vwqDZVVO{+AZ)}Fd^*#vAdy}Xb$ClNPx0S5=s2xURb^ZY4?=4cOn>3pSgyvPX?{kzdLI*vL=uKahBHP;9vxlO7c zzJ+R*^;5re7EZ*x5%vGDLMEYD?ah|YD04|hg`D1*eAss^a~QOltH7$0A6()CSIq0>>3=4}9FQFiJ{0f5RYAr7QOE3cNv=KYo1-Hs_G>b`%ROq3 zn;m6YP5}BNHGxf0jtmF7dj_d-zjbqprj-De)dHo8Zdvu-=hY~lIi9B6#qtwclRVrm z1N>M#S2UMmHU8H8>QAoB5BupaJiz2*W)2O}ZugX9dHzoyYAg^i7^c;I+PHibQLnTu zuR&?2k5njEoj+!N+GU>RXX=m90>mFD8e(Il7;*~J-Saa&u;{b7Vmiu4Di;kxBmN>A zLRN2^KG8gRhh5Ur=lt?nQ~so$N=46&2yRLDU|mc)Y#NbcE^KEPk>GQq>5h)Eq$;u! z%nSbuvv-MC0(ny$Et$>7FKv(63`g_v?V9Ry5s~TLqOa&Zd3QCHNb37?WpQi_P_8qX z3S>n_D)A$9!sI@21eUP}*nD;U3p5PaP;2A9&UC#>iJb-Rac$1;%2}++ zrQS_9U#_kph_6q1+2<`fHIZ(^VgDAr7!|X7t|r($hCeRNC9Mai{#~j=D9G9(bHO27 ziXl!5zmE1NsM9#qAUAvhE0>o15@|y6y8oBCXvHVWh}$&u1Olch6mW@Qr`zaRYnv?+ z{|$q~LGF7;o^16q-6u!cL{9QoRUtDclOEH%M5Av!(M`l_@42)#QPuc}p{nxAG}%cg zOWKf~r#(#v_T2Jv-Xd+MApP+83(1)cYLm$ZTa~(7?o0v>IS1kVTM8idUHbW^{Oakm z!31hDDz(#j_!`wnE_S<}ICy8i{gnJ^oZKc#nd@QuEcKzMBVk-iO(#ym$q62kPwvXG zx^$Am*k9~L6Wz+Od51xo9zWwz6`lNf7Jkrz#=`he=GO@RjR>%{3KU+xc?wsxLHSH0 zqL9y695TeqqLGONbEpnGoK9Kh(ZgTwr);psXV6NJi(4}i%9apumSmAOW?tED4h z;P5Hi8o-%U>Jh92YJe7w=09!Ik;Ofhi_J49AuQ9lDmt zIemklr)5w{W{CFEV(}1QEC+?uG^o1TB-B-WEck_>2|1+}p>!IIdL&SWWY;^N$d0Me z&4r%ZTiRPVtgaDclJpgp$XJjpLMq;kN0)cE`M14Tu04SGK_wc=+7)YTEW#*VvMQ{^ z1hte>UfKBNezqDV-`6JF;P}Ti%7Weoxzy7tVO> z4QX`!&UmeglkG%lw(N3L1#q$m*lof5R97CUB%GxyB76sYjp=o3F^XsJVE28#puqFf zm2Xb#h*?4*=O<+O1OA#AQUDx{7VEl}J6#Gf$8@db9JdmZ*!pAVG@>2RRgwlKy5n5;c~8(>{&zcj7Q{{VCgk zgE18}(9{TBl~-OK&$tiK}Rzj0j z+N=N=(@}(P-QKw!;kDPD!(3jXmU>0>J$y3tYiq+d_>j^K+H_+`qJxf`oRq(NlIQU& zov{S^xB@6%S^-?9EmZb>1Ktu>Rd-P1IA@!;d`a;gVRu_$IqjC?6<&aDxXS)uKOC%| zj;SkPs66XSq2sgrYoYo?dSZuspKY0`wX((WEjM3qJP=hbuf6^r-IJ83?;wyOuWH1* zH8|xPhR@L}2@_NrU{(G4g2f(uRrhCeO1I4sFxU!2EGI{l3qu;E`&?TagtIJF6^4$; zPrOeQkarJ*5kT=57{4$Zvd`fNIpJ~Xzx_8bVqeIr6QGzXV@ZXV=NyXg?l_WE(CPCHhfB3Feu2(7n!LcHHdjnDH!NV3b_&?X-5dLMtMn9;ap-- zh(YnxQ&(KLGT)XOO3$EmcBEiO%0i1Z!S-Og3(eNw5+%@BeI{hT>k6WzUD%;#cZeB5 zh^!>$vihnd2t^e9=j=@i!>NwF$BGDRVX#yfsW0!hMA(Jrx80d{OE8eDALBc*@d)ff z!1&q*@dSW0Y8thH-mn8ek|kw*;0(J7hPV7GaS^$E6%1dNnDv~~@7o99_*LvRaN^wu zP#;lvoir8Rf+IYg?f&B_v;|kSLlb2EmFymUyP=&!bYKnk=B)pBHLU+0U^tlq`5A@} z2lt;Q`o9fL{{IzW_&i1rKWzB)vp4ZMGP}9p~e{^PRQbOi;vru zRJi3BrYg*HMHqVIRTy$a(n$^}GRG_IsK-g-%Uj_${Zz+dpi$}#x?MQQyL;L2xLxrp z3Yhk})t`CHb}=bD=)HRrv?+QyJs@mO$CKy-zmM*FKQIht10hnGf*KdikmEyxu?91v zC}7{XO_A>@OjW?5YqeT3V7AbYmL*e)qM&$4V255!BE%GQG%A^w6Nvm??Af(hn^de1 z`DaQD59bSv^!|@^odAqe85NF`^&^bg)j*wUjZ_?do%|4Y3U_ilMGb|E*hYA5Xl;0H z^f!PWz7KN~*EPqr%C6LI!>Gq-^Jr1BD5VNTuS}sNnG6{*r}gA~M0%5aIgELFsDrE3 zC|l;Hb98OeH#9v0JtRGfS#YW6U!mS-^lOLRtkHqdu;l#^kVU&MGF9}*Kk-N_+ctzI z{wBgEl%_@*oyNSi8Mr%&JIXtVmqc!sIp*(**8~WH4UYPumYstoqosmOd}v*B6>Z5{ z#9GW6K#y!fx>*sAJv5$!J=vT&@Vjsm>9vTYUrZbBnUS-Evy^iP6WXe|uB>1@glaY% zcjB*#px{bOkwX+nXugL`s)0C#m^yhcLh(kiJ`-zD?3`z%`>J;*#VK`0QUsm_n&C5Q zxVp>Qs(F9{WdCHzej4HrHzzVM&WLOqbPd1z1hxv)5j$cMgG3@XW~Jd4ndfy4|3i5o zLXpHW6VMWn0Y^6qa(-*aA)VBtj||3OX-J2rpTu(81=dZ2LFT7@AJ5`WqnMVTt7@h~ zd)cq|M)AOV`@dUcxm-_R0zY=Wue8w%Hki$UvIvM4vHCOrLU+cT;K2X6az#I`V75321Ek z$prdmb;5-rskZ=HB$fb=HgW`$?UbSX%1sQz;)^gT0Lm4Pk(Nn=LGHB}$s-g+T=Cg5+^g=3_br* z=VY#)Xnz8^5nr>e7E+ztPquiS$tjQ8?G)mPtyQk2!HxB3TXluvd?{}*7}>i<;Uf<1 zkmyST$k>o-cO?W*%Oy_zVPpRg>W{AqipP_HB9p+2Dc2FlG9hpK*C->s^B}MCliKC% zSyNA}UiGT^6w24I#tAn-f(grM?6jps8lgJ*2dvM4oQsU;1)H**bTW-S|4XiUUg$bc zTTn{&VB263+-s-vm_IZ`E{Ss+Q*Z*gEn9l7PR3HGfqDWNj^NOp^!)W8tx3KxN?0A5vQd; z$e{ERUm!I~;fOG;n00AO$yWn*kUGQ_1(fsN_cI;n&ru^)tZ`f|Sl{eq2K+v_@9*46l=$mvM0o$#&?6o*DsW^@$Yx<)z@=$Hk zDfph9$Z6)s(;eH?y@U_DCoM(|!PTAbOE<0LTQN#WM|IJ=;_RCgJYaj%RvT+67IkOx zW7>ENitZipAu)B22U{rIsQ&veT)hrRTnk;*Zj>+^M^2ro>SjXf;0wQX#$< z3s039w-D9GG4`JyW!?GT+Fa0+4~PHo)+7?ALdMU)L*y0JDN7q@ArDMn-He%KxI(Et zy+4}7zGnQ@N2EZ8JDilr>);lLvkzEE?8DSE+>x;FCwjntIU{JAp$HJ3zGxr9C`jt^o&Kv)1MxwzQ$biWgu^#2ht_wXIN8Q3gb@| z(ra2LkWBG;+SII%-X+Rvg`S38>6F3!9!8Gr^U`CIb8m)X1UxQdLD#KJ9JTMOewH(c z^^8W(%O}~RAB%4>;E!+6BSw+@j{h*R!#-F+`0E9Myt@Wl((Et|?%X23)dvqqUqn)5 zvr9<$Cx`}gCEu-<0TGB^;i7^lX1pSQw2~09eGS48`-ai<9pwkrN3E6zX7l2J>x#W3 zT@tzHB3+y)_=xL`18rRF!-B2Lk9tGZU`r3g?(WlIZBcq4{T+$C1ei%z9F*P`47p1` zYeyA3ef806nO}P2L8Ba#qA4U%x~#bDsx*#(L~(3x$lTj4%O6N9bRJ}*c9}TA{fN3k zD*cGs#{jAtXrSE}Iuwc9WgYFtT4|S`1W?@+Tstgc{c@G278LjL;{d6lUaOa*ihbO? z>r*e?Gw_L7Tm8oK4bPKYT6(jU4E5aaWqCxalpfxhyXInD-)!i>~X%_?#5I^c*nv?(3& zMw_h5&4QhduK9V&Sfio3G_mm7K`YI;##gKxC)CmC6GjbqR}69W^J#F-!W*OSDah0d zZ*GL&>UhaAv1)hUR3`NV5#7J;xL_ly&u)P7@47)Hs#xLY()KJ;wy;N)k^zk18(Bgl zT@v>k{NhaJc^3C|+o}=i#TYNgnpo1Q!ktsFsZC1aJZZ~)Libjj=Fwh`%>;-_p|tS41GeJF#gHs zf4;2irj1xk$rVCk+VEMG=E0bVu||Ft@jXxfjyz}gN{K&_s&unHwM=y=U4M|Jx`l`Y zagQr<#M$v4o0wE2$gC@TwJ4G4{;Bl!fR3m@yUXkqJ@rB?_ZqK8ed{abUl`0D;Va6Z zzFeyO)sk&s*mN(+LiWo{;?;*32_2pT1IR=z}3r8J=WJYvj-+l6Y$*E=S>&+Nr zhYoNwFAPVEPip2A(EMx0&3A7!>)kPa?h;2FG=obkYpk)9E%7rrzsbsV9@y^ikFdq3 zZPGbD7W`|bh&k7gVNRB;KWvVAmwG)`JW6%laI7yE_~ARcnv!w|_3tui=44B3ctbwZ zWWB@7qc5l((*}Xl?C*XQXYD+Cs_x;{FuOI1%m5S4wfnd8Cqe#BgVbe0Ajc<|m{97Z zxW$Um*eGaf&H%Xn(NDG{9e#YBnblTGh(s>CTH>G6W&;KO(& z^;%;D&iYV%u&C!p_B}y%1|RRneOlutwW|e^Ed(rlB3@L=ElS+JQT2FVh>?i>{#a~% zWq3ATqrx;YAbIkqSLKd{6o@g<+V%_)i833AANzCH4NWC>R~?i=8ci_>#31JsZ>wS+ zSkSGtbx0InH&O8IVtx1&t!pDZXy_@=5M@?Zs(yUAMOe0`iR=_>oXKXN>``Mlko-X z%f~$dkQgqpyqm-KRB9eu?TjQhPT6Zi76A#2h&}p(zmx?^5CsUSf6qoF#=~9(URRX+{dlEV{ zXhoznoDyQiLL5r2lTx@*Yc@_}MWtSxDCElddPTtR`B6)6JMv0LP}>hR*pbE79F|A| z16yJ_&>fyMkgqq=1tby)<101X83(YC-CG5y#nRu-O8)q^R}VWSTXy5(i(#zm&1vZ| z4uP`=*XW$Z%dt}-4#i_ivi~4X8B7?PzZmls3ArI7M+>4&ig}64i#dyY$W31vF#3@x zrLspG{!;m}g;z_<*!BjG{o)bt{jo63KMqfPT48M)+VZE+_u}F)%HYQ6HCxoWI2hEYDoPY}wKDJI;q^9$heQd-n*8dwf854bCfVftn2X%L)t=n1-XG%Qi_%-88vx2S4eRa=`i`z z7v)w8YVRpN&x-h6%h>gp{C%w}0S~5F@`$ebrc_Uoyj$;(NYpsGJme_QU#9_o`N(b$ zE@Vf!1|WV%^{G?ZSBE!ghsdOb1s`y+*DE&9y)_m6Y^G9up10+ zTN!>?8YA+T+yjPbqf-~@QYPK|KihtiY5&~QbNM~~khTK*Ot&gBxQY1!UM$?<5*ua@ z(7OXfMX?M$PG-U02q9m5wA8_tNbw!-^royAz{v4^7e_8Zg=D-)=XXKtQXiuIVzUQ~ zY6(w2^;U`}ei;i^$Fh{zzrx-XUN2N>7J&doOB>)J(LYmU80C<+3n{yVf}FV&YIo`> zT;9q!ypbgFd^V@5HL@($KL4ZdQG&;A@{u|D#)thq@mQ7_DXNZzekl#R2eil&M& zs+I2=CKA-Wj8m0L`H}}Y`FyAsy?nD!BCY>j8fJ)|RbJcQ<^BC^H?zp66yES8j@n=ej8!lX2DhA`)(-(mPuWFs8W3+uOTJXfWSt;?g8BOro8D38=gpnBvPMTX^fdq{^iZe zz&643IaCfKNg5=tzDL%>hW+8-1C?cHad}7Vd2j&{QMnlWWaCP2jwnARQtfW3$DCF` zi!v&Sg#4)z+SW?Rh0Dz4WX-~Ivz|FpHoracvsWFoSUFa3VA>FSty48N80giWK;#b{ z7UlSzMxXQ+kwf`X4{^Ru%bw;_k3QD6;uLt~r%qI^%_ZBu6C;r;YX}umm}D+r;y&l@ zSd+mWdTk-W0L1CSYcpS)pFLia zV%qod(OplpM!CVzB#l@BEQ7uNf&bl+FAwA9gUXz8fGl*y6UxnKb@LVP z`fZbO@j3%L8jHrv+D+@{;wg!kZ*+;!xgWnC1?g@A@sST#k2H`y^nhZ9G+`RMEQ(I> zdeaX=86QCO`WCzR!2oOf32YH~j>exESnxp>Q*HQq^ZJA+$q@(b67gR*9O(gt2gNWv z`YdmCtaLKgu6bU%?U@6y8}sotEovj}i5AsO$N+)Xj0(1_%u@g|)NZAP(c z8C$M;d5m5=UzYl4LNoNiG9Xs#HQt2EoipgY&n(Z%;)i8qb<%+lVQ8+_L%H!(itDwMw!gb)b} z6K&;fy8o~Cz689fD((NhH))!t3u#JOWNU#c1-h|_1w=|)XbYv4mZc(=w7G2qX%dpO zP#q-&VN_h$bPzZA6kJfpilPqSfQk#?zA%gf!XPS+h<-YN3i|(@_uedRLFqU1JnI4zPI|~JoT#&?m3)~6VA>#Z+z+NBK0e%efVHZhB!wx7EOD2Gg2El z>Yp_W;t@H&^y!iJ<>Sb8|Dz*bUWUWi)I}>lJT_SVMH=38y7RKt6+6#=1}-FlPru(d z19w=PTn)Ys{l#k|&2%VvbC%7#V~~V5`DLQ?3(LgevfAv<_J2Wr=I3{>zwB)(_!rbQ z`q?Qvi*#A$vv;oC^i+;{#d{w-wy*b%x9l5I{8CNbrBRzVADDJ#!RCeo_3vJO?VfF? zx_!3&54$c}9C6jlsh5r(HEqlXUgOff7p3&{uANvhw|3AY%X(+{9`FCq_Wm>X^iJ6P zbJnTPi$CrXJ1XU>MbCVg^;GPciAM(Cb^F74D>C2S(QUCMa^kHQohdjm_Qb?nieI1q zWK2%MPt{DnecbUYPmG!pwei*4^W^Hx)kS|hcu)VkmQBA!*;0OmE_QADk`H4q zI@Ztk_vklQAKm)mzw)L*pQUcNI#Yk2Zo!#k|J|Ps-}>l|pB8>G@22HHZ5{E#2OE1wynphK zw{6SolX~K!TaMT4A8EVpt^8|lIC`{e;J5aSWOONc@9%ng#soCY6*{7!9cmhTy|q?p z`?ucx_piU}p|JJ|(9f>Qa=nykUh<3SzpqN&I5G0Z)cQ;MUs^id_m_uX+0~Nv)3|kC z-touW+;MsDKQZ&`gM0RWvPXIGqb|vhAO33K+Ix$tkHp}7YtT+p-z$!c-YrkOsp8|e z9~zX6zrWh8>Er5EC#^Nui>^`@@p@cSZGMJ2xcWWhTRq#83T>p$;3 zdZX#N+B^0=H|^3n4c@fUK2skueEMwj?fd+vt6tod5Nk{wuAlkKA*JF~!|r9L>?3yU z_I>0XasPmC*8eGW=bD8xn$s7~IkCO)r_x;qGw=TdCrRDAzW2DZY3)t8H(t4R6K`tFlU7 z7R^_5G%?lLb?Ia2`LjkPCGMOt>v);t!WZ!```+H!jP=c_)ct$o%j zH8;9%8~%3sl1?957Onr{R?A&4TwPRQUlvhb@o??PE|%S^`af=a_~wdJE#E&^`1@D8 zZz&q4KbrH}j&7$Xy!u~z(n^-}ec>5HW7dFqxIv7eyX1{z*4n8V7&&-LUH)`|*Txvb*tjQ^#E*7ewAOV_V9YL!XRN4kho~RJ-k)WiM~+ z^KxNn)v2c4gZI4hdeh)Nz9VMexKrOKH1v&@trPt@7WEGewE_CJ_ja0I%8W4_n%;f;o@-`* zcWCs$n-Ust|Hp|guU}O-$~|VgZb`38*S|KbPyLji$Hkv{B<-aapQ>BZd8_#n=|IHY z4@w(ec;rM)m$kjkn==NCKl|(>e?FX8eDa%-rGtxa+Wq9viWk=p%($lOUvJoxR`Fer z=x0Xnh&buItxclw9@~)>qBdC7^>7Zl6*5RBDQdw>F zDwXwCce-zZ&qPUxL?lr+3XUejNB$vvH2Jlv_6Zh1RMm^o?R*8Wdc8`AYuw(pJzHh? z!LMXkWp`d+cMRCKeQv#4xVM_72(Nf1}%oWwQDajWfdk>jmo22}Ph$&V5Fq zW{Uji-V4jLgC`cDvEtkt@lgIF7F|%KwfsA@Ee|imxptJHLVUNlBZcVb{xVdK_5){Y z4|r(Fua~1k+oq5QoNMD0s(jSa3(B-Z+o({L&%G@P<(~Tc3(CENo0QUt5eAV*cl>k5 z5WR(5uqi4l8Yf}#EH!hKvxL2yy_Q$6VhJ3!na2;ky$NE>pKhLSuCr z@gAn%)G~SmVbN*(O_*AkC*pyQ!K$F&IESlBDC2`QqIvp#|CJgQ4dO>>DB)3Dk$V9y zBu#GZx>Nhk$M<+#LMH(i7JHoE#rQ_j%oj4j7vHhC^tkXB77_(bWT3UQiA?k{{T&!7 znI#jYGR~3RvWc>F0_QT`t=ptC(1*H%Iujj5*hE(w{*Dyp8V-W*G2CV_(GLbG(nNhC zQ-M>cFw#H|MhfX;jL$ND6uAkpK1J9>|A_nsI(>}&@q0uQ7#9FdwA?6Ce$FT~-vXNG zYvWnyTpT4*I~*lAWcmiVT*8@LKGLu?G4) zR;2bFhmCOubstmLIH5V$urw}??v2|VXQDlE2jUDgqtk5$1I_OwYH>Z|J~P*daczP~ zr=_#d+|&7s&IbCib6jE%DH)A#pv=VE*hkft6MiYdqY{x%7KbGWdV-3QVyG+2Qb1Ke zrz4%=qpO+9iW1aJvNBc8R29`Q zwT3A>&1LEtrkvy?KTxD9<*qOV~AiO!&Z zNYqE_1{^B&q-44r7*AIl@#8);IZEL5K>RuyG^Y6rq&~o6#xkHp6{wm-^BGq%KF;_m zO zL^lMuLU$=}i*6(ai{p@Xq0@|dy$E+=?8P{UaTwzjj75yo7-uos8GVe48CNsj&-ggw z3ygai4>Nwlc$zUHLgbssm;ztuLVY)e#mx zzvir{I4O{F`!vQpP=9(SCGokrPALtD%+f=%cL_JRS>gD8bQXsBEM$JHP6spMyva& z)MT?yHLjM;es{*=#zbQDY#p(vJbn*ec0NdVZ;9sc|A? zRn%LfDiN=W256KQGW=GAM%@BgHBHi}^^n=9Mx(YsW+S&o?SV|8TQur0WD2d;s8jKz zuc0S3N^jXK)zI@A6>lMZExo5v$&l5O`tr|GV-{p}bW)Rzfvip(8wu+gCt7}%?3AQY z6&ADJPMI22i+FRWNTV7MZw{4f)M87DJeQmrwZc**&7}nz^#EiJTB%WwL*}4+HR=V( z>S>Ecy#ZN0?a-+GmX#RiKW6F`+8R>^>NHc$^o2!G--sy`O9$xd23 zTu@7~Fe)P#J*H97OueR2-IzM4QN5VbU#iB-NT`xrw3?}A8kNvj@22lHsw826ejX+9 zDo}W2rrt}LDrK}LjMV$6h^c0yHz5;L8B?#)5~R{VRZOkuwkqLyxsm3m@woRllCPEQ z7p9sunej4FvOv7cmvQuW;Poz=b6os znBmN3Bj%g7`a)CBnh~sN=#Y-sji~vaKb;HJu|_b#dnM7DeS2IWTmj6Ahixv6qVl2X{TcXQRPMPw!v}2j0=B`SYcM^W9+D+6{B9*fS zd>uX3N#%$Xgm>vk@bwx$*(CV=fI3P6N;HCV3D5E0rPDs;5z$ek7$%bySVne6>?k7Z zsfjL+^k6UXO5{qqo8FDQ3t`2ume$k3$aUCPD28Xi`8o1WkeZEurWa_G@in@c`8%o1 zxEH%Kq4NUG#qRc9y4QGu4l`#z9X5WCbUriwgj`HfBpst(Q4!L&G$<-c`hmWUT8Vwh zKckW)3ES(7r3y+g4U(dyOHEn8QKoFEyChO>p{q>eq!zN73W3*~W&;0Us*<|X6Q)`z zOWI;`Aca><^MEH!3#1$=BDxCU=;#};XS^u-PgE#nL@$wUrt#5bC}(x_GOTarMX!)5 zq#L5|L|!*WXGzJlJbHr^kCJZ!u8(d(3R|ML06&P{E~V0e=-2S)ITXWQaDIYjXQcKX zG~;6q0Fz=Sqb}(&;}9N$IX#|o84G|vP-)Cc%0kLzl+D;Ad1JmnEfm9XqAY>6zFT zsYN;-J4xOtorx`%2Xm=fq>MNlI3wfA=uz0A42QPkqt_xlInFJ=E7im`$}N&F?sxKj zX?fft`7m^DmXArtIIZ38GB_5r7$OrHM5{&q+v82{Nc>GjE+ba*jS`9np3!(_4Aoi$ed#4 zT*)|<`BvsD%&{}pGrx)X*E6S?aS7uJmfp$IyP0zz<9fy?SlYtUXPNT?<96o1!TdK7 zmeE&4jXq@Qe#Qfg$ACsU&YIsc=bu0sekAnIGACXVI*C{t!%7IlN{q>jX)MiR>2T&` zGhWX8v5a|=u-la!K7jsUq{HCIbPQ|USUN84#$N0P4xdFh9j9fh^y%c)Z3kYbdl$G^ z_gDRF>H+&(8U2he(?s1Ja9DA#`TOl7O%_wyi{CLLxjKdixbiNM!QpT$pmCk-}TpVso z6w(Jf-@;|k!RJINL}?-rzK9|b?g5lBvtZId|BphrH$@}d2Pjh#JXFGn5Q}hM>V$AV zpo|eI9^n+AOc&$qSfWdSG7W%LB%Bc@B0P{!5eETfJUZ1K{4}79$Ao$yoB@& z6UCNrs;BphxnD+01wM%g2wI$Ni_Z`G$%57DBS%bUUTeLB;s~5S67V4$mPf#fkvLT~ z;)=p$!WE4x2A8mq8JDn*1(&c)B3eI}N~K(yit8R+>qJtx(O>McH8_+pl;gB{Ty|T* z)I1RsU&U7M-0~*3LZ#XhhSTd5#X)6myR*RRv^f+HO;NnA22Zs@Ie6;KUe(}JC{KG7 zgbHmmi61g1^_~L0njDIFN`z*J`||AGdb`()+?@?p2QpB6 z`HhMb+t4PjPpMBYuk$GUI5CaRZSZ&?$+KG>uG%qkD=WuYtLNh3uJLxoVI!3ts8@Q9 z+f9L6S!zYRKC7?6Tdpkdk$`D-Wqwe5y4_Z*_=s=7v7k^qAw2QkB(HYPG`~ zRjlSlR>K~9y&CYLXyM{<;^8DO`bxELe9#5S?iJ;9qQS@;)}tB~kJs*U(zph@!!}JN za$PpX8#G->89FVV_k};^RQsUYu9_-)HttYxmmy7?taX9bQG==ns$n(@f~wo9jb*J1 zvkGLI4G_?pMesC>A{ewg!lHS!uRvM>@1@pHIta4WV;~fKm@5<#k5rL%Q=EHZfCvmt zs90N;+Q~&@h;CcPojsrv_~!l{AOfR9@NqBkKxFH|uQJSpfvhYjrrP#5i1y2|^KbOSRQmtvG`GTrCxC+Cyg0L%+tTUm2LyM4wgX zw@~lX^wJ@r35qW`+Xd1I3~cEEiI;5Jj2K7^6JvnIT_1L!(cU_j=A&b(D=TxHE@v5x zrZi=;88IMC#vmjnPju^Y)U?cPby9y{o!!etF0gv1iHFSTD#hcXVwck{Or9_5PU9P# z)w73DtNBe3Tmg<%;>lBLtPKtyx!jc#Fux*Nc^xt+hjH6Yyy=3gW;@<0nzo7c0%7zt zk8d*O($QmTDl4t^{j06jbxI~09?j}(P^Q~`bsRxsSj8At;uZ)qyWMC$W^ujBnw-^j z9#rRA=CSqB_UB_OPFsnm)aCUB+qn!Z%3omjkH4WGn-4B09 z+pey&u;sH+y|$1mbk;b8YtVR)tDZE9{b~ZnY&UUUfu$i9BbB+LE7EvmCH!q%6Ffg) zIx%2lX;(ST?zLCh9b&u)4AbaYD5Y4-)$&vj=r^p-<5Hnl^o9~oe!Uym(#6a3}XtDs9h?|dLmeYm7W-TfbcC?LxCw8 zU2_$}=$2E9cX4VV%wJHguurqKLsYp-TMbWg)l$C4gI+4E88ANT!mbh+Jum{z!>c1c zwVlSJXEu1Wh2}Xbsj`rU8W2?|_gI}?H&)je+j!^>rrgTL;ao0@Q(X^3DVGOMUbl0b zGN~=eF=$bN-G)`awrWRP!NIKJ9Tc)DHN50k*D^FMe@a+CSBC^(w3N!6{h3M-dsUy4r)l{gVw3@x^Dm*&Q32dl$wQ`<&(G!~+2yJG0caoDZ! zEU^hu)Ae~oqakONhk{q4ZNO9KN>PaMSP*go!tHo|6WlOgQqUc|TK5QZu22dEidZL$ z*{2b?mpFx?2__Yk2dlcp({>bigeU1^F^?`l-ERh;M?P8)lEU|nY?cGMgv zmNR154~%On1A_q^)HiepmDC8M2h~vXyar6cLLt2CVulImOmz!mvM|SkE+rg5<-w2` z=BeIWE2ep*fKa=V@frqmuP|DuFd<5@sXeR+??z1yMGql2(1@)V!d?(mMe zZfIuK@T}pPN?O&3AvI~kh7HM1vktcnNy{EOqH1{NkReKTRn7I(KgR<{72D*?hh0Yf zYsA(wEt9k?3lxW2I7lJpV{8_&Kw@=LQB&gWsx~~=s|$NO6^wB=2) zm&c1TrP?Jn6~dP24`P8Mf~|JM?6|EtWnz`lP>sbD+z4TH01D%Z$r&w+eQ`+MhR5R* zOSyntR4q!LyWCZ}fH{G2o(V0AnAx;ldFv^x)$*slvNE&HGz%6cS78%QX$)vFd#ak^ zOH92X=1|q0*<P~LIWgfs}e#IzAX{;4X1@Xxcw8tAfZXL z(ODB|l#mHSg)$6LLKfPGhsKGFX5B0@cZcNP?!xU7%6y?yyX>FiHhHW@% z-w%xD>D9bl;*pV$-^6x+&*mnnFA5@Gv6J#vR;FKTcZ-QpbpO^JU2QULpBQpwgj8Dw zy*AtvadJfAwB~~0EcUc;hU!m2_X&5Epl2YU`9Y}FLv0*v((vXBYr59f3oHin6tBG& zJEzdRkb`#!>#H11n6nk_;3OmrY%P@<2TUjCt30Kup|(~mYuagHjH-2F6Cw5psv1sd za88PasWxPbttn;;b>SL{U+=AUdGNBB*nqjxwN?|;5Y9T&ZCFZ(BjMN_Jo{tAnekN0 z<0II(#Kg>u=Th@FytnGQ(!R(3OtQhKGg!nGfh!7^8CNW>c-hcXXNZr%l?bvsu3oZ1 z##d*sk|Pa?mK4d7sx$OL?D%2er|EIqRn{euq!$OiIFJYYf{&gbtCsXhWVt*dNwVaK z{IYT7%Z4~46kjOC7i(XLjy&Rvp(iEagjtq)n&p^8%T&E3+Y%KYW2uNp0IVv=ObEH3J-ctz;d{jR5#p2tmC6 zPGJ+HfH-6!$En==B9Nkgy&88tQbsM9^(e{`hg%lLxHyrNSwKAJoWq!nlw_ltNJ|td z67O%pf7B~JQ7FVGnv!%0x&%BvnILnF3fvLlwun!TO43O%qJO7RYdg+zml1aJ@528G zSjYc{TBtWfkz-ilO_a$PnWUFu@KL4jnvx<-e#YYll3>Q;qEX}G2H-Bu3~Rj=uT2MBI-O4^)pLNzEWA~K zf8u!ulHeufxQl}<&c-)OcnAfbv3HD(AUIR39(6J5BP9S#9VJ3hY>%kUNk&*9&KMt~ z`W>9ml5a^e2xf?9$xlc^oNQw&UT5Z6a#}G}#UM+hmak?a2br9SAyQ`<-BX7D8IiD{ z8jSok7EDliJ>^6g(~=D@&ky%PQThT?WJFKdGRcx=NkbLk>Ji}jA4PjxD%7qKg)}PQ zR+b9Ucs(Ow(w>&)2*HNSR)CEd74TeS0WZ)+3de-wfDP{vsqIpmcNat`5sK+YDW=Q8F3$s?>6-o z4~mz|U8dvoA9qZGyJDO*xaNB$S}cAgQ;jM0kt{ zCy7w|4|=@D#O}|N=WrBTF_H7QtSH(LO!P|%C5>$#`TsOWS_tDU#NFJ5I$U~O@VJHO zsSDA^7vfEUg}8^h(1Z*3PZ$25uF8K3_b*yNyg5VSM;ZLB6B6Bv#M1%o_(HD$*Nm|e ztrnAy_E{~9$Bw7rU6x8;BtAq{kRDmdEF4C*VKLxR|a{@mJSN|}XoAYl%ZLO>a zG3yLwoj}R+kb;-0xg73Rpp6A2 VJllb%Z}`23HlqKK|KD5S{{h>^xDx;X literal 0 HcmV?d00001 diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample.sln b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample.sln new file mode 100644 index 0000000..15216c5 --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample.sln @@ -0,0 +1,24 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndHUD.Sample", "AndHUD.Sample\AndHUD.Sample.csproj", "{E05B78E8-EB76-4FE4-B68C-F2A19DF3BE32}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {021AA4E4-9082-411F-9F4B-90AF672CA6EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {021AA4E4-9082-411F-9F4B-90AF672CA6EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {021AA4E4-9082-411F-9F4B-90AF672CA6EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {021AA4E4-9082-411F-9F4B-90AF672CA6EF}.Release|Any CPU.Build.0 = Release|Any CPU + {E05B78E8-EB76-4FE4-B68C-F2A19DF3BE32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E05B78E8-EB76-4FE4-B68C-F2A19DF3BE32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E05B78E8-EB76-4FE4-B68C-F2A19DF3BE32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E05B78E8-EB76-4FE4-B68C-F2A19DF3BE32}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = AndHUD.Sample\AndHUD.Sample.csproj + EndGlobalSection +EndGlobal diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/AndHUD.Sample.csproj b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/AndHUD.Sample.csproj new file mode 100644 index 0000000..1e6e8c8 --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/AndHUD.Sample.csproj @@ -0,0 +1,80 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {E05B78E8-EB76-4FE4-B68C-F2A19DF3BE32} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Sample + True + Resources\Resource.designer.cs + Resource + Resources + Assets + False + AndHUD.Sample + v4.0.3 + Properties\AndroidManifest.xml + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + armeabi;armeabi-v7a;x86 + + + full + true + bin\Release + prompt + 4 + false + false + armeabi;armeabi-v7a;x86 + + + + + + + + ../../../lib\/android/AndHUD.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Assets/AboutAssets.txt b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Assets/AboutAssets.txt new file mode 100644 index 0000000..a9b0638 --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with your package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/MainActivity.cs b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/MainActivity.cs new file mode 100644 index 0000000..19a1ca2 --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/MainActivity.cs @@ -0,0 +1,140 @@ +using System; +using Android.App; +using Android.Content; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Android.OS; +using System.Threading.Tasks; +using System.Threading; +using System.Collections.Generic; +using AndroidHUD; + +namespace Sample +{ + [Activity (Label = "AndHUD Sample", MainLauncher = true)] + public class MainActivity : ListActivity + { + string[] demos = new string[] { + "Status Indicator Only", + "Status Indicator and Text", + "Non-Modal Indicator and Text", + "Progress Only", + "Progress and Text", + "Success Image Only", + "Success Image and Text", + "Error Image Only", + "Error Image and Text", + "Toast", + "Toast Non-Centered", + "Custom Image", + "Click Callback", + "Cancellable Callback", + "Long Message", + "Really Long Message" + }; + + ArrayAdapter adapter; + + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + adapter = new ArrayAdapter (this, Android.Resource.Layout.SimpleListItem1, demos); + + this.ListAdapter = adapter; + + ListView.ItemClick += (sender, e) => + { + var demo = demos[e.Position]; + + switch (demo) + { + case "Status Indicator Only": + AndHUD.Shared.Show(this, null, -1, MaskType.Black, TimeSpan.FromSeconds(3)); + break; + case "Status Indicator and Text": + AndHUD.Shared.Show(this, "Loading...", -1, MaskType.Clear, TimeSpan.FromSeconds(3)); + break; + case "Non-Modal Indicator and Text": + AndHUD.Shared.Show(this, "Loading...", -1, MaskType.None, TimeSpan.FromSeconds(5)); + break; + case "Progress Only": + ShowProgressDemo(progress => AndHUD.Shared.Show(this, null, progress, MaskType.Clear)); + break; + case "Progress and Text": + ShowProgressDemo(progress => AndHUD.Shared.Show(this, "Loading... " + progress + "%", progress, MaskType.Clear)); + break; + case "Success Image Only": + AndHUD.Shared.ShowSuccessWithStatus(this, null, MaskType.Black, TimeSpan.FromSeconds(3)); + break; + case "Success Image and Text": + AndHUD.Shared.ShowSuccessWithStatus(this, "It Worked!", MaskType.Clear, TimeSpan.FromSeconds(3)); + break; + case "Error Image Only": + AndHUD.Shared.ShowErrorWithStatus(this, null, MaskType.Clear, TimeSpan.FromSeconds(3)); + break; + case "Error Image and Text": + AndHUD.Shared.ShowErrorWithStatus(this, "It no worked :(", MaskType.Black, TimeSpan.FromSeconds(3)); + break; + case "Toast": + AndHUD.Shared.ShowToast(this, "This is a toast... Cheers!", MaskType.Black, TimeSpan.FromSeconds(3), true); + break; + case "Toast Non-Centered": + AndHUD.Shared.ShowToast(this, "This is a non-centered Toast...", MaskType.Clear, TimeSpan.FromSeconds(3), false); + break; + case "Custom Image": + AndHUD.Shared.ShowImage(this, Resource.Drawable.ic_questionstatus, "Custom Image...", MaskType.Black, TimeSpan.FromSeconds(3)); + break; + case "Click Callback": + AndHUD.Shared.ShowToast(this, "Click this toast to close it!", MaskType.Clear, null, true, () => AndHUD.Shared.Dismiss(this)); + break; + case "Cancellable Callback": + AndHUD.Shared.ShowToast(this, "Click back button to cancel/close it!", MaskType.None, null, true, null, () => AndHUD.Shared.Dismiss(this)); + break; + case "Long Message": + AndHUD.Shared.Show(this, "This is a longer message to display!", -1, MaskType.Black, TimeSpan.FromSeconds(3)); + break; + case "Really Long Message": + AndHUD.Shared.Show(this, "This is a really really long message to display as a status indicator, so you should shorten it!", -1, MaskType.Black, TimeSpan.FromSeconds(3)); + break; + } + + }; + + } + + void ShowProgressDemo(Action action) + { + Task.Factory.StartNew (() => { + + int progress = 0; + + while (progress <= 100) + { + action (progress); + + Thread.Sleep (500); + progress += 10; + } + + AndHUD.Shared.Dismiss (this); + }); + } + + void ShowDemo(Action action) + { + Task.Factory.StartNew(() => { + + action(); + + Thread.Sleep(3000); + + AndHUD.Shared.Dismiss(this); + }); + } + } + +} + + diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AndroidManifest.xml b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AndroidManifest.xml new file mode 100644 index 0000000..8536163 --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AssemblyInfo.cs b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d7a950c --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Properties/AssemblyInfo.cs @@ -0,0 +1,23 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using Android.App; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. +[assembly: AssemblyTitle ("AndHUD.Sample")] +[assembly: AssemblyDescription ("")] +[assembly: AssemblyConfiguration ("")] +[assembly: AssemblyCompany ("")] +[assembly: AssemblyProduct ("")] +[assembly: AssemblyCopyright ("jonathan")] +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. +[assembly: AssemblyVersion ("1.0.0")] +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/AboutResources.txt b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/AboutResources.txt new file mode 100644 index 0000000..10f52d4 --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/Resource.designer.cs b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/Resource.designer.cs new file mode 100644 index 0000000..6ad77ae --- /dev/null +++ b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/Resource.designer.cs @@ -0,0 +1,307 @@ +#pragma warning disable 1591 +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.17020 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +[assembly: Android.Runtime.ResourceDesignerAttribute("Sample.Resource", IsApplication=true)] + +namespace Sample +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public static void UpdateIdValues() + { + global::AndroidHUD.Resource.Attribute.ahBarColor = global::Sample.Resource.Attribute.ahBarColor; + global::AndroidHUD.Resource.Attribute.ahBarLength = global::Sample.Resource.Attribute.ahBarLength; + global::AndroidHUD.Resource.Attribute.ahBarWidth = global::Sample.Resource.Attribute.ahBarWidth; + global::AndroidHUD.Resource.Attribute.ahCircleColor = global::Sample.Resource.Attribute.ahCircleColor; + global::AndroidHUD.Resource.Attribute.ahDelayMillis = global::Sample.Resource.Attribute.ahDelayMillis; + global::AndroidHUD.Resource.Attribute.ahRadius = global::Sample.Resource.Attribute.ahRadius; + global::AndroidHUD.Resource.Attribute.ahRimColor = global::Sample.Resource.Attribute.ahRimColor; + global::AndroidHUD.Resource.Attribute.ahRimWidth = global::Sample.Resource.Attribute.ahRimWidth; + global::AndroidHUD.Resource.Attribute.ahSpinSpeed = global::Sample.Resource.Attribute.ahSpinSpeed; + global::AndroidHUD.Resource.Attribute.ahText = global::Sample.Resource.Attribute.ahText; + global::AndroidHUD.Resource.Attribute.ahTextColor = global::Sample.Resource.Attribute.ahTextColor; + global::AndroidHUD.Resource.Attribute.ahTextSize = global::Sample.Resource.Attribute.ahTextSize; + global::AndroidHUD.Resource.Drawable.ic_errorstatus = global::Sample.Resource.Drawable.ic_errorstatus; + global::AndroidHUD.Resource.Drawable.ic_successstatus = global::Sample.Resource.Drawable.ic_successstatus; + global::AndroidHUD.Resource.Drawable.roundedbg = global::Sample.Resource.Drawable.roundedbg; + global::AndroidHUD.Resource.Drawable.roundedbgdark = global::Sample.Resource.Drawable.roundedbgdark; + global::AndroidHUD.Resource.Id.loadingImage = global::Sample.Resource.Id.loadingImage; + global::AndroidHUD.Resource.Id.loadingProgressBar = global::Sample.Resource.Id.loadingProgressBar; + global::AndroidHUD.Resource.Id.loadingProgressWheel = global::Sample.Resource.Id.loadingProgressWheel; + global::AndroidHUD.Resource.Id.textViewStatus = global::Sample.Resource.Id.textViewStatus; + global::AndroidHUD.Resource.Layout.loading = global::Sample.Resource.Layout.loading; + global::AndroidHUD.Resource.Layout.loadingimage = global::Sample.Resource.Layout.loadingimage; + global::AndroidHUD.Resource.Layout.loadingprogress = global::Sample.Resource.Layout.loadingprogress; + global::AndroidHUD.Resource.String.library_name = global::Sample.Resource.String.library_name; + global::AndroidHUD.Resource.Styleable.ProgressWheel = global::Sample.Resource.Styleable.ProgressWheel; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahBarColor = global::Sample.Resource.Styleable.ProgressWheel_ahBarColor; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahBarLength = global::Sample.Resource.Styleable.ProgressWheel_ahBarLength; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahBarWidth = global::Sample.Resource.Styleable.ProgressWheel_ahBarWidth; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahCircleColor = global::Sample.Resource.Styleable.ProgressWheel_ahCircleColor; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahDelayMillis = global::Sample.Resource.Styleable.ProgressWheel_ahDelayMillis; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahRadius = global::Sample.Resource.Styleable.ProgressWheel_ahRadius; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahRimColor = global::Sample.Resource.Styleable.ProgressWheel_ahRimColor; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahRimWidth = global::Sample.Resource.Styleable.ProgressWheel_ahRimWidth; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahSpinSpeed = global::Sample.Resource.Styleable.ProgressWheel_ahSpinSpeed; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahText = global::Sample.Resource.Styleable.ProgressWheel_ahText; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextColor = global::Sample.Resource.Styleable.ProgressWheel_ahTextColor; + global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextSize = global::Sample.Resource.Styleable.ProgressWheel_ahTextSize; + } + + public partial class Attribute + { + + // aapt resource value: 0x7f010003 + public const int ahBarColor = 2130771971; + + // aapt resource value: 0x7f01000b + public const int ahBarLength = 2130771979; + + // aapt resource value: 0x7f01000a + public const int ahBarWidth = 2130771978; + + // aapt resource value: 0x7f010008 + public const int ahCircleColor = 2130771976; + + // aapt resource value: 0x7f010007 + public const int ahDelayMillis = 2130771975; + + // aapt resource value: 0x7f010009 + public const int ahRadius = 2130771977; + + // aapt resource value: 0x7f010004 + public const int ahRimColor = 2130771972; + + // aapt resource value: 0x7f010005 + public const int ahRimWidth = 2130771973; + + // aapt resource value: 0x7f010006 + public const int ahSpinSpeed = 2130771974; + + // aapt resource value: 0x7f010000 + public const int ahText = 2130771968; + + // aapt resource value: 0x7f010001 + public const int ahTextColor = 2130771969; + + // aapt resource value: 0x7f010002 + public const int ahTextSize = 2130771970; + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int ic_errorstatus = 2130837504; + + // aapt resource value: 0x7f020001 + public const int ic_questionstatus = 2130837505; + + // aapt resource value: 0x7f020002 + public const int ic_successstatus = 2130837506; + + // aapt resource value: 0x7f020003 + public const int Icon = 2130837507; + + // aapt resource value: 0x7f020004 + public const int roundedbg = 2130837508; + + // aapt resource value: 0x7f020005 + public const int roundedbgdark = 2130837509; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f060002 + public const int loadingImage = 2131099650; + + // aapt resource value: 0x7f060000 + public const int loadingProgressBar = 2131099648; + + // aapt resource value: 0x7f060003 + public const int loadingProgressWheel = 2131099651; + + // aapt resource value: 0x7f060004 + public const int myButton = 2131099652; + + // aapt resource value: 0x7f060001 + public const int textViewStatus = 2131099649; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int loading = 2130903040; + + // aapt resource value: 0x7f030001 + public const int loadingimage = 2130903041; + + // aapt resource value: 0x7f030002 + public const int loadingprogress = 2130903042; + + // aapt resource value: 0x7f030003 + public const int Main = 2130903043; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040002 + public const int app_name = 2130968578; + + // aapt resource value: 0x7f040001 + public const int hello = 2130968577; + + // aapt resource value: 0x7f040000 + public const int library_name = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + + public partial class Style + { + + // aapt resource value: 0x7f050000 + public const int AppTheme = 2131034112; + + // aapt resource value: 0x7f050001 + public const int DialogNoDim = 2131034113; + + static Style() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Style() + { + } + } + + public partial class Styleable + { + + public static int[] ProgressWheel = new int[] + { + 2130771968, + 2130771969, + 2130771970, + 2130771971, + 2130771972, + 2130771973, + 2130771974, + 2130771975, + 2130771976, + 2130771977, + 2130771978, + 2130771979}; + + // aapt resource value: 3 + public const int ProgressWheel_ahBarColor = 3; + + // aapt resource value: 11 + public const int ProgressWheel_ahBarLength = 11; + + // aapt resource value: 10 + public const int ProgressWheel_ahBarWidth = 10; + + // aapt resource value: 8 + public const int ProgressWheel_ahCircleColor = 8; + + // aapt resource value: 7 + public const int ProgressWheel_ahDelayMillis = 7; + + // aapt resource value: 9 + public const int ProgressWheel_ahRadius = 9; + + // aapt resource value: 4 + public const int ProgressWheel_ahRimColor = 4; + + // aapt resource value: 5 + public const int ProgressWheel_ahRimWidth = 5; + + // aapt resource value: 6 + public const int ProgressWheel_ahSpinSpeed = 6; + + // aapt resource value: 0 + public const int ProgressWheel_ahText = 0; + + // aapt resource value: 1 + public const int ProgressWheel_ahTextColor = 1; + + // aapt resource value: 2 + public const int ProgressWheel_ahTextSize = 2; + + static Styleable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Styleable() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-hdpi/ic_questionstatus.png b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-hdpi/ic_questionstatus.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2a04d4201cc4f1ddef1f16f7f359b5ff74a589 GIT binary patch literal 5332 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 literal 0 HcmV?d00001 diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-xhdpi/ic_questionstatus.png b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable-xhdpi/ic_questionstatus.png new file mode 100644 index 0000000000000000000000000000000000000000..49d93b9b0900941954907409763776e4eab41cc5 GIT binary patch literal 6178 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 A+5i9m literal 0 HcmV?d00001 diff --git a/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable/Icon.png b/Components/AndHUD-1.3.1/samples/AndHUD.Sample/AndHUD.Sample/Resources/drawable/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c69fa5a0f4da5d5efe96eea12a543154dbab6 GIT binary patch literal 2574 zcmV+p3i0)cP)Q`Og{P|8RRXpj5bgrSmEzSMfBn+{{vpNxw?;5UX;iv9sYxy_`IQHs$i<61a_iv^L>h8s-`D(`e@|IgS*Fj zNGM876Gf;3D8*1UX9a%v>yJKD*QkCwW2AirU(L{qNA)JghmGItc;(H<$!ABY&gBy1vJIEUj-b8%el*o|VkG)LqNx#TG>Jvj^jIte!!+RY z)T4j$7+PoF1AkRBf}R#^T=-q|PaK1$c<4UH)Hpq3$4WA|xtr!ZQLC=*vNE>O6E9kp+5X0eKB$6>C(lPwI@3#oY zhS_%x7e|j!$yG?ECXmh~EH~^OeuK}+sWoJse3Z3?ha3n`MM9KvA?uqpEnBg4Q46)7 zM$p%a$@l;+O}vfvx%XjH`}a{(-HHth9!JaUwV0*VqGR48^gWNYN<&~7x)y$e!X>e` zZ5!6KZoxbKuV9XUDI%#M1~IVh?pNSdeb~6@$y`v|yk=XK+fHxnDqnUK4&=QRNyIVf zYbDM*cI>~qIy*a7=z7uqkw@agd(<=y-Q7L!ty_23SGdXmahO<;N=wB+j;lNm%=OHC zy zU|>La6h%92y4IPufI$9>Xu!@y`TaNgtg&41@PwMwBdmSm7)xAWDLoqjZ==P2#*k7! z3o1)cVSI3KP_!?d8G^Lg0FtLXC~JYdxi|c%h~lXEixY=%VSFF@!*3&&9>(Rb|iK54Cx5;s~PY5iaV1het%w`dgQFBAJ;aFK zImQC}(|QaCFYUm1JVfzSc)ebv=)ObI)0jwJb``}Zj9J0n0Xgn*Zc(rFM9$xh_makZbm-at_v5^SW zM1y1SW@%+FuIy*WR)i3A2N_q;(YO`O!A|Ts^%z}9ZepCj3ytlw#x%N_fNrKKtPh`< z|1{UqF`4LxHaCQ79+E=uUXCOZ35jAMRz%R%0(P!0FMv=sk>Nr8%+OzY^c-M9@+fz=G`qa@v4sF5u-2289-#$**LWnyNNDwDf1( zkUiMnw|y$tn>pQP=Vn!#|17L^5AGrjtBkN$D@v)Z7LXc5EFhLB4<;7Wehh)CMqX|W zqsiZaO^benJ_hwa&V0ub$-_HUk**?g6fm9|!@kguU6*zhK)$qn-<3*kFrYPIaqR=V zUaUvk>@F_89b@tHs8R!*QKY;INJ<2_U+K6Ca3e9Gsl2{qY0%a7J?uICWgHuLfj+MB z=GkAN1&ifT#2u}B+2S#~$5jA(Qn^;H%CCmIae4AE-Dsng|Hl*Ov!z72k3ZnJs{pp| z+pW`DDueC#mEWOf=ucJ!dTL}hzOeiS-i?m2E;`EKz4<&Lu~NnW?peqVU^@<+T3KKu z{yrI%Qy-Z%HEvLUz}n^~m?7x`xuCtNR#L2En!T>dQtIKdS#V-Hzt3RtwTeYtmQ&dR z6qXZvac*oc@BUYEH%@Ylv_1&tSjkbzzU6*h1(3^C`;1z;g_SmOtclS?KWk2VYE zM*oS<=C483XckW?GN|1jfh3Ro(h + +