2017-10-03 05:15:13 +03:00
|
|
|
|
using Bit.App.Abstractions;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Runtime.InteropServices.WindowsRuntime;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Windows.ApplicationModel.Core;
|
|
|
|
|
using Windows.ApplicationModel.DataTransfer;
|
|
|
|
|
using Windows.Storage;
|
|
|
|
|
using Windows.System;
|
|
|
|
|
using Windows.UI.Core;
|
|
|
|
|
using Xamarin.Forms;
|
|
|
|
|
|
|
|
|
|
namespace Bit.UWP.Services
|
|
|
|
|
{
|
|
|
|
|
public class DeviceActionService : IDeviceActionService
|
|
|
|
|
{
|
2017-10-03 05:38:56 +03:00
|
|
|
|
public bool CanOpenFile(string fileName) => true;
|
2017-10-03 05:15:13 +03:00
|
|
|
|
|
|
|
|
|
public void ClearCache()
|
|
|
|
|
{
|
|
|
|
|
Task.Run(async () =>
|
|
|
|
|
{
|
2017-10-03 05:38:10 +03:00
|
|
|
|
foreach(var item in await ApplicationData.Current.LocalCacheFolder.GetItemsAsync())
|
2017-10-03 05:15:13 +03:00
|
|
|
|
{
|
|
|
|
|
await item.DeleteAsync();
|
|
|
|
|
}
|
|
|
|
|
}).Wait();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void CopyToClipboard(string text)
|
|
|
|
|
{
|
2017-10-03 05:38:10 +03:00
|
|
|
|
var dataPackage = new DataPackage
|
|
|
|
|
{
|
|
|
|
|
RequestedOperation = DataPackageOperation.Copy
|
|
|
|
|
};
|
2017-10-03 05:15:13 +03:00
|
|
|
|
dataPackage.SetText(text);
|
|
|
|
|
Clipboard.SetContent(dataPackage);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool OpenFile(byte[] fileData, string id, string fileName)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//the method is synchronous in the interface, so the async method are run synchronously here
|
|
|
|
|
var storageFolder = ApplicationData.Current.LocalCacheFolder;
|
|
|
|
|
var file = storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting).AsTask().Result;
|
|
|
|
|
FileIO.WriteBytesAsync(file, fileData).AsTask().Wait();
|
|
|
|
|
Launcher.LaunchFileAsync(file, new LauncherOptions { DisplayApplicationPicker = true }).AsTask().Wait();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-11-28 01:27:11 +03:00
|
|
|
|
public void OpenAutofillSettings()
|
|
|
|
|
{
|
|
|
|
|
throw new NotImplementedException();
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-03 05:15:13 +03:00
|
|
|
|
public Task SelectFileAsync()
|
|
|
|
|
{
|
|
|
|
|
var picker = new Windows.Storage.Pickers.FileOpenPicker
|
|
|
|
|
{
|
|
|
|
|
ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail,
|
|
|
|
|
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary,
|
|
|
|
|
FileTypeFilter = { "*" }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
|
|
|
|
|
{
|
|
|
|
|
var file = await picker.PickSingleFileAsync();
|
2017-10-03 05:38:10 +03:00
|
|
|
|
if(file != null)
|
|
|
|
|
{
|
2017-10-03 05:15:13 +03:00
|
|
|
|
await SelectFileResult(file);
|
2017-10-03 05:38:10 +03:00
|
|
|
|
}
|
2017-10-03 05:15:13 +03:00
|
|
|
|
}).AsTask();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task SelectFileResult(StorageFile file)
|
|
|
|
|
{
|
|
|
|
|
var buffer = await FileIO.ReadBufferAsync(file);
|
2017-10-03 05:38:10 +03:00
|
|
|
|
MessagingCenter.Send(Application.Current, "SelectFileResult",
|
2017-10-03 05:15:13 +03:00
|
|
|
|
new Tuple<byte[], string>(buffer.ToArray(), file.Name));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|