Add click and press API to C bindings 83/320183/2
authorYoungsun Suh <youngsun.suh@samsung.com>
Tue, 25 Feb 2025 04:40:30 +0000 (13:40 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Tue, 25 Feb 2025 05:09:59 +0000 (14:09 +0900)
Change-Id: Idd8bf5b990c25f17d90c7f370a96301f6c55c204

libaurum/inc/AurumCBindings.h
libaurum/src/Impl/TizenDeviceImpl.cc
libaurum/src/c_bindings/AurumCBindings.cc
tests/Test_CBindings.cc

index d940599a4a5b69fa433e83e9ac1f88f9ee8a9877..675be2fb1b57106962f26ee40ba4707c8d8c50bf 100644 (file)
 #ifndef AURUM_C_BINDINGS_H
 #define AURUM_C_BINDINGS_H
 
+/**
+ * Aurum C APIs for Rust bindings. Do not use these directly from C++ applications. Use Aurum API instead.
+ */
 #ifdef __cplusplus
 extern "C" {
 #endif
     // Initialize the Aurum library.
     void aurum_init();
+    // Shutdown the Aurum library. This will release all resources.
+    void aurum_shutdown();
     // Dump current screen as JSON string.
-    const char* dump_screen();
+    const char* aurum_dump_screen();
     // Free the allocated string memory.
-    void free_string_result(const char* ptr);
+    void aurum_free_string_result(const char* ptr);
+    // Click the given coordinates. Returns 1 if successful. Otherwise -1.
+    int aurum_click(int x, int y);
+    // Press the given key code. Returns 1 if successful. Otherwise -1.
+    int aurum_press_key_code(const char* key_code);
 #ifdef __cplusplus
 }
 #endif
index 05f8702d78e3577f99e6ffec00da28f918f6e335..acebbd99451a03d2dc78a551e73455e3761ff147 100644 (file)
@@ -56,8 +56,7 @@ TizenDeviceImpl::TizenDeviceImpl()
     ecore_main_loop_thread_safe_call_sync([](void *data)->void*{
         TizenDeviceImpl *obj = static_cast<TizenDeviceImpl*>(data);
         obj->mFakeTouchHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, "SMSRC Fake Input");
-        obj->mFakeKeyboardHandle =
-        efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, "SMSRC Fake Input");
+        obj->mFakeKeyboardHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, "SMSRC Fake Input");
         obj->mFakePointerHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_POINTER, "SMSRC Fake Input");
 
         return NULL;
index f2619a75c3c7e3fc2e062674cb168613283830f1..f819375a17aed839857a92709e6105e2bcc4f7db 100644 (file)
 #include "Aurum.h"
 #include <cstring>
 
+#ifdef TIZEN
+#include <Ecore.h>
+#endif
+
 using namespace Aurum;
 
 void aurum_init()
 {
     LOGI("aurum_init");
     AccessibleWatcher::getInstance();
+// TODO: Move this to Application side.
+#ifdef TIZEN
+    ecore_init();
+    ecore_main_loop_begin();
+#endif
+}
+
+void aurum_shutdown()
+{
+    LOGI("aurum_shutdown");
+// TODO: Move this to Application side.
+#ifdef TIZEN
+    ecore_main_loop_quit();
+    ecore_shutdown();
+#endif
 }
 
-const char* dump_screen()
+const char* aurum_dump_screen()
 {
     LOGI("dump_screen");
     auto device = UiDevice::getInstance();
@@ -35,6 +54,7 @@ const char* dump_screen()
     std::string dumpResult{"["};
 
     for (const auto& root: windowRoots) {
+        root->setIncludeHidden(true);
         dumpResult += root->dumpTree();
         dumpResult += ",";
     }
@@ -48,11 +68,24 @@ const char* dump_screen()
     char* cResult = new char[dumpResult.size() + 1]; // Consumers must free this memory later
     std::strcpy(cResult, dumpResult.c_str());
     return cResult;
-
 }
 
-void free_string_result(const char* ptr)
+void aurum_free_string_result(const char* ptr)
 {
     LOGI("free_string_result");
     delete[] ptr;
-}
\ No newline at end of file
+}
+
+int aurum_click(int x, int y)
+{
+    LOGI("click(%d,%d)", x, y);
+    auto device = UiDevice::getInstance();
+    return device->click(x, y) ? 0 : -1;;
+}
+
+int aurum_press_key_code(const char *key_code)
+{
+    LOGI("press_key_code(%s)", key_code);
+    auto device = UiDevice::getInstance();
+    return device->pressKeyCode(key_code, KeyRequestType::STROKE) ? 0 : -1;
+}
index 564c7b71384606462e4e3d0507f646c7c2842ec7..b8a613c14e6632080b1a8f7937c30c097faee161 100644 (file)
@@ -5,12 +5,13 @@
 TEST(CBindingsTest, DumpScreen)
 {
     aurum_init();
-    const char *c_str = dump_screen();
+    const char *c_str = aurum_dump_screen();
     EXPECT_NE(c_str, nullptr);
-    free_string_result(c_str);
+    aurum_free_string_result(c_str);
+    aurum_shutdown();
 }
 
 TEST(CBindingsTest, FreeStringResultWorksWithNull)
 {
-    free_string_result(nullptr);
+    aurum_free_string_result(nullptr);
 }
\ No newline at end of file