提交 ca6d4fde 编写于 作者: A Adam Barth 提交者: GitHub

Add clipboard functionality to platform plugin (#3139)

This will eventually replace the clipboard mojom.
上级 26e6935b
......@@ -5,6 +5,10 @@
package io.flutter.plugin.platform;
import android.app.Activity;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.Uri;
......@@ -27,6 +31,7 @@ public class PlatformPlugin extends JSONMessageListener implements ActivityLifec
private final Activity mActivity;
public static final int DEFAULT_SYSTEM_UI = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
private static final String kTextPlainFormat = "text/plain";
public PlatformPlugin(Activity activity) {
mActivity = activity;
......@@ -53,6 +58,10 @@ public class PlatformPlugin extends JSONMessageListener implements ActivityLifec
setSystemChromeSystemUIOverlayStyle(args.getString(0));
} else if (method.equals("SystemNavigator.pop")) {
popSystemNavigator();
} else if (method.equals("Clipboard.getData")) {
return getClipboardData(args.getString(0));
} else if (method.equals("Clipboard.setData")) {
setClipboardData(args.getJSONObject(0));
} else if (method.equals("PathProvider.getTemporaryDirectory")) {
return getPathProviderTemporaryDirectory();
} else if (method.equals("PathProvider.getApplicationDocumentsDirectory")) {
......@@ -166,6 +175,28 @@ public class PlatformPlugin extends JSONMessageListener implements ActivityLifec
mActivity.finish();
}
private JSONObject getClipboardData(String format) throws JSONException {
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = clipboard.getPrimaryClip();
if (clip == null)
return null;
if ((format == null || format.equals(kTextPlainFormat)) &&
clip.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
JSONObject result = new JSONObject();
result.put("text", clip.getItemAt(0).getText().toString());
return result;
}
return null;
}
private void setClipboardData(JSONObject data) throws JSONException {
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("text label?", data.getString("text"));
clipboard.setPrimaryClip(clip);
}
private JSONObject getPathProviderTemporaryDirectory() throws JSONException {
JSONObject result = new JSONObject();
result.put("path", mActivity.getCacheDir().getPath());
......
......@@ -9,7 +9,11 @@
#include <UIKit/UIApplication.h>
#include <UIKit/UIKit.h>
static NSDictionary* GetDirectoryOfType(NSSearchPathDirectory dir) {
namespace {
constexpr char kTextPlainFormat[] = "text/plain";
NSDictionary* GetDirectoryOfType(NSSearchPathDirectory dir) {
NSArray* paths =
NSSearchPathForDirectoriesInDomains(dir, NSUserDomainMask, YES);
if (paths.count == 0)
......@@ -17,6 +21,8 @@ static NSDictionary* GetDirectoryOfType(NSSearchPathDirectory dir) {
return @{ @"path": paths.firstObject };
}
} // namespaces
namespace shell {
// TODO(abarth): Move these definitions from system_chrome_impl.cc to here.
......@@ -58,6 +64,10 @@ using namespace shell;
[self setSystemChromeSystemUIOverlayStyle:args.firstObject];
} else if ([method isEqualToString:@"SystemNavigator.pop"]) {
[self popSystemNavigator];
} else if ([method isEqualToString:@"Clipboard.getData"]) {
return [self getClipboardData:args.firstObject];
} else if ([method isEqualToString:@"Clipboard.setData"]) {
[self setClipboardData:args.firstObject];
} else if ([method isEqualToString:@"PathProvider.getTemporaryDirectory"]) {
return [self getPathProviderTemporaryDirectory];
} else if ([method isEqualToString:@"PathProvider.getApplicationDocumentsDirectory"]) {
......@@ -166,6 +176,18 @@ using namespace shell;
// Apple's human user guidelines say not to terminate iOS applications.
}
- (NSDictionary*)getClipboardData:(NSString*)format {
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
if (!format || [format isEqualToString:@(kTextPlainFormat)])
return @{ @"text": pasteboard.string };
return nil;
}
- (void)setClipboardData:(NSDictionary *)data {
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = data[@"text"];
}
- (NSDictionary*)getPathProviderTemporaryDirectory {
return GetDirectoryOfType(NSCachesDirectory);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册