FlickrNet 3.5 Release

Just a quick post to say I’ve release version 3.5 of the FlickrNet API library.

A couple of things regarding this version and the FlickrNet library roadmap:

  • This will be the last version to support the old Authentication model. Going forward only oauth will be supported.
  • This will also be the last version to support .Net Compact Framework.

Going forward I also hope the next version will support Windows Runtime as well, at least for .Net applications (not sure about JavaScript/C++ support yet).

Download it from http://flickrnet.codeplex.com/ or get it via NuGet.

Windows Phone 7 – What I’ve Learnt So Far

Windows Phone 7 Series - InicioI’ve been launching headlong into Windows Phone 7 development as can be seen from my previous post and I’ve come across some little tit bits I thought I’d post up here.

Jump Start Training

I can’t begin to say how helpful the jump start training courses have been.

So far I’ve done the introduction, building silverlight 1 & 2, and advanced applications 1 & 2. Some of the stuff I already knew from other blog posts (like the application lifecycle stuff) but I’ve learnt quite a few new things.

Windows Phone Developer Blog: Windows Phone 7 Jump Start Training

Getting Focus and Active Control

In old school WinForms there is a property of a form called ActiveControl which returns the control which is currently active. This property doesn’t exist in Silverlight. Instead you need to use the FocusManager static class and its GetFocusedElement static method.

object obj = FocusManager.GetFocusedElement();

if (obj != null && obj is TextBox)

{

TextBox txt = obj as TextBox;

txt.Text = "Has Focus";

}

Beta Tools Warning

In the current beta tools Control.Focus() does not correctly transfer focus to the control.

DataBinding and the ApplicationBar

I really like the way the application bar works to make a Windows Phone 7 application look, well, like a Windows Phone 7 application.

However as has been noted elsewhere the ApplicationBar is not a Silverlight control in the normal sense. This means that you cannot use data binding when setting it up, you can’t use Command’s to hook up events and various other little tit bits.

Here are two links to MSDN documentation about the ApplicationBar.

How to: Add an Application Bar to Your Application for Windows Phone

Application Bar Best Practices for Windows Phone

The fact the application bar does not appear on the Silverlight visual tree results in two other issues. Firstly, setting a x:Name property on your buttons and menu items does not work. The fields in your code will always be null. You have to use the ApplicationBar.Buttons and ApplicationBar.MenuItems arrays to get access to the buttons and menu items.

Secondly, if you set up your controls with data binding on the form then click on an application bar button the data binding for the control with the focus is not updated. These two issue are discussed on Laurent Bugnion’s blog here: Two small issues with Windows Phone 7 ApplicationBar buttons (and workaround).

Using the above code for determining the current focus control I came up with an elegant solution when you have more than one text box like so:

object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && focusObj is TextBox)
{
var binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
binding.UpdateSource();
}

So far I have only tested this with the TextBox.Text property. CheckBox’s don’t seem to have this issue. Other controls like list boxes might also need to be taken into account.

It should also be noted that in the final release an alternative solution would be to simply move the focus to another control, or to the page itself (IsTabStop must be set to true for the Focus() method to work on the page) to get the data binding to update.

Flickr (and OAuth) authentication

Finally a word on Flickr (and by extension OAuth) authentication.

The usual process for desktop app authentication for Flickr is that you request a temporary value from Flickr (called the ‘frob’), then redirect to the Flickr web site where the authentication is processed. Then when you return to the application you use that frob to get the authentication token.

At first I tried to use the WebBrowserTask to kick off the authentication process in much this manner. This works fine except for one thing. The only way to get back to your application is to repeatedly hit the back button to come all the way through the IE history to exit IE and return to your app. The authentication process is at possibly 4 pages (Yahoo login, Authentication warning, Authentication approval and Authentication Complete pages) and there is nothing to stop the user continuing to use the web browser after they have authenticated to continue browsing the internet, so this didn’t seem like a good way.

Then I tried using the WebBrowser control. This works, but I couldn’t find any way to tell if the user had finished authenticating.

I was OK with this, but wanted to improve the experience. I finally came across this post discussing OAuth (which follows the same kind of flow as Flickr) for Windows Phone 7: http://blog.markarteaga.com/OAuthWithSilverlightForWindowsPhone7.aspx.

To accomplish this you change your Flickr authentication to be web based, rather than desktop based. In this scenarios once the authentication is completed you get redirected to a callback URL you specify. You need to create a simple HTML page that can be redirected to that then calls window.external.Notify() method in javascript. The string value passed in to this page is then passed to the WebBrowser.ScriptNotify event where you can extract the frob from the URL, and complete the authentication.

