The Windows 7 release of the Windows Media Center platform focuses primarily on small, targeted improvements to the Windows Media Center Presentation Layer and additions to the managed code object model to make all applications (with greater emphasis on the web paradigm) a first class citizen in Windows Media Center and help them act and feel more like locally installed applications in terms of perceived performance. I'd like to take a few minutes of your time to outline some of the new platform features you will find in this build.
The ApplicationContext.SingleInstance Property allows applications to designate themselves as single instance – if an instance of the application is already running, Windows Media Center will return to that instance instead of creating a new instance (including web applications).
Data Access Model Items make it easier to consume and bind to web services designed with Resource Oriented Architecture (ROA), embracing the Representational State Transfer (REST) approach of web development. Sometimes referred to as a RESTful approach this paradigm assumes the programmable web operates much like the human web and is based on the fundamental building blocks of HTTP verbs (GET, PUT, POST, etc.), headers and entity documents.
The MediaCollection provides a rich, dynamic representation of a video and / or audio play list that can be manipulated and shared between applications. The feature also allows for the interactive management of play states related to each piece of content in the MediaCollection.
Developers can now always get the URI of the currently playing media via the MediaExperience.MediaMetadata.Uri Property.
There is a new MediaExperience.Transport.BufferingProgress Property which reports the percentage of buffering progress.
A true page model available via HistoryOrientedPageSession.CurrentPage.State whereby UI authored in MCML can to persist state. Applications can also discern when a page navigation is happening as well as the direction (forward or back in the page stack / history) with Environment.IsNavigating and Environment.NavigationDirection. These also gain the ability to NOT include a page in the back stack with HistoryOrientedPageSession.CurrentPage.PushOnStack Property.
A MediaCenterEnvironment.ShowOnscreenKeyboard Method allow applications to take advantage of the on screen keyboard built in to Windows Media Center to provide a single method of text entry to the user.
Media Center Markup Language Improvements -- most of these are self explanatory so I'm not going to go into much detail here. If you have any questions, leave them in the comments and I can clarify.
Relative Paths for HTTP delivered MCML
Persistent and Session Cookie Support
ResourceGroup element allows you to specify groups of assets (images and sounds) which will notify you when they have been acquired so you can run a rule in response. This will most commonly be used to pre-load images from the web.
Switch Animation allows you to specify an animation by evaluation of a variable -- should make the more complex animations relying on a myriad of rules much easier to author.
Web Whitelist Type Additions
EditableDigits are like EditableText but limited to digits.
SecureEditableText and SecureTypingHandler.
An ExceptionHandler allows web based MCML to trap exceptions from the Windows Media Center managed code object model.
Application Lifetime Improvements and Properties -- In Windows Vista applications (neither web nor installed) cannot truly know whether or not they are on the page stack. This feature adds an ApplicationContext.IsCurrentlyVisible a a true indicator of whether or not the application page is currently the active page (e.g. being viewed by the consumer). If this property returns false the application is on the Media Center back stack. By contrast, IsForegroundApplication can return true if the application owns the currently playing media experience even if the application is not the experience currently being viewed by the consumer.
In Windows Vista media experiences created by applications can become orphaned during the normal course of user navigation. Applications count as a single ‘page’ on the Media Center back stack and there are a maximum number of 8 pages allowable in the Media Center back stack. (Note: Applications have their own separate page back stack.) Pages are automatically trimmed on the ninth navigation. If the page is an extensibility application the ehExtHost.exe process is forcibly shut down and the application is terminated. Applications have approximately 13 seconds of cleanup time when this occurs. This can also happen if the user navigates using the Back button and returns to a page before launching the application; This can always happen because the Start Menu is always the default, base page in the page stack. Starting in Windows 7 applications will be able to persist in these scenarios. In order to take advantage of this property an application must be both single instance (see the first item in this post) and own the currently playing experience. If both cases are true the ehExtHost.exe process and the application will enter a ‘keep alive’ state even if it would normally be time to close as the result of a page stack trim or back navigation. The application can continue to call the Media Center API including manipulation of the current media experience which it owns. In addition the ReturnToApplication Method is callable anytime the application owns the current media experience. The application should take great care to set ApplicationContext.URL or ApplicationContext.EntryPoint so the user can select the Now Playing tile on the Start Menu to return to the application at any time. If the application is in the kept alive state and no longer owns the current media experience (the user has started some other playback) the normal shutdown procedures for ehExtHost.exe will begin.
Feedback is welcome in the comments or over at http://discuss.mediacentersandbox.com.