├── FacesToSmileys
├── secret.json
├── Resources
│ ├── fear.png
│ ├── angry.png
│ ├── disgust.png
│ ├── neutral.png
│ ├── sadness.png
│ ├── contempt.png
│ ├── happiness.png
│ └── surprise.png
├── Views
│ ├── TakePhotoPage.xaml.cs
│ ├── Converters
│ │ └── BytesToImageSourceConverter.cs
│ └── TakePhotoView.xaml
├── Services
│ ├── IAnalyticService.cs
│ ├── IConfigurationService.cs
│ ├── IPhotoService.cs
│ ├── IFileService.cs
│ ├── IDetectionService.cs
│ ├── Implementations
│ │ ├── FileService.cs
│ │ ├── AnalyticService.cs
│ │ ├── ConfigurationService.cs
│ │ ├── PhotoService.cs
│ │ ├── DetectionService.cs
│ │ └── ImageProcessingService.cs
│ └── IImageProcessingService.cs
├── Models
│ ├── Secret.cs
│ ├── Point.cs
│ ├── Detection.cs
│ └── Rectangle.cs
├── ViewModels
│ ├── ViewModelBase.cs
│ └── TakePhotoViewModel.cs
├── App.cs
├── Properties
│ └── AssemblyInfo.cs
├── packages.config
└── FacesToSmileys.csproj
├── FacesToSmileys.UWP
├── photo.png
├── Assets
│ ├── secret.json
│ ├── icon.png
│ ├── StoreLogo.png
│ ├── SplashScreen.scale-150.png
│ ├── SplashScreen.scale-200.png
│ ├── LockScreenLogo.scale-200.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Wide310x150Logo.scale-200.png
│ ├── Square150x150Logo.scale-200.png
│ └── Square44x44Logo.targetsize-24_altform-unplated.png
├── App.xaml
├── MainPage.xaml
├── project.json
├── MainPage.xaml.cs
├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
├── Package.appxmanifest
├── App.xaml.cs
└── FacesToSmileys.UWP.csproj
├── FacesToSmileys.UITests
├── .DS_Store
├── packages.config
├── app.config
├── AppInitializer.cs
├── Tests.cs
└── FacesToSmileys.UITests.csproj
├── FacesToSmileys.iOS
├── Assets.xcassets
│ ├── Contents.json
│ ├── LaunchImage.launchimage
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-57x57@1x.png
│ │ ├── Icon-App-57x57@2x.png
│ │ ├── Icon-App-60x60@1x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-72x72@1x.png
│ │ ├── Icon-App-72x72@2x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ ├── Icon-App-76x76@3x.png
│ │ ├── Icon-Small-50x50@1x.png
│ │ ├── Icon-Small-50x50@2x.png
│ │ ├── Icon-App-83.5x83.5@2x.png
│ │ └── Contents.json
├── Resources
│ ├── photo.png
│ └── happiness.png
├── Entitlements.plist
├── Main.cs
├── AppDelegate.cs
├── packages.config
├── Info.plist
├── LaunchScreen.storyboard
└── FacesToSmileys.iOS.csproj
├── FacesToSmileys.Droid
├── Resources
│ ├── drawable
│ │ ├── photo.png
│ │ └── splash.png
│ ├── drawable-hdpi
│ │ └── icon.png
│ ├── drawable-xhdpi
│ │ └── icon.png
│ ├── drawable-xxhdpi
│ │ └── icon.png
│ ├── xml
│ │ └── file_paths.xml
│ ├── layout
│ │ ├── Toolbar.axml
│ │ └── Tabbar.axml
│ ├── AboutResources.txt
│ └── values
│ │ └── styles.xml
├── SplashActivity.cs
├── Assets
│ └── AboutAssets.txt
├── Properties
│ ├── AndroidManifest.xml
│ └── AssemblyInfo.cs
├── MainActivity.cs
├── MainApplication.cs
├── packages.config
└── FacesToSmileys.Droid.csproj
├── README.md
├── LICENSE
├── .gitignore
└── FacesToSmileys.sln
/FacesToSmileys/secret.json:
--------------------------------------------------------------------------------
1 | {
2 | "cognitive": "cognitive-key",
3 | "analytic": "analytic-key"
4 | }
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/photo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/photo.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/secret.json:
--------------------------------------------------------------------------------
1 | {
2 | "cognitive": "cognitivekey",
3 | "mobileCenter": "mobilecenterkey"
4 | }
--------------------------------------------------------------------------------
/FacesToSmileys.UITests/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UITests/.DS_Store
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/fear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/fear.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/icon.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/angry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/angry.png
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/disgust.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/disgust.png
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/neutral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/neutral.png
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/sadness.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/sadness.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Resources/photo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Resources/photo.png
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/contempt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/contempt.png
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/happiness.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/happiness.png
--------------------------------------------------------------------------------
/FacesToSmileys/Resources/surprise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys/Resources/surprise.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Resources/happiness.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Resources/happiness.png
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/drawable/photo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.Droid/Resources/drawable/photo.png
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/drawable/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.Droid/Resources/drawable/splash.png
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/drawable-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.Droid/Resources/drawable-hdpi/icon.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/drawable-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.Droid/Resources/drawable-xhdpi/icon.png
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/drawable-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.Droid/Resources/drawable-xxhdpi/icon.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [],
3 | "info": {
4 | "version": 1,
5 | "author": "xcode"
6 | }
7 | }
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spontoreau/FacesToSmileys/HEAD/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Main.cs:
--------------------------------------------------------------------------------
1 | using UIKit;
2 |
3 | namespace FacesToSmileys.iOS
4 | {
5 | public class Application
6 | {
7 | static void Main(string[] args) => UIApplication.Main(args, null, "AppDelegate");
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/FacesToSmileys/Views/TakePhotoPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 |
3 | namespace FacesToSmileys.Views
4 | {
5 | public partial class TakePhotoView : ContentPage
6 | {
7 | public TakePhotoView()
8 | {
9 | InitializeComponent();
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/FacesToSmileys.UITests/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/IAnalyticService.cs:
--------------------------------------------------------------------------------
1 | namespace FacesToSmileys.Services
2 | {
3 | ///
4 | /// Define an analytic service
5 | ///
6 | public interface IAnalyticService
7 | {
8 | ///
9 | /// Track an event.
10 | ///
11 | /// Message.
12 | void Track(string message);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/layout/Toolbar.axml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/IConfigurationService.cs:
--------------------------------------------------------------------------------
1 | using FacesToSmileys.Models;
2 |
3 | namespace FacesToSmileys.Services
4 | {
5 | ///
6 | /// Define a configuration service.
7 | ///
8 | public interface IConfigurationService
9 | {
10 | ///
11 | /// Gets the secret keys.
12 | ///
13 | /// The secret keys.
14 | Secret Secret { get; }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/IPhotoService.cs:
--------------------------------------------------------------------------------
1 | using System.Threading.Tasks;
2 |
3 | namespace FacesToSmileys.Services
4 | {
5 | ///
6 | /// Define a photo service
7 | ///
8 | public interface IPhotoService
9 | {
10 | ///
11 | /// Take a photo
12 | ///
13 | /// Byte array corresponding to the phpto
14 | Task TaskPhotoAsync();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/IFileService.cs:
--------------------------------------------------------------------------------
1 | namespace FacesToSmileys.Services
2 | {
3 | ///
4 | /// Define a file service.
5 | ///
6 | public interface IFileService
7 | {
8 | ///
9 | /// Load a resource
10 | ///
11 | /// Resource name
12 | /// Byte array
13 | byte[] LoadResource(string resourceName);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/FacesToSmileys.UITests/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/layout/Tabbar.axml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/SplashActivity.cs:
--------------------------------------------------------------------------------
1 | using Android.App;
2 | using Android.Content.PM;
3 | using Android.OS;
4 |
5 | namespace FacesToSmileys.Droid
6 | {
7 | [Activity(ScreenOrientation = ScreenOrientation.SensorLandscape, Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
8 | public class SplashActivity : Activity
9 | {
10 | protected override void OnCreate(Bundle bundle)
11 | {
12 | base.OnCreate(bundle);
13 | this.StartActivity(typeof(MainActivity));
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using Foundation;
2 | using UIKit;
3 |
4 | namespace FacesToSmileys.iOS
5 | {
6 | [Register("AppDelegate")]
7 | public class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
8 | {
9 | public override bool FinishedLaunching(UIApplication uiApplication, NSDictionary launchOptions)
10 | {
11 | Xamarin.Forms.Forms.Init();
12 | LoadApplication(new App());
13 | return base.FinishedLaunching(uiApplication, launchOptions);
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/FacesToSmileys.UITests/AppInitializer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Linq;
4 | using Xamarin.UITest;
5 | using Xamarin.UITest.Queries;
6 |
7 | namespace FacesToSmileys.UITests
8 | {
9 | public class AppInitializer
10 | {
11 | public static IApp StartApp(Platform platform)
12 | {
13 | if (platform == Platform.Android)
14 | {
15 | return ConfigureApp.Android.StartApp();
16 | }
17 |
18 | return ConfigureApp.iOS.StartApp();
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/FacesToSmileys/Models/Secret.cs:
--------------------------------------------------------------------------------
1 | namespace FacesToSmileys.Models
2 | {
3 | ///
4 | /// Secret.
5 | ///
6 | public class Secret
7 | {
8 | ///
9 | /// Gets or sets the cognitive secret key.
10 | ///
11 | /// The cognitive.
12 | public string Cognitive { get; set; }
13 |
14 | ///
15 | /// Gets or sets the mobile center secret key.
16 | ///
17 | /// The mobile center.
18 | public string Analytic { get; set; }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/IDetectionService.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Threading.Tasks;
3 | using FacesToSmileys.Models;
4 |
5 | namespace FacesToSmileys.Services
6 | {
7 | ///
8 | /// Define a detection service
9 | ///
10 | public interface IDetectionService
11 | {
12 | ///
13 | /// Detect all faces inside an image
14 | ///
15 | /// Byte array corresponding to an inmage
16 | /// Collection of detections
17 | Task> DetectAsync(byte[] image);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "Microsoft.Azure.Mobile": "0.14.0",
4 | "Microsoft.Azure.Mobile.Analytics": "0.14.0",
5 | "Microsoft.Azure.Mobile.Crashes": "0.14.0",
6 | "Microsoft.NETCore.UniversalWindowsPlatform": "5.3.3",
7 | "SimpleInjector": "3.1.0",
8 | "SkiaSharp": "1.59.1",
9 | "Xam.Plugin.Media": "3.0.1",
10 | "Xamarin.Forms": "2.3.4.247"
11 | },
12 | "frameworks": {
13 | "uap10.0": {}
14 | },
15 | "runtimes": {
16 | "win10-arm": {},
17 | "win10-arm-aot": {},
18 | "win10-x86": {},
19 | "win10-x86-aot": {},
20 | "win10-x64": {},
21 | "win10-x64-aot": {}
22 | }
23 | }
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with your package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
20 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/FacesToSmileys/Models/Point.cs:
--------------------------------------------------------------------------------
1 | namespace FacesToSmileys.Models
2 | {
3 | ///
4 | /// Point
5 | ///
6 | public class Point
7 | {
8 | ///
9 | /// X coordinate
10 | ///
11 | public float X { get; }
12 |
13 | ///
14 | /// Y coordinate
15 | ///
16 | public float Y { get; }
17 |
18 | ///
19 | /// Initializes a new instance of the class.
20 | ///
21 | /// X coordinate
22 | /// Y coordinate
23 | public Point(float x, float y)
24 | {
25 | X = x;
26 | Y = y;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/FacesToSmileys/ViewModels/ViewModelBase.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 |
5 | namespace FacesToSmileys.ViewModels
6 | {
7 | public class ViewModelBase : INotifyPropertyChanged
8 | {
9 | public event PropertyChangedEventHandler PropertyChanged;
10 |
11 | public void Set(string propertyName, ref T oldValue, T newValue)
12 | {
13 | if(string.IsNullOrWhiteSpace(propertyName))
14 | throw new ArgumentNullException(propertyName);
15 |
16 | if(!EqualityComparer.Default.Equals(oldValue, newValue))
17 | {
18 | oldValue = newValue;
19 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
20 | }
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/Implementations/FileService.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using System.Reflection;
3 |
4 | namespace FacesToSmileys.Services.Implementations
5 | {
6 | ///
7 | /// File service.
8 | ///
9 | public class FileService : IFileService
10 | {
11 | ///
12 | /// Load a resource
13 | ///
14 | /// Resource name
15 | /// Byte array
16 | public byte[] LoadResource(string filename)
17 | {
18 | using (Stream s = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(filename))
19 | {
20 | var bytes = new byte[s.Length];
21 | s.Read(bytes, 0, (int)s.Length);
22 | return bytes;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using Android.App;
2 | using Android.Content.PM;
3 | using Android.OS;
4 |
5 | namespace FacesToSmileys.Droid
6 | {
7 | [Activity(ScreenOrientation = ScreenOrientation.FullSensor, MainLauncher = false, Label = "FacesToSmileys.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
8 | public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity
9 | {
10 | protected override void OnCreate(Bundle savedInstanceState)
11 | {
12 | TabLayoutResource = Resource.Layout.Tabbar;
13 | ToolbarResource = Resource.Layout.Toolbar;
14 |
15 | base.OnCreate(savedInstanceState);
16 |
17 | Xamarin.Forms.Forms.Init(this, savedInstanceState);
18 |
19 | LoadApplication(new App());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/FacesToSmileys/Models/Detection.cs:
--------------------------------------------------------------------------------
1 | namespace FacesToSmileys.Models
2 | {
3 | ///
4 | /// Detection
5 | ///
6 | public class Detection
7 | {
8 | ///
9 | /// Emotion
10 | ///
11 | public string Emotion { get; }
12 |
13 | ///
14 | /// Detection rectangle
15 | ///
16 | public Rectangle Rectangle { get; }
17 |
18 | ///
19 | /// Initializes a new instance of the class.
20 | ///
21 | /// Emotion
22 | /// Detection rectangle
23 | public Detection(string emotion, Rectangle rectangle)
24 | {
25 | Emotion = emotion;
26 | Rectangle = rectangle;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FacesToSmileys
2 | 
3 |
4 | ## What is FacesToSmileys?
5 | 👦 📷 🙂 A Xamarin application which takes picture and converts faces to smileys
6 |
7 | This application is built with:
8 | - [Xamarin](https://www.xamarin.com/) - Application development
9 | - [SkiaSharp](https://github.com/mono/SkiaSharp) - Image processing
10 | - [Azure cognitive services](https://www.microsoft.com/cognitive-services/en-us/apis) - AI with Emotion Api
11 | - [Visual Studio Mobile Center](https://mobile.azure.com/login) - Analytics & crashes
12 |
13 | ## Microsoft DevOps Day
14 | This application was developed as a PoC for the *Microsoft DevOps Day* (Slides can be found [here](https://speakerdeck.com/spontoreau/devops-day-number-3-xamarin-au-coeur-de-la-transformation-digitale) - **FR only**)
15 |
16 | ## Licence
17 | MIT
18 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 |
17 | namespace FacesToSmileys.UWP
18 | {
19 | ///
20 | /// An empty page that can be used on its own or navigated to within a Frame.
21 | ///
22 | public sealed partial class MainPage
23 | {
24 | public MainPage()
25 | {
26 | this.InitializeComponent();
27 |
28 | LoadApplication(new FacesToSmileys.App());
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/FacesToSmileys/App.cs:
--------------------------------------------------------------------------------
1 | using FacesToSmileys.Views;
2 | using FacesToSmileys.ViewModels;
3 | using Xamarin.Forms;
4 | using FacesToSmileys.Services.Implementations;
5 | using FacesToSmileys.Services;
6 | using SimpleInjector;
7 |
8 | namespace FacesToSmileys
9 | {
10 | public class App : Application
11 | {
12 | public App()
13 | {
14 | var container = new Container();
15 | container.Register();
16 | container.Register();
17 | container.Register();
18 | container.Register();
19 | container.Register();
20 | container.Register();
21 | container.Register();
22 |
23 | MainPage = new TakePhotoView
24 | {
25 | BindingContext = container.GetInstance()
26 | };
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/FacesToSmileys/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 |
4 | // Information about this assembly is defined by the following attributes.
5 | // Change them to the values specific to your project.
6 |
7 | [assembly: AssemblyTitle("FacesToSmileys")]
8 | [assembly: AssemblyDescription("")]
9 | [assembly: AssemblyConfiguration("")]
10 | [assembly: AssemblyCompany("")]
11 | [assembly: AssemblyProduct("")]
12 | [assembly: AssemblyCopyright("pontoreau")]
13 | [assembly: AssemblyTrademark("")]
14 | [assembly: AssemblyCulture("")]
15 |
16 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
17 | // The form "{Major}.{Minor}.*" will automatically update the build and revision,
18 | // and "{Major}.{Minor}.{Build}.*" will update just the revision.
19 |
20 | [assembly: AssemblyVersion("1.0.*")]
21 |
22 | // The following attributes are used to specify the signing key for the assembly,
23 | // if desired. See the Mono documentation for more information about signing.
24 |
25 | //[assembly: AssemblyDelaySign(false)]
26 | //[assembly: AssemblyKeyFile("")]
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Sylvain PONTOREAU
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using Android.App;
4 |
5 | // Information about this assembly is defined by the following attributes.
6 | // Change them to the values specific to your project.
7 |
8 | [assembly: AssemblyTitle("FacesToSmileys.Droid")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("")]
13 | [assembly: AssemblyCopyright("pontoreau")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
18 | // The form "{Major}.{Minor}.*" will automatically update the build and revision,
19 | // and "{Major}.{Minor}.{Build}.*" will update just the revision.
20 |
21 | [assembly: AssemblyVersion("1.0.0")]
22 |
23 | // The following attributes are used to specify the signing key for the assembly,
24 | // if desired. See the Mono documentation for more information about signing.
25 |
26 | //[assembly: AssemblyDelaySign(false)]
27 | //[assembly: AssemblyKeyFile("")]
28 |
--------------------------------------------------------------------------------
/FacesToSmileys/Views/Converters/BytesToImageSourceConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.IO;
4 | using Xamarin.Forms;
5 |
6 | namespace FacesToSmileys.Views.Converters
7 | {
8 | ///
9 | /// Byte array to image converter
10 | ///
11 | public class BytesToImageSourceConverter : IValueConverter
12 | {
13 | ///
14 | /// Convert a byte array to an image
15 | ///
16 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
17 | {
18 | var byteArray = value as byte[];
19 | return byteArray != null && byteArray.Length > 0 ? ImageSource.FromStream(() => new MemoryStream(byteArray)) : null;
20 | }
21 |
22 | ///
23 | /// Convert an image to a byte array
24 | ///
25 | /// Not implemented method
26 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
27 | {
28 | throw new NotImplementedException();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("FacesToSmileys.UWP")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("FacesToSmileys.UWP")]
13 | [assembly: AssemblyCopyright("Copyright © 2017")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Version information for an assembly consists of the following four values:
18 | //
19 | // Major Version
20 | // Minor Version
21 | // Build Number
22 | // Revision
23 | //
24 | // You can specify all the values or you can default the Build and Revision Numbers
25 | // by using the '*' as shown below:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/FacesToSmileys/Services/Implementations/AnalyticService.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Azure.Mobile;
2 | using Microsoft.Azure.Mobile.Analytics;
3 | using Microsoft.Azure.Mobile.Crashes;
4 |
5 | namespace FacesToSmileys.Services.Implementations
6 | {
7 | ///
8 | /// Analytic sercice.
9 | ///
10 | public class AnalyticSercice : IAnalyticService
11 | {
12 | ///
13 | /// Initializes the class.
14 | ///
15 | static AnalyticSercice()
16 | {
17 | MobileCenter.Start(typeof(Analytics), typeof(Crashes));
18 | }
19 |
20 | ///
21 | /// Initializes a new instance of the class.
22 | ///
23 | public AnalyticSercice(IConfigurationService configurationService)
24 | {
25 | MobileCenter.Configure(configurationService.Secret.Analytic);
26 | }
27 |
28 | ///
29 | /// Track the specified message.
30 | ///
31 | /// Message.
32 | public void Track(string message)
33 | {
34 | Analytics.TrackEvent(message);
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/Implementations/ConfigurationService.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using System.Reflection;
3 | using FacesToSmileys.Models;
4 | using Newtonsoft.Json;
5 | using Newtonsoft.Json.Serialization;
6 |
7 | namespace FacesToSmileys.Services.Implementations
8 | {
9 | ///
10 | /// Configuration service.
11 | ///
12 | public class ConfigurationService : IConfigurationService
13 | {
14 | ///
15 | /// Gets the secret keys.
16 | ///
17 | /// The secret keys.
18 | public Secret Secret { get; }
19 |
20 | ///
21 | /// Initializes a new instance of the
22 | /// class.
23 | ///
24 | public ConfigurationService()
25 | {
26 | using (var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream("FacesToSmileys.secret.json"))
27 | {
28 | using (var reader = new StreamReader(stream))
29 | {
30 | Secret = JsonConvert.DeserializeObject(reader.ReadToEnd(), new JsonSerializerSettings
31 | {
32 | ContractResolver = new CamelCasePropertyNamesContractResolver()
33 | });
34 | }
35 | }
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/Implementations/PhotoService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Threading.Tasks;
4 | using Plugin.Media;
5 | using Plugin.Media.Abstractions;
6 |
7 | namespace FacesToSmileys.Services.Implementations
8 | {
9 | ///
10 | /// Photo service
11 | ///
12 | public class PhotoService : IPhotoService
13 | {
14 | ///
15 | /// Take a photo
16 | ///
17 | /// Byte array corresponding to the phpto
18 | public async Task TaskPhotoAsync()
19 | {
20 | await CrossMedia.Current.Initialize();
21 |
22 | if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
23 | throw new InvalidOperationException("No camera available");
24 |
25 | var mediaOptions = new StoreCameraMediaOptions
26 | {
27 | Directory = "Picture",
28 | Name = $"{Guid.NewGuid()}.bmp",
29 | PhotoSize = PhotoSize.Medium
30 | };
31 |
32 | using (var file = await CrossMedia.Current.TakePhotoAsync(mediaOptions))
33 | {
34 | using(var ms = new MemoryStream())
35 | {
36 | file?.GetStream()?.CopyTo(ms);
37 | return ms.ToArray();
38 | }
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/FacesToSmileys/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/FacesToSmileys/Views/TakePhotoView.xaml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/IImageProcessingService.cs:
--------------------------------------------------------------------------------
1 | using FacesToSmileys.Models;
2 |
3 | namespace FacesToSmileys.Services
4 | {
5 | ///
6 | /// Define an image processing service
7 | ///
8 | public interface IImageProcessingService
9 | {
10 | ///
11 | /// Open an image
12 | ///
13 | /// Byte array corresponding to the image
14 | void Open(byte[] image);
15 |
16 | ///
17 | /// Draw a debug rectangle on the image
18 | ///
19 | /// Rectangle to draw
20 | void DrawDebugRect(Rectangle rectangle);
21 |
22 | ///
23 | /// Draw a debug line on the image
24 | ///
25 | /// Start point
26 | /// End point
27 | void DrawDebugLine(Point start, Point end);
28 |
29 | ///
30 | /// Draw another image on the immage
31 | ///
32 | /// Byte array corresponding to an image
33 | /// Drawing bounds
34 | void DrawImage(byte[] image, Rectangle bounds);
35 |
36 | ///
37 | /// Get the modify image
38 | ///
39 | /// Byte array corresponding to the modify image
40 | byte[] GetImage();
41 |
42 | ///
43 | /// Close the current image
44 | ///
45 | void Close();
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | FacesToSmileys.UWP
7 | sbovo
8 | Assets\StoreLogo.png
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDisplayName
6 | FacesToSmileys
7 | CFBundleName
8 | FacesToSmileys
9 | CFBundleIdentifier
10 | com.sypontor.facestosmileys
11 | CFBundleShortVersionString
12 | 1.0
13 | CFBundleVersion
14 | 1.0
15 | LSRequiresIPhoneOS
16 |
17 | MinimumOSVersion
18 | 8.0
19 | UIDeviceFamily
20 |
21 | 1
22 | 2
23 |
24 | UIRequiredDeviceCapabilities
25 |
26 | armv7
27 |
28 | UISupportedInterfaceOrientations
29 |
30 | UIInterfaceOrientationLandscapeLeft
31 | UIInterfaceOrientationLandscapeRight
32 |
33 | UISupportedInterfaceOrientations~ipad
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationPortraitUpsideDown
37 | UIInterfaceOrientationLandscapeLeft
38 | UIInterfaceOrientationLandscapeRight
39 |
40 | XSAppIconAssets
41 | Assets.xcassets/AppIcon.appiconset
42 | NSCameraUsageDescription
43 | This app needs access to the camera to take photos.
44 | NSPhotoLibraryUsageDescription
45 | This app needs access to photos.
46 | NSMicrophoneUsageDescription
47 | This app needs access to microphone.
48 | UILaunchStoryboardName
49 | LaunchScreen
50 |
51 |
52 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/AboutResources.txt:
--------------------------------------------------------------------------------
1 | Images, layout descriptions, binary blobs and string dictionaries can be included
2 | in your application as resource files. Various Android APIs are designed to
3 | operate on the resource IDs instead of dealing with images, strings or binary blobs
4 | directly.
5 |
6 | For example, a sample Android app that contains a user interface layout (main.axml),
7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
8 | would keep its resources in the "Resources" directory of the application:
9 |
10 | Resources/
11 | drawable/
12 | icon.png
13 |
14 | layout/
15 | main.axml
16 |
17 | values/
18 | strings.xml
19 |
20 | In order to get the build system to recognize Android resources, set the build action to
21 | "AndroidResource". The native Android APIs do not operate directly with filenames, but
22 | instead operate on resource IDs. When you compile an Android application that uses resources,
23 | the build system will package the resources for distribution and generate a class called "R"
24 | (this is an Android convention) that contains the tokens for each one of the resources
25 | included. For example, for the above Resources layout, this is what the R class would expose:
26 |
27 | public class R {
28 | public class drawable {
29 | public const int icon = 0x123;
30 | }
31 |
32 | public class layout {
33 | public const int main = 0x456;
34 | }
35 |
36 | public class strings {
37 | public const int first_string = 0xabc;
38 | public const int second_string = 0xbcd;
39 | }
40 | }
41 |
42 | You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
43 | to reference the layout/main.axml file, or R.strings.first_string to reference the first
44 | string in the dictionary file values/strings.xml.
45 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/MainApplication.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Android.App;
4 | using Android.OS;
5 | using Android.Runtime;
6 | using Plugin.CurrentActivity;
7 |
8 | namespace FacesToSmileys.Droid
9 | {
10 | //You can specify additional application information in this attribute
11 | [Application]
12 | public class MainApplication : Application, Application.IActivityLifecycleCallbacks
13 | {
14 | public MainApplication(IntPtr handle, JniHandleOwnership transer)
15 | :base(handle, transer)
16 | {
17 | }
18 |
19 | public override void OnCreate()
20 | {
21 | base.OnCreate();
22 | RegisterActivityLifecycleCallbacks(this);
23 | //A great place to initialize Xamarin.Insights and Dependency Services!
24 | }
25 |
26 | public override void OnTerminate()
27 | {
28 | base.OnTerminate();
29 | UnregisterActivityLifecycleCallbacks(this);
30 | }
31 |
32 | public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
33 | {
34 | CrossCurrentActivity.Current.Activity = activity;
35 | }
36 |
37 | public void OnActivityDestroyed(Activity activity)
38 | {
39 | }
40 |
41 | public void OnActivityPaused(Activity activity)
42 | {
43 | }
44 |
45 | public void OnActivityResumed(Activity activity)
46 | {
47 | CrossCurrentActivity.Current.Activity = activity;
48 | }
49 |
50 | public void OnActivitySaveInstanceState(Activity activity, Bundle outState)
51 | {
52 | }
53 |
54 | public void OnActivityStarted(Activity activity)
55 | {
56 | CrossCurrentActivity.Current.Activity = activity;
57 | }
58 |
59 | public void OnActivityStopped(Activity activity)
60 | {
61 | }
62 | }
63 | }
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
25 |
28 |
33 |
34 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/Implementations/DetectionService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Threading.Tasks;
6 | using FacesToSmileys.Models;
7 | using Microsoft.ProjectOxford.Emotion;
8 |
9 | namespace FacesToSmileys.Services.Implementations
10 | {
11 | ///
12 | /// Detection service
13 | ///
14 | public class DetectionService : IDetectionService
15 | {
16 | ///
17 | /// Configuration service
18 | ///
19 | IConfigurationService ConfigurationService { get; set; }
20 |
21 | ///
22 | /// Initializes a new instance of the class.
23 | ///
24 | public DetectionService(IConfigurationService configurationService)
25 | {
26 | ConfigurationService = configurationService;
27 | }
28 |
29 | ///
30 | /// Detect all faces inside an image
31 | ///
32 | /// Byte array corresponding to an inmage
33 | /// Collection of detections
34 | public async Task> DetectAsync(byte[] image)
35 | {
36 | var cognitiveKey = ConfigurationService.Secret.Cognitive;
37 | var emotionServiceClient = new EmotionServiceClient(cognitiveKey);
38 |
39 | using(var stream = new MemoryStream(image))
40 | {
41 | var emotions = await emotionServiceClient.RecognizeAsync(stream);
42 | return emotions
43 | .Select(x => new Detection(x.Scores.ToRankedList().First().Key, new Rectangle(x.FaceRectangle.Left, x.FaceRectangle.Top, x.FaceRectangle.Width, x.FaceRectangle.Height)))
44 | .ToList();
45 | }
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/FacesToSmileys.UITests/Tests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Linq;
4 | using NUnit.Framework;
5 | using Xamarin.UITest;
6 | using Xamarin.UITest.Queries;
7 |
8 | namespace FacesToSmileys.UITests
9 | {
10 | [TestFixture(Platform.Android)]
11 | //[TestFixture(Platform.iOS)]
12 | public class Tests
13 | {
14 | IApp app;
15 | Platform platform;
16 |
17 | public Tests(Platform platform)
18 | {
19 | this.platform = platform;
20 | }
21 |
22 | [SetUp]
23 | public void BeforeEachTest()
24 | {
25 | app = AppInitializer.StartApp(platform);
26 | }
27 |
28 | [Test]
29 | public void TakeAPictureButton_Portait_IsDisplayed()
30 | {
31 | AppResult[] results = app.WaitForElement(c => c.Marked("Take a picture"));
32 | Assert.IsTrue(results.Any());
33 | app.Screenshot("Take a picture button in portrait mode");
34 | }
35 |
36 | [Test]
37 | public void TakeAPictureButton_Landscape_IsDisplayed()
38 | {
39 | app.SetOrientationLandscape();
40 | AppResult[] results = app.WaitForElement(c => c.Marked("Take a picture"));
41 | Assert.IsTrue(results.Any());
42 | app.Screenshot("Take a picture button in landscape mode");
43 | }
44 |
45 | [Test]
46 | public void Camera_IsDiplayed()
47 | {
48 | app.Tap(c => c.Marked("Take a picture"));
49 | app.Screenshot("Camera");
50 | }
51 |
52 | [Test]
53 | public void Camera_TapToTakeAPicture()
54 | {
55 | app.Tap(c => c.Marked("Take a picture"));
56 | app.TapCoordinates(1195, 300);
57 | AppResult[] results = app.WaitForElement(c => c.Marked("Take a picture"));
58 | Assert.IsTrue(results.Any());
59 | app.Screenshot("Displaying analyzed picture");
60 |
61 | }
62 |
63 |
64 |
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/FacesToSmileys/Models/Rectangle.cs:
--------------------------------------------------------------------------------
1 | namespace FacesToSmileys.Models
2 | {
3 | ///
4 | /// Rectangle
5 | ///
6 | public class Rectangle
7 | {
8 | ///
9 | /// X coordinate
10 | ///
11 | public float X { get; }
12 |
13 | ///
14 | /// Y coordinate
15 | ///
16 | public float Y { get; }
17 |
18 | ///
19 | /// Width
20 | ///
21 | public float Width { get; }
22 |
23 | ///
24 | /// Height
25 | ///
26 | public float Height { get; }
27 |
28 | ///
29 | /// Top left point
30 | ///
31 | public Point TopLeft
32 | {
33 | get
34 | {
35 | return new Point(X, Y);
36 | }
37 | }
38 |
39 | ///
40 | /// Top right point
41 | ///
42 | public Point TopRight
43 | {
44 | get
45 | {
46 | return new Point(X + Width, Y);
47 | }
48 | }
49 |
50 | ///
51 | /// Bottom left point
52 | ///
53 | public Point BottomLeft
54 | {
55 | get
56 | {
57 | return new Point(X, Y + Height);
58 | }
59 | }
60 |
61 | ///
62 | /// Bottom right point
63 | ///
64 | public Point BottomRight
65 | {
66 | get
67 | {
68 | return new Point(X + Width, Y + Height);
69 | }
70 | }
71 |
72 | ///
73 | /// Initializes a new instance of the class.
74 | ///
75 | /// X coordinate
76 | /// Y coordinate
77 | /// Width
78 | /// Height
79 | public Rectangle(float x, float y, float width, float height)
80 | {
81 | X = x;
82 | Y = y;
83 | Width = width;
84 | Height = height;
85 | }
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/FacesToSmileys.UITests/FacesToSmileys.UITests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {89B34DC0-9AA7-4C49-B638-A358BF5B6220}
7 | Library
8 | FacesToSmileys.UITests
9 | FacesToSmileys.UITests
10 | v4.5
11 |
12 |
13 | true
14 | full
15 | false
16 | bin\Debug
17 | DEBUG;
18 | prompt
19 | 4
20 |
21 |
22 | true
23 | bin\Release
24 | prompt
25 | 4
26 |
27 |
28 |
29 | ..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.dll
30 | False
31 |
32 |
33 | ..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.interfaces.dll
34 | False
35 |
36 |
37 | ..\packages\NUnit.2.6.4\lib\nunit.framework.dll
38 | True
39 |
40 |
41 | ..\packages\NUnitTestAdapter.2.0.0\lib\nunit.util.dll
42 | False
43 |
44 |
45 | ..\packages\NUnitTestAdapter.2.0.0\lib\NUnit.VisualStudio.TestAdapter.dll
46 | False
47 |
48 |
49 |
50 | ..\packages\Xamarin.UITest.2.0.1\lib\Xamarin.UITest.dll
51 | True
52 |
53 |
54 |
55 |
56 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}
57 | FacesToSmileys.iOS
58 | False
59 | False
60 |
61 |
62 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}
63 | FacesToSmileys.Droid
64 | False
65 | False
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.ApplicationModel;
7 | using Windows.ApplicationModel.Activation;
8 | using Windows.Foundation;
9 | using Windows.Foundation.Collections;
10 | using Windows.UI.Xaml;
11 | using Windows.UI.Xaml.Controls;
12 | using Windows.UI.Xaml.Controls.Primitives;
13 | using Windows.UI.Xaml.Data;
14 | using Windows.UI.Xaml.Input;
15 | using Windows.UI.Xaml.Media;
16 | using Windows.UI.Xaml.Navigation;
17 |
18 | namespace FacesToSmileys.UWP
19 | {
20 | ///
21 | /// Provides application-specific behavior to supplement the default Application class.
22 | ///
23 | sealed partial class App : Application
24 | {
25 | ///
26 | /// Initializes the singleton application object. This is the first line of authored code
27 | /// executed, and as such is the logical equivalent of main() or WinMain().
28 | ///
29 | public App()
30 | {
31 | this.InitializeComponent();
32 | this.Suspending += OnSuspending;
33 | }
34 |
35 | ///
36 | /// Invoked when the application is launched normally by the end user. Other entry points
37 | /// will be used such as when the application is launched to open a specific file.
38 | ///
39 | /// Details about the launch request and process.
40 | protected override void OnLaunched(LaunchActivatedEventArgs e)
41 | {
42 | //#if DEBUG
43 | // if (System.Diagnostics.Debugger.IsAttached)
44 | // {
45 | // this.DebugSettings.EnableFrameRateCounter = true;
46 | // }
47 | //#endif
48 | Frame rootFrame = Window.Current.Content as Frame;
49 |
50 | // Do not repeat app initialization when the Window already has content,
51 | // just ensure that the window is active
52 | if (rootFrame == null)
53 | {
54 | // Create a Frame to act as the navigation context and navigate to the first page
55 | rootFrame = new Frame();
56 |
57 | rootFrame.NavigationFailed += OnNavigationFailed;
58 |
59 |
60 |
61 | Xamarin.Forms.Forms.Init(e);
62 |
63 |
64 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
65 | {
66 | //TODO: Load state from previously suspended application
67 | }
68 |
69 | // Place the frame in the current Window
70 | Window.Current.Content = rootFrame;
71 | }
72 |
73 | if (e.PrelaunchActivated == false)
74 | {
75 | if (rootFrame.Content == null)
76 | {
77 | // When the navigation stack isn't restored navigate to the first page,
78 | // configuring the new page by passing required information as a navigation
79 | // parameter
80 | rootFrame.Navigate(typeof(MainPage));
81 | }
82 | // Ensure the current window is active
83 | Window.Current.Activate();
84 | }
85 | }
86 |
87 | ///
88 | /// Invoked when Navigation to a certain page fails
89 | ///
90 | /// The Frame which failed navigation
91 | /// Details about the navigation failure
92 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
93 | {
94 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
95 | }
96 |
97 | ///
98 | /// Invoked when application execution is being suspended. Application state is saved
99 | /// without knowing whether the application will be terminated or resumed with the contents
100 | /// of memory still intact.
101 | ///
102 | /// The source of the suspend request.
103 | /// Details about the suspend request.
104 | private void OnSuspending(object sender, SuspendingEventArgs e)
105 | {
106 | var deferral = e.SuspendingOperation.GetDeferral();
107 | //TODO: Save application state and stop any background activity
108 | deferral.Complete();
109 | }
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/FacesToSmileys/ViewModels/TakePhotoViewModel.cs:
--------------------------------------------------------------------------------
1 | using System.Threading.Tasks;
2 | using System.Windows.Input;
3 | using FacesToSmileys.Services;
4 | using Xamarin.Forms;
5 |
6 | namespace FacesToSmileys.ViewModels
7 | {
8 | ///
9 | /// Take photo ViewModel.
10 | ///
11 | public class TakePhotoViewModel : ViewModelBase
12 | {
13 | ///
14 | /// Gets the photo service.
15 | ///
16 | /// The photo service.
17 | IPhotoService PhotoService { get; }
18 |
19 | ///
20 | /// Gets the detection service.
21 | ///
22 | /// The detection service.
23 | IDetectionService DetectionService { get; }
24 |
25 | ///
26 | /// Gets the image processing service.
27 | ///
28 | /// The image processing service.
29 | IImageProcessingService ImageProcessingService { get; }
30 |
31 | ///
32 | /// Gets the analytic service.
33 | ///
34 | /// The analytic service.
35 | IAnalyticService AnalyticService { get; }
36 |
37 | ///
38 | /// Gets the file service.
39 | ///
40 | /// The file service.
41 | IFileService FileService { get; }
42 |
43 | byte[] _photo;
44 |
45 | ///
46 | /// Gets or sets the photo.
47 | ///
48 | /// The photo.
49 | public byte[] Photo
50 | {
51 | get => _photo;
52 | set => Set(nameof(Photo), ref _photo, value);
53 | }
54 |
55 | bool _isBusy;
56 |
57 | ///
58 | /// Gets a value indicating whether this is busy.
59 | ///
60 | /// true if is busy; otherwise, false.
61 | public bool IsBusy
62 | {
63 | get => _isBusy;
64 | set => Set(nameof(IsBusy), ref _isBusy, value);
65 | }
66 |
67 | ///
68 | /// Gets the take photo command.
69 | ///
70 | /// The take photo command.
71 | public ICommand TakePhotoCommand { get; private set; }
72 |
73 | ///
74 | /// Initializes a new instance of the class.
75 | ///
76 | /// Photo service.
77 | /// Image processiong service.
78 | /// Detection service.
79 | /// File service.
80 | public TakePhotoViewModel(IPhotoService photoService,
81 | IImageProcessingService imageProcessiongService,
82 | IDetectionService detectionService,
83 | IFileService fileService,
84 | IAnalyticService analyticService)
85 | {
86 | PhotoService = photoService;
87 | ImageProcessingService = imageProcessiongService;
88 | DetectionService = detectionService;
89 | FileService = fileService;
90 | AnalyticService = analyticService;
91 |
92 | TakePhotoCommand = new Command(async () => await TakePhoto());
93 | }
94 |
95 | ///
96 | /// Takes the photo.
97 | ///
98 | /// The photo.
99 | public async Task TakePhoto()
100 | {
101 | IsBusy = true;
102 | var photo = await PhotoService.TaskPhotoAsync();
103 |
104 | if (photo.Length == 0)
105 | {
106 | Photo = photo;
107 | return;
108 | }
109 |
110 | // Track Camera usage
111 | AnalyticService.Track("Photo taken");
112 |
113 | ImageProcessingService.Open(photo);
114 | var detections = await DetectionService.DetectAsync(photo);
115 |
116 | foreach (var d in detections)
117 | {
118 | // Track each detection
119 | AnalyticService.Track($"Detection done:{d.Emotion.ToLower()}");
120 |
121 | #if DEBUG
122 | ImageProcessingService.DrawDebugRect(d.Rectangle);
123 | #endif
124 | ImageProcessingService.DrawImage(FileService.LoadResource($"{d.Emotion.ToLower()}.png"), d.Rectangle);
125 | }
126 |
127 | var finalImage = ImageProcessingService.GetImage();
128 | ImageProcessingService.Close();
129 |
130 | Photo = finalImage;
131 | IsBusy = false;
132 | }
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images":[
3 | {
4 | "idiom":"iphone",
5 | "size":"20x20",
6 | "scale":"2x",
7 | "filename":"Icon-App-20x20@2x.png"
8 | },
9 | {
10 | "idiom":"iphone",
11 | "size":"20x20",
12 | "scale":"3x",
13 | "filename":"Icon-App-20x20@3x.png"
14 | },
15 | {
16 | "idiom":"iphone",
17 | "size":"29x29",
18 | "scale":"1x",
19 | "filename":"Icon-App-29x29@1x.png"
20 | },
21 | {
22 | "idiom":"iphone",
23 | "size":"29x29",
24 | "scale":"2x",
25 | "filename":"Icon-App-29x29@2x.png"
26 | },
27 | {
28 | "idiom":"iphone",
29 | "size":"29x29",
30 | "scale":"3x",
31 | "filename":"Icon-App-29x29@3x.png"
32 | },
33 | {
34 | "idiom":"iphone",
35 | "size":"40x40",
36 | "scale":"1x",
37 | "filename":"Icon-App-40x40@1x.png"
38 | },
39 | {
40 | "idiom":"iphone",
41 | "size":"40x40",
42 | "scale":"2x",
43 | "filename":"Icon-App-40x40@2x.png"
44 | },
45 | {
46 | "idiom":"iphone",
47 | "size":"40x40",
48 | "scale":"3x",
49 | "filename":"Icon-App-40x40@3x.png"
50 | },
51 | {
52 | "idiom":"iphone",
53 | "size":"57x57",
54 | "scale":"1x",
55 | "filename":"Icon-App-57x57@1x.png"
56 | },
57 | {
58 | "idiom":"iphone",
59 | "size":"57x57",
60 | "scale":"2x",
61 | "filename":"Icon-App-57x57@2x.png"
62 | },
63 | {
64 | "idiom":"iphone",
65 | "size":"60x60",
66 | "scale":"1x",
67 | "filename":"Icon-App-60x60@1x.png"
68 | },
69 | {
70 | "idiom":"iphone",
71 | "size":"60x60",
72 | "scale":"2x",
73 | "filename":"Icon-App-60x60@2x.png"
74 | },
75 | {
76 | "idiom":"iphone",
77 | "size":"60x60",
78 | "scale":"3x",
79 | "filename":"Icon-App-60x60@3x.png"
80 | },
81 | {
82 | "idiom":"iphone",
83 | "size":"76x76",
84 | "scale":"1x",
85 | "filename":"Icon-App-76x76@1x.png"
86 | },
87 | {
88 | "idiom":"ipad",
89 | "size":"20x20",
90 | "scale":"1x",
91 | "filename":"Icon-App-20x20@1x.png"
92 | },
93 | {
94 | "idiom":"ipad",
95 | "size":"20x20",
96 | "scale":"2x",
97 | "filename":"Icon-App-20x20@2x.png"
98 | },
99 | {
100 | "idiom":"ipad",
101 | "size":"29x29",
102 | "scale":"1x",
103 | "filename":"Icon-App-29x29@1x.png"
104 | },
105 | {
106 | "idiom":"ipad",
107 | "size":"29x29",
108 | "scale":"2x",
109 | "filename":"Icon-App-29x29@2x.png"
110 | },
111 | {
112 | "idiom":"ipad",
113 | "size":"40x40",
114 | "scale":"1x",
115 | "filename":"Icon-App-40x40@1x.png"
116 | },
117 | {
118 | "idiom":"ipad",
119 | "size":"40x40",
120 | "scale":"2x",
121 | "filename":"Icon-App-40x40@2x.png"
122 | },
123 | {
124 | "size" : "50x50",
125 | "idiom" : "ipad",
126 | "filename" : "Icon-Small-50x50@1x.png",
127 | "scale" : "1x"
128 | },
129 | {
130 | "size" : "50x50",
131 | "idiom" : "ipad",
132 | "filename" : "Icon-Small-50x50@2x.png",
133 | "scale" : "2x"
134 | },
135 | {
136 | "idiom":"ipad",
137 | "size":"72x72",
138 | "scale":"1x",
139 | "filename":"Icon-App-72x72@1x.png"
140 | },
141 | {
142 | "idiom":"ipad",
143 | "size":"72x72",
144 | "scale":"2x",
145 | "filename":"Icon-App-72x72@2x.png"
146 | },
147 | {
148 | "idiom":"ipad",
149 | "size":"76x76",
150 | "scale":"1x",
151 | "filename":"Icon-App-76x76@1x.png"
152 | },
153 | {
154 | "idiom":"ipad",
155 | "size":"76x76",
156 | "scale":"2x",
157 | "filename":"Icon-App-76x76@2x.png"
158 | },
159 | {
160 | "idiom":"ipad",
161 | "size":"76x76",
162 | "scale":"3x",
163 | "filename":"Icon-App-76x76@3x.png"
164 | },
165 | {
166 | "idiom":"ipad",
167 | "size":"83.5x83.5",
168 | "scale":"2x",
169 | "filename":"Icon-App-83.5x83.5@2x.png"
170 | }
171 | ],
172 | "info":{
173 | "version":1,
174 | "author":"makeappicon"
175 | }
176 | }
177 |
--------------------------------------------------------------------------------
/FacesToSmileys/Services/Implementations/ImageProcessingService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using FacesToSmileys.Models;
4 | using SkiaSharp;
5 |
6 | namespace FacesToSmileys.Services.Implementations
7 | {
8 | ///
9 | /// Image processing service
10 | ///
11 | public class ImageProcessingService : IImageProcessingService
12 | {
13 | ///
14 | /// Opened image
15 | ///
16 | SKImage Image { get; set; }
17 |
18 | ///
19 | /// Opened image information
20 | ///
21 | SKImageInfo ImageInfo { get; set; }
22 |
23 | ///
24 | /// Paint object
25 | ///
26 | SKPaint Paint { get; set; }
27 |
28 | ///
29 | /// Surface for drawing
30 | ///
31 | SKSurface Surface { get; set; }
32 |
33 | ///
34 | /// True if image is open, otherwise false
35 | ///
36 | bool IsOpen { get; set; }
37 |
38 | ///
39 | /// Open an image
40 | ///
41 | /// Byte array corresponding to the image
42 | public void Open(byte[] image)
43 | {
44 | if (IsOpen)
45 | throw new InvalidOperationException("An image is opened");
46 |
47 | using(var stream = new MemoryStream(image))
48 | {
49 | using (var skStream = new SKManagedStream(stream))
50 | {
51 | using (var codec = SKCodec.Create(skStream))
52 | {
53 | ImageInfo = codec.Info;
54 | }
55 | }
56 | }
57 |
58 | using(var data = SKData.CreateCopy(image))
59 | {
60 | Image = SKImage.FromEncodedData(SKData.CreateCopy(image));
61 | }
62 |
63 | Surface = SKSurface.Create(ImageInfo);
64 | Paint = new SKPaint();
65 | Paint.Color = SKColor.Parse("#2ecc71");
66 | Surface.Canvas.DrawImage(Image, new SKRect(0f, 0f, ImageInfo.Width, ImageInfo.Height), new SKRect(0f, 0f, ImageInfo.Width, ImageInfo.Height), Paint);
67 | IsOpen = true;
68 | }
69 |
70 | ///
71 | /// Draw a debug rectangle on the image
72 | ///
73 | /// Rectangle to draw
74 | public void DrawDebugRect(Rectangle rectangle)
75 | {
76 | if (!IsOpen)
77 | throw new InvalidOperationException("No image opened");
78 |
79 | DrawDebugLine(rectangle.TopLeft, rectangle.TopRight); //TOP line
80 | DrawDebugLine(rectangle.TopLeft, rectangle.BottomLeft); //LEFT line
81 | DrawDebugLine(rectangle.TopRight, rectangle.BottomRight); //RIGHT line
82 | DrawDebugLine(rectangle.BottomLeft, rectangle.BottomRight); //BOTTOM line
83 | }
84 |
85 | ///
86 | /// Draw a debug line on the image
87 | ///
88 | /// Start point
89 | /// End point
90 | public void DrawDebugLine(Point start, Point end)
91 | {
92 | Surface.Canvas.DrawLine(start.X, start.Y, end.X, end.Y, Paint);
93 | }
94 |
95 | ///
96 | /// Draw another image on the immage
97 | ///
98 | /// Byte array corresponding to an image
99 | /// Drawing bounds
100 | public void DrawImage(byte[] image, Rectangle bounds)
101 | {
102 | using (var skImage = SKImage.FromEncodedData(SKData.CreateCopy(image)))
103 | {
104 | var xScale = bounds.Width / skImage.Width;
105 | var yScale = bounds.Height / skImage.Height;
106 | Surface.Canvas.SetMatrix(SKMatrix.MakeScale(xScale, yScale));
107 | Surface.Canvas.DrawImage(skImage, bounds.X / xScale, bounds.Y / yScale);//We want to scale width & height, not X & Y
108 | Surface.Canvas.ResetMatrix();
109 | }
110 | }
111 |
112 | ///
113 | /// Get the modify image
114 | ///
115 | /// Byte array corresponding to the modify image
116 | public byte[] GetImage()
117 | {
118 | if (!IsOpen)
119 | throw new InvalidOperationException("No image opened");
120 |
121 | using(var ms = new MemoryStream())
122 | {
123 | using (var snapShot = Surface.Snapshot())
124 | {
125 | using (var data = snapShot.Encode(SKEncodedImageFormat.Png, 80))
126 | {
127 | data.SaveTo(ms);
128 | }
129 | }
130 | return ms.ToArray();
131 | }
132 | }
133 |
134 | ///
135 | /// Close the current image
136 | ///
137 | public void Close()
138 | {
139 | if (!IsOpen)
140 | throw new InvalidOperationException("No image opened");
141 |
142 | Paint.Dispose();
143 | Surface.Dispose();
144 | Image.Dispose();
145 | IsOpen = false;
146 | }
147 | }
148 | }
149 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | #specific files
5 | **/secret.json
6 |
7 | # C# Genearated code
8 | *.designer.cs
9 |
10 | #OSX
11 | .DS_Store
12 |
13 | # User-specific files
14 | *.suo
15 | *.user
16 | *.userosscache
17 | *.sln.docstates
18 |
19 | # User-specific files (MonoDevelop/Xamarin Studio)
20 | *.userprefs
21 |
22 | # Build results
23 | [Dd]ebug/
24 | [Dd]ebugPublic/
25 | [Rr]elease/
26 | [Rr]eleases/
27 | x64/
28 | x86/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Ll]og/
33 |
34 | # Visual Studio 2015 cache/options directory
35 | .vs/
36 | # Uncomment if you have tasks that create the project's static files in wwwroot
37 | #wwwroot/
38 |
39 | # MSTest test Results
40 | [Tt]est[Rr]esult*/
41 | [Bb]uild[Ll]og.*
42 |
43 | # NUNIT
44 | *.VisualState.xml
45 | TestResult.xml
46 |
47 | # Build Results of an ATL Project
48 | [Dd]ebugPS/
49 | [Rr]eleasePS/
50 | dlldata.c
51 |
52 | # DNX
53 | project.lock.json
54 | artifacts/
55 |
56 | *_i.c
57 | *_p.c
58 | *_i.h
59 | *.ilk
60 | *.meta
61 | *.obj
62 | *.pch
63 | *.pdb
64 | *.pgc
65 | *.pgd
66 | *.rsp
67 | *.sbr
68 | *.tlb
69 | *.tli
70 | *.tlh
71 | *.tmp
72 | *.tmp_proj
73 | *.log
74 | *.vspscc
75 | *.vssscc
76 | .builds
77 | *.pidb
78 | *.svclog
79 | *.scc
80 |
81 | # Chutzpah Test files
82 | _Chutzpah*
83 |
84 | # Visual C++ cache files
85 | ipch/
86 | *.aps
87 | *.ncb
88 | *.opendb
89 | *.opensdf
90 | *.sdf
91 | *.cachefile
92 | *.VC.db
93 | *.VC.VC.opendb
94 |
95 | # Visual Studio profiler
96 | *.psess
97 | *.vsp
98 | *.vspx
99 | *.sap
100 |
101 | # TFS 2012 Local Workspace
102 | $tf/
103 |
104 | # Guidance Automation Toolkit
105 | *.gpState
106 |
107 | # ReSharper is a .NET coding add-in
108 | _ReSharper*/
109 | *.[Rr]e[Ss]harper
110 | *.DotSettings.user
111 |
112 | # JustCode is a .NET coding add-in
113 | .JustCode
114 |
115 | # TeamCity is a build add-in
116 | _TeamCity*
117 |
118 | # DotCover is a Code Coverage Tool
119 | *.dotCover
120 |
121 | # NCrunch
122 | _NCrunch_*
123 | .*crunch*.local.xml
124 | nCrunchTemp_*
125 |
126 | # MightyMoose
127 | *.mm.*
128 | AutoTest.Net/
129 |
130 | # Web workbench (sass)
131 | .sass-cache/
132 |
133 | # Installshield output folder
134 | [Ee]xpress/
135 |
136 | # DocProject is a documentation generator add-in
137 | DocProject/buildhelp/
138 | DocProject/Help/*.HxT
139 | DocProject/Help/*.HxC
140 | DocProject/Help/*.hhc
141 | DocProject/Help/*.hhk
142 | DocProject/Help/*.hhp
143 | DocProject/Help/Html2
144 | DocProject/Help/html
145 |
146 | # Click-Once directory
147 | publish/
148 |
149 | # Publish Web Output
150 | *.[Pp]ublish.xml
151 | *.azurePubxml
152 | # TODO: Comment the next line if you want to checkin your web deploy settings
153 | # but database connection strings (with potential passwords) will be unencrypted
154 | *.pubxml
155 | *.publishproj
156 |
157 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
158 | # checkin your Azure Web App publish settings, but sensitive information contained
159 | # in these scripts will be unencrypted
160 | PublishScripts/
161 |
162 | # NuGet Packages
163 | *.nupkg
164 | # The packages folder can be ignored because of Package Restore
165 | **/packages/*
166 | # except build/, which is used as an MSBuild target.
167 | !**/packages/build/
168 | # Uncomment if necessary however generally it will be regenerated when needed
169 | #!**/packages/repositories.config
170 | # NuGet v3's project.json files produces more ignoreable files
171 | *.nuget.props
172 | *.nuget.targets
173 |
174 | # Microsoft Azure Build Output
175 | csx/
176 | *.build.csdef
177 |
178 | # Microsoft Azure Emulator
179 | ecf/
180 | rcf/
181 |
182 | # Windows Store app package directories and files
183 | AppPackages/
184 | BundleArtifacts/
185 | Package.StoreAssociation.xml
186 | _pkginfo.txt
187 |
188 | # Visual Studio cache files
189 | # files ending in .cache can be ignored
190 | *.[Cc]ache
191 | # but keep track of directories ending in .cache
192 | !*.[Cc]ache/
193 |
194 | # Others
195 | ClientBin/
196 | ~$*
197 | *~
198 | *.dbmdl
199 | *.dbproj.schemaview
200 | *.pfx
201 | *.publishsettings
202 | node_modules/
203 | orleans.codegen.cs
204 |
205 | # Since there are multiple workflows, uncomment next line to ignore bower_components
206 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
207 | #bower_components/
208 |
209 | # RIA/Silverlight projects
210 | Generated_Code/
211 |
212 | # Backup & report files from converting an old project file
213 | # to a newer Visual Studio version. Backup files are not needed,
214 | # because we have git ;-)
215 | _UpgradeReport_Files/
216 | Backup*/
217 | UpgradeLog*.XML
218 | UpgradeLog*.htm
219 |
220 | # SQL Server files
221 | *.mdf
222 | *.ldf
223 |
224 | # Business Intelligence projects
225 | *.rdl.data
226 | *.bim.layout
227 | *.bim_*.settings
228 |
229 | # Microsoft Fakes
230 | FakesAssemblies/
231 |
232 | # GhostDoc plugin setting file
233 | *.GhostDoc.xml
234 |
235 | # Node.js Tools for Visual Studio
236 | .ntvs_analysis.dat
237 |
238 | # Visual Studio 6 build log
239 | *.plg
240 |
241 | # Visual Studio 6 workspace options file
242 | *.opt
243 |
244 | # Visual Studio LightSwitch build output
245 | **/*.HTMLClient/GeneratedArtifacts
246 | **/*.DesktopClient/GeneratedArtifacts
247 | **/*.DesktopClient/ModelManifest.xml
248 | **/*.Server/GeneratedArtifacts
249 | **/*.Server/ModelManifest.xml
250 | _Pvt_Extensions
251 |
252 | # Paket dependency manager
253 | .paket/paket.exe
254 | paket-files/
255 |
256 | # FAKE - F# Make
257 | .fake/
258 |
259 | # JetBrains Rider
260 | .idea/
261 | *.sln.iml
262 |
--------------------------------------------------------------------------------
/FacesToSmileys.UWP/FacesToSmileys.UWP.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}
8 | AppContainerExe
9 | Properties
10 | FacesToSmileys.UWP
11 | FacesToSmileys.UWP
12 | en-US
13 | UAP
14 | 10.0.14393.0
15 | 10.0.10586.0
16 | 14
17 | 512
18 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
19 | FacesToSmileys.UWP_TemporaryKey.pfx
20 |
21 |
22 | true
23 | bin\x86\Debug\
24 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
25 | ;2008
26 | full
27 | x86
28 | false
29 | prompt
30 | true
31 |
32 |
33 | bin\x86\Release\
34 | TRACE;NETFX_CORE;WINDOWS_UWP
35 | true
36 | ;2008
37 | pdbonly
38 | x86
39 | false
40 | prompt
41 | true
42 | true
43 |
44 |
45 | true
46 | bin\ARM\Debug\
47 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
48 | ;2008
49 | full
50 | ARM
51 | false
52 | prompt
53 | true
54 |
55 |
56 | bin\ARM\Release\
57 | TRACE;NETFX_CORE;WINDOWS_UWP
58 | true
59 | ;2008
60 | pdbonly
61 | ARM
62 | false
63 | prompt
64 | true
65 | true
66 |
67 |
68 | true
69 | bin\x64\Debug\
70 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
71 | ;2008
72 | full
73 | x64
74 | false
75 | prompt
76 | true
77 |
78 |
79 | bin\x64\Release\
80 | TRACE;NETFX_CORE;WINDOWS_UWP
81 | true
82 | ;2008
83 | pdbonly
84 | x64
85 | false
86 | prompt
87 | true
88 | true
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | App.xaml
98 |
99 |
100 | MainPage.xaml
101 |
102 |
103 |
104 |
105 |
106 | Designer
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 | MSBuild:Compile
125 | Designer
126 |
127 |
128 | MSBuild:Compile
129 | Designer
130 |
131 |
132 |
133 |
134 | {cc8fbc3d-fdc7-4332-9415-baf0a31a53fb}
135 | FacesToSmileys
136 |
137 |
138 |
139 | 14.0
140 |
141 |
142 |
149 |
--------------------------------------------------------------------------------
/FacesToSmileys/FacesToSmileys.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}
7 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | Library
9 | FacesToSmileys
10 | FacesToSmileys
11 | v4.5
12 | Profile111
13 |
14 |
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug
21 | DEBUG;
22 | prompt
23 | 4
24 |
25 |
26 | true
27 | bin\Release
28 | prompt
29 | 4
30 |
31 |
32 |
33 | MSBuild:UpdateDesignTimeXaml
34 | TakePhotoPage.xaml
35 |
36 |
37 | angry.png
38 |
39 |
40 | contempt.png
41 |
42 |
43 | disgust.png
44 |
45 |
46 | fear.png
47 |
48 |
49 | happiness.png
50 |
51 |
52 | neutral.png
53 |
54 |
55 | sadness.png
56 |
57 |
58 | surprise.png
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | TakePhotoView.xaml
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | ..\packages\Microsoft.Azure.Mobile.0.14.0\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Microsoft.Azure.Mobile.dll
91 |
92 |
93 | ..\packages\Microsoft.Azure.Mobile.Analytics.0.14.0\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Microsoft.Azure.Mobile.Analytics.dll
94 |
95 |
96 | ..\packages\Microsoft.Azure.Mobile.Crashes.0.14.0\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Microsoft.Azure.Mobile.Crashes.dll
97 |
98 |
99 | ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net45+win8+wpa81\System.Net.Http.Extensions.dll
100 |
101 |
102 | ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net45+win8+wpa81\System.Net.Http.Primitives.dll
103 |
104 |
105 | ..\packages\Xamarin.Forms.2.3.4.247\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll
106 |
107 |
108 | ..\packages\Xamarin.Forms.2.3.4.247\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll
109 |
110 |
111 | ..\packages\Xamarin.Forms.2.3.4.247\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll
112 |
113 |
114 | ..\packages\SkiaSharp.1.59.1\lib\portable-net45+win8+wpa81+wp8\SkiaSharp.dll
115 |
116 |
117 | ..\packages\SimpleInjector.3.1.0\lib\portable-net4+sl4+wp8+win8+wpa81\SimpleInjector.dll
118 |
119 |
120 | ..\packages\Xam.Plugin.Media.3.0.1\lib\netstandard1.0\Plugin.Media.Abstractions.dll
121 |
122 |
123 | ..\packages\Xam.Plugin.Media.3.0.1\lib\netstandard1.0\Plugin.Media.dll
124 |
125 |
126 | ..\packages\Microsoft.ProjectOxford.Common.1.0.324\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\Microsoft.ProjectOxford.Common.dll
127 |
128 |
129 | ..\packages\Microsoft.ProjectOxford.Emotion.1.0.336\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\Microsoft.ProjectOxford.Emotion.dll
130 |
131 |
132 | ..\packages\Newtonsoft.Json.10.0.3\lib\portable-net45+win8+wp8+wpa81\Newtonsoft.Json.dll
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/FacesToSmileys.iOS/FacesToSmileys.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | iPhoneSimulator
6 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}
7 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | Exe
9 | FacesToSmileys.iOS
10 | FacesToSmileys.iOS
11 | Resources
12 |
13 |
14 |
15 |
16 | true
17 | full
18 | false
19 | bin\iPhoneSimulator\Debug
20 | DEBUG;ENABLE_TEST_CLOUD;
21 | prompt
22 | 4
23 | iPhone Developer
24 | true
25 | true
26 | 60013
27 | None
28 | x86_64
29 | HttpClientHandler
30 | Default
31 | x86
32 |
33 |
34 | pdbonly
35 | true
36 | bin\iPhone\Release
37 | prompt
38 | 4
39 | iPhone Developer
40 | true
41 | Entitlements.plist
42 | SdkOnly
43 | ARMv7, ARM64
44 | HttpClientHandler
45 | Default
46 | x86
47 |
48 |
49 | pdbonly
50 | true
51 | bin\iPhoneSimulator\Release
52 | prompt
53 | 4
54 | iPhone Developer
55 | None
56 | x86_64
57 | HttpClientHandler
58 | Default
59 | x86
60 |
61 |
62 | true
63 | full
64 | false
65 | bin\iPhone\Debug
66 | DEBUG;ENABLE_TEST_CLOUD;
67 | prompt
68 | 4
69 | iPhone Developer: Sylvain PONTOREAU (8987T7FFY4)
70 | true
71 | true
72 | true
73 | true
74 | Entitlements.plist
75 | SdkOnly
76 | ARMv7, ARM64
77 | HttpClientHandler
78 | Default
79 | x86
80 | Development-FacesToSmileys
81 |
82 |
83 |
84 | ..\packages\Microsoft.Azure.Mobile.0.14.0\lib\Xamarin.iOS10\Microsoft.Azure.Mobile.dll
85 |
86 |
87 | ..\packages\Microsoft.Azure.Mobile.Analytics.0.14.0\lib\Xamarin.iOS10\Microsoft.Azure.Mobile.Analytics.dll
88 |
89 |
90 | ..\packages\Microsoft.Azure.Mobile.Analytics.0.14.0\lib\Xamarin.iOS10\Microsoft.Azure.Mobile.Analytics.iOS.Bindings.dll
91 |
92 |
93 | ..\packages\Microsoft.Azure.Mobile.Crashes.0.14.0\lib\Xamarin.iOS10\Microsoft.Azure.Mobile.Crashes.dll
94 |
95 |
96 | ..\packages\Microsoft.Azure.Mobile.Crashes.0.14.0\lib\Xamarin.iOS10\Microsoft.Azure.Mobile.Crashes.iOS.Bindings.dll
97 |
98 |
99 | ..\packages\Microsoft.Azure.Mobile.0.14.0\lib\Xamarin.iOS10\Microsoft.Azure.Mobile.iOS.Bindings.dll
100 |
101 |
102 |
103 |
104 |
105 |
106 | ..\packages\Xamarin.Forms.2.3.4.247\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll
107 |
108 |
109 | ..\packages\Xamarin.Forms.2.3.4.247\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll
110 |
111 |
112 | ..\packages\Xamarin.Forms.2.3.4.247\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll
113 |
114 |
115 | ..\packages\Xamarin.Forms.2.3.4.247\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll
116 |
117 |
118 | ..\packages\SimpleInjector.3.1.0\lib\dotnet\SimpleInjector.dll
119 |
120 |
121 | ..\packages\SkiaSharp.1.59.1\lib\XamariniOS\SkiaSharp.dll
122 |
123 |
124 | ..\packages\Xam.Plugin.Media.3.0.1\lib\Xamarin.iOS10\Plugin.Media.Abstractions.dll
125 |
126 |
127 | ..\packages\Xam.Plugin.Media.3.0.1\lib\Xamarin.iOS10\Plugin.Media.dll
128 |
129 |
130 | ..\packages\Newtonsoft.Json.8.0.3\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll
131 |
132 |
133 |
134 |
135 | false
136 |
137 |
138 | false
139 |
140 |
141 | false
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}
158 | FacesToSmileys
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
--------------------------------------------------------------------------------
/FacesToSmileys.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio 14
3 | VisualStudioVersion = 14.0.25420.1
4 | MinimumVisualStudioVersion = 10.0.40219.1
5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FacesToSmileys", "FacesToSmileys\FacesToSmileys.csproj", "{CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}"
6 | EndProject
7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FacesToSmileys.Droid", "FacesToSmileys.Droid\FacesToSmileys.Droid.csproj", "{05F5BDBD-0763-4E65-9016-64DB9F3617C8}"
8 | EndProject
9 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FacesToSmileys.iOS", "FacesToSmileys.iOS\FacesToSmileys.iOS.csproj", "{ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}"
10 | EndProject
11 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FacesToSmileys.UWP", "FacesToSmileys.UWP\FacesToSmileys.UWP.csproj", "{B1AF7CFE-F40D-4135-9826-8404EADF7427}"
12 | EndProject
13 | Global
14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
15 | Debug|Any CPU = Debug|Any CPU
16 | Debug|ARM = Debug|ARM
17 | Debug|iPhone = Debug|iPhone
18 | Debug|iPhoneSimulator = Debug|iPhoneSimulator
19 | Debug|x64 = Debug|x64
20 | Debug|x86 = Debug|x86
21 | Release|Any CPU = Release|Any CPU
22 | Release|ARM = Release|ARM
23 | Release|iPhone = Release|iPhone
24 | Release|iPhoneSimulator = Release|iPhoneSimulator
25 | Release|x64 = Release|x64
26 | Release|x86 = Release|x86
27 | EndGlobalSection
28 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
29 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
30 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
31 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|ARM.ActiveCfg = Debug|Any CPU
32 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|ARM.Build.0 = Debug|Any CPU
33 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
34 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|iPhone.Build.0 = Debug|Any CPU
35 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
36 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
37 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|x64.ActiveCfg = Debug|Any CPU
38 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|x64.Build.0 = Debug|Any CPU
39 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|x86.ActiveCfg = Debug|Any CPU
40 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Debug|x86.Build.0 = Debug|Any CPU
41 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
42 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|Any CPU.Build.0 = Release|Any CPU
43 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|ARM.ActiveCfg = Release|Any CPU
44 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|ARM.Build.0 = Release|Any CPU
45 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|iPhone.ActiveCfg = Release|Any CPU
46 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|iPhone.Build.0 = Release|Any CPU
47 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
48 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
49 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|x64.ActiveCfg = Release|Any CPU
50 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|x64.Build.0 = Release|Any CPU
51 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|x86.ActiveCfg = Release|Any CPU
52 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}.Release|x86.Build.0 = Release|Any CPU
53 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
54 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
55 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
56 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|ARM.ActiveCfg = Debug|Any CPU
57 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|ARM.Build.0 = Debug|Any CPU
58 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|ARM.Deploy.0 = Debug|Any CPU
59 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
60 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|iPhone.Build.0 = Debug|Any CPU
61 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
62 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
63 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|x64.ActiveCfg = Debug|Any CPU
64 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|x64.Build.0 = Debug|Any CPU
65 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|x64.Deploy.0 = Debug|Any CPU
66 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|x86.ActiveCfg = Debug|Any CPU
67 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|x86.Build.0 = Debug|Any CPU
68 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Debug|x86.Deploy.0 = Debug|Any CPU
69 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
70 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|Any CPU.Build.0 = Release|Any CPU
71 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|ARM.ActiveCfg = Release|Any CPU
72 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|ARM.Build.0 = Release|Any CPU
73 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|ARM.Deploy.0 = Release|Any CPU
74 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|iPhone.ActiveCfg = Release|Any CPU
75 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|iPhone.Build.0 = Release|Any CPU
76 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
77 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
78 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|x64.ActiveCfg = Release|Any CPU
79 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|x64.Build.0 = Release|Any CPU
80 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|x64.Deploy.0 = Release|Any CPU
81 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|x86.ActiveCfg = Release|Any CPU
82 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|x86.Build.0 = Release|Any CPU
83 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}.Release|x86.Deploy.0 = Release|Any CPU
84 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
85 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|ARM.ActiveCfg = Debug|iPhone
86 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|iPhone.ActiveCfg = Debug|iPhone
87 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|iPhone.Build.0 = Debug|iPhone
88 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
89 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
90 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|x64.ActiveCfg = Debug|iPhone
91 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|x86.ActiveCfg = Debug|iPhone
92 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|Any CPU.ActiveCfg = Release|iPhone
93 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|ARM.ActiveCfg = Release|iPhoneSimulator
94 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|iPhone.ActiveCfg = Release|iPhone
95 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|iPhone.Build.0 = Release|iPhone
96 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
97 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
98 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|x64.ActiveCfg = Release|iPhoneSimulator
99 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Release|x86.ActiveCfg = Release|iPhoneSimulator
100 | {ED91FBA1-5FEF-48CF-AB7C-4BD517D28155}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
101 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|Any CPU.ActiveCfg = Debug|x86
102 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|Any CPU.Build.0 = Debug|x86
103 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|Any CPU.Deploy.0 = Debug|x86
104 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|ARM.ActiveCfg = Debug|ARM
105 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|ARM.Build.0 = Debug|ARM
106 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|ARM.Deploy.0 = Debug|ARM
107 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|iPhone.ActiveCfg = Debug|x86
108 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
109 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|x64.ActiveCfg = Debug|x64
110 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|x64.Build.0 = Debug|x64
111 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|x64.Deploy.0 = Debug|x64
112 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|x86.ActiveCfg = Debug|x86
113 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|x86.Build.0 = Debug|x86
114 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Debug|x86.Deploy.0 = Debug|x86
115 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|Any CPU.ActiveCfg = Release|x86
116 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|ARM.ActiveCfg = Release|ARM
117 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|ARM.Build.0 = Release|ARM
118 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|ARM.Deploy.0 = Release|ARM
119 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|iPhone.ActiveCfg = Release|x86
120 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|iPhoneSimulator.ActiveCfg = Release|x86
121 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|x64.ActiveCfg = Release|x64
122 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|x64.Build.0 = Release|x64
123 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|x64.Deploy.0 = Release|x64
124 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|x86.ActiveCfg = Release|x86
125 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|x86.Build.0 = Release|x86
126 | {B1AF7CFE-F40D-4135-9826-8404EADF7427}.Release|x86.Deploy.0 = Release|x86
127 | EndGlobalSection
128 | GlobalSection(SolutionProperties) = preSolution
129 | HideSolutionNode = FALSE
130 | EndGlobalSection
131 | GlobalSection(NestedProjects) = preSolution
132 | EndGlobalSection
133 | EndGlobal
134 |
--------------------------------------------------------------------------------
/FacesToSmileys.Droid/FacesToSmileys.Droid.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {05F5BDBD-0763-4E65-9016-64DB9F3617C8}
8 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
9 | Library
10 | FacesToSmileys.Droid
11 | FacesToSmileys.Droid
12 | v7.1
13 | True
14 | Resources\Resource.designer.cs
15 | Resource
16 | Properties\AndroidManifest.xml
17 | Resources
18 | Assets
19 | true
20 |
21 |
22 |
23 |
24 |
25 |
26 | True
27 | full
28 | false
29 | bin\Debug
30 | DEBUG;
31 | prompt
32 | 4
33 | True
34 | True
35 | Xamarin
36 | x64
37 |
38 |
39 | true
40 | pdbonly
41 | true
42 | bin\Release
43 | prompt
44 | 4
45 | true
46 | false
47 |
48 |
49 |
50 | ..\packages\Microsoft.Azure.Mobile.0.14.0\lib\MonoAndroid403\Microsoft.Azure.Mobile.dll
51 |
52 |
53 | ..\packages\Microsoft.Azure.Mobile.Analytics.0.14.0\lib\MonoAndroid403\Microsoft.Azure.Mobile.Analytics.dll
54 |
55 |
56 | ..\packages\Microsoft.Azure.Mobile.Analytics.0.14.0\lib\MonoAndroid403\Microsoft.Azure.Mobile.Analytics.Android.Bindings.dll
57 |
58 |
59 | ..\packages\Microsoft.Azure.Mobile.0.14.0\lib\MonoAndroid403\Microsoft.Azure.Mobile.Android.Bindings.dll
60 |
61 |
62 | ..\packages\Microsoft.Azure.Mobile.Crashes.0.14.0\lib\MonoAndroid403\Microsoft.Azure.Mobile.Crashes.dll
63 |
64 |
65 | ..\packages\Microsoft.Azure.Mobile.Crashes.0.14.0\lib\MonoAndroid403\Microsoft.Azure.Mobile.Crashes.Android.Bindings.dll
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | ..\packages\Plugin.CurrentActivity.1.0.1\lib\MonoAndroid10\Plugin.CurrentActivity.dll
75 |
76 |
77 | ..\packages\Xamarin.Forms.2.3.4.247\lib\MonoAndroid10\FormsViewGroup.dll
78 |
79 |
80 | ..\packages\Xamarin.Forms.2.3.4.247\lib\MonoAndroid10\Xamarin.Forms.Core.dll
81 |
82 |
83 | ..\packages\Xamarin.Forms.2.3.4.247\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll
84 |
85 |
86 | ..\packages\Xamarin.Forms.2.3.4.247\lib\MonoAndroid10\Xamarin.Forms.Platform.dll
87 |
88 |
89 | ..\packages\Xamarin.Forms.2.3.4.247\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll
90 |
91 |
92 | ..\packages\SimpleInjector.3.1.0\lib\dotnet\SimpleInjector.dll
93 |
94 |
95 | ..\packages\SkiaSharp.1.59.1\lib\MonoAndroid\SkiaSharp.dll
96 |
97 |
98 | ..\packages\Xamarin.Android.Support.Annotations.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Annotations.dll
99 |
100 |
101 | ..\packages\Xamarin.Android.Support.Compat.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Compat.dll
102 |
103 |
104 | ..\packages\Plugin.Permissions.2.0.1\lib\MonoAndroid10\Plugin.Permissions.Abstractions.dll
105 |
106 |
107 | ..\packages\Plugin.Permissions.2.0.1\lib\MonoAndroid10\Plugin.Permissions.dll
108 |
109 |
110 | ..\packages\Xamarin.Android.Support.Core.Utils.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Core.Utils.dll
111 |
112 |
113 | ..\packages\Xam.Plugin.Media.3.0.1\lib\MonoAndroid10\Plugin.Media.Abstractions.dll
114 |
115 |
116 | ..\packages\Xam.Plugin.Media.3.0.1\lib\MonoAndroid10\Plugin.Media.dll
117 |
118 |
119 | ..\packages\Xamarin.Android.Support.Core.UI.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Core.UI.dll
120 |
121 |
122 | ..\packages\Xamarin.Android.Support.Media.Compat.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Media.Compat.dll
123 |
124 |
125 | ..\packages\Xamarin.Android.Support.Fragment.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Fragment.dll
126 |
127 |
128 | ..\packages\Xamarin.Android.Support.Transition.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Transition.dll
129 |
130 |
131 | ..\packages\Xamarin.Android.Support.v4.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.v4.dll
132 |
133 |
134 | ..\packages\Xamarin.Android.Support.v7.Palette.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.v7.Palette.dll
135 |
136 |
137 | ..\packages\Xamarin.Android.Support.v7.RecyclerView.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.v7.RecyclerView.dll
138 |
139 |
140 | ..\packages\Xamarin.Android.Support.Vector.Drawable.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Vector.Drawable.dll
141 |
142 |
143 | ..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.dll
144 |
145 |
146 | ..\packages\Xamarin.Android.Support.v7.AppCompat.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.v7.AppCompat.dll
147 |
148 |
149 | ..\packages\Xamarin.Android.Support.Design.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.Design.dll
150 |
151 |
152 | ..\packages\Xamarin.Android.Support.v7.MediaRouter.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.v7.MediaRouter.dll
153 |
154 |
155 |
156 | ..\packages\Xamarin.Android.Support.v7.CardView.25.3.1\lib\MonoAndroid70\Xamarin.Android.Support.v7.CardView.dll
157 |
158 |
159 | ..\packages\Newtonsoft.Json.8.0.3\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 | {CC8FBC3D-FDC7-4332-9415-BAF0A31A53FB}
186 | FacesToSmileys
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
--------------------------------------------------------------------------------