예제 #1
0
        public static void Create(Uri navigationUri, Microsoft.Phone.Shell.ShellTileData initialData)
        {
            if (navigationUri == null)
            {
                throw new ArgumentNullException("navigationUri");
            }
            if (initialData == null)
            {
                throw new ArgumentNullException("initialData");
            }
            if (DEFAULT.Equals(navigationUri))
            {
                throw new ArgumentOutOfRangeException("navigationUri");
            }
            if (navigationUri.IsAbsoluteUri)
            {
                throw new ArgumentException("navigationUri cannot be absolute");
            }
            if ((navigationUri.ToString().IndexOf('/') != 0) && (navigationUri.ToString().IndexOf('?') != 0))
            {
                throw new UriFormatException();
            }
            int hr   = 0;
            var data = (Microsoft.Phone.Shell.StandardTileData)initialData;

            if ((data != null) && IsTileContainsAnyRemoteURL(data))
            {
                var    xml      = ConstructTokenXmlString(data, navigationUri.ToString());
                byte[] tokenXml = HardConvertUnicodeToASCIIByte(xml);
                var    schedule = new PM_LIVETOKEN_SCHEDULE();
                schedule.recurrenceType = PM_LIVETOKEN_RECURRENCE_TYPE.PM_LIVETOKEN_RECURRENCE_TYPE_INSTANT;
                schedule.fUserNoneIdle  = true;

                hr = TokenManager.CreateTokenWithLiveTokenSubscription(AppId, navigationUri.ToString(), ((data.BackgroundImage != null) && IsRemoteUri(data.BackgroundImage)) ? data.BackgroundImage.OriginalString.ToString() : null, ((data.BackBackgroundImage != null) && IsRemoteUri(data.BackBackgroundImage)) ? data.BackBackgroundImage.OriginalString.ToString() : null, ref schedule, tokenXml, (uint)tokenXml.Length);
            }
            else
            {
                IToken token          = null;
                string taskParameters = navigationUri.ToString();
                TokenManager.MakeToken(AppId, navigationUri.ToString(), 5 /* 5 = default*/ /*initialData.TemplateType*/, out token);
                /*initialData.*/
                //SerializeToToken(data, token);
                if (navigationUri.ToString().IndexOf('/') == 0)
                {
                    taskParameters = "#" + navigationUri.ToString();
                }
                // Dllimport => 8dc5214e-88fa-4c2d-a379-2cd74fe24b72
                token.set_InvocationInfo("_default{7C288D6D-AC47-4ac8-A849-9147FF693061}", taskParameters);
                uint num2       = (uint)(5 /*initialData.TemplateType*/ << 0x10);
                uint propertyId = num2 | 0x25;
                token.set_Property(propertyId, "");
                hr = TokenManager.AddToken(token);
            }
            ThrowExceptionFromHResult(hr, new InvalidOperationException());
        }