FreeRDP
Loading...
Searching...
No Matches
ClipboardImageProvider.java
1/*
2 Android Clipboard Image ContentProvider
3
4 Copyright 2026 Ibrahim Sevinc <ibrahim.sevinc.mail@gmail.com>
5
6 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
7 If a copy of the MPL was not distributed with this file, You can obtain one at
8 http://mozilla.org/MPL/2.0/.
9 */
10
11package com.freerdp.freerdpcore.utils;
12
13import android.content.ContentProvider;
14import android.content.ContentValues;
15import android.database.Cursor;
16import android.net.Uri;
17import android.os.ParcelFileDescriptor;
18
19import java.io.IOException;
20import java.io.OutputStream;
21
22public class ClipboardImageProvider extends ContentProvider
23{
24 public static final String AUTHORITY = "com.freerdp.freerdpcore.clipboard";
25 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/image");
26
27 private static volatile byte[] sImageData;
28
29 public static void setImageData(byte[] data)
30 {
31 sImageData = data;
32 }
33
34 @Override public boolean onCreate()
35 {
36 return true;
37 }
38
39 @Override public ParcelFileDescriptor openFile(Uri uri, String mode)
40 {
41 byte[] data = sImageData;
42 if (data == null)
43 return null;
44
45 try
46 {
47 ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
48 final ParcelFileDescriptor writeEnd = pipe[1];
49 Thread t = new Thread(() -> {
50 try (OutputStream out = new ParcelFileDescriptor.AutoCloseOutputStream(writeEnd))
51 {
52 out.write(data);
53 }
54 catch (IOException e)
55 {
56 // pipe closed by reader
57 }
58 });
59 t.setDaemon(true);
60 t.start();
61 return pipe[0];
62 }
63 catch (IOException e)
64 {
65 return null;
66 }
67 }
68
69 @Override public String getType(Uri uri)
70 {
71 return "image/png";
72 }
73
74 @Override
75 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
76 String sortOrder)
77 {
78 return null;
79 }
80
81 @Override public Uri insert(Uri uri, ContentValues values)
82 {
83 return null;
84 }
85
86 @Override public int delete(Uri uri, String selection, String[] selectionArgs)
87 {
88 return 0;
89 }
90
91 @Override
92 public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
93 {
94 return 0;
95 }
96}