I think this gives a much cleaner UI and I shall be implementing it in the near future.

Other useful Links

Me on Twitter: http://twitter.com/samjudson

The # wp7dev tag on Twitter: http://twitter.com/#search?q=%23wp7dev

Daily ‘twitter’ newspaper: http://paper.li/tag/wp7dev

Windows Phone 7 Developer Blog: http://windowsteamblog.com/Windows_Phone/b/wpdev/

Windows Phone 7 Developer site: http://developer.windowsphone.com/

Update: Tombstoned Apps may not be reactivated

I forgot to mention – if the user starts a new version of your application then any tombstoned version will be removed from the back stack. e.g. If they go Start Button –> Your App  –> Start Button –> Your App then pressing the back button will exite your application and take them to the Start screen, and pressing it again will do nothing – no second instance of your app will be reactivated.

This does mean however that if your app is loading, you can clear down any existing data that may be hanging around from tombstoned apps.

Flickr Uploader for Windows Phone 7

I’ve put together a basic photo uploader for the new Windows Phone 7. This was a good exercise for me as I had to a) make sure that the Flickr.Net library worked correctly in Windows Phone 7, and b) finally learn Silverlight, at least the basics anyway.

Well I had great fun, and I’m finally ready to share. You can download the files below.

Things I Learnt

There are a few things I learnt while doing this about the way to make great Windows Phone 7 apps, so I thought I would share.

Custom Navigation

One thing that was an interesting challenge was trying to make the authentication process work easily. Basically there are 3 pages to the app – the photo chooser, the authentication page, and the upload page.

If you have already authenticated then it skips the authentication page.

If you authenticate and then go to the upload page I didn’t want to back button to bring you back to the authenticate page again, I wanted to skip it. This is with the following code:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (!String.IsNullOrEmpty(SettingsHelper.AuthenticationToken) && NavigationContext.QueryString.Count == 0)
    {
        if (NavigationService.CanGoBack)
            NavigationService.GoBack();
    }

    base.OnNavigatedTo(e);
}

Basically if you have already stored the authentication token then continue to move back if you can. I added in a check on the querystring in case you ever wanted to ‘redo’ authentication (this hasn’t been implemented yet).

Download Files

Here are the source files and the XAP file to download:

Flickr.Net for Silverlight/Windows Phone 7

Just a quick note to say I’ve released the first version of the Flickr.Net library to support Silverlight (3.0 and 4.0) and the new Windows Phone 7 SDK.

The release can be downloaded from flickrnet.codeplex.com – use the FlickrNetSilverlight.dll file in the binary download.

The new asynchronous methods added for silverlight (as all network traffic is async in silverlight) are also included in the existing Flickr.Net API for .Net 2.0+

Examples and documentation to come in the near future.

Let me know if you have any feedback.

Silverlight and Monotouch with Flickr.Net

The Flickr.Net library has been getting a bit of love recently.

Monotouch

Firstly, it got mentioned on the dotnetrocks podcast a week or so ago, a talk with Chris Hardy about Monotouch.

Postcast: http://www.dotnetrocks.com/default.aspx?showNum=568 – Flickr.Net is mentioned about 31minutes in. You can also view Chris’s talk at the NDC conference here: http://streaming.ndc2010.no/tcs/?id=815EADB7-066D-4516-A70F-31EEFDFB1DE2 – he does a demo using the Flickr.Net library in Monotouch at about the 40minutes mark.

Follow chris on twitter here: http://twitter.com/chrisntr

Silverlight

Recently I’ve been trying to work out how best to convert the Flickr.Net library over to Silverlight. Unfortunately it’s not as easy as it sounds, because most of the methods the library uses to talk to Flickr are only available in their asynchronous versions in Silverlight, which means the entire stack has to be converted to an asynchronous pattern.

Anyway, I’m almost there in terms of deciding on a method to use (maybe that is worth another post later) but in the mean time there is a post on the Silverlight Show web site about using Silverlight and Flickr which I’m using as my inspiration – the sooner the article is out of date the better :)

http://www.silverlightshow.net/items/Uploading-and-geo-tagging-photos-on-Flickr-using-Silverlight-4-s-HttpWebRequest.aspx

Jing Project uses Flickr.Net

11/29/2007 11:33 AMI’m please to say that the new version of the Jing Project, a tool for capturing video and screenshots of your desktop uses the Flickr.Net library to upload the files to Flickr (I’m assuming on the Windows only version).

As you can see from the screenshot on the right it works a dream :)