Pārlūkot izejas kodu

Prep Hands On Lab Start

James Montemagno 9 gadi atpakaļ
vecāks
revīzija
867cae4740
24 mainītis faili ar 125 papildinājumiem un 325 dzēšanām
  1. 5 0
      Demos/README.md
  2. 4 1
      HandsOnLab/Start/DevDaysSpeakers.sln
  3. 2 2
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj
  4. 1 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/MainActivity.cs
  5. 4 3
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/Properties/AndroidManifest.xml
  6. 4 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/app.config
  7. 1 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/packages.config
  8. 1 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.UWP/project.json
  9. 27 26
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.UWP/project.lock.json
  10. 2 2
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/DevDaysSpeakers.iOS.csproj
  11. 2 4
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/Entitlements.plist
  12. 48 49
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/Info.plist
  13. 4 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/app.config
  14. 1 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/packages.config
  15. 0 4
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/App.cs
  16. 7 3
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/DevDaysSpeakers.csproj
  17. 1 6
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/Model/Speaker.cs
  18. 1 13
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/DetailsPage.xaml
  19. 5 18
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/DetailsPage.xaml.cs
  20. 0 16
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml
  21. 2 40
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml.cs
  22. 0 65
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/ViewModel/AzureStore.cs
  23. 1 69
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs
  24. 2 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/packages.config

+ 5 - 0
Demos/README.md

@@ -0,0 +1,5 @@
+## Xamrin Dev Days Demos
+
+Feel free to browse through the demo apps that were presenter here at Xamarin Dev Days!
+
+If you have any trouble please up an GitHub issue.

+ 4 - 1
HandsOnLab/Start/DevDaysSpeakers.sln

@@ -127,7 +127,8 @@ Global
 		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
 		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.AppStore|x64.ActiveCfg = AppStore|iPhone
 		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.AppStore|x86.ActiveCfg = AppStore|iPhone
-		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.Debug|Any CPU.ActiveCfg = Debug|iPhone
+		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
+		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
 		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.Debug|ARM.ActiveCfg = Debug|iPhone
 		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.Debug|iPhone.ActiveCfg = Debug|iPhone
 		{367B4F1E-C7D4-432C-B767-59121E12C2BF}.Debug|iPhone.Build.0 = Debug|iPhone
@@ -186,6 +187,8 @@ Global
 		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|ARM.Build.0 = Debug|ARM
 		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|ARM.Deploy.0 = Debug|ARM
 		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|iPhone.ActiveCfg = Debug|x86
+		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|iPhone.Build.0 = Debug|x86
+		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|iPhone.Deploy.0 = Debug|x86
 		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
 		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|iPhoneSimulator.Build.0 = Debug|x86
 		{5A77AD80-10E0-4093-9332-ECFB62D3342A}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86

+ 2 - 2
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj

@@ -66,8 +66,8 @@
     </Reference>
     <Reference Include="Mono.Android" />
     <Reference Include="mscorlib" />
-    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Plugin.TextToSpeech, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">

+ 1 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/MainActivity.cs

