mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
Prototyped SMTC support for Windows 10+
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<TargetFramework>net6.0-windows10.0.22000</TargetFramework>
|
||||
<UseWPF>true</UseWPF>
|
||||
<ApplicationIcon>Assets\ZuneFluentGem.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Versioning;
|
||||
using System.Security.Permissions;
|
||||
|
||||
[assembly: AssemblyCompany("Microsoft Corporation")]
|
||||
@@ -16,4 +17,11 @@ using System.Security.Permissions;
|
||||
#else
|
||||
[assembly: AssemblyFileVersion("4.8.2345.0")]
|
||||
[assembly: AssemblyVersion("4.7.0.0")]
|
||||
#endif
|
||||
|
||||
// Workaround for CA1416
|
||||
#if WINDOWS10
|
||||
[assembly: SupportedOSPlatform("windows10.0.10240")]
|
||||
#elif WINDOWS8_0_OR_GREATER
|
||||
[assemby: SupportedOSPlatform("windows8.0.0")]
|
||||
#endif
|
||||
@@ -11,7 +11,7 @@
|
||||
<AssemblyVersion>$(ApplicationVersion)</AssemblyVersion>
|
||||
<FileVersion>$(ApplicationVersion)</FileVersion>
|
||||
|
||||
<TargetFrameworks>net6.0;net35;net40;net6.0-windows8</TargetFrameworks>
|
||||
<TargetFrameworks>net6.0;net6.0-windows10.0.22000;net35;net40</TargetFrameworks>
|
||||
<Platforms>x64;x86</Platforms>
|
||||
|
||||
<FileAlignment>512</FileAlignment>
|
||||
@@ -42,9 +42,31 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<UseOpenZune>True</UseOpenZune>
|
||||
</PropertyGroup>
|
||||
<Choose>
|
||||
<When Condition=" $(TargetFramework.StartsWith('net6.0-windows')) ">
|
||||
<PropertyGroup>
|
||||
<!--<UseOpenZune>True</UseOpenZune>-->
|
||||
|
||||
<DefineConstants Condition="$(TargetFramework.StartsWith('net6.0-windows10'))">$(DefineConstants);WINDOWS10</DefineConstants>
|
||||
<DefineConstants Condition="$(TargetFramework.StartsWith('net6.0-windows8'))">$(DefineConstants);WINDOWS8</DefineConstants>
|
||||
</PropertyGroup>
|
||||
</When>
|
||||
|
||||
<When Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<PropertyGroup>
|
||||
<UseOpenZune>True</UseOpenZune>
|
||||
</PropertyGroup>
|
||||
</When>
|
||||
|
||||
<!--
|
||||
.NET Core 3.1 is only used to target Windows 8/8.1
|
||||
-->
|
||||
<When Condition=" $(TargetFramework.StartsWith('netcoreapp')) ">
|
||||
<PropertyGroup>
|
||||
<UseOpenZune>True</UseOpenZune>
|
||||
</PropertyGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
|
||||
<PropertyGroup Condition=" '$(TargetFramework)' == 'net35' ">
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
@@ -61,7 +83,7 @@
|
||||
<Reference Include="Accessibility" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netcoreapp')) ">
|
||||
<PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.22621.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -824,6 +824,21 @@ namespace ZuneUI
|
||||
if (this.PlaybackStopped != null)
|
||||
this.PlaybackStopped(this, null);
|
||||
}
|
||||
|
||||
#if WINDOWS
|
||||
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Media.SystemMediaTransportControls"))
|
||||
{
|
||||
// On Windows 8.1 / 10 / 11
|
||||
var _systemMediaTransportControls = Windows.Media.SystemMediaTransportControlsInterop.GetForWindow(Application.Window.Handle);
|
||||
_systemMediaTransportControls.PlaybackStatus = stateNew switch
|
||||
{
|
||||
PlayerState.Stopped => Windows.Media.MediaPlaybackStatus.Stopped,
|
||||
PlayerState.Playing => Windows.Media.MediaPlaybackStatus.Playing,
|
||||
PlayerState.Paused => Windows.Media.MediaPlaybackStatus.Paused,
|
||||
_ => throw new NotImplementedException(),
|
||||
};
|
||||
}
|
||||
#endif
|
||||
}
|
||||
this.UpdatePropertiesAndCommands();
|
||||
this.ReportStreamingAction(playerState);
|
||||
@@ -1505,7 +1520,7 @@ namespace ZuneUI
|
||||
{
|
||||
#if OPENZUNE
|
||||
var playbackHandler = Microsoft.Zune.Shell.ZuneApplication.PlaybackHandler;
|
||||
if (playbackHandler != null)
|
||||
if (playbackHandler != null && playbackHandler.NextItems.Count > 0)
|
||||
{
|
||||
await playbackHandler.NextAsync();
|
||||
}
|
||||
@@ -1752,11 +1767,61 @@ namespace ZuneUI
|
||||
break;
|
||||
case MCTransportState.Playing:
|
||||
PerfTrace.TraceUICollectionEvent(UICollectionEvent.PlayRequestComplete, "");
|
||||
|
||||
// Use SMTC when available
|
||||
#if WINDOWS
|
||||
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Media.SystemMediaTransportControls"))
|
||||
{
|
||||
// On Windows 8.1 / 10 / 11
|
||||
var _systemMediaTransportControls = Windows.Media.SystemMediaTransportControlsInterop.GetForWindow(Application.Window.Handle);
|
||||
_systemMediaTransportControls.IsPlayEnabled = true;
|
||||
_systemMediaTransportControls.IsPauseEnabled = true;
|
||||
_systemMediaTransportControls.IsStopEnabled = true;
|
||||
_systemMediaTransportControls.IsNextEnabled = true;
|
||||
_systemMediaTransportControls.IsPreviousEnabled = true;
|
||||
|
||||
if (!isInit)
|
||||
{
|
||||
isInit = true;
|
||||
_systemMediaTransportControls.ButtonPressed += (e, args) =>
|
||||
{
|
||||
Action<object, EventArgs> method = args.Button switch
|
||||
{
|
||||
Windows.Media.SystemMediaTransportControlsButton.Play => OnPlayClicked,
|
||||
Windows.Media.SystemMediaTransportControlsButton.Pause => OnPauseClicked,
|
||||
Windows.Media.SystemMediaTransportControlsButton.Stop => OnStopClicked,
|
||||
Windows.Media.SystemMediaTransportControlsButton.Next => OnForwardClicked,
|
||||
Windows.Media.SystemMediaTransportControlsButton.Previous => OnBackClicked,
|
||||
|
||||
_ => throw new NotImplementedException()
|
||||
};
|
||||
|
||||
Application.DeferredInvoke(_ => method(null, null), null);
|
||||
};
|
||||
}
|
||||
|
||||
// Get the updater
|
||||
Windows.Media.SystemMediaTransportControlsDisplayUpdater updater = _systemMediaTransportControls.DisplayUpdater;
|
||||
|
||||
// Music metadata
|
||||
updater.Type = _lastKnownPlaybackTrack.MediaType == MediaType.Video
|
||||
? Windows.Media.MediaPlaybackType.Video
|
||||
: Windows.Media.MediaPlaybackType.Music;
|
||||
updater.MusicProperties.Title = _lastKnownPlaybackTrack.Title;
|
||||
if (_lastKnownPlaybackTrack is LibraryPlaybackTrack track)
|
||||
{
|
||||
updater.MusicProperties.Artist = track.DisplayArtist;
|
||||
}
|
||||
|
||||
updater.Update();
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
this._lastKnownTransportState = mcTransportState;
|
||||
}
|
||||
bool isInit = false;
|
||||
|
||||
private void DeferredTransportPositionChanged(object obj)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user