/// <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); }
/// <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); }
/// <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; } } }
/// <summary> /// アイテムを登録解除する. /// </summary> /// <param name="item">アイテム</param> /// <returns></returns> public async Task RemoveAsync(LockscreenImageItem item) { await LockscreenImageItemSettingHelper.Remove(item); this.Remove(item); }
/// <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; } }