diff --git a/sources/android/src/org/ewol/EwolActivity.java b/sources/android/src/org/ewol/EwolActivity.java index c1022b5c..62d34f53 100644 --- a/sources/android/src/org/ewol/EwolActivity.java +++ b/sources/android/src/org/ewol/EwolActivity.java @@ -36,7 +36,9 @@ import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.util.DisplayMetrics; import android.util.Log; - +// copy past events : +import android.content.ClipboardManager; +import android.content.ClipData; import java.io.IOException; //import activityRootView @@ -54,6 +56,7 @@ public abstract class EwolActivity extends Activity implements EwolCallback, Ewo private EwolAudioTask mStreams; private Thread mAudioThread; private Ewol EWOL; + private String tmpClipBoard; // TODO : Remove this ==> clipboard acces does not work static { try { System.loadLibrary("ewol"); @@ -65,6 +68,7 @@ public abstract class EwolActivity extends Activity implements EwolCallback, Ewo public EwolActivity() { // set the java evironement in the C sources : EWOL = new Ewol(this, EWOL_APPL_TYPE_ACTIVITY); + tmpClipBoard = ""; } protected void initApkPath(String org, String vendor, String project) { @@ -254,6 +258,49 @@ public abstract class EwolActivity extends Activity implements EwolCallback, Ewo // end application is requested ... finish(); } + + //http://developer.android.com/guide/topics/text/copy-paste.html + public String getClipBoardString() { + return tmpClipBoard; + // TODO : Rework this it does not work + /* + // Gets a handle to the clipboard service. + ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); + // If the clipboard doesn't contain data, disable the paste menu item. + // If it does contain data, decide if you can handle the data. + if (!(clipboard.hasPrimaryClip())) { + return ""; + } + // Examines the item on the clipboard. If getText() does not return null, the clip item contains the + // text. Assumes that this application can only handle one item at a time. + ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); + if (item == null) { + return ""; + } + // Gets the clipboard as text. + String pasteData = item.getText().toString();; + // If the string contains data, then the paste operation is done + if (pasteData != null) { + return pasteData; + } + return ""; + */ + } + + public void setClipBoardString(String data) { + tmpClipBoard = data; + return; + // TODO : Rework this it does not work + /* + // Gets a handle to the clipboard service. + ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); + // Creates a new text clip to put on the clipboard + ClipData clip = ClipData.newPlainText("simple text", data); + // Set the clipboard's primary clip. + clipboard.setPrimaryClip(clip); + */ + } + } diff --git a/sources/android/src/org/ewol/EwolCallback.java b/sources/android/src/org/ewol/EwolCallback.java index e454c45d..7306d483 100644 --- a/sources/android/src/org/ewol/EwolCallback.java +++ b/sources/android/src/org/ewol/EwolCallback.java @@ -9,11 +9,12 @@ package org.ewol; import android.util.Log; -public interface EwolCallback -{ +public interface EwolCallback { public void keyboardUpdate(boolean show); public void eventNotifier(String[] args); public void orientationUpdate(int screenMode); public void titleSet(String value); public void stop(); + public String getClipBoardString(); + public void setClipBoardString(String data); } diff --git a/sources/ewol/context/Android/Context.cpp b/sources/ewol/context/Android/Context.cpp index 3d5f8015..6b63205e 100644 --- a/sources/ewol/context/Android/Context.cpp +++ b/sources/ewol/context/Android/Context.cpp @@ -62,6 +62,8 @@ class AndroidContext : public ewol::Context { jmethodID m_javaMethodEwolCallbackKeyboardUpdate; //!< basic methode to call ... jmethodID m_javaMethodEwolCallbackOrientationUpdate; jmethodID m_javaMethodEwolActivitySetTitle; + jmethodID m_javaMethodEwolActivitySetClipBoardString; + jmethodID m_javaMethodEwolActivityGetClipBoardString; jclass m_javaDefaultClassString; //!< default string class int32_t m_currentHeight; ewol::key::Special m_guiKeyBoardSpecialKeyMode;//!< special key of the android system : @@ -89,6 +91,8 @@ class AndroidContext : public ewol::Context { m_javaMethodEwolCallbackKeyboardUpdate(0), m_javaMethodEwolCallbackOrientationUpdate(0), m_javaMethodEwolActivitySetTitle(0), + m_javaMethodEwolActivitySetClipBoardString(0), + m_javaMethodEwolActivityGetClipBoardString(0), m_javaDefaultClassString(0), m_currentHeight(0), m_clipBoardOwnerStd(false) { @@ -127,6 +131,7 @@ class AndroidContext : public ewol::Context { java_check_exception(_env); return; } + ret = safeInitMethodID(m_javaMethodEwolCallbackStop, m_javaClassEwolCallback, "stop", @@ -163,6 +168,24 @@ class AndroidContext : public ewol::Context { return; } + ret = safeInitMethodID(m_javaMethodEwolActivitySetClipBoardString, + m_javaClassEwolCallback, + "setClipBoardString", + "(Ljava/lang/String;)V"); + if (ret == false) { + java_check_exception(_env); + return; + } + + ret = safeInitMethodID(m_javaMethodEwolActivityGetClipBoardString, + m_javaClassEwolCallback, + "getClipBoardString", + "()Ljava/lang/String;"); + if (ret == false) { + java_check_exception(_env); + return; + } + m_javaObjectEwolCallback = _env->NewGlobalRef(_objCallback); //javaObjectEwolCallbackAndActivity = objCallback; @@ -234,10 +257,23 @@ class AndroidContext : public ewol::Context { // NOTE : nothing to do : Windows deas ot supported Middle button break; case ewol::context::clipBoard::clipboardStd: + // Request the clipBoard : - if (false == m_clipBoardOwnerStd) { - // TODO : Inform the OS that we have the current buffer of copy ... - m_clipBoardOwnerStd = true; + EWOL_DEBUG("C->java : set clipboard"); + if (m_javaApplicationType == appl_application) { + int status; + if(!java_attach_current_thread(&status)) { + return; + } + //Call java ... + jstring data = m_JavaVirtualMachinePointer->NewStringUTF(ewol::context::clipBoard::get(_clipboardID).c_str()); + m_JavaVirtualMachinePointer->CallVoidMethod(m_javaObjectEwolCallback, m_javaMethodEwolActivityGetClipBoardString, data); + m_JavaVirtualMachinePointer->DeleteLocalRef(data); + // manage execption : + java_check_exception(m_JavaVirtualMachinePointer); + java_detach_current_thread(status); + } else { + EWOL_ERROR("C->java : can not set clipboard"); } break; default: diff --git a/sources/ewol/context/clipBoard.cpp b/sources/ewol/context/clipBoard.cpp index 65565456..15b6582d 100644 --- a/sources/ewol/context/clipBoard.cpp +++ b/sources/ewol/context/clipBoard.cpp @@ -84,7 +84,6 @@ void ewol::context::clipBoard::set(enum ewol::context::clipBoard::clipboardListe if( ewol::context::clipBoard::clipboardStd == _clipboardID || ewol::context::clipBoard::clipboardSelection == _clipboardID) { ewol::getContext().clipBoardSet(_clipboardID); - EWOL_TODO("Set ClipBoard"); } } @@ -98,11 +97,9 @@ void ewol::context::clipBoard::request(enum ewol::context::clipBoard::clipboardL if( ewol::context::clipBoard::clipboardStd == _clipboardID || ewol::context::clipBoard::clipboardSelection == _clipboardID) { ewol::getContext().clipBoardGet(_clipboardID); - EWOL_TODO("Get ClipBoard"); } else { // generate an event on the main thread ... ewol::getContext().OS_ClipBoardArrive(_clipboardID); - EWOL_TODO("ClipBoard arrive"); } } diff --git a/sources/ewol/key/Special.cpp b/sources/ewol/key/Special.cpp index af0668ac..bab28ffe 100644 --- a/sources/ewol/key/Special.cpp +++ b/sources/ewol/key/Special.cpp @@ -24,7 +24,7 @@ ewol::key::Special::Special(void) : } void ewol::key::Special::update(enum ewol::key::keyboard _move, bool _isDown) { - switch (move) { + switch (_move) { case keyboardInsert: setInsert(_isDown); break; @@ -36,7 +36,7 @@ void ewol::key::Special::update(enum ewol::key::keyboard _move, bool _isDown) { setShift(_isDown); break; case keyboardCtrlLeft: - case keyboardCtrlRight + case keyboardCtrlRight: setCtrl(_isDown); break; case keyboardMetaLeft: @@ -52,6 +52,7 @@ void ewol::key::Special::update(enum ewol::key::keyboard _move, bool _isDown) { case keyboardNumLock: setNumLock(_isDown); break; + } } bool ewol::key::Special::getCapsLock(void) const { diff --git a/sources/ewol/key/Special.h b/sources/ewol/key/Special.h index f73ef2d9..efe453df 100644 --- a/sources/ewol/key/Special.h +++ b/sources/ewol/key/Special.h @@ -11,6 +11,7 @@ #include #include +#include namespace ewol { namespace key {