#include "Activity.hpp"
#include "UniversalSwitchLog.hpp"
#include "ActivityFactory.hpp"
-#include <app.h>
-
-#define CHECK_ERROR(ret) do { \
- if (ret != APP_CONTROL_ERROR_NONE) { \
- DEBUG("app_control failed. err = %d", ret); \
- } \
- } while (false)
+#include "utils.hpp"
-#define RETURN_ON_ERROR(ret) do { \
- if (ret != APP_CONTROL_ERROR_NONE) { \
- CHECK_ERROR(ret); \
- markAsCompleted(); \
- return; \
- } \
- } while (false)
+#include <app.h>
template <typename DerivedType, bool bindable>
class AppControlActivity : public Activity, private RegisterActivity<DerivedType, bindable>
~AppControlActivity()
{
if (appControlHandle) {
- auto ret = app_control_destroy(appControlHandle);
- CHECK_ERROR(ret);
+ auto status = app_control_destroy(appControlHandle);
+ PRINT_ERROR_IF(status != APP_CONTROL_ERROR_NONE);
}
}
void process() override
{
- auto ret = app_control_create(&appControlHandle);
- RETURN_ON_ERROR(ret);
-
- ret = app_control_set_operation(appControlHandle, APP_CONTROL_OPERATION_DEFAULT);
- RETURN_ON_ERROR(ret);
-
- ret = app_control_set_app_id(appControlHandle, DerivedType::appToLaunch);
- RETURN_ON_ERROR(ret);
-
- ret = addExtraDataToCall();
- RETURN_ON_ERROR(ret);
-
- ret = app_control_send_launch_request(appControlHandle, NULL, NULL);
- RETURN_ON_ERROR(ret);
-
+ launch();
markAsCompleted();
}
+
protected:
- virtual int addExtraDataToCall()
+ app_control_h appControlHandle;
+
+private:
+ int addExtraDataToCall()
{
return APP_CONTROL_ERROR_NONE;
}
- app_control_h appControlHandle;
+ void launch()
+ {
+ auto status = app_control_create(&appControlHandle);
+ RETURN_IF(status != APP_CONTROL_ERROR_NONE);
+
+ status = app_control_set_operation(appControlHandle, APP_CONTROL_OPERATION_DEFAULT);
+ RETURN_IF(status != APP_CONTROL_ERROR_NONE);
+
+ status = app_control_set_app_id(appControlHandle, DerivedType::appToLaunch);
+ RETURN_IF(status != APP_CONTROL_ERROR_NONE);
+
+ status = static_cast<DerivedType *>(this)->addExtraDataToCall();
+ RETURN_IF(status != APP_CONTROL_ERROR_NONE);
+
+ status = app_control_send_launch_request(appControlHandle, NULL, NULL);
+ PRINT_ERROR_IF(status != APP_CONTROL_ERROR_NONE);
+ }
};
class StartHomeScreenActivity : public AppControlActivity<StartHomeScreenActivity, true>
class StartSettingsActivity : public AppControlActivity<StartSettingsActivity, false>
{
public:
- int addExtraDataToCall() override
- {
- return app_control_add_extra_data(appControlHandle, "SHOW_US_SETTINGS", "1");
- }
+ friend AppControlActivity<StartSettingsActivity, false>;
static constexpr const char *activityType = "START_SETTINGS";
static constexpr const char *appToLaunch = "org.tizen.setting-accessibility";
+
+protected:
+ int addExtraDataToCall()
+ {
+ return app_control_add_extra_data(appControlHandle, "SHOW_US_SETTINGS", "1");
+ }
};
#include "Atspi.hpp"
#include "Singleton.hpp"
#include "dbusLocators.hpp"
+#include "utils.hpp"
+
#include <memory>
#include <functional>
#include <limits>
} \
} while (0)
-#define RETURN_EMPTY_ON_NULLPTR(obj) \
- do { \
- if (!obj) { \
- ERROR("nullptr passed as critical argument"); \
- return {}; \
- } \
- } while (0)
-
-#define RETURN_ON_NULLPTR(obj) \
- do { \
- if (!obj) { \
- DEBUG("nullptr passed as critical argument"); \
- return; \
- } \
- } while (0)
-
namespace
{
template<class ReturnType, class GetValueFunctionType, class InterfaceType>
Optional<ReturnType> getValueTemplateFunction(GetValueFunctionType getValueFunction, InterfaceType interface)
{
- RETURN_EMPTY_ON_NULLPTR(interface);
+ RETURN_DEFAULT_IF(!interface);
GError *error = nullptr;
ReturnType value = getValueFunction(interface, &error);
if (error) {
AtspiAccessiblePtr Atspi::getObjectInRelation(const AtspiAccessiblePtr &accessibleObj, AtspiRelationType searchType) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto relations = atspi_accessible_get_relation_set(accessibleObj.get(), &error);
PRINT_ERROR_AND_FREE(error);
std::vector<std::pair<std::string, std::string>> Atspi::getAttributes(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
GHashTable *attr = atspi_accessible_get_attributes(accessibleObj.get(), nullptr);
PRINT_ERROR_AND_FREE(error);
AtspiActionPtr Atspi::getActionInterface(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto action = atspi_accessible_get_action_iface(accessibleObj.get());
if (!action)
DEBUG("Action interface is not available");
bool Atspi::doAction(const AtspiActionPtr &accessibleObj, int action) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto status = atspi_action_do_action(accessibleObj.get(), action, &error);
PRINT_ERROR_AND_FREE(error);
bool Atspi::doActionName(const AtspiActionPtr &accessibleObj, const std::string &action) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto status = atspi_action_do_action_name(accessibleObj.get(), action.c_str(), &error);
PRINT_ERROR_AND_FREE(error);
Optional<size_t> Atspi::getActionCount(const AtspiActionPtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto res = atspi_action_get_n_actions(accessibleObj.get(), &error);
PRINT_ERROR_AND_FREE(error);
Optional<std::string> Atspi::getActionName(const AtspiActionPtr &accessibleObj, size_t num) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto res = atspi_action_get_action_name(accessibleObj.get(), (int)num, &error);
PRINT_ERROR_AND_FREE(error);
AtspiCollectionPtr Atspi::getCollectionInterface(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto collectionInterface = atspi_accessible_get_collection_iface(accessibleObj.get());
if (!collectionInterface)
DEBUG("Object %p do not has collection interface", accessibleObj.get());
AtspiValuePtr Atspi::getValueInterface(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto valueInterface = atspi_accessible_get_value_iface(accessibleObj.get());
if (!valueInterface)
DEBUG("Object %p do not has value interface", accessibleObj.get());
AtspiTextPtr Atspi::getTextInterface(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto textInterface = atspi_accessible_get_text_iface(accessibleObj.get());
if (!textInterface)
DEBUG("Object %p do not has text interface", accessibleObj.get());
AtspiEditableTextPtr Atspi::getEditableTextInterface(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto editableTextInterface = atspi_accessible_get_editable_text_iface(accessibleObj.get());
if (!editableTextInterface)
DEBUG("Object %p do not has editable text interface", accessibleObj.get());
Optional<TextRange> Atspi::getTextSelection(const AtspiTextPtr &textInterface, int selectionNum) const
{
- RETURN_EMPTY_ON_NULLPTR(textInterface);
+ RETURN_DEFAULT_IF(!textInterface);
GError *error = nullptr;
auto range = std::unique_ptr<AtspiRange, void(*)(void *)>(atspi_text_get_selection(textInterface.get(), selectionNum, &error), g_free);
PRINT_ERROR_AND_FREE(error);
Optional<TextRange> Atspi::getTextRangeAtOffset(const AtspiTextPtr &textInterface, size_t offset, Granularity granularity) const
{
- RETURN_EMPTY_ON_NULLPTR(textInterface);
+ RETURN_DEFAULT_IF(!textInterface);
GError *error = nullptr;
auto range = std::unique_ptr<AtspiTextRange, void(*)(void *)>(
//TODO change when atspi_text_get_string_at_offset will be supported by elementary
std::string Atspi::getTextAtOffset(const AtspiTextPtr &textInterface, size_t offset, Granularity granularity) const
{
- RETURN_EMPTY_ON_NULLPTR(textInterface);
+ RETURN_DEFAULT_IF(!textInterface);
GError *error = nullptr;
auto range = std::unique_ptr<AtspiTextRange, void(*)(void *)>(
//TODO change when atspi_text_get_string_at_offset will be supported by elementary
void Atspi::setTextSelection(const AtspiTextPtr &textInterface, TextRange range, int selectionNum) const
{
- RETURN_ON_NULLPTR(textInterface);
+ RETURN_IF(!textInterface);
if (range.start > range.end) {
ERROR("Incorrect range - start: %d, end: %d", range.start, range.end);
return;
void Atspi::removeTextSelection(const AtspiTextPtr &textInterface, int selectionNum) const
{
- RETURN_ON_NULLPTR(textInterface);
+ RETURN_IF(!textInterface);
GError *error = nullptr;
if (!atspi_text_remove_selection(textInterface.get(), selectionNum, &error))
ERROR("atspi_text_remove_selection failed");
Optional<size_t> Atspi::getTextCaretOffset(const AtspiTextPtr &textInterface) const
{
- RETURN_EMPTY_ON_NULLPTR(textInterface);
+ RETURN_DEFAULT_IF(!textInterface);
GError *error = nullptr;
auto offset = atspi_text_get_caret_offset(textInterface.get(), &error);
Optional<size_t> ret;
void Atspi::setTextCaretOffset(const AtspiTextPtr &textInterface, size_t offset) const
{
- RETURN_ON_NULLPTR(textInterface);
+ RETURN_IF(!textInterface);
GError *error = nullptr;
if (!atspi_text_set_caret_offset(textInterface.get(), static_cast<int>(offset), &error))
ERROR("atspi_text_set_selection failed");
Optional<size_t> Atspi::countTextCharacters(const AtspiTextPtr &textInterface) const
{
- RETURN_EMPTY_ON_NULLPTR(textInterface);
+ RETURN_DEFAULT_IF(!textInterface);
GError *error = nullptr;
auto count = atspi_text_get_character_count(textInterface.get(), &error);
Optional<size_t> ret;
void Atspi::copyEditableText(const AtspiEditableTextPtr &editableTextInterface, TextRange range) const
{
- RETURN_ON_NULLPTR(editableTextInterface);
+ RETURN_IF(!editableTextInterface);
if (range.start > range.end) {
ERROR("Incorrect range - start: %d, end: %d", range.start, range.end);
return;
void Atspi::cutEditableText(const AtspiEditableTextPtr &editableTextInterface, TextRange range) const
{
- RETURN_ON_NULLPTR(editableTextInterface);
+ RETURN_IF(!editableTextInterface);
if (range.start > range.end) {
ERROR("Incorrect range - start: %d, end: %d", range.start, range.end);
return;
void Atspi::pasteEditableText(const AtspiEditableTextPtr &editableTextInterface, size_t offset) const
{
- RETURN_ON_NULLPTR(editableTextInterface);
+ RETURN_IF(!editableTextInterface);
GError *error = nullptr;
atspi_editable_text_paste_text(editableTextInterface.get(), offset, &error);
PRINT_ERROR_AND_FREE(error);
bool Atspi::setCurrentValue(const AtspiValuePtr &valueInterface, double newValue) const
{
- RETURN_EMPTY_ON_NULLPTR(valueInterface);
+ RETURN_DEFAULT_IF(!valueInterface);
GError *error = nullptr;
auto isSuccessful = atspi_value_set_current_value(valueInterface.get(), newValue, &error);
PRINT_ERROR_AND_FREE(error);
Optional<size_t> Atspi::getChildrenCount(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto count = atspi_accessible_get_child_count(accessibleObj.get(), &error);
PRINT_ERROR_AND_FREE(error);
AtspiAccessiblePtr Atspi::getChildAtIndex(const AtspiAccessiblePtr &accessibleObj, size_t index) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto res = atspi_accessible_get_child_at_index(accessibleObj.get(), (gint)index, &error);
PRINT_ERROR_AND_FREE(error);
Optional<std::vector<AtspiAccessiblePtr>> Atspi::getChildren(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto count = getChildrenCount(accessibleObj);
if (!count) return {};
AtspiAccessiblePtr Atspi::getParent(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto v = atspi_accessible_get_parent(accessibleObj.get(), &error);
PRINT_ERROR_AND_FREE(error);
Optional<size_t> Atspi::getIndexInParent(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
auto v = atspi_accessible_get_index_in_parent(accessibleObj.get(), &error);
PRINT_ERROR_AND_FREE(error);
AtspiSelectionPtr Atspi::getSelectionInterface(const AtspiAccessiblePtr &accessibleObj) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
auto res = atspi_accessible_get_selection_iface(accessibleObj.get());
return {res, g_object_unref};
}
bool Atspi::selectChild(const AtspiSelectionPtr &accessibleObj, size_t index) const
{
- RETURN_EMPTY_ON_NULLPTR(accessibleObj);
+ RETURN_DEFAULT_IF(!accessibleObj);
GError *error = nullptr;
atspi_selection_select_child(accessibleObj.get(), (int)index, &error);
bool isSuccessful = (error == nullptr);