@@ -9,7 +9,7 @@ using Android.OS;
 
 namespace DevDaysSpeakers.Droid
 {
-    [Activity(Label = "DevDaysSpeakers", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
+    [Activity(Label = "Dev Days Speakers", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
     public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
     {
         protected override void OnCreate(Bundle bundle)

+ 4 - 3
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/Properties/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.sample.devdaysspeakers" android:versionCode="1" android:versionName="1">
 	<uses-sdk android:minSdkVersion="15" />
-	<application android:label="$safeprojectname$"></application>
-</manifest>
+	<uses-permission android:name="android.permission.INTERNET" />
+	<application android:label="Dev Days Speakers" android:icon="@drawable/icon"></application>
+</manifest>

+ 4 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/app.config

@@ -14,6 +14,10 @@
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 1 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/packages.config

@@ -5,7 +5,7 @@
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid60" />
   <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid60" />
   <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="monoandroid60" />
-  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="monoandroid60" />
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="monoandroid60" />
   <package id="SQLitePCL" version="3.8.7.2" targetFramework="monoandroid60" />
   <package id="Xam.Plugins.TextToSpeech" version="2.0.0" targetFramework="monoandroid60" />
   <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />

+ 1 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.UWP/project.json

@@ -6,6 +6,7 @@
     "Microsoft.Bcl.Build": "1.0.21",
     "Microsoft.Net.Http": "2.2.29",
     "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
+    "Newtonsoft.Json": "9.0.1",
     "SQLitePCL": "3.8.7.2",
     "Xam.Plugins.TextToSpeech": "2.0.0",
     "Xamarin.Forms": "2.3.0.107"

+ 27 - 26
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.UWP/project.lock.json

@@ -313,12 +313,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -2191,12 +2191,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -3915,12 +3915,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -5637,12 +5637,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -7361,12 +7361,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -9083,12 +9083,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -10807,12 +10807,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -13058,11 +13058,11 @@
         "ref/xamarinmac20/_._"
       ]
     },
-    "Newtonsoft.Json/6.0.4": {
-      "sha512": "FyQLmEpjsCrEP+znauLDGAi+h6i9YnaMkITlfIoiM4RYyX3nki306bTHsr/0okiIvIc7BJhQTbOAIZVocccFUw==",
+    "Newtonsoft.Json/9.0.1": {
+      "sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==",
       "type": "package",
       "files": [
-        "Newtonsoft.Json.6.0.4.nupkg.sha512",
+        "Newtonsoft.Json.9.0.1.nupkg.sha512",
         "Newtonsoft.Json.nuspec",
         "lib/net20/Newtonsoft.Json.dll",
         "lib/net20/Newtonsoft.Json.xml",
@@ -13072,8 +13072,8 @@
         "lib/net40/Newtonsoft.Json.xml",
         "lib/net45/Newtonsoft.Json.dll",
         "lib/net45/Newtonsoft.Json.xml",
-        "lib/netcore45/Newtonsoft.Json.dll",
-        "lib/netcore45/Newtonsoft.Json.xml",
+        "lib/netstandard1.0/Newtonsoft.Json.dll",
+        "lib/netstandard1.0/Newtonsoft.Json.xml",
         "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll",
         "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml",
         "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll",
@@ -15928,6 +15928,7 @@
       "Microsoft.Bcl.Build >= 1.0.21",
       "Microsoft.NETCore.UniversalWindowsPlatform >= 5.0.0",
       "Microsoft.Net.Http >= 2.2.29",
+      "Newtonsoft.Json >= 9.0.1",
       "SQLitePCL >= 3.8.7.2",
       "Xam.Plugins.TextToSpeech >= 2.0.0",
       "Xamarin.Forms >= 2.3.0.107"

+ 2 - 2
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/DevDaysSpeakers.iOS.csproj

@@ -129,8 +129,8 @@
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.SQLiteStore.2.1.0\lib\portable-win+net45+wp8+wpa81+monotouch+monoandroid\Microsoft.WindowsAzure.Mobile.SQLiteStore.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Plugin.TextToSpeech, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">

+ 2 - 4
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/Entitlements.plist

@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-<dict>
-</dict>
+<dict/>
 </plist>
-

+ 48 - 49
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/Info.plist

@@ -1,52 +1,51 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-  <dict>
-    <key>UIDeviceFamily</key>
-    <array>
-      <integer>1</integer>
-      <integer>2</integer>
-    </array>
-    <key>UISupportedInterfaceOrientations</key>
-    <array>
-      <string>UIInterfaceOrientationPortrait</string>
-      <string>UIInterfaceOrientationLandscapeLeft</string>
-      <string>UIInterfaceOrientationLandscapeRight</string>
-    </array>
-    <key>UISupportedInterfaceOrientations~ipad</key>
-    <array>
-      <string>UIInterfaceOrientationPortrait</string>
-      <string>UIInterfaceOrientationPortraitUpsideDown</string>
-      <string>UIInterfaceOrientationLandscapeLeft</string>
-      <string>UIInterfaceOrientationLandscapeRight</string>
-    </array>
-    <key>MinimumOSVersion</key>
-    <string>6.0</string>
-    <key>CFBundleDisplayName</key>
-    <string>DevDaysSpeakers</string>
-    <key>CFBundleIdentifier</key>
-    <string>com.yourcompany.DevDaysSpeakers</string>
-    <key>CFBundleVersion</key>
-    <string>1.0</string>
-    <key>CFBundleIconFiles</key>
-    <array>
-      <string>Icon-60@2x</string>
-      <string>Icon-60@3x</string>
-      <string>Icon-76</string>
-      <string>Icon-76@2x</string>
-      <string>Default</string>
-      <string>Default@2x</string>
-      <string>Default-568h@2x</string>
-      <string>Default-Portrait</string>
-      <string>Default-Portrait@2x</string>
-      <string>Icon-Small-40</string>
-      <string>Icon-Small-40@2x</string>
-      <string>Icon-Small-40@3x</string>
-      <string>Icon-Small</string>
-      <string>Icon-Small@2x</string>
-      <string>Icon-Small@3x</string>
-    </array>
-    <key>UILaunchStoryboardName</key>
-    <string>LaunchScreen</string>
-  </dict>
+<dict>
+	<key>UIDeviceFamily</key>
+	<array>
+		<integer>1</integer>
+		<integer>2</integer>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>MinimumOSVersion</key>
+	<string>8.0</string>
+	<key>CFBundleDisplayName</key>
+	<string>DevDaysSpeakers</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.yourcompany.DevDaysSpeakers</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>CFBundleIconFiles</key>
+	<array>
+		<string>Icon-60@2x.png</string>
+		<string>Icon-76.png</string>
+		<string>Icon-76@2x.png</string>
+		<string>Default.png</string>
+		<string>Default@2x.png</string>
+		<string>Default-568h@2x.png</string>
+		<string>Default-Portrait.png</string>
+		<string>Default-Portrait@2x.png</string>
+		<string>Icon-Small-40.png</string>
+		<string>Icon-Small-40@2x.png</string>
+		<string>Icon-Small.png</string>
+		<string>Icon-Small@2x.png</string>
+	</array>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1</string>
+</dict>
 </plist>

+ 4 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/app.config

@@ -14,6 +14,10 @@
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 1 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/packages.config

@@ -5,7 +5,7 @@
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="xamarinios10" />
   <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="xamarinios10" />
   <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="xamarinios10" />
-  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="xamarinios10" />
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="xamarinios10" />
   <package id="SQLitePCL" version="3.8.7.2" targetFramework="xamarinios10" />
   <package id="Xam.Plugins.TextToSpeech" version="2.0.0" targetFramework="xamarinios10" />
   <package id="Xamarin.Forms" version="2.3.0.107" targetFramework="xamarinios10" />

+ 0 - 4
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/App.cs

@@ -1,8 +1,4 @@
 using DevDaysSpeakers.View;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
 
 using Xamarin.Forms;
 

+ 7 - 3
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/DevDaysSpeakers.csproj

@@ -38,7 +38,6 @@
     <Compile Include="App.cs" />
     <Compile Include="Model\Speaker.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ViewModel\AzureStore.cs" />
     <Compile Include="ViewModel\SpeakersViewModel.cs" />
     <Compile Include="View\DetailsPage.xaml.cs">
       <DependentUpon>DetailsPage.xaml</DependentUpon>
@@ -48,6 +47,10 @@
     </Compile>
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="Azure.Mobile.Forms, Version=1.0.6025.25770, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.Forms.1.0.1\lib\Azure.Mobile.Forms.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Microsoft.WindowsAzure.Mobile, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.2.1.0\lib\portable-win+net45+wp8+wpa81+monotouch+monoandroid\Microsoft.WindowsAzure.Mobile.dll</HintPath>
       <Private>True</Private>
@@ -56,8 +59,8 @@
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.SQLiteStore.2.1.0\lib\portable-win+net45+wp8+wpa81+monotouch+monoandroid\Microsoft.WindowsAzure.Mobile.SQLiteStore.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Plugin.TextToSpeech, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
@@ -114,6 +117,7 @@
       <SubType>Designer</SubType>
     </EmbeddedResource>
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
     <PropertyGroup>

+ 1 - 6
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/Model/Speaker.cs

@@ -8,11 +8,6 @@ namespace DevDaysSpeakers.Model
 {
     public class Speaker
     {
-        public string Id { get; set; }
-        public string Name { get; set; }
-        public string Description { get; set; }
-        public string Website { get; set; }
-        public string Title { get; set; }
-        public string Avatar { get; set; }
+        
     }
 }

+ 1 - 13
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/DetailsPage.xaml

@@ -2,18 +2,6 @@
 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              x:Class="DevDaysSpeakers.View.DetailsPage"
-             Title="{Binding Name}">
+             Title="Details">
 
-  <ScrollView Padding="10">
-    <StackLayout Spacing="10">
-      <Image Source="{Binding Avatar}" HeightRequest="200" WidthRequest="200"/>
-      
-      <Label Text="{Binding Name}" FontSize="24"/>
-      <Label Text="{Binding Title}" TextColor="Purple"/>
-      <Label Text="{Binding Description}"/>
-
-      <Button Text="Speak" x:Name="ButtonSpeak"/>
-      <Button Text="Go to Website" x:Name="ButtonWebsite"/>
-    </StackLayout>    
-  </ScrollView>
 </ContentPage>

+ 5 - 18
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/DetailsPage.xaml.cs

@@ -14,27 +14,14 @@ namespace DevDaysSpeakers.View
     public partial class DetailsPage : ContentPage
     {
         Speaker speaker;
-        public DetailsPage(Speaker item)
+        public DetailsPage(Speaker speaker)
         {
             InitializeComponent();
-            this.speaker = item;
-
+            
+            //Set local instance of speaker and set BindingContext
+            this.speaker = speaker;
             BindingContext = this.speaker;
-
-            ButtonSpeak.Clicked += ButtonSpeak_Clicked;
-
-            ButtonWebsite.Clicked += ButtonWebsite_Clicked;
-        }
-
-        private void ButtonWebsite_Clicked(object sender, EventArgs e)
-        {
-            if (speaker.Website.StartsWith("http"))
-                Device.OpenUri(new Uri(speaker.Website));
-        }
-
-        private void ButtonSpeak_Clicked(object sender, EventArgs e)
-        {
-            CrossTextToSpeech.Current.Speak(this.speaker.Description);
         }
+        
     }
 }

+ 0 - 16
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml

@@ -4,20 +4,4 @@
              x:Class="DevDaysSpeakers.View.SpeakersPage"
              Title="Speakers">
 
-  <StackLayout Spacing="0">
-    <Button Text="Sync Speakers" x:Name="ButtonSpeakers"/>
-    
-    <ActivityIndicator IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}"/>
-
-    <ListView x:Name="ListViewSpeakers"
-              ItemsSource="{Binding Speakers}">
-      <ListView.ItemTemplate>
-        <DataTemplate>
-          <ImageCell Text="{Binding Name}"
-                     Detail="{Binding Title}"
-                     ImageSource="{Binding Avatar}"/>
-        </DataTemplate>
-      </ListView.ItemTemplate>
-    </ListView>
-  </StackLayout>
 </ContentPage>

+ 2 - 40
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml.cs

@@ -19,49 +19,11 @@ namespace DevDaysSpeakers.View
         {
             InitializeComponent();
 
+            //Create the view model and set as binding context
             vm = new SpeakersViewModel();
-
             BindingContext = vm;
-
-            ButtonSpeakers.Clicked += ButtonSpeakers_Clicked;
-
-            ListViewSpeakers.ItemSelected += ListViewSpeakers_ItemSelected;
-
         }
 
-        private async void ListViewSpeakers_ItemSelected(object sender, SelectedItemChangedEventArgs e)
-        {
-            var speaker = e.SelectedItem as Speaker;
-            if (speaker == null)
-                return;
-
-            await Navigation.PushAsync(new DetailsPage(speaker));
-
-            ListViewSpeakers.SelectedItem = null;
-
-        }
-
-        private async void ButtonSpeakers_Clicked(object sender, EventArgs e)
-        {
-            Exception ex = null;
-
-            try
-            {
-                ButtonSpeakers.IsEnabled = false;
-
-                await vm.GetSpeakers();
-            }
-            catch(Exception error)
-            {
-                ex = error;
-            }
-            finally
-            {
-                ButtonSpeakers.IsEnabled = true;
-            }
-
-            if (ex != null)
-                await DisplayAlert("Error!", ex.Message, "OK");
-        }
+       
     }
 }

+ 0 - 65
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/ViewModel/AzureStore.cs

@@ -1,65 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Microsoft.WindowsAzure.MobileServices;
-using Microsoft.WindowsAzure.MobileServices.Sync;
-using Microsoft.WindowsAzure.MobileServices.SQLiteStore;
-using DevDaysSpeakers.Model;
-using System.Diagnostics;
-
-namespace DevDaysSpeakers.ViewModel
-{
-    public class AzureStore
-    {
-        static AzureStore current;
-        public static AzureStore Current
-        {
-            get
-            {
-                if (current == null)
-                    current = new AzureStore();
-
-                return current;
-            }
-        }
-
-        MobileServiceClient MobileService { get; set; }
-        IMobileServiceSyncTable<Speaker> speakerTable;
-
-        public async Task Initialize()
-        {
-            if (MobileService != null)
-                return;
-
-            MobileService = new MobileServiceClient("https://montemagnospeakers.azurewebsites.net");
-
-            var store = new MobileServiceSQLiteStore("speakers.db");
-
-            store.DefineTable<Speaker>();
-
-            await MobileService.SyncContext.InitializeAsync(store);
-
-            speakerTable = MobileService.GetSyncTable<Speaker>();
-        }
-
-        public async Task<List<Speaker>> GetSpeakers()
-        {
-            await Initialize();
-
-            try
-            {
-                await speakerTable.PullAsync("allSpeakers", speakerTable.CreateQuery());
-            }
-            catch (Exception ex)
-            {
-                Debug.WriteLine(ex);
-            }
-
-            return await speakerTable.ToListAsync();
-        }
-
-    }
-}

+ 1 - 69
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs

@@ -1,80 +1,12 @@
 using System;
 using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-using DevDaysSpeakers.Model;
-using System.Net.Http;
-using Newtonsoft.Json;
-using System.Collections.ObjectModel;
-
 namespace DevDaysSpeakers.ViewModel
 {
-    public class SpeakersViewModel : INotifyPropertyChanged
+    public class SpeakersViewModel
     {
-
-        public ObservableCollection<Speaker> Speakers { get; set; }
-        public SpeakersViewModel()
-        {
-            Speakers = new ObservableCollection<Speaker>();
-        }
-
-        bool busy;
-
-        public bool IsBusy
-        {
-            get { return busy; }
-            set
-            {
-                busy = value;
-                OnPropertyChanged("IsBusy");
-            }
-        }
-
-        public async Task GetSpeakers()
-        {
-            if (IsBusy)
-                return;
-
-            try
-            {
-                IsBusy = true;
-
-
-                var items = await AzureStore.Current.GetSpeakers();
-
-                Speakers.Clear();
-                foreach (var item in items)
-                    Speakers.Add(item);
-                
-            }
-            catch(Exception ex)
-            {
-                Debug.WriteLine("Error: " + ex);
-                throw;
-            }
-            finally
-            {
-                IsBusy = false;
-            }
-        }
-
-
-
-
-        public event PropertyChangedEventHandler PropertyChanged;
-
-        void OnPropertyChanged(string name)
-        {
-            var changed = PropertyChanged;
-
-            if (changed == null)
-                return;
-
-            changed.Invoke(this, new PropertyChangedEventArgs(name));
-        }
     }
 }

+ 2 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/packages.config

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AppService.Helpers.Forms" version="1.0.1" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="portable45-net45+win8+wp8+wpa81" />
-  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="portable45-net45+win8+wp8+wpa81" />
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="SQLitePCL" version="3.8.7.2" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Xam.Plugins.TextToSpeech" version="2.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Xamarin.Forms" version="2.3.0.107" targetFramework="portable45-net45+win8+wp8+wpa81" />