-
Notifications
You must be signed in to change notification settings - Fork 690
/
Clipboard.Android.cs
155 lines (138 loc) · 3.92 KB
/
Clipboard.Android.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#if __ANDROID__
using Android.Content;
using Android.Text.Method;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Uno.UI;
namespace Windows.ApplicationModel.DataTransfer
{
public static partial class Clipboard
{
private const string ClipboardDataLabel = nameof(Clipboard);
public static void SetContent(DataPackage content)
{
if (content is null)
{
throw new ArgumentNullException(nameof(content));
}
var items = new List<ClipData.Item>();
var mimeTypes = new List<string>();
if (content.Text != null)
{
items.Add(new ClipData.Item(content.Text));
mimeTypes.Add("text/plaintext");
}
else if (content.Uri != null)
{
var androidUri = Android.Net.Uri.Parse(content.Uri.ToString());
items.Add(new ClipData.Item(androidUri));
mimeTypes.Add("text/uri-list");
}
else if (content.Html != null)
{
// Matches all tags
Regex regex = new Regex("(<.*?>\\s*)+", RegexOptions.Singleline);
// Replace tags by spaces and trim
var plainText = regex.Replace(content.Html, " ").Trim();
items.Add(new ClipData.Item(plainText, content.Html));
mimeTypes.Add("text/html");
}
if (items.Count > 0)
{
ClipData clipData = new ClipData(
new ClipDescription(ClipboardDataLabel, mimeTypes.ToArray()),
items[0]);
for (int itemIndex = 1; itemIndex < items.Count; itemIndex++)
{
clipData.AddItem(items[itemIndex]);
}
var manager = ContextHelper.Current.GetSystemService(Context.ClipboardService) as ClipboardManager;
if (manager is null)
{
return;
}
manager.PrimaryClip = clipData;
}
else
{
// Clear clipboard
Clear();
}
}
public static DataPackageView GetContent()
{
var manager = ContextHelper.Current.GetSystemService(Context.ClipboardService) as ClipboardManager;
if (manager is null)
{
return null;
}
var clipData = manager.PrimaryClip;
string clipText = null;
Uri clipUri = null;
string clipHtml = null;
for (int itemIndex = 0; itemIndex < clipData.ItemCount; itemIndex++)
{
var itemText = clipData.GetItemAt(itemIndex).Text;
if (itemText != null)
{
clipText = itemText;
}
var itemUri = clipData.GetItemAt(itemIndex).Uri;
if (itemUri != null)
{
clipUri = new Uri(itemUri.ToString());
}
var itemHtml = clipData.GetItemAt(itemIndex).HtmlText;
if (itemText != null)
{
clipHtml = itemHtml;
}
}
var clipView = new DataPackageView();
if (clipText != null)
{
clipView.SetFormatTask(StandardDataFormats.Text, Task.FromResult(clipText));
}
if (clipHtml != null)
{
clipView.SetFormatTask(StandardDataFormats.Html, Task.FromResult(clipHtml));
}
if (clipUri != null)
{
clipView.SetFormatTask(StandardDataFormats.Uri, Task.FromResult(clipUri));
clipView.SetFormatTask(StandardDataFormats.WebLink, Task.FromResult(clipUri));
}
return clipView;
}
public static void Clear()
{
if (ContextHelper.Current.GetSystemService(Context.ClipboardService) is ClipboardManager manager)
{
var clipData = ClipData.NewPlainText("", "");
manager.PrimaryClip = clipData;
}
}
private static void StartContentChanged()
{
if (ContextHelper.Current.GetSystemService(Context.ClipboardService) is ClipboardManager manager)
{
manager.PrimaryClipChanged += Manager_PrimaryClipChanged;
}
}
private static void StopContentChanged()
{
if (ContextHelper.Current.GetSystemService(Context.ClipboardService) is ClipboardManager manager)
{
manager.PrimaryClipChanged -= Manager_PrimaryClipChanged;
}
}
private static void Manager_PrimaryClipChanged(object sender, EventArgs e)
{
OnContentChanged();
}
}
}
#endif