﻿B4J=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=10
@EndOfDesignText@
#Region VERSIONS 
'	1.0.0.	01/26/2025
#End Region

Sub Class_Globals
	#IF B4J
		Private fx As JFX
	#ELSE IF B4I
		Private iClipboard As Clipboard
	#End If
End Sub

'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize
End Sub

Public Sub setText(Text As String)
	#IF B4A
		Dim r As Reflector
		Dim jo As JavaObject
		jo = Me
		jo.RunMethod("SetTextToClipboard", Array As Object(Text, r.GetContext))
	#ELSE IF B4J
		fx.Clipboard.SetString(Text)
	#ELSE IF B4I
		iClipboard.StringItem = Text
	#End If
End Sub

Public Sub getText As String
	#IF B4A
		Dim r As Reflector
		Dim jo As JavaObject
		jo = Me
		Return jo.RunMethod("GetTextFromClipboard", Array As Object(r.GetContext))
	#ELSE IF B4J
		Return IIf(fx.Clipboard.HasString, fx.Clipboard.GetString, "")
	#ELSE IF B4I
		Return iClipboard.StringItem
	#End If
End Sub

Public Sub setImage(Img As B4XBitmap)
	#If B4I
	iClipboard.ImageItem = Img
	#Else If B4J
	Dim bitmap As Image = Img
	fx.Clipboard.SetImage(bitmap)
	#Else
	Dim r As Reflector
	Dim jo As JavaObject
	jo = Me
	jo.RunMethod("SetBitmapToClipboard", Array As Object(Img, r.GetContext))
	#End If
End Sub
Public Sub getImage As B4XBitmap
	#If B4I
	Return iClipboard.ImageItem
	#Else if B4J
	Return fx.Clipboard.GetImage
	#Else
	Dim r As Reflector
	Dim jo As JavaObject
	jo = Me
	Return jo.RunMethod("GetBitmapFromClipboard", Array As Object(r.GetContext))
	#End If
End Sub
Public Sub hasImage As Boolean
	#If B4I
	Return (iClipboard.ImageItem.IsInitialized And iClipboard.ImageItem <> Null)
	#Else if B4J
	Return fx.Clipboard.HasImage
	#Else
	
	Dim jo As JavaObject
	Dim r As Reflector
	jo = Me
	Dim bOk As Boolean
	bOk = jo.RunMethod("HasBitmapCopied", Array As Object(r.GetContext))
	Return bOk
	
	#End If
End Sub

#IF B4A
	Public Sub HasText As Boolean
	Dim jo As JavaObject
	Dim r As Reflector
	jo = Me
	Dim bOk As Boolean
	bOk = jo.RunMethod("HasTextCopied", Array As Object(r.GetContext))
	Return bOk
End Sub
#ELSE IF B4j
	Public Sub HasText As Boolean
		Return fx.Clipboard.HasString
	End Sub
#End If

#IF B4A
#IF JAVA

import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.Context;
import android.content.ClipDescription;
import android.graphics.Bitmap;
import android.net.Uri;
import java.io.File;
import java.io.FileOutputStream;
import android.graphics.BitmapFactory;

public Boolean SetTextToClipboard(Object objtxt, Object mObjContext) {
    try {
        String txt = (String) objtxt;
        Context mContext = (Context) mObjContext;
        ClipboardManager myClipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData myClip;
        myClip = ClipData.newPlainText("text", txt);
        myClipboard.setPrimaryClip(myClip);
        return true;
    } catch (Exception ex) {
        return false;
    }
}

public String GetTextFromClipboard(Object mObjContext) {
    Context mContext = (Context) mObjContext;
    ClipboardManager myClipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData myClip = myClipboard.getPrimaryClip();
    ClipData.Item item = myClip.getItemAt(0);
    String txt = item.getText().toString();
    return txt;
}

public Boolean HasTextCopied(Object mObjContext) {
    Context mContext = (Context) mObjContext;
    ClipboardManager myClipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
    if (!(myClipboard.hasPrimaryClip())) {
        return false;
    } else if (!(myClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))) {
        return false;
    } else {
        return true;
    }
}

public Boolean HasBitmapCopied(Object mObjContext) {
    Context mContext = (Context) mObjContext;
    ClipboardManager myClipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);

    if (!myClipboard.hasPrimaryClip()) {
        return false;
    } else if (!myClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_URILIST)) {
        return false;
    } else {
        return true;
    }
}

public Bitmap GetBitmapFromClipboard(Object mObjContext) {
    try {
        Context mContext = (Context) mObjContext;
        ClipboardManager myClipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);

        if (!myClipboard.hasPrimaryClip()) {
            return null;
        }

        ClipData clipData = myClipboard.getPrimaryClip();
        ClipData.Item item = clipData.getItemAt(0);

        // Prüfen, ob die URI vorhanden ist
        Uri imageUri = item.getUri();
        if (imageUri != null) {
            // Bitmap aus der URI laden
            return BitmapFactory.decodeStream(mContext.getContentResolver().openInputStream(imageUri));
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return null;
}

public Boolean SetBitmapToClipboard(Bitmap bitmap, Object mObjContext) {
    try {
        Context mContext = (Context) mObjContext;
        File cachePath = new File(mContext.getCacheDir(), "images");
        cachePath.mkdirs(); // Erstellen Sie das Verzeichnis, falls es nicht existiert
        File file = new File(cachePath, "image.png");
        FileOutputStream fos = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.close();

        // URI erstellen
        Uri imageUri = Uri.fromFile(file);

        // Bild in die Zwischenablage legen
        ClipboardManager myClipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData myClip = ClipData.newUri(mContext.getContentResolver(), "Image", imageUri);
        myClipboard.setPrimaryClip(myClip);
        return true;
    } catch (Exception ex) {
        return false;
    }
}

#End If
#End If

