Skip to content

Commit

Permalink
WlHelper: Clipboard
Browse files Browse the repository at this point in the history
  • Loading branch information
green-green-avk committed Jan 10, 2022
1 parent d7f4ab0 commit 9178d9f
Show file tree
Hide file tree
Showing 13 changed files with 554 additions and 50 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,5 @@ dependencies {
implementation project(path: ':bluetoothspp')
implementation 'me.saket:better-link-movement-method:2.2.0'
implementation project(path: ':wayland')
implementation 'org.apache.httpcomponents:httpcore:4.4.15'
}
1 change: 1 addition & 0 deletions app/src/main/java/green_green_avk/anotherterm/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import green_green_avk.anotherterm.wlterm.WlTermServer;
import green_green_avk.libusbmanager.LibUsbManager;

public final class App extends Application {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,24 @@ public interface Sink {
void destroySurface(@NonNull Surface surface);
}

public interface ClipboardContentCb {
void clipboardContent(@NonNull String mime, @NonNull byte[] data);
}

public interface AuxSource {
void clipboardContent(@NonNull String mime, @NonNull byte[] data);

void clipboardContentRequest(@NonNull String mime, @NonNull ClipboardContentCb cb);
}

public static final AuxSource emptyAuxSource = null;

public Source source = null;
private volatile Sink sink = null;

@Nullable
public AuxSource auxSource = emptyAuxSource;

public void setSink(@Nullable final Sink sink) {
this.sink = sink;
synchronized (treeLock) {
Expand Down Expand Up @@ -361,6 +376,21 @@ public void onKeyboardFocusChange(@Nullable final Surface focus) {
}
}

public boolean hasClipboard() {
return auxSource != null;
}

public void postClipboardContent(@NonNull final String mime, @NonNull final byte[] data) {
if (auxSource != null)
auxSource.clipboardContent(mime, data);
}

public void requestClipboardContent(@NonNull final String mime,
@NonNull final ClipboardContentCb cb) {
if (auxSource != null)
auxSource.clipboardContentRequest(mime, cb);
}

@UiThread
public void stop() {
source.onStop();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,19 @@
import androidx.annotation.Keep;
import androidx.annotation.Nullable;

import org.apache.http.entity.ContentType;

import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;
import java.util.NoSuchElementException;

import green_green_avk.anotherterm.ui.ConsoleKeyboardView;
import green_green_avk.anotherterm.ui.FontProvider;
import green_green_avk.anotherterm.ui.GraphicsCompositorView;
import green_green_avk.anotherterm.ui.MouseButtonsWorkAround;
import green_green_avk.anotherterm.ui.ScreenMouseView;
import green_green_avk.anotherterm.ui.UiUtils;
import green_green_avk.anotherterm.utils.Misc;

public final class GraphicsConsoleActivity extends ConsoleActivity {
private GraphicsSession mSession = null;
Expand Down Expand Up @@ -207,6 +213,32 @@ public void onSwitchIme(final View view) {
mCkv.setMode(mode);
}

public void onFromXClipboard(final View view) {
mSession.compositor.requestClipboardContent("", (mime, data) -> runOnUiThread(() -> {
final ContentType ct;
try {
ct = ContentType.parse(mime);
} catch (final UnsupportedCharsetException e) {
return;
}
if ("text/plain".equals(ct.getMimeType())) {
final String text;
try {
final Charset cs = ct.getCharset();
text = new String(data, cs != null ? cs : Misc.UTF8);
} catch (final UnsupportedCharsetException e) {
return;
}
UiUtils.toClipboard(GraphicsConsoleActivity.this, text);
}
}));
}

public void onToXClipboard(final View view) {
mSession.compositor.postClipboardContent("text/plain; charset=utf8",
Misc.toUTF8(UiUtils.textFromClipboard(this).toString()));
}

final MouseButtonsWorkAround mbwa = new MouseButtonsWorkAround(this);

@Override
Expand Down
14 changes: 13 additions & 1 deletion app/src/main/java/green_green_avk/anotherterm/ui/UiUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public static void share(@NonNull final Activity ctx, @NonNull final Uri uri) {
}

@NonNull
public static Uri uriFromClipboard(@NonNull final Context ctx) {
private static ClipData.Item firstItemFromClipboard(@NonNull final Context ctx) {
final ClipboardManager clipboard = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard == null) throw new IllegalStateException("Can't get ClipboardManager");
if (!clipboard.hasPrimaryClip()) throw new IllegalStateException("Clipboard is empty");
Expand All @@ -121,11 +121,23 @@ public static Uri uriFromClipboard(@NonNull final Context ctx) {
throw new IllegalStateException("Clipboard is empty");
final ClipData.Item clipItem = clipData.getItemAt(0);
if (clipItem == null) throw new IllegalStateException("Clipboard is empty");
return clipItem;
}

@NonNull
public static Uri uriFromClipboard(@NonNull final Context ctx) {
final ClipData.Item clipItem = firstItemFromClipboard(ctx);
Uri uri = clipItem.getUri();
if (uri == null) uri = Uri.parse(clipItem.coerceToText(ctx).toString());
return uri;
}

@NonNull
public static CharSequence textFromClipboard(@NonNull final Context ctx) {
final ClipData.Item clipItem = firstItemFromClipboard(ctx);
return clipItem.coerceToText(ctx).toString();
}

public static void uriToClipboard(@NonNull final Context ctx, @NonNull final Uri uri,
@NonNull final String title) {
final ClipboardManager clipboard = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package green_green_avk.anotherterm.wlterm;

import androidx.annotation.NonNull;

public class WlOwnCustomException extends Exception {
public WlOwnCustomException() {
super();
}

@Override
@NonNull
public synchronized Throwable fillInStackTrace() {
return this;
}
}
Loading

0 comments on commit 9178d9f

Please sign in to comment.