Exemplo n.º 1
0
        /// <summary>
        ///  アイテムを登録解除する.
        /// </summary>
        /// <param name="index">アイテムのインデックス</param>
        /// <returns></returns>
        public async Task RemoveAtAsync(int index)
        {
            var item = this[index];
            await LockscreenImageItemSettingHelper.Remove(item);

            this.RemoveAt(index);
        }
Exemplo n.º 2
0
        /// <summary>
        ///  ファイルを追加する.
        /// </summary>
        /// <param name="file">追加するファイル</param>
        /// <param name="cancellationToken">キャンセル用のトークン</param>
        /// <returns></returns>
        public async Task <bool> AddFileAsync(StorageFile file, bool isTemporaryDefault, CancellationToken cancellationToken)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            cancellationToken.ThrowIfCancellationRequested();

            var item = await LockscreenImageItemSettingHelper.FromStorageItemAsync(file, isTemporaryDefault, cancellationToken);

            if (item == null)
            {
                return(false);
            }

            if ((this.OnLaunchedDispatcher == null) || this.OnLaunchedDispatcher.HasThreadAccess)
            {
                await this.LockscreenItemList.AddItemAsync(item);
            }
            else
            {
                await this.OnLaunchedDispatcher.RunAsync(
                    Windows.UI.Core.CoreDispatcherPriority.Normal,
                    async() => { await this.LockscreenItemList.AddItemAsync(item); });
            }

            return(true);
        }
Exemplo n.º 3
0
        /// <summary>
        ///  登録されているアイテムを読み込む(実装).
        /// </summary>
        /// <returns></returns>
        private async Task LoadAllItemsAsyncCore()
        {
            var itemsState = AppSettings.Instance.GetItemsState();

            if (itemsState == null)
            {
                return;
            }

            foreach (var setting in LockscreenImageItemSettingHelper.DeserializeItems(itemsState))
            {
                if (!StorageApplicationPermissions.FutureAccessList.ContainsItem(setting.Token))
                {
                    continue;
                }

                bool succeeded = false;
                try
                {
                    var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(setting.Token);

                    var item = new LockscreenImageItem(file)
                    {
                        Setting = setting
                    };
                    Add(item);
                    succeeded = true;
                }
                catch (System.IO.FileNotFoundException)
                {
                    succeeded = false;
                }
                if (!succeeded)
                {
                    StorageApplicationPermissions.FutureAccessList.Remove(setting.Token);

                    if (!String.IsNullOrEmpty(setting.TileId))
                    {
                        await TileHelper.RemoveTileRegistrationAsync(setting.TileId);
                    }

                    continue;
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        ///  アイテムを登録解除する.
        /// </summary>
        /// <param name="item">アイテム</param>
        /// <returns></returns>
        public async Task RemoveAsync(LockscreenImageItem item)
        {
            await LockscreenImageItemSettingHelper.Remove(item);

            this.Remove(item);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 指定したインデックスのアイテムをロック画面に設定する.
        /// </summary>
        /// <param name="index">アイテムのインデックス</param>
        /// <param name="itemState">アイテムの設定</param>
        /// <returns>成功したら<c>true</c>。</returns>
        private async Task <bool> SetItemToLockscreenAsync(int index, IDictionary <string, object> itemState)
        {
            var itemSetting = LockscreenImageItemSettingHelper.DeserializeItemAt(index, itemState);

            if (itemSetting == null)
            {
                return(false);
            }
            if (!StorageApplicationPermissions.FutureAccessList.ContainsItem(itemSetting.Token))
            {
                return(false);
            }

            StorageFile file;

            try
            {
                file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(itemSetting.Token).AsTask(this.cancellationTokenSource.Token);

                if (file == null)
                {
                    return(false);
                }
            }
            catch (System.IO.IOException)
            {
                return(false);
            }

            try
            {
                // LockscreenItemsPage.SetSelectedItemToLockscreenAsync()と同じように対処する
                bool succeedToSet = false;
                try
                {
                    await Windows.System.UserProfile.LockScreen.SetImageFileAsync(file).AsTask(this.cancellationTokenSource.Token);

                    succeedToSet = true;
                }
                catch (UnauthorizedAccessException)
                {
                    // succeedToSetの上のコメント参照
                }

                if (!succeedToSet)
                {
                    using (var strm = await file.OpenReadAsync())
                    {
                        await Windows.System.UserProfile.LockScreen.SetImageStreamAsync(strm);

                        succeedToSet = true;
                    }
                }

                return(succeedToSet);
            }
            catch (Exception ex)
            {
                // Dashboardにある品質情報によると
                // BackgroundTask実行中にこれらの例外でクラッシュしている
                if ((uint)ex.HResult == 0x80070490u)
                {
                    return(false);
                }
                // FORTMATETC構造体が無効
                if ((uint)ex.HResult == 0x80040064u)
                {
                    return(false);
                }
                throw;
            }
        }