diff --git a/main/MyFriendsAround.WP7/ApplicationIcon.png b/main/MyFriendsAround.WP7/ApplicationIcon.png
index 5d874b5..88924ac 100644
Binary files a/main/MyFriendsAround.WP7/ApplicationIcon.png and b/main/MyFriendsAround.WP7/ApplicationIcon.png differ
diff --git a/main/MyFriendsAround.WP7/MyFriendsAround.WP7.csproj b/main/MyFriendsAround.WP7/MyFriendsAround.WP7.csproj
index d48bc3d..714e45e 100644
--- a/main/MyFriendsAround.WP7/MyFriendsAround.WP7.csproj
+++ b/main/MyFriendsAround.WP7/MyFriendsAround.WP7.csproj
@@ -216,12 +216,17 @@
PreserveNewest
- Always
+ PreserveNewest
- Always
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
-
PreserveNewest
diff --git a/main/MyFriendsAround.WP7/ViewModel/MainViewModel.cs b/main/MyFriendsAround.WP7/ViewModel/MainViewModel.cs
index 43bdbe2..0e269ec 100644
--- a/main/MyFriendsAround.WP7/ViewModel/MainViewModel.cs
+++ b/main/MyFriendsAround.WP7/ViewModel/MainViewModel.cs
@@ -22,6 +22,7 @@ using Hammock;
using Hammock.Serialization;
using Microsoft.Phone;
using Microsoft.Phone.Controls;
+using Microsoft.Phone.Controls.Maps;
using Microsoft.Silverlight.Testing;
using MyFriendsAround.Common.Entities;
using MyFriendsAround.WP7.Service;
@@ -47,6 +48,41 @@ namespace MyFriendsAround.WP7.ViewModel
///
public class MainViewModel : ViewModelBase
{
+
+ ///
+ /// Initializes a new instance of the MainViewModel class.
+ ///
+ public MainViewModel()
+ {
+ //
+ MainLoadCommand = new RelayCommand(() => MainLoad());
+ PublishLocationCommand = new RelayCommand(() => PublishLocationAction());
+ DisplayAboutCommand = new RelayCommand(() => DisplayAbout());
+ NavigateToSettingsCommand = new RelayCommand(() => NavigateToSettings());
+ RefreshFriendsCommand = new RelayCommand(() => RefreshFriends());
+ ShowAboutCommand = new RelayCommand(() => ShowAbout());
+ SaveMySettingsCommand = new RelayCommand(() => SaveMySettings());
+ CancelMySettingsCommand = new RelayCommand(() => CancelMySettings());
+ ChoosePhotoCommand = new RelayCommand(() => ChoosePhoto());
+ CropSaveCommand = new RelayCommand(() => CropSave());
+ CropCancelCommand = new RelayCommand(() => CropCancel());
+ MapViewChangedCommand = new RelayCommand(boundRectangle => MapViewChanged(boundRectangle));
+ ShowMyLocationCommand = new RelayCommand(() => ShowMyLocation());
+
+ if (IsInDesignMode)
+ {
+ // Code runs in Blend --> create design time data.
+ }
+ else
+ {
+ // Code runs "for real"
+ }
+
+ }
+
+
+ #region Properties
+
public string ApplicationTitle
{
get
@@ -55,6 +91,10 @@ namespace MyFriendsAround.WP7.ViewModel
}
}
+
+
+ #region PageTitles
+
public string PageName
{
get
@@ -79,33 +119,305 @@ namespace MyFriendsAround.WP7.ViewModel
}
}
+ #endregion
+
+
+
///
- /// Initializes a new instance of the MainViewModel class.
+ /// The property's name.
///
- public MainViewModel()
+ public const string MyPicturePropertyName = "MyPicture";
+ private ImageSource _myPicture = new BitmapImage(new Uri("/icons/anonymousIcon.png", UriKind.RelativeOrAbsolute));
+
+ ///
+ /// Gets the MyPicture property.
+ ///
+ public ImageSource MyPicture
+ {
+ get
+ {
+ return _myPicture;
+ }
+
+ set
+ {
+ if (_myPicture == value)
+ {
+ return;
+ }
+
+ _myPicture = value;
+
+ // Update bindings, no broadcast
+ RaisePropertyChanged(MyPicturePropertyName);
+ }
+ }
+
+
+
+
+
+
+
+ ///
+ /// The property's name.
+ ///
+ public const string MyNamePropertyName = "MyName";
+ private string _myName = "Guest";
+
+ ///
+ /// Gets the MyName property.
+ ///
+ public string MyName
+ {
+ get { return _myName; }
+ set
+ {
+ if (_myName == value)
+ {
+ return;
+ }
+ var oldValue = _myName;
+ _myName = value;
+ // Update bindings, no broadcast
+ RaisePropertyChanged(MyNamePropertyName);
+ }
+ }
+
+
+ public string AppBarTextAbout
+ {
+ get { return "About"; }
+ }
+
+ public string AppBarTextSettings
+ {
+ get { return "Settings"; }
+ }
+
+ public string AppBarTextPublish
+ {
+ get { return "Publish"; }
+ }
+
+ public string AppBarTextRefresh
+ {
+ get { return "Refresh"; }
+ }
+
+ public string AppBarTextMyLocation
+ {
+ get { return "My Location"; }
+ }
+
+ public string AppBarTextSaveSettings
+ {
+ get { return "Save"; }
+ }
+
+ public string AppBarTextCancelSettings
+ {
+ get { return "Cancel"; }
+ }
+
+ ///
+ /// The property's name.
+ ///
+ public const string PushPinsPropertyName = "PushPins";
+ private ObservableCollection _PushPins = new ObservableCollection();
+ ///
+ /// Gets the PushPins property.
+ ///
+ public ObservableCollection PushPins
+ {
+ get
+ {
+ return _PushPins;
+ }
+
+ set
+ {
+ if (_PushPins == value)
+ {
+ return;
+ }
+
+ _PushPins = value;
+
+ // Update bindings, no broadcast
+ RaisePropertyChanged(PushPinsPropertyName);
+ }
+ }
+
+
+ ///
+ /// The property's name.
+ ///
+ public const string VisiblePushPinsPropertyName = "VisiblePushPins";
+ private ObservableCollection _VisiblePushPins = new ObservableCollection();
+ ///
+ /// Gets the PushPins property.
+ ///
+ public ObservableCollection VisiblePushPins
+ {
+ get
+ {
+ return _VisiblePushPins;
+ }
+
+ set
+ {
+ if (_VisiblePushPins == value)
+ {
+ return;
+ }
+
+ _VisiblePushPins = value;
+
+ // Update bindings, no broadcast
+ RaisePropertyChanged(VisiblePushPinsPropertyName);
+ }
+ }
+
+
+ ///
+ /// The property's name.
+ ///
+ public const string MapZoomPropertyName = "MapZoom";
+
+ private int _mapZoom = 1;
+
+ ///
+ /// Gets the MapZoom property.
+ ///
+ public int MapZoom
+ {
+ get
+ {
+ return _mapZoom;
+ }
+
+ set
+ {
+ if (_mapZoom == value)
+ {
+ return;
+ }
+ _mapZoom = value;
+
+ // Update bindings, no broadcast
+ RaisePropertyChanged(MapZoomPropertyName);
+ }
+ }
+
+
+
+
+ ///
+ /// The property's name.
+ ///
+ public const string IsBusyPropertyName = "IsBusy";
+
+ private bool _isBusy = false;
+
+ ///
+ /// Gets the IsBusy property.
+ ///
+ public bool IsBusy
+ {
+ get
+ {
+ return _isBusy;
+ }
+
+ set
+ {
+ if (_isBusy == value)
+ {
+ return;
+ }
+
+ var oldValue = _isBusy;
+ _isBusy = value;
+
+ // Update bindings, no broadcast
+ RaisePropertyChanged(IsBusyPropertyName);
+ }
+ }
+
+
+
+ ///
+ /// The property's name.
+ ///
+ public const string MapCenterPropertyName = "MapCenter";
+
+ private GeoCoordinate _mapCenter = null;
+
+ ///
+ /// Gets the MapCenter property.
+ ///
+ public GeoCoordinate MapCenter
+ {
+ get
+ {
+ return _mapCenter;
+ }
+
+ set
+ {
+ if (_mapCenter == value)
+ {
+ return;
+ }
+
+ var oldValue = _mapCenter;
+ _mapCenter = value;
+
+ // Update bindings, no broadcast
+ RaisePropertyChanged(MapCenterPropertyName);
+ }
+ }
+
+ #endregion
+
+ #region Commands
+
+ public ICommand MainLoadCommand { get; set; }
+ public ICommand PublishLocationCommand { get; set; }
+ public ICommand DisplayAboutCommand { get; set; }
+ public ICommand NavigateToSettingsCommand { get; set; }
+ public ICommand ShowMyLocationCommand { get; set; }
+ public ICommand RefreshFriendsCommand { get; set; }
+ public ICommand ShowAboutCommand { get; set; }
+ public ICommand SaveMySettingsCommand { get; set; }
+ public ICommand CancelMySettingsCommand { get; set; }
+ public ICommand ChoosePhotoCommand { get; set; }
+ public ICommand CropSaveCommand { get; set; }
+ public ICommand CropCancelCommand { get; set; }
+ public ICommand MapViewChangedCommand { get; set; }
+
+ #endregion
+
+ #region Implemented Commands & Methods
+
+ private void ShowMyLocation()
{
//
- MainLoadCommand = new RelayCommand(() => MainLoad());
- PublishLocationCommand = new RelayCommand(() => PublishLocationAction());
- DisplayAboutCommand = new RelayCommand(() => DisplayAbout());
- NavigateToSettingsCommand = new RelayCommand(() => NavigateToSettings());
- RefreshFriendsCommand = new RelayCommand(() => RefreshFriends());
- ShowAboutCommand = new RelayCommand(() => ShowAbout());
- SaveMySettingsCommand = new RelayCommand(() => SaveMySettings());
- CancelMySettingsCommand = new RelayCommand(() => CancelMySettings());
- ChoosePhotoCommand = new RelayCommand(() => ChoosePhoto());
- CropSaveCommand = new RelayCommand(() => CropSave());
- CropCancelCommand = new RelayCommand(() => CropCancel());
+ }
- if (IsInDesignMode)
+ private void MapViewChanged(LocationRect boundRectangle)
+ {
+ ObservableCollection _newVisiblePushPins = new ObservableCollection();
+ //filter visible pushpins
+ foreach (PushPinModel pushPin in PushPins)
{
- // Code runs in Blend --> create design time data.
+ if (boundRectangle.Intersects(new LocationRect(pushPin.Location, .5, .5)))
+ {
+ _newVisiblePushPins.Add(pushPin);
+ }
}
- else
- {
- // Code runs "for real"
- }
-
+ VisiblePushPins = _newVisiblePushPins;
}
public void CropCancel()
@@ -118,7 +430,7 @@ namespace MyFriendsAround.WP7.ViewModel
{
//
}
-
+
private void MainLoad()
{
@@ -189,7 +501,7 @@ namespace MyFriendsAround.WP7.ViewModel
private void cameraTask_Completed(object sender, PhotoResult e)
{
- if (e.ChosenPhoto!=null && e.ChosenPhoto.Length>0) // e.TaskResult == TaskResult.OK)
+ if (e.ChosenPhoto != null && e.ChosenPhoto.Length > 0) // e.TaskResult == TaskResult.OK)
{
// Get the image temp file from e.OriginalFileName.
// Get the image temp stream from e.ChosenPhoto.
@@ -210,39 +522,6 @@ namespace MyFriendsAround.WP7.ViewModel
}
}
- ///
- /// The property's name.
- ///
- public const string MyPicturePropertyName = "MyPicture";
- private ImageSource _myPicture = new BitmapImage(new Uri("/icons/anonymousIcon.png", UriKind.RelativeOrAbsolute));
-
- ///
- /// Gets the MyPicture property.
- ///
- public ImageSource MyPicture
- {
- get
- {
- return _myPicture;
- }
-
- set
- {
- if (_myPicture == value)
- {
- return;
- }
-
- var oldValue = _myPicture;
- _myPicture = value;
-
- // Update bindings, no broadcast
- RaisePropertyChanged(MyPicturePropertyName);
-
- // Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
- RaisePropertyChanged(MyPicturePropertyName, oldValue, value, true);
- }
- }
private void CancelMySettings()
@@ -289,16 +568,16 @@ namespace MyFriendsAround.WP7.ViewModel
{
ObservableCollection result = new ObservableCollection();
list.ForEach((f) =>
- {
- //f.LocationStr
- result.Add(new PushPinModel()
- {
- PinSource = "/ApplicationIcon.png",
- Location = new GeoCoordinate(f.Latitude, f.Longitude),
- PinUserName = f.FriendName,
- PinImageUrl = string.Format("https://myfriendsaround.blob.core.windows.net/profiles/profile_{0}.jpg", f.Id)
- });
- });
+ {
+ //f.LocationStr
+ result.Add(new PushPinModel()
+ {
+ PinSource = "/ApplicationIcon.png",
+ Location = new GeoCoordinate(f.Latitude, f.Longitude),
+ PinUserName = f.FriendName,
+ PinImageUrl = string.Format("https://myfriendsaround.blob.core.windows.net/profiles/profile_{0}.jpg", f.Id)
+ });
+ });
PushPins = result;
}
@@ -320,20 +599,20 @@ namespace MyFriendsAround.WP7.ViewModel
{
List list = args.Friends;
DispatcherHelper.CheckBeginInvokeOnUI(() =>
- {
- PopulatePushPins(list);
- IsBusy = false;
- }
+ {
+ PopulatePushPins(list);
+ IsBusy = false;
+ }
);
}
else
{
DispatcherHelper.CheckBeginInvokeOnUI(() =>
- {
- IsBusy = false;
- var exception = new ExceptionPrompt();
- exception.Show(args.Error);
- }
+ {
+ IsBusy = false;
+ var exception = new ExceptionPrompt();
+ exception.Show(args.Error);
+ }
);
}
}
@@ -343,27 +622,27 @@ namespace MyFriendsAround.WP7.ViewModel
if (args.Error != null)
{
DispatcherHelper.CheckBeginInvokeOnUI(() =>
- {
- IsBusy = false;
- var exception = new ExceptionPrompt();
- exception.Show(args.Error);
- });
+ {
+ IsBusy = false;
+ var exception = new ExceptionPrompt();
+ exception.Show(args.Error);
+ });
}
else
{
if (!args.IsSuccess)
{
DispatcherHelper.CheckBeginInvokeOnUI(() =>
- {
- var message = new DialogMessage(
- "Communication error!", DialogMessageCallback)
- {
- Button = MessageBoxButton.OK,
- Caption = "Error!"
- };
+ {
+ var message = new DialogMessage(
+ "Communication error!", DialogMessageCallback)
+ {
+ Button = MessageBoxButton.OK,
+ Caption = "Error!"
+ };
- Messenger.Default.Send(message);
- });
+ Messenger.Default.Send(message);
+ });
}
else
{
@@ -431,79 +710,6 @@ namespace MyFriendsAround.WP7.ViewModel
}
}
- public ICommand MainLoadCommand { get; set; }
- public ICommand PublishLocationCommand { get; set; }
- public ICommand DisplayAboutCommand { get; set; }
- public ICommand NavigateToSettingsCommand { get; set; }
- public ICommand RefreshFriendsCommand { get; set; }
- public ICommand ShowAboutCommand { get; set; }
- public ICommand SaveMySettingsCommand { get; set; }
- public ICommand CancelMySettingsCommand { get; set; }
- public ICommand ChoosePhotoCommand { get; set; }
- public ICommand CropSaveCommand { get; set; }
- public ICommand CropCancelCommand { get; set; }
-
-
-
-
- ///
- /// The property's name.
- ///
- public const string MyNamePropertyName = "MyName";
- private string _myName = "Guest";
-
- ///
- /// Gets the MyName property.
- ///
- public string MyName
- {
- get { return _myName; }
- set
- {
- if (_myName == value)
- {
- return;
- }
- var oldValue = _myName;
- _myName = value;
- // Update bindings, no broadcast
- RaisePropertyChanged(MyNamePropertyName);
- }
- }
-
-
- public string AppBarTextAbout
- {
- get { return "About"; }
- }
-
- public string AppBarTextSettings
- {
- get { return "Settings"; }
- }
-
- public string AppBarTextPublish
- {
- get { return "Publish"; }
- }
-
- public string AppBarTextRefresh
- {
- get { return "Refresh"; }
- }
-
- public string AppBarTextSaveSettings
- {
- get { return "Save"; }
- }
-
- public string AppBarTextCancelSettings
- {
- get { return "Cancel"; }
- }
-
-
-
////public override void Cleanup()
////{
//// // Clean up if needed
@@ -511,136 +717,8 @@ namespace MyFriendsAround.WP7.ViewModel
//// base.Cleanup();
////}
-
- ///
- /// The property's name.
- ///
- public const string PushPinsPropertyName = "PushPins";
- private ObservableCollection _PushPins = new ObservableCollection();
- ///
- /// Gets the PushPins property.
- ///
- public ObservableCollection PushPins
- {
- get
- {
- return _PushPins;
- }
-
- set
- {
- if (_PushPins == value)
- {
- return;
- }
-
- _PushPins = value;
-
- // Update bindings, no broadcast
- RaisePropertyChanged(PushPinsPropertyName);
-
- //// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
- //RaisePropertyChanged(PushPinsPropertyName, oldValue, value, true);
- }
- }
-
-
- ///
- /// The property's name.
- ///
- public const string MapZoomPropertyName = "MapZoom";
-
- private int _mapZoom = 1;
-
- ///
- /// Gets the MapZoom property.
- ///
- public int MapZoom
- {
- get
- {
- return _mapZoom;
- }
-
- set
- {
- if (_mapZoom == value)
- {
- return;
- }
- _mapZoom = value;
-
- // Update bindings, no broadcast
- RaisePropertyChanged(MapZoomPropertyName);
- }
- }
-
-
- ///
- /// The property's name.
- ///
- public const string MapCenterPropertyName = "MapCenter";
- private GeoCoordinate _mapCenter = new GeoCoordinate(0, 0);
-
- ///
- /// Gets the MapCenter property.
- ///
- public GeoCoordinate MapCenter
- {
- get
- {
- return _mapCenter;
- }
-
- set
- {
- if (_mapCenter == value)
- {
- return;
- }
-
- var oldValue = _mapCenter;
- _mapCenter = value;
-
- // Update bindings, no broadcast
- RaisePropertyChanged(MapCenterPropertyName);
- //// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
- //RaisePropertyChanged(MapCenterPropertyName, oldValue, value, true);
- }
- }
-
-
- ///
- /// The property's name.
- ///
- public const string IsBusyPropertyName = "IsBusy";
-
- private bool _isBusy = false;
-
- ///
- /// Gets the IsBusy property.
- ///
- public bool IsBusy
- {
- get
- {
- return _isBusy;
- }
-
- set
- {
- if (_isBusy == value)
- {
- return;
- }
-
- var oldValue = _isBusy;
- _isBusy = value;
-
- // Update bindings, no broadcast
- RaisePropertyChanged(IsBusyPropertyName);
- }
- }
+ #endregion
}
+
}
\ No newline at end of file
diff --git a/main/MyFriendsAround.WP7/Views/MainPage.xaml b/main/MyFriendsAround.WP7/Views/MainPage.xaml
index 12575aa..346f080 100644
--- a/main/MyFriendsAround.WP7/Views/MainPage.xaml
+++ b/main/MyFriendsAround.WP7/Views/MainPage.xaml
@@ -20,7 +20,7 @@
DataContext="{Binding Main, Source={StaticResource Locator}}"
xmlns:my="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps"
xmlns:Preview="clr-namespace:Phone7.Fx.Preview;assembly=Phone7.Fx.Preview"
- xmlns:binding="clr-namespace:Coding4Fun.Phone.Controls.Binding;assembly=Coding4Fun.Phone.Controls">
+ xmlns:binding="clr-namespace:Coding4Fun.Phone.Controls.Binding;assembly=Coding4Fun.Phone.Controls" xmlns:Core="clr-namespace:Microsoft.Phone.Controls.Maps.Core;assembly=Microsoft.Phone.Controls.Maps">
@@ -41,18 +41,17 @@
+ HorizontalAlignment="Left">
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -131,14 +161,14 @@
Foreground="{StaticResource PhoneAccentBrush}"
Style="{StaticResource PhoneTextNormalStyle}" />
+ Height="80" >
-
+ BorderThickness="0" Opacity="1">
+ Text="{Binding MyName, Mode=OneWay}" Opacity="1" />
@@ -172,6 +202,10 @@
+
@@ -189,19 +223,4 @@
-
-
-
-
\ No newline at end of file
diff --git a/main/MyFriendsAround.WP7/Views/MainPage.xaml.cs b/main/MyFriendsAround.WP7/Views/MainPage.xaml.cs
index 9675a1e..de0192e 100644
--- a/main/MyFriendsAround.WP7/Views/MainPage.xaml.cs
+++ b/main/MyFriendsAround.WP7/Views/MainPage.xaml.cs
@@ -1,16 +1,22 @@
using System;
+using System.Device.Location;
using System.Security;
using System.Windows;
+using System.Windows.Data;
using GalaSoft.MvvmLight.Messaging;
using GalaSoft.MvvmLight.Threading;
using Microsoft.Phone.Controls;
+using Microsoft.Phone.Controls.Maps;
using Microsoft.Silverlight.Testing;
+using MyFriendsAround.WP7.ViewModel;
using MyFriendsAround.WP7.Views;
namespace MyFriendsAround.WP7
{
public partial class MainPage : PhoneApplicationPage
{
+ //private Map MyMap;
+
// Constructor
public MainPage()
{
@@ -37,6 +43,8 @@ namespace MyFriendsAround.WP7
}
+
+
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
#if TESTING
@@ -52,6 +60,16 @@ namespace MyFriendsAround.WP7
{
bool navigateBackSuccessfull = imobileTPage.NavigateBack(); arg.Cancel = navigateBackSuccessfull;
}; (Application.Current.RootVisual as PhoneApplicationFrame).Content = testPage;
+
+ map.SetView(LocationRect.CreateLocationRect());
+ }
+
+ private void map_ViewChangeEnd(object sender, MapEventArgs e)
+ {
+ //to workaround the issue
+ // https://connect.microsoft.com/VisualStudio/feedback/details/643990/wp7-bing-maps-control-throwing-unspecified-error-with-mapitemscontrol
+ //
+ (DataContext as MainViewModel).MapViewChangedCommand.Execute(map.BoundingRectangle);
}
}
diff --git a/main/MyFriendsAround.WP7/icons/appbar.location.png b/main/MyFriendsAround.WP7/icons/appbar.location.png
new file mode 100644
index 0000000..41d7ecf
Binary files /dev/null and b/main/MyFriendsAround.WP7/icons/appbar.location.png differ