buildroot = ~/GBS-ROOT-3.0-MOBILE-arm-wayland
[repo.public_3.0_base_arm]
-url = http://download.tizen.org/snapshots/tizen/base/latest/repos/arm/packages/
+url = http://download.tizen.org/snapshots/tizen/3.0-base/latest/repos/arm/packages/
[repo.tzmo_v3.0_arm-wayland]
-url = http://download.tizen.org/snapshots/tizen/mobile/latest/repos/arm-wayland/packages/
+url = http://download.tizen.org/snapshots/tizen/3.0-mobile/latest/repos/arm-wayland/packages/
###############################################
#
-# Tizen v3.0 for mobile (arm-wayland), Mirroring Server for HQ developers
+# Tizen v4.0 for mobile (arm-wayland), Mirroring Server for HQ developers
#
-[profile.tzmo_v3.0_arm-wayland_mirror]
+[profile.tzmo_v4.0_arm-wayland_mirror]
obs = obs.tizen_v3.0
-repos = repo.public_3.0_base_arm_mirror, repo.tzm0_v3.0_arm-wayland_mirror
-buildroot = ~/GBS-ROOT-3.0-MOBILE-arm-wayland
+repos = repo.public_4.0_base_arm_mirror, repo.tzm0_v4.0_arm-wayland_mirror
+buildroot = ~/GBS-ROOT-4.0-MOBILE-arm-wayland
user = blinkbot
passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
-[repo.public_3.0_base_arm_mirror]
-url = http://165.213.149.200/download/public_mirror/tizen/base/latest/repos/arm/packages/
+[repo.public_4.0_base_arm_mirror]
+url =http://165.213.149.200/download/public_mirror/tizen/base/latest/repos/arm/packages/
-[repo.tzm0_v3.0_arm-wayland_mirror]
+[repo.tzm0_v4.0_arm-wayland_mirror]
url = http://165.213.149.200/download/public_mirror/tizen/mobile/latest/repos/target-TM1/packages/
option(TIZEN_BUILD "Build for Tizen. Default ON" ON)
option(DYN_INT_LIBS "Buils internal libs as dynamic" ON)
option(COVERAGE_STATS "Code coverage" OFF)
+option(DUMMY_BUTTON "Build With Dummy Button" ON)
+option(PWA "Build with PWA" ON)
#Enable C++14 support
include(CheckCXXCompilerFlag)
notification
appsvc
shortcut
+ push
capi-network-connection
)
endif (${PROFILE} MATCHES "mobile")
if (${PROFILE} MATCHES "mobile")
ADD_DEFINITIONS(-DPROFILE_MOBILE=1)
- ADD_DEFINITIONS(-DPWA=0)
- ADD_DEFINITIONS(-DDUMMY_BUTTON=1)
endif (${PROFILE} MATCHES "mobile")
+ if (${DUMMY_BUTTON} MATCHES "ON")
+ ADD_DEFINITIONS(-DDUMMY_BUTTON=1)
+ endif ()
+ if (${DUMMY_BUTTON} MATCHES "OFF")
+ ADD_DEFINITIONS(-DDUMMY_BUTTON=0)
+ endif()
+
+ if (${PWA} MATCHES "ON")
+ ADD_DEFINITIONS(-DPWA=1)
+ endif()
+
endif(TIZEN_BUILD)
ADD_DEFINITIONS(-DEDJE_DIR=\"${EDJE_DIR}\")
+ADD_DEFINITIONS(-DICONDIR=\"${ICONDIR}\")
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
install(FILES ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml DESTINATION ${MANIFESTDIR})
# install desktop file & icon
install(FILES ${CMAKE_SOURCE_DIR}/org.tizen.browser.png DESTINATION ${ICONDIR})
+install(FILES ${CMAKE_SOURCE_DIR}/landscape.png DESTINATION ${ICONDIR})
+install(FILES ${CMAKE_SOURCE_DIR}/portrait.png DESTINATION ${ICONDIR})
+
# install certs
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/certs/ DESTINATION ${CERTS_DIR})
endif(TIZEN_BUILD)
message(STATUS "Building Unit tests (BUILD_UT) :" ${BUILD_UT})
message(STATUS "Code Coverage statistics (COVERAGE_STATS) :" ${COVERAGE_STATS})
message(STATUS "Device profile (PROFILE) :" ${PROFILE})
+message(STATUS "Building with Dummy Button (DUMMY_BUTTON) :" ${DUMMY_BUTTON})
message(STATUS "------------------------------------------")
-initial commit
+Reference Browser for mobile.
#!/bin/bash
-gbs -c .gbs.conf build -P profile.tzmo_v3.0_arm-wayland -A armv7l --include-all
+gbs -c .gbs.conf build -P profile.tzmo_v3.0_arm-wayland_mirror -A armv7l --include-all
#gbs -c .gbs.conf build -P profile.tzmo_v3.0_arm64-wayland -A aarch64 --include-all
SET(IF_PROFILE_MOBILE 0)
ENDIF()
+ if (${DUMMY_BUTTON} MATCHES "ON")
+ SET(IF_DUMMY_BUTTON 1)
+ endif ()
+ if (${DUMMY_BUTTON} MATCHES "OFF")
+ SET(IF_DUMMY_BUTTON 0)
+ endif()
+
FOREACH(resolution ${BROWSER_RESOLUTION})
SET(tmp_output ${Edj_Output}/${resolution}_${Name})
ADD_CUSTOM_COMMAND(OUTPUT ${tmp_output}
*/
boost::signals2::signal<Evas_Object* ()> getWindow;
+ AbstractContextMenu() : m_ctxpopup(nullptr) { }
+ virtual ~AbstractContextMenu() { }
+
protected:
static void _cm_dismissed(void *, Evas_Object * obj, void *)
{
+ evas_object_smart_callback_del(obj, "dismissed", _cm_dismissed);
evas_object_del(obj);
obj = nullptr;
}
void createContextMenu(Evas_Object* parent)
{
if (m_ctxpopup)
- _cm_dismissed(nullptr, m_ctxpopup, nullptr);
+ evas_object_smart_callback_call(m_ctxpopup, "dismissed", nullptr);
m_ctxpopup = elm_ctxpopup_add(parent);
elm_object_style_set(m_ctxpopup, "more/default");
+++ /dev/null
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- *
- * Created on: Apr, 2014
- * Author: m.kielak
- */
-
-#ifndef ABSTRACTFAVORITESERVICE_H
-#define ABSTRACTFAVORITESERVICE_H
-
-#include "browser_config.h"
-
-#include "AbstractService.h"
-#include "service_macros.h"
-#include "BookmarkItem.h"
-#include "BrowserImage.h"
-#include "StorageService.h"
-
-namespace tizen_browser{
-namespace interfaces{
-
-class AbstractFavoriteService
- : public tizen_browser::core::AbstractService
-{
-public:
-
- /**
- * @brief Add page to bookmarks
- *
- * @param address Webpage url.
- * @param title Title of bookmark.
- * @param note Bookmark note, default is empty .
- * @param dirId Directory numeric ID, default is 0.
- * @param thumbnail Page thumbnail, default is empty image.
- * @param favicon Page favicon image, default is empty image.
- *
- * @return BookmarkItem class
- */
- virtual std::shared_ptr<tizen_browser::services::BookmarkItem> addBookmark(const std::string & address,
- const std::string & title,
- const std::string & note = std::string(),
- std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail=std::shared_ptr<tizen_browser::tools::BrowserImage>(),
- std::shared_ptr<tizen_browser::tools::BrowserImage> favicon = std::shared_ptr<tizen_browser::tools::BrowserImage>(),
- unsigned int dirId = 0) = 0;
-
- /**
- * @brief Update bookmark snapshot by given url
- *
- * @param url of bookmark to delete
- */
- virtual void updateBookmarkItemSnapshot(const std::string & url,
- std::shared_ptr<tizen_browser::tools::BrowserImage> snapshot) = 0;
-
- /** \todo Need to change this callback function for finding stored bookmark, check getBookmarkId function
- * @brief Check if bookmark exists
- *
- * @param url url to find
- * @return true if exists, false if not
- */
- virtual bool bookmarkExists(const std::string & url)= 0;
-
- /**
- * @brief Get bookmarks in a folder from platform service and store it in private m_bookmarksList
- *
- * @return list of bookmark items in folder with id, folder_id
- */
- virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getBookmarks(int folder_id = -1) = 0;
-
- /**
- * @brief Delete all bookmarks
- *
- * @return true if success, false on error
- */
- virtual bool deleteAllBookmarks() = 0;
-
- /**
- * @brief Edit bookmark title and folder by given url
- *
- * @return true if success, false on error
- */
- virtual bool editBookmark(const std::string & url, const std::string & title, unsigned int folder_id = 0) = 0;
-
- /**
- * @brief Delete bookmark by given url
- *
- * @param url of bookmark to delete
- * @return true if success, false on error of not found bookmark
- */
- virtual bool deleteBookmark(const std::string & url) = 0;
-
- virtual std::shared_ptr<tizen_browser::services::BookmarkItem> addFolder(const std::string & title,
- int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-
- virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getFolders(
- int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
- virtual bool folderExists(const std::string & title, int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
- virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getAllBookmarkItems(
- int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
- virtual std::shared_ptr<tizen_browser::services::BookmarkItem> getRoot() = 0;
- virtual std::shared_ptr<tizen_browser::services::BookmarkItem> getBookmarkItem(int id) = 0;
- virtual void editBookmark(int id, const std::string & url, const std::string & title, int parent = -1,
- int order = -1) = 0;
- virtual bool deleteBookmark(int id) = 0;
- /**
- * @brief Gets bookmark item
- *
- * @param url of bookmark, pointer to item
- * @return true if success, false on error of not found bookmark
- */
- virtual bool getItem(const std::string & url, tizen_browser::services::BookmarkItem *item) = 0;
- virtual int getFolderId(const std::string & title, int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-
- boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)> bookmarkAdded;
- boost::signals2::signal<void (const std::string& uri)> bookmarkDeleted;
- boost::signals2::signal<void ()> bookmarksDeleted;
-
-};
-
-}
-}
-
-#endif // FAVORITESERVICE_H
#ifndef __ABSTRACT_ROTATABLE_H__
#define __ABSTRACT_ROTATABLE_H__
+#include <boost/signals2/signal.hpp>
+
namespace tizen_browser
{
namespace interfaces
#ifndef __ABSTRACT_UI_COMPONENT_H__
#define __ABSTRACT_UI_COMPONENT_H__ 1
+#include <Evas.h>
#include <boost/signals2/signal.hpp>
namespace tizen_browser
virtual void init(Evas_Object* guiParent) = 0;
/**
- * Preinitialize WebView parameters.
- */
- virtual void preinitializeWebViewCache() = 0;
-
- /**
* Set URI address for current tab.
* @param uri
*/
*/
virtual std::string getURI(void) const = 0;
-#if PWA
- virtual void requestManifest(void) = 0;
-#endif
+ /**
+ * Prepare data for PWA.
+ */
+ virtual void setPWAData() = 0;
/**
* @return title of page opened in current tab.
virtual void resume(void) = 0;
/**
+ * Change a language of a webview.
+ */
+ virtual void languageChanged(void) = 0;
+
+ /**
* @return true if current webview is suspended, false otherwise
*/
virtual bool isSuspended(void) const = 0;
virtual TabId currentTabId() const = 0;
/**
+ * @return TabId of current tab
+ */
+ virtual TabId oldestTabId() const = 0;
+
+ /**
* Destroy active WebViews.
*/
virtual void destroyTabs() = 0;
TabOrigin origin = TabOrigin::UNKNOWN) = 0;
/**
+ * Opens previously requested page.
+ * @return TabId of created tab
+ */
+ virtual TabId openRequestedPage() = 0;
+
+ /**
* @param tab id
* @return returns underlaying UI component
*/
virtual bool isLoadError() const = 0;
/**
- * \brief Sets Focus to URI entry.
+ * \brief Sets IME state of the current webview.
*/
- virtual void setFocus()=0;
+ virtual void setIMEState(const bool& state) = 0;
/**
- * @brief Remove focus form URI
+ * \brief Gets IME state of the current webview.
*/
- virtual void clearFocus()=0;
+ virtual bool getIMEState() const = 0;
/**
- * @brief check if URI is focused
+ * \brief Sets Focus to URI entry.
*/
- virtual bool hasFocus() const = 0;
+ virtual void setFocus()=0;
/**
- * @brief return current zoom factor in percentage.
- *
- * @return real zoom, also for "fit to screen" mode
+ * @brief Remove focus form URI
*/
- virtual int getZoomFactor()const = 0;
+ virtual void clearFocus()=0;
/**
- * @brief Sets zoom factor in percentage
- *
- * @param zoomFactor in percentage of default zoom, 0 means autofit
+ * @brief check if URI is focused
*/
- virtual void setZoomFactor(int zoomFactor) = 0;
+ virtual bool hasFocus() const = 0;
/**
* @brief Clear cache of WebView
virtual void backButtonClicked() = 0;
/**
- * @brief clear text selection or exit full screen when more key is pressed
- */
- virtual void moreKeyPressed() = 0;
-
- /**
* @brief Switch current view to mobile mode
*/
virtual void switchToMobileMode() = 0;
virtual bool isDesktopMode() const = 0;
/**
- * Sets an absolute scroll of the given view.
- *
- * Both values are from zero to the contents size minus the viewport
- * size.
+ * @brief Check if FullScreen mode is enabled for current view
*
- * @param x horizontal position to scroll
- * @param y vertical position to scroll
+ * @return true if FullScreen mode is enabled
*/
- virtual void scrollView(const int& dx, const int& dy) = 0;
+ virtual bool isFullScreenMode() const = 0;
/**
* Slot to which generated tab's id is passed.
virtual void setSettingsParam(WebEngineSettings param, bool value) = 0;
/**
- * @brief Reset WebView settings
- */
- virtual void resetSettingsParam() = 0;
-
- /**
* @brief Informs WebEngine that device orientation is changed.
*/
virtual void orientationChanged() = 0;
virtual State getState() = 0;
/**
+ * @brief If false bottom and url bar hide.
+ */
+ virtual void setBarsShown(bool value) const = 0;
+
+ /**
* Ask browser to minimize itself
*/
boost::signals2::signal<void ()> minimizeBrowser;
*/
boost::signals2::signal<void (double)> loadProgress;
+#if DUMMY_BUTTON
+ /**
+ * WebView wants to focus itself
+ */
+ boost::signals2::signal<void ()> focusWebView;
+#endif
/**
* Page load stopped.
*/
* Unsecure connection to https host, do not even ask to confirm, just inform.
*/
boost::signals2::signal<void()> unsecureConnection;
+
+ /**
+ * Send the signal to change the offset of the top url bar.
+ */
+ boost::signals2::signal<void(float)> urlbarOffsetSet;
+ boost::signals2::signal<void(float)> bottombarOffsetSet;
+
+ /**
+ * Get current search engine and create search URL based on it
+ */
+ boost::signals2::signal<std::string (const std::string&)> createSearchQuery;
+
+ /**
+ * Change theme color
+ */
+ boost::signals2::signal<void(int,int,int,int)> changeUIColor;
+
+ /**
+ * Install PWA in DB
+ * Gets PWA ID
+ */
+ boost::signals2::signal<unsigned(const std::string&, const std::string&, const std::string&)> installPWA;
+
+ /**
+ * Stores PWA shortcut in DB
+ */
+ boost::signals2::signal<void(const unsigned&, const std::string&)> storePWAShortcut;
+
+ /**
+ * Push signal
+ */
+ boost::signals2::signal<std::string(const char*, const char*)> pushSignal;
+
+ /**
+ * Get PWA push instance id signal
+ */
+ boost::signals2::signal<std::string()> getPWAInstanceIDSignal;
+
+ /**
+ * Get PWA push data signal
+ */
+ boost::signals2::signal<std::string()> getPWADataSignal;
+
+ /**
+ * Store notification permission
+ */
+ boost::signals2::signal<unsigned(const std::string&, const bool&)> storePermission;
+
+ /**
+ * Get permission id
+ */
+ boost::signals2::signal<unsigned(const std::string&)> getPermissionId;
+
+ /**
+ * Update permission state
+ */
+ boost::signals2::signal<bool(const int&, const bool&)> updatePermissionState;
+
+ /**
+ * Get permissions map
+ */
+ boost::signals2::signal<std::map<std::string, bool>()> getPermissionsMap;
};
} /* end of basic_webengine */
}
}
-#endif
\ No newline at end of file
+#endif
, m_tabId(tabId)
, m_uri(uri)
, m_message(msg)
+ , m_result(None)
{
}
CertificateConfirmation::CertificateConfirmation(TabId tabId, const std::string & uri, const std::string & msg)
: WebConfirmation(ConfirmationType::CertificateConfirmation, tabId, uri, msg)
+ , m_data(nullptr)
{
}
namespace basic_webengine {
class WebConfirmation;
-typedef std::shared_ptr<WebConfirmation> WebConfirmationPtr;
+using WebConfirmationPtr = std::shared_ptr<WebConfirmation>;
class WebConfirmation
{
ConfirmationResult getResult() const {
return m_result;
}
- void setResult(ConfirmationResult res) {
+ void setResult(const ConfirmationResult& res) {
m_result = res;
}
};
class CertificateConfirmation;
-typedef std::shared_ptr<CertificateConfirmation> CertificateConfirmationPtr;
+using CertificateConfirmationPtr = std::shared_ptr<CertificateConfirmation>;
class CertificateConfirmation : public WebConfirmation {
public:
LOAD_IMAGES,
ENABLE_JAVASCRIPT,
REMEMBER_FROM_DATA,
+ ENABLE_COOKIES,
REMEMBER_PASSWORDS,
AUTOFILL_PROFILE_DATA,
SCRIPTS_CAN_OPEN_PAGES,
{WebEngineSettings::LOAD_IMAGES, "load_images"},
{WebEngineSettings::ENABLE_JAVASCRIPT, "enable_javascript"},
{WebEngineSettings::REMEMBER_FROM_DATA, "remember_form_data"},
+ {WebEngineSettings::ENABLE_COOKIES, "enable_cookies"},
{WebEngineSettings::REMEMBER_PASSWORDS, "remember_passwords"},
{WebEngineSettings::AUTOFILL_PROFILE_DATA, "autofill_profile_data"},
{WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, "scripts_can_open_pages"},
#include <functional>
#include <boost/noncopyable.hpp>
+#include <app_control.h>
#include "BrowserAssert.h"
#include "Lifecycle.h"
namespace base_ui
{
+template <typename T>
+class PushPWAData
+{
+public:
+ PushPWAData() = default;
+ PushPWAData(const T& id, const T& push_data) :
+ instance_id(id),
+ data(push_data)
+ {}
+
+ T getInstanceId() const { return instance_id; }
+ T getData() const { return data; }
+ void setInstanceId(const T& id) { instance_id = id; }
+ void setData(const T& pwa_data) { data = pwa_data; }
+ bool dataExist() const { return (!instance_id.empty() && !data.empty()); }
+
+private:
+ std::string instance_id;
+ std::string data;
+};
+
/**
* @brief This class is placeholder for generic AbstractMainWindow object. It will
* handle resource deallocation.
public:
AbstractMainWindow()
: m_window()
+ , m_handle(nullptr)
{}
virtual int exec(
* \todo:
* Extend API of main window placeholder class.
*/
- void setMainWindow(T *rawPtr){ m_window=std::shared_ptr<T>(rawPtr);}
+ void setMainWindow(T *rawPtr){ m_window = std::shared_ptr<T>(rawPtr); }
+ void setHandle(app_control_h app_control){ m_handle = app_control; }
+ void setPushPWAData(const PushPWAData<std::string>& data){ m_pushPwaData = data; };
virtual void destroyUI() { }
virtual void suspend() = 0;
virtual void resume() = 0;
+ virtual void languageChanged() = 0;
protected:
std::shared_ptr<T> m_window;
+ app_control_h m_handle;
+ PushPWAData<std::string> m_pushPwaData;
};
} /* end of namespace base_ui */
:m_enabled(true)
,m_checkable(false)
,m_checked(false)
- ,m_iconVisibleInMenu(true)
{
}
,m_enabled(true)
,m_checkable(false)
,m_checked(false)
- ,m_iconVisibleInMenu(true)
{
}
,m_enabled(true)
,m_checkable(false)
,m_checked(false)
- ,m_iconVisibleInMenu(true)
{
}
,m_enabled(other.m_enabled)
,m_checkable(other.m_checkable)
,m_checked(other.m_checked)
- ,m_iconVisibleInMenu(other.m_iconVisibleInMenu)
{
}
return m_enabled;
}
-bool Action::isIconVisibleInMenu() const
-{
- return m_iconVisibleInMenu;
-}
-
void Action::setCheckable(bool checkable)
{
m_checkable = checkable;
}
}
-void Action::setIconVisibleInMenu(bool visible)
-{
- m_iconVisibleInMenu = visible;
-}
-
bool Action::isChecked() const
{
return m_checked;
{
public:
Action();
- Action(const std::string& text);
+ explicit Action(const std::string& text);
Action(const std::string& icon, const std::string& text);
Action(const Action& other);
bool isEnabled()const;
bool isCheckable()const;
bool isChecked()const;
- bool isIconVisibleInMenu()const;
void setEnabled(bool enabled);
void setCheckable(bool checkable);
void setChecked(bool checked);
- void setIconVisibleInMenu(bool visible);
/**
* @brief Convenience function, switch state of checkable Actions.
bool m_enabled; ///< Is action enabled.
bool m_checkable; ///< Is action checkable.
bool m_checked; ///< Is action checked, only checkable Actions can be checked. By default is false.
- bool m_iconVisibleInMenu; ///<Shoud icon be displayed in menu.
};
-typedef std::shared_ptr<Action> sharedAction;
+using sharedAction = std::shared_ptr<Action>;
} /* end of namespace base_ui */
} /* end of namespace tizen_browser */
self->m_action->trigger();
}
-sharedAction EAction::getAction()
-{
- return m_action;
-}
-
}
}
class EAction
{
public:
- EAction(sharedAction action);
- sharedAction getAction();
+ explicit EAction(sharedAction action);
static void callbackFunction(void *data, Evas_Object *obj, void *event_info);
private:
sharedAction m_action;
MenuButton * MenuButton::previousPopup = 0;
-MenuButton::MenuButton(std::shared_ptr< Evas_Object > mainWindow, Evas_Object* parentButton)
+MenuButton::MenuButton(std::shared_ptr<Evas_Object>& mainWindow, Evas_Object* parentButton)
: m_ctxPopup(0)
, m_window(mainWindow)
, m_parentButton(parentButton)
, m_isShown(false)
{
-
}
MenuButton::~MenuButton()
elm_object_focus_next_object_set(m_parentButton, NULL, ELM_FOCUS_DOWN);
}
-bool MenuButton::isShown()
+bool MenuButton::isShown() const
{
return m_isShown;
}
unsigned int height;
};
- MenuButton(std::shared_ptr<Evas_Object> mainWindow, Evas_Object* parentButton);
+ MenuButton(std::shared_ptr<Evas_Object>& mainWindow, Evas_Object* parentButton);
virtual ~MenuButton();
void showPopup();
void hidePopup();
virtual bool canBeDismissed();
- bool isShown();
+ bool isShown() const;
protected:
static void dismissedCtxPopup(void *data, Evas_Object *obj, void *event_info);
NaviframeWrapper::NaviframeWrapper(Evas_Object* parent)
: m_parent(parent)
, m_layout(nullptr)
+ , m_content(nullptr)
+ , m_prev_button(nullptr)
+ , m_left_button(nullptr)
+ , m_right_button(nullptr)
, m_bottom_box(nullptr)
+ , m_prev_button_callback(nullptr)
+ , m_left_button_callback(nullptr)
+ , m_right_button_callback(nullptr)
{
M_ASSERT(m_parent);
m_layout = elm_layout_add(m_parent);
void NaviframeWrapper::unsetContent()
{
elm_object_part_content_unset(m_layout, "elm.swallow.content");
+ m_content = nullptr;
}
void NaviframeWrapper::setContent(Evas_Object *content)
{
- elm_object_part_content_set(m_layout, "elm.swallow.content", content);
+ if (m_content)
+ unsetContent();
+ m_content = content;
+ elm_object_part_content_set(m_layout, "elm.swallow.content", m_content);
}
void NaviframeWrapper::addPrevButton(Evas_Smart_Cb callback, void *data)
elm_object_style_set(button, "bottom");
evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_part_text_set(button, "elm.text", text.c_str());
+ elm_object_translatable_part_text_set(button, "elm.text", text.c_str());
elm_object_signal_emit(button, "elm,state,text,visible", "elm");
evas_object_smart_callback_add(button, "clicked", callback, data);
void NaviframeWrapper::setBottomButtonText(int number, const std::string& text)
{
BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, text.c_str());
- elm_object_part_text_set(m_bottom_buttons[number], "elm.text", text.c_str());
+ elm_object_translatable_part_text_set(m_bottom_buttons[number], "elm.text", text.c_str());
}
void NaviframeWrapper::setVisibleBottomBar(bool visible)
class NaviframeWrapper
{
public:
- NaviframeWrapper(Evas_Object *parent);
+ explicit NaviframeWrapper(Evas_Object *parent);
~NaviframeWrapper();
void show() { evas_object_show(m_layout); }
protected:
Evas_Object *m_parent;
Evas_Object *m_layout;
+ Evas_Object *m_content;
Evas_Object *m_prev_button;
Evas_Object *m_left_button;
Evas_Object *m_right_button;
,DELETE = 1 << 10
,BACK_TO_SAFETY = 1 << 11
,VIEW_CERTIFICATE = 1 << 12
+ ,NEVER = 1 << 13
};
static std::map<PopupButtons, std::string> createTranslations()
m[DELETE] = "IDS_BR_SK_DELETE_ABB";
m[BACK_TO_SAFETY] = "Back to safety";
m[VIEW_CERTIFICATE] = "IDS_BR_OPT_VIEW_CERTIFICATE";
+ m[NEVER] = "Never";
return m;
}
#endif
+#define RETURN_NULL_ON_NO_DATA(data) if (!data) { BROWSER_LOGW("[%s:%d] No data", __PRETTY_FUNCTION__, __LINE__); return nullptr; }
+#define RETURN_ON_NO_DATA(data) if (!data) { BROWSER_LOGW("[%s:%d] No data", __PRETTY_FUNCTION__, __LINE__); return; }
+
#endif /* __BROWSER_LOGGER_H__ */
Tools/BookmarkFolder.cpp
Tools/QuickAccessItem.cpp
Tools/CapiWebErrorCodes.cpp
- Tools/FeedItem.cpp
- Tools/FeedChannel.cpp
Tools/StringTools.cpp
+ Tools/GengridWrapper.cpp
)
if(${PROFILE} MATCHES "mobile")
if(TIZEN_BUILD)
target_link_libraries(${BIN_NAME} ${tizen_pkgs_LDFLAGS} "-pie"
- BookmarkFlowUI
- BookmarkManagerUI
- BookmarkService
- CertificateService
- FindOnPageUI
- HistoryService
- HistoryUI
- PlatformInputManager
- QuickAccess
- SettingsUI
- SimpleUI
- StorageService
- TabService
- TabUI
- WebEngineService
- WebPageUI
)
endif(TIZEN_BUILD)
m_data["DB_SESSION"] = std::string(".browser.session.db");
m_data["DB_CERTIFICATE"] = std::string(".browser.certificate.db");
m_data["DB_QUICKACCESS"] = std::string(".browser.quickaccess.db");
+ m_data["DB_PWA"] = std::string(".browser.pwa.db");
+ m_data["URL_MAXCHAR"] = 4096;
+ m_data["ENTRY_MAXCHAR"] = 2048;
m_data["TOOLTIP_DELAY"] = 0.05; // time from mouse in to tooltip show
m_data["TOOLTIP_HIDE_TIMEOUT"] = 2.0; // time from tooltip show to tooltip hide
- m_data["TAB_LIMIT"] = 10; // max number of open tabs
- m_data["FAVORITES_LIMIT"] = 40; // max number of added favorites
+ m_data["TAB_LIMIT"] = 20; // max number of open tabs
+ m_data["QUICKACCESS_LIMIT"] = 100; // max number of quickaccess elements
# include "ConfigValues.h"
m_keysValues[CONFIG_KEY::FAVORITESERVICE_THUMB_HEIGHT] = 261;
m_keysValues[CONFIG_KEY::FAVORITESERVICE_THUMB_WIDTH] = 319;
- m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEMS_NUMBER_MAX] = 12;
- m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEMS_VISIBLE_NUMBER_MAX] = 5;
- m_keysValues[CONFIG_KEY::URLHISTORYLIST_KEYWORD_LENGTH_MIN] = 3;
-#if PROFILE_MOBILE
- m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT] = 74;
-#else
- m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT] = 82;
-#endif
-
m_keysValues[CONFIG_KEY::WEB_ENGINE_PAGE_OVERVIEW] = true;
m_keysValues[CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES] = true;
m_keysValues[CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT] = true;
m_keysValues[CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA] = true;
+ m_keysValues[CONFIG_KEY::WEB_ENGINE_ENABLE_COOKIES] = true;
m_keysValues[CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS] = true;
m_keysValues[CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA] = true;
m_keysValues[CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES] = true;
m_keysValues[CONFIG_KEY::CACHE_IMAGE_VALUE] = 2048;
m_keysValues[CONFIG_KEY::CACHE_INTERVAL_VALUE] = 32;
- m_keysValues[CONFIG_KEY::SAVE_CONTENT_LOCATION] = base_ui::Translations::Device;
- m_keysValues[CONFIG_KEY::DEFAULT_SEARCH_ENGINE] = base_ui::Translations::Google;
+ m_keysValues[CONFIG_KEY::SAVE_CONTENT_LOCATION] = base_ui::Translations::instance().Device;
+ m_keysValues[CONFIG_KEY::DEFAULT_SEARCH_ENGINE] = base_ui::Translations::instance().Google;
m_keysValues[CONFIG_KEY::CURRENT_HOME_PAGE] = "http://www.samsung.com";
+
+ m_keysValues[CONFIG_KEY::URL_BAR_HEIGHT] = 108;
+ m_keysValues[CONFIG_KEY::BOTTOM_BAR_HEIGHT] = 96;
}
boost::any Config::get(const std::string& key)
m_data[key] = value;
}
-bool Config::isMobileProfile() const
-{
- return boost::any_cast<std::string>(m_data.at("profile")) == MOBILE;
-}
-
} /* end of namespace config */
} /* end of namespace tizen_browser */
*/
void set(const std::string & key, const boost::any & value);
- /**
- * @brief Check if current profile is mobile.
- */
- bool isMobileProfile() const;
private:
std::map<std::string, boost::any> m_data;
std::map<CONFIG_KEY, boost::any> m_keysValues;
HISTORY_TAB_SERVICE_THUMB_WIDTH,
FAVORITESERVICE_THUMB_WIDTH,
FAVORITESERVICE_THUMB_HEIGHT,
- URLHISTORYLIST_ITEMS_NUMBER_MAX,
- URLHISTORYLIST_ITEMS_VISIBLE_NUMBER_MAX,
- URLHISTORYLIST_KEYWORD_LENGTH_MIN,
- URLHISTORYLIST_ITEM_HEIGHT,
WEB_ENGINE_PAGE_OVERVIEW,
WEB_ENGINE_LOAD_IMAGES,
WEB_ENGINE_ENABLE_JAVASCRIPT,
WEB_ENGINE_REMEMBER_FROM_DATA,
+ WEB_ENGINE_ENABLE_COOKIES,
WEB_ENGINE_REMEMBER_PASSWORDS,
WEB_ENGINE_AUTOFILL_PROFILE_DATA,
WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES,
CACHE_IMAGE_VALUE,
SAVE_CONTENT_LOCATION,
DEFAULT_SEARCH_ENGINE,
- CURRENT_HOME_PAGE
+ CURRENT_HOME_PAGE,
+ URL_BAR_HEIGHT,
+ BOTTOM_BAR_HEIGHT
};
#endif /* CONFIGKEY_H_ */
return popup;
}
-Eina_Bool DownloadControl::launch_streaming_player(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] uri = [%s] ", __PRETTY_FUNCTION__, __LINE__, uri);
-
- bool vt_call_check = false;
- if (app_manager_is_running(sec_vt_app, &vt_call_check) < 0) {
- BROWSER_LOGE("[%s:%d] Fail to get app running information", __PRETTY_FUNCTION__, __LINE__);
- return EINA_FALSE;
- }
-
- if (vt_call_check) {
- return EINA_FALSE;
- }
-
- app_control_h app_control = NULL;
-
- if (app_control_create(&app_control) < 0) {
- BROWSER_LOGE("[%s:%d] Fail to create app_control handle", __PRETTY_FUNCTION__, __LINE__);
- return EINA_FALSE;
- }
-
- if (!app_control) {
- BROWSER_LOGE("[%s:%d] app_control handle is NULL", __PRETTY_FUNCTION__, __LINE__);
- return EINA_FALSE;
- }
-
- if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
- BROWSER_LOGE("[%s:%d] app_control_set_operation failed", __PRETTY_FUNCTION__, __LINE__);
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
-
- if (app_control_set_mime(app_control, "video/") < 0) {
- BROWSER_LOGE("[%s:%d] Fail to app_control_set_mime", __PRETTY_FUNCTION__, __LINE__);
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
-
- if (app_control_add_extra_data(app_control, "path", uri) < 0) {
- BROWSER_LOGE("[%s:%d] Fail to set extra data", __PRETTY_FUNCTION__, __LINE__);
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
-
- if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
- BROWSER_LOGE("[%s:%d] Fail to launch app_control operation", __PRETTY_FUNCTION__, __LINE__);
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
-
- app_control_destroy(app_control);
-
- return EINA_TRUE;
-}
-
-void DownloadControl::__sdp_download_finished_cb(const char *file_path, void *data)
-{
- BROWSER_LOGD("[%s:%d]file_path = [%s]", __PRETTY_FUNCTION__, __LINE__, file_path);
- BROWSER_LOGD("[%s:%d]data = [%p] ", __PRETTY_FUNCTION__, __LINE__, data);
-}
-
-char *DownloadControl::get_file_size_str(const char *full_path)
-{
- FILE *fp = NULL;
- long size = 0;
- double size_double = 0.0f;
- char size_str[10 + 1] = {0, };
- std::string size_text;
-
- fp = fopen(full_path, "r");
- if (!fp)
- return NULL;
- fseek(fp, 0L, SEEK_END);
- size = ftell(fp);
- fclose(fp);
-
- if (size >= unit_size) {
- size_double = (double)size / (double)unit_size;
- if (size_double >= unit_size) {
- size_double = (double)size_double / (double)unit_size;
- if (size_double >= unit_size) {
- size_double = (double)size_double / (double)unit_size;
- snprintf(size_str, 10, "%.2f", size_double);
- size_text = std::string(size_str) + std::string("GB");
- } else {
- snprintf(size_str, 10, "%.2f", size_double);
- size_text = std::string(size_str) + std::string("MB");
- }
- } else {
- snprintf(size_str, 10, "%.2f", size_double);
- size_text = std::string(size_str) + std::string("KB");
- }
- } else {
- snprintf(size_str, 10, "%u", (int)size);
- size_text = std::string(size_str) + std::string("B");
- }
-
- return strdup(size_text.c_str());
-}
-
Eina_Bool DownloadControl::_check_file_exist(const char *path)
{
BROWSER_LOGD("[%s:%d] path = [%s]", __PRETTY_FUNCTION__, __LINE__, path);
return EINA_FALSE;
}
- int ret = -1;
media_info_h info = NULL;
-
- ret = media_content_connect();
+ int ret = media_content_connect();
if (ret != MEDIA_CONTENT_ERROR_NONE) {
BROWSER_LOGE("[%s:%d] Fail to media_content_connect", __PRETTY_FUNCTION__, __LINE__);
return EINA_FALSE;
std::string storing_path;
- if (!strcmp(getStorageType(),"0"))
+ if (getStorageType() == "0")
storing_path = std::string(default_device_storage_path);
else
storing_path = std::string(defualt_sd_card_storage_path);
return EINA_TRUE;
}
-const char* DownloadControl::getStorageType()
+std::string DownloadControl::getStorageType()
{
int storage = 0;
auto ret = preference_get_int("DefaultStorage", &storage);
BROWSER_LOGE("[%s:%d] Storage get error. Using default instead.", __PRETTY_FUNCTION__, __LINE__);
std::ostringstream ss;
ss << storage;
- return ss.str().c_str();
+ return ss.str();
}
Eina_Bool DownloadControl::launch_download_app(const char *uri)
return EINA_FALSE;
}
- const char* storage_type = getStorageType();
- BROWSER_LOGE("[%s:%d] Storage type: %s", __PRETTY_FUNCTION__, __LINE__, storage_type);
- if (app_control_add_extra_data(app_control, "default_storage", storage_type) < 0) {
+ std::string storage_type = getStorageType();
+ BROWSER_LOGE("[%s:%d] Storage type: %s", __PRETTY_FUNCTION__, __LINE__, storage_type.c_str());
+ if (app_control_add_extra_data(app_control, "default_storage", storage_type.c_str()) < 0) {
BROWSER_LOGE("[%s:%d] Fail to set app_control extra data", __PRETTY_FUNCTION__, __LINE__);
app_control_destroy(app_control);
return EINA_FALSE;
return EINA_TRUE;
}
-void DownloadControl::show_noti_popup(const char *msg)
-{
- BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
- notification_status_message_post(msg);
- elm_access_say(msg);
-}
-
void init(Evas_Object *mainWindow);
- Eina_Bool launch_download_app(const char *uri);
- Eina_Bool launch_streaming_player(const char *uri);
+ static Eina_Bool launch_download_app(const char *uri);
/* If know the content type, use this method to handle it. */
void handle_download_request(const char *uri, const char *content_type);
- Eina_Bool handle_data_scheme(const char *uri);
+ static Eina_Bool handle_data_scheme(const char *uri);
private:
- /* String should be freed in caller side */
- char *get_file_size_str(const char *full_path);
-
- Eina_Bool _check_file_exist(const char *path);
- Eina_Bool _save_file(const char *raw_data, const char *path);
- Eina_Bool _update_contents_on_media_db(const char *path); //
+ static Eina_Bool _check_file_exist(const char *path);
+ static Eina_Bool _save_file(const char *raw_data, const char *path);
+ static Eina_Bool _update_contents_on_media_db(const char *path); //
/* should be freed from caller side */
- Eina_Bool _get_download_path(const char *extension, char **full_path, char **file_name);
-
- static void __sdp_download_finished_cb(const char *file_path, void *data);
+ static Eina_Bool _get_download_path(const char *extension, char **full_path, char **file_name);
Evas_Object *brui_popup_add(Evas_Object *parent);
- void show_noti_popup(const char *msg);
- const char* getStorageType();
+ static std::string getStorageType();
std::string m_download_uri;
Evas_Object *m_parent;
static const std::string LEVEL_INFO_TAG = "Info";
static const std::string LEVEL_TAG_ERROR = "TAG_ERROR";
-
-#ifdef LOG_LEVEL
-static const LoggerLevel globalLoggerLevel = Logger::parseLoggerLevel(LOG_LEVEL);
-#else
static const LoggerLevel globalLoggerLevel = LoggerLevel::DEBUG;
-#endif
Logger &Logger::getInstance() {
static Logger instance;
level = LoggerLevel::ERROR;
} else if (strcmp(levelString, "WARN") == 0) {
level = LoggerLevel::WARN;
- } else if (strcmp(levelString, "INFO") == 0) {
- level = LoggerLevel::INFO;
} else {
level = LoggerLevel::INFO;
}
//! set task name as a tag
//! @see clearLogTag()
- inline void setLogTag(const std::string tagName) {
+ inline void setLogTag(const std::string& tagName) {
m_tag = tagName;
}
std::string make_message(const char *fmt, ...)
{
- int n;
int size = 512; /* Guess we need no more than 512 bytes */
- int old_size = 0;
char *p, *np;
va_list ap;
{
/* Try to print in the allocated space */
va_start(ap, fmt);
- n = vsnprintf(p, size, fmt, ap);
+ int n = vsnprintf(p, size, fmt, ap);
va_end(ap);
/* Check error code */
return retval;
}
/* Else try again with more space */
- old_size = size;
+ int old_size = size;
size = n + 1; /* Precisely what is needed */
try {
TextLogger::TextLogger()
: m_fb(nullptr)
, m_output(nullptr)
+ , m_shallRelease(false)
{
- m_shallRelease = false;
- m_filename.clear();
}
TextLogger::TextLogger(const char *name)
- : m_fb(nullptr)
+ : m_filename(name)
+ , m_fb(nullptr)
, m_output(nullptr)
+ , m_shallRelease(false)
{
- m_shallRelease = false;
- m_filename = name;
}
TextLogger::~TextLogger()
TextLogger();
//! constructor used for logging plain text to file
//! @param name filename to output
- TextLogger(const char *name);
+ explicit TextLogger(const char *name);
//! Destructor
~TextLogger();
//! Initialize the output stream to stdout or file, depending on used constructor
{
char const * _what;
public:
- EFailedAssertion(char const * const what_) : _what(what_) {}
+ explicit EFailedAssertion(char const * const what_) : _what(what_) {}
EFailedAssertion(EFailedAssertion const & fa) : _what(fa._what) {}
EFailedAssertion & operator = (EFailedAssertion const & fa) {
if (&fa != this) {
int flags=0;
flags = //RTLD_NOW //resolve all symbols before dlopen returns
RTLD_LAZY //resolve sybols on ussage - fixes problem with cross linikg services.
- | RTLD_GLOBAL; //export or sybols to be used by other libraries.
+ | RTLD_GLOBAL | RTLD_DEEPBIND; //export or sybols to be used by other libraries.
pHnd = unique_library_ptr(dlopen(libraryFile.c_str(), flags), dlclose);
if(!pHnd){
*
* \param serviceName The name of service library.
*/
- ServiceLoader(const std::string& serviceFileName);
+ explicit ServiceLoader(const std::string& serviceFileName);
~ServiceLoader();
/**
~ServiceLoaderPrivate();
private:
//only friend can crate me.
- ServiceLoaderPrivate(const std::string& serviceName);
+ explicit ServiceLoaderPrivate(const std::string& serviceName);
void loadService();
namespace core
{
-ServiceManagerPrivate::ServiceManagerPrivate()
-{
- findServiceLibs();
- loadServiceLibs();
-}
-
-ServiceManagerPrivate::~ServiceManagerPrivate()
-{}
-
-void ServiceManagerPrivate::findServiceLibs() try
-{
- boost::filesystem::path servicesDir(
- boost::any_cast<std::string>(tizen_browser::config::Config::getInstance().get("services/dir")));
- for (boost::filesystem::directory_iterator it(servicesDir);
- it != boost::filesystem::directory_iterator();
- ++it) {
- boost::filesystem::path item(*it);
- if (boost::filesystem::is_regular_file(item)) {
- if ((item.extension().string() == ".so" ) &&
- (item.filename().string().find("lib") != std::string::npos)) {
- try {
- servicesLoaderMap[item.string()] = std::make_shared<ServiceLoader>(item.string());
- } catch (std::runtime_error & e) {
- BROWSER_LOGD(e.what() );
- }
- }
- }
- }
-} catch (const boost::filesystem::filesystem_error& ex) {
- BROWSER_LOGD(ex.what());
-}
-
-void ServiceManagerPrivate::loadServiceLibs()
-{
- /// TODO make sure that librareis are founded.
- for (auto slm : servicesLoaderMap) {
- try {
- auto factory = slm.second->getFactory();
- servicesMap[factory->serviceName()] = factory;//do not write to map if there's an error.
- } catch (const std::runtime_error& e) {
- BROWSER_LOGD(e.what() );
- }
- }
-}
-
-void ServiceManagerPrivate::enumerateServices(){
- for (auto sm : servicesMap)
- BROWSER_LOGD("%s:%p", sm.first.c_str(), sm.second);
-}
-
ServiceManager::ServiceManager()
- :d(new ServiceManagerPrivate)
{}
ServiceManager& ServiceManager::getInstance(void)
return instance;
}
-std::shared_ptr< AbstractService > ServiceManager::getService(const std::string& service)
+std::shared_ptr< AbstractService > ServiceManager::getService(const std::string& service, const std::string& fileName)
{
static std::unordered_map<std::string, std::shared_ptr<AbstractService>> cache;
static std::mutex mut;
-
std::lock_guard<std::mutex> hold(mut);
auto sp = cache[service];
- if (!sp)
- cache[service] = sp = std::shared_ptr<AbstractService>(d->servicesMap[service]->create());
+ if (!sp) {
+ boost::filesystem::path servicePath(
+ boost::any_cast<std::string>(config::Config::getInstance().get("services/dir")));
+ servicePath /= fileName;
+ auto factory = std::make_unique<ServiceLoader>(servicePath.string())->getFactory();
+ cache[service] = sp = std::shared_ptr<AbstractService>(factory->create());
+ }
return sp;
}
namespace core
{
-
-class ServiceManagerPrivate;
-
/**
* \brief Managing services.
*
* @param args Currently no used, may by omitted.
* @return std::shared_ptr< tizen_browser::core::AbstractService >
*/
- std::shared_ptr<AbstractService> getService(const std::string& service);
+ std::shared_ptr<AbstractService> getService(const std::string& service, const std::string& fileName);
private:
/**
* cretate this object by calling ServiceManager::getInstance!!!
*/
ServiceManager();
-
- std::unique_ptr<ServiceManagerPrivate> d;
};
} /* end of namespace core */
*/
void loadServiceLibs();
- /**
- * debug function to display all founded and loaded services.
- */
- void enumerateServices();/// write names of all services
-
//ServiceFactory is a static ServiceFactory member - no need to delete it manually (or by smart_ptr) by calling delete or free on it
std::unordered_map<std::string, ServiceFactory*> servicesMap; /// "com.class.interface":&ServiceFactory
std::unordered_map<std::string, std::shared_ptr<ServiceLoader>> servicesLoaderMap; /// "path/to/library.so": &service_factory_interface
#ifndef __SERVICE_MACROS_H__
#define __SERVICE_MACROS_H__
+#include "ServiceFactory.h"
/**
* @def BROWSER_EXPORT
* @ingroup BROWSERMacros
Blob::~Blob()
{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
free();
}
}
/*private*/
-Blob & Blob::operator=(const Blob &)
+Blob & Blob::operator=(const Blob &b)
{
+ this->m_data = b.m_data;
+ this->m_length = b.m_length;
return *this;
}
this->m_length = 0;
}
-int Blob::getLength()
+int Blob::getLength() const
{
return this->m_length;
}
-int Blob::transferData(void ** data) {
- int len = this->m_length;
- *data = m_data;
-
- m_length = 0;
- m_data = NULL;
-
- return len;
-}
-
}
}
const void * getData() const;
void setData(void* ptr, unsigned long long length);
void free();
- int getLength();
- int transferData(void ** data);
+ int getLength() const;
private:
Blob(const Blob &);
, m_order(order)
, m_has_thumbnail(false)
, m_has_favicon(false)
+, m_is_folder(false)
+, m_is_editable(true)
{
-
}
BookmarkItem::~BookmarkItem()
void setId(int id) { m_saved_id = id; }
int getId() const { return m_saved_id; }
- //TODO: create bool with a value when database is updated
- bool getPrivate() const { return false; }
-
void setThumbnail(std::shared_ptr<tools::BrowserImage> thumbnail);
std::shared_ptr<tizen_browser::tools::BrowserImage> getThumbnail() const ;
setData(copy.getData(), copy.isSharedData(), copy.getImageType());
}
-
+BrowserImage& BrowserImage::operator=(const BrowserImage& copy)
+{
+ m_width = copy.getWidth();
+ m_height = copy.getHeight();
+ m_dataSize = copy.getSize();
+ m_colorSpace = copy.getColorSpace();
+ setData(copy.getData(), copy.isSharedData(), copy.getImageType());
+ return *this;
+}
void BrowserImage::setData(void* data, bool isSharedData, ImageType type)
{
public:
BrowserImage();
BrowserImage(const int& w, const int& h, const long& s);
- BrowserImage(Evas_Object* image);
+ explicit BrowserImage(Evas_Object* image);
BrowserImage(const BrowserImage& copy);
~BrowserImage();
+ BrowserImage& operator=(const BrowserImage&);
/**
* Sets image raw data pointer, type and memory share
* Created on: May, 2014
* Author: k.dobkowski
*/
+#include <boost/any.hpp>
+#include <boost/format.hpp>
#include <image_util.h>
#include <BrowserAssert.h>
+#include <notification.h>
+#include "app_i18n.h"
#include "browser_config.h"
#include "BrowserLogger.h"
+#include "Config.h"
#include "EflTools.h"
-#include "Elementary.h"
-
namespace tizen_browser {
namespace tools {
BROWSER_LOGW("Cannot create BlobPNG");
return nullptr;
}
- std::unique_ptr<Blob> image(new Blob(mem_buffer, length));
- return std::move(image);
+ return std::make_unique<Blob>(mem_buffer, length);
}
void* getBlobPNG(int width, int height, void* image_data, unsigned long long* length)
if (image_util_encode_create(IMAGE_UTIL_PNG, &handler) < 0) {
BROWSER_LOGW("[%s:%d] image_util_encode_create: error!", __PRETTY_FUNCTION__, __LINE__);
+ image_util_encode_destroy(handler);
return nullptr;
}
if (image_util_encode_set_png_compression(handler, IMAGE_UTIL_PNG_COMPRESSION_6) < 0) {
BROWSER_LOGW("[%s:%d] image_util_encode_set_png_compression: error!", __PRETTY_FUNCTION__, __LINE__);
+ image_util_encode_destroy(handler);
return nullptr;
}
if (image_util_encode_set_resolution(handler, width, height) < 0) {
BROWSER_LOGW("[%s:%d] image_util_encode_set_resolution: error!", __PRETTY_FUNCTION__, __LINE__);
+ image_util_encode_destroy(handler);
return nullptr;
}
if (image_util_encode_set_input_buffer(handler, (const unsigned char*) image_data) < 0) {
BROWSER_LOGW("[%s:%d] image_util_encode_set_input_buffer: error!", __PRETTY_FUNCTION__, __LINE__);
+ image_util_encode_destroy(handler);
return nullptr;
}
if (image_util_encode_set_output_buffer(handler, &outputBuffer) < 0) {
BROWSER_LOGW("[%s:%d] image_util_encode_set_output_buffer: error!", __PRETTY_FUNCTION__, __LINE__);
+ image_util_encode_destroy(handler);
+ free(outputBuffer);
return nullptr;
}
if (image_util_encode_run(handler, length) < 0) {
BROWSER_LOGW("[%s:%d] image_util_encode_run: error!", __PRETTY_FUNCTION__, __LINE__);
+ image_util_encode_destroy(handler);
+ free(outputBuffer);
return nullptr;
}
if (image_util_encode_destroy(handler) < 0) {
BROWSER_LOGW("[%s:%d] mage_util_encode_destroy: error!", __PRETTY_FUNCTION__, __LINE__);
+ free(outputBuffer);
return nullptr;
}
return outputBuffer;
evas_object_size_hint_align_set(toSet, EVAS_HINT_FILL, EVAS_HINT_FILL);
}
-bool pointInObject(Evas_Object* object, int px, int py)
+void createToastPopup(const char* text)
+{
+ notification_status_message_post(text);
+}
+
+static void _entry_maxlength_reached(void* data, Evas_Object*, void*)
{
- if (!object) {
- BROWSER_LOGE("@@ [%s:%d] null object", __func__, __LINE__);
- return false;
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ if (!data) {
+ BROWSER_LOGW("[%s:%d] data is null", __PRETTY_FUNCTION__, __LINE__);
+ return;
}
- Evas_Coord x, y, w, h;
- evas_object_geometry_get(object, &x, &y, &w, &h);
- return (px >= x && px <= x + w && py >= y && py <= y + h);
+ Elm_Entry_Filter_Limit_Size* limitFilterData = static_cast<Elm_Entry_Filter_Limit_Size*>(data);
+ createToastPopup((boost::format(_("IDS_BR_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_REACHED"))
+ % limitFilterData->max_char_count).str().c_str());
}
-Evas_Object* createToastPopup(Evas_Object* parent, double timeout, const char* text)
+Elm_Entry_Filter_Limit_Size* setEntryLimit(Evas_Object* entry, bool standard_entry)
{
- auto toast(elm_popup_add(parent));
- elm_object_style_set(toast, "toast");
- elm_popup_timeout_set(toast, timeout);
- elm_object_text_set(toast, text);
- return toast;
+ Elm_Entry_Filter_Limit_Size* limitFilterData =
+ static_cast<Elm_Entry_Filter_Limit_Size*>(calloc(1, sizeof(Elm_Entry_Filter_Limit_Size)));
+ limitFilterData->max_char_count = boost::any_cast<int>(config::Config::getInstance().get(
+ standard_entry ? "ENTRY_MAXCHAR" : "URL_MAXCHAR"));
+ limitFilterData->max_byte_count = 0;
+
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, limitFilterData);
+
+ evas_object_smart_callback_add(entry, "maxlength,reached", _entry_maxlength_reached, limitFilterData);
+
+ return limitFilterData;
}
} /* end of EflTools */
#ifndef __EFL_TOOLS_H__
#define __EFL_TOOLS_H__ 1
+#include <Elementary.h>
#include <Evas.h>
+#include <map>
+#include <memory>
#include "BrowserImage.h"
#include "Blob.h"
+
// counts size exactly as is in Z3 device
#define Z3_SCALE_SIZE(x) (int)(((double)(x) * elm_config_scale_get()) / 2.6)
template <typename T>
static void _genlist_del(void* data, Evas_Object*)
{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
if (data) {
auto itemData = static_cast<T*>(data);
delete itemData;
namespace tizen_browser {
namespace tools {
namespace EflTools {
-
std::unique_ptr<Blob> getBlobPNG(BrowserImagePtr browserImage);
void* getBlobPNG(int width, int height, void * image_data, unsigned long long* length);
void setExpandHints(Evas_Object* toSet);
- /**
- * Check if coordinates are inside of a given object.
- */
- bool pointInObject(Evas_Object* object, int x, int y);
+ void createToastPopup(const char* text);
- Evas_Object* createToastPopup(Evas_Object* parent, double timeout, const char* text);
+ Elm_Entry_Filter_Limit_Size* setEntryLimit(Evas_Object* entry, bool standard_entry = true);
} /* end of namespace EflTools */
} /* end of namespace tools */
} /* end of namespace tizen_browser */
+++ /dev/null
-#include "FeedChannel.h"
-
-namespace tizen_browser{
-namespace tools{
-
-std::string FeedChannel::getAuthor() const {
- return m_author;
-}
-
-void FeedChannel::setAuthor(const std::string& author) {
- this->m_author = author;
-}
-
-std::string FeedChannel::getDescription() const {
- return m_description;
-}
-
-void FeedChannel::setDescription(const std::string& description) {
- this->m_description = description;
-}
-
-FeedItemList FeedChannel::getItems() const {
- return m_items;
-}
-
-void FeedChannel::setItems(const FeedItemList& items) {
- this->m_items = items;
-}
-
-void FeedChannel::addItem(std::shared_ptr<FeedItem> item)
-{
- this->m_items.push_back(item);
-}
-
-boost::posix_time::ptime FeedChannel::getLastBuildDate() const {
- return m_lastBuildDate;
-}
-
-void FeedChannel::setLastBuildDate(const boost::posix_time::ptime& lastBuildDate) {
- this->m_lastBuildDate = lastBuildDate;
-}
-
-std::string FeedChannel::getTitle() const {
- return m_title;
-}
-
-void FeedChannel::setTitle(const std::string& title) {
- this->m_title = title;
-}
-
-std::string FeedChannel::getUrl() const {
- return m_url;
-}
-
-void FeedChannel::setUrl(const std::string& url) {
- this->m_url = url;
-}
-
-std::string FeedChannel::getRealUrl() const {
- return m_realUrl;
-}
-
-void FeedChannel::setRealUrl(const std::string& url) {
- this->m_realUrl = url;
-}
-
-std::shared_ptr<BrowserImage> FeedChannel::getFavicon()
-{
- return m_favicon;
-}
-
-void FeedChannel::setFavicon(std::shared_ptr<BrowserImage> favicon)
-{
- this->m_favicon = favicon;
-}
-
-}
-}
+++ /dev/null
-#ifndef FEEDCHANNEL_H
-#define FEEDCHANNEL_H
-
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <string>
-#include <memory>
-#include <list>
-
-#include "FeedItem.h"
-#include "EflTools.h"
-
-namespace tizen_browser {
-namespace tools {
-
-class FeedChannel
-{
-public:
- std::string getAuthor() const;
- void setAuthor(const std::string& author);
- std::string getDescription() const;
- void setDescription(const std::string& description);
- tools::FeedItemList getItems() const;
- void setItems(const tools::FeedItemList& items);
- void addItem(std::shared_ptr<tools::FeedItem> item);
- boost::posix_time::ptime getLastBuildDate() const;
- void setLastBuildDate(const boost::posix_time::ptime& lastBuildDate);
- std::string getTitle() const;
- void setTitle(const std::string& title);
- std::string getUrl() const;
- void setUrl(const std::string& url);
- std::string getRealUrl() const;
- void setRealUrl(const std::string& url);
- std::shared_ptr<BrowserImage> getFavicon();
- void setFavicon(std::shared_ptr<BrowserImage>);
-
-private:
- std::string m_title;
- std::string m_description;
- std::string m_url;
- std::string m_realUrl;
- boost::posix_time::ptime m_lastBuildDate;
- std::string m_author;
- tools::FeedItemList m_items;
- std::shared_ptr<BrowserImage> m_favicon;
-};
-
-typedef std::vector<std::shared_ptr<tizen_browser::tools::FeedChannel>> FeedChannelList;
-typedef std::vector<std::shared_ptr<tizen_browser::tools::FeedChannel>>::iterator FeedChannelListIter;
-typedef std::vector<std::shared_ptr<tizen_browser::tools::FeedChannel>>::const_iterator FeedChannelListConstIter;
-
-}
-}
-
-
-
-#endif // FEEDCHANNEL_H
+++ /dev/null
-#include "FeedItem.h"
-
-namespace tizen_browser
-{
-namespace tools
-{
-
-std::string FeedItem::getDescription() const {
- return m_description;
-}
-
-void FeedItem::setDescription(const std::string& description) {
- this->m_description = description;
-}
-
-int FeedItem::getId() const {
- return m_id;
-}
-
-void FeedItem::setId(int id) {
- this->m_id = id;
-}
-
-boost::posix_time::ptime FeedItem::getPubDate() const {
- return m_pubDate;
-}
-
-void FeedItem::setPubDate(const boost::posix_time::ptime& pubDate) {
- this->m_pubDate = pubDate;
-}
-
-std::string FeedItem::getTitle() const {
- return m_title;
-}
-
-void FeedItem::setTitle(const std::string& title) {
- this->m_title = title;
-}
-
-std::string FeedItem::getUrl() const {
- return m_url;
-}
-
-void FeedItem::setUrl(const std::string& url) {
- this->m_url = url;
-}
-
-std::shared_ptr<BrowserImage> FeedItem::getFavicon()
-{
- return m_favicon;
-}
-
-void FeedItem::setFavicon(std::shared_ptr<BrowserImage> favicon)
-{
- this->m_favicon = favicon;
-}
-
-}
-}
+++ /dev/null
-#ifndef FEEDITEM_H
-#define FEEDITEM_H
-
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <EflTools.h>
-#include <string>
-#include <list>
-
-namespace tizen_browser
-{
-namespace tools
-{
-
-class FeedItem
-{
-public:
- std::string getDescription() const;
- void setDescription(const std::string& description);
- int getId() const;
- void setId(int id);
- boost::posix_time::ptime getPubDate() const;
- void setPubDate(const boost::posix_time::ptime& pubDate);
- std::string getTitle() const;
- void setTitle(const std::string& title);
- std::string getUrl() const;
- void setUrl(const std::string& url);
- std::shared_ptr<BrowserImage> getFavicon();
- void setFavicon(std::shared_ptr<BrowserImage>);
-private:
- std::string m_title;
- std::string m_url;
- int m_id;
- boost::posix_time::ptime m_pubDate;
- std::string m_description;
- std::shared_ptr<BrowserImage> m_favicon;
-};
-
-typedef std::list<std::shared_ptr<tizen_browser::tools::FeedItem>> FeedItemList;
-typedef std::list<std::shared_ptr<tizen_browser::tools::FeedItem>>::iterator FeedItemListIter;
-typedef std::list<std::shared_ptr<tizen_browser::tools::FeedItem>>::const_iterator FeedItemListConstIter;
-
-}
-}
-
-#endif // FEEDITEM_H
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "FocusManager.h"
-#include "BrowserLogger.h"
-
-FocusManager::FocusManager()
- : _rowTracker(0)
- , _prevRowTracker(0)
- , handlerDown(nullptr)
- , _gen(nullptr)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-}
-
-FocusManager::~FocusManager()
-{
- BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
-}
-
-void FocusManager::startFocusManager(Evas_Object* gengrid)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- handlerDown = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down_cb, this);
- if (gengrid)
- evas_object_smart_callback_add(gengrid, "item,focused", _row_tracker, this);
-}
-
-void FocusManager::stopFocusManager()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- verticalFocusVector.clear();
- ecore_event_handler_del(handlerDown);
-}
-Eina_Bool FocusManager::_key_down_cb(void* data, int, void* event)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- FocusManager* fm = static_cast<FocusManager*>(data);
- Ecore_Event_Key* ev = static_cast<Ecore_Event_Key*>(event);
- const std::string keyName = ev->keyname;
-
- if (!keyName.compare("Up")) {
- BROWSER_LOGD("[%s:%d] Keyname: %s", __PRETTY_FUNCTION__, __LINE__, ev->keyname);
- if (fm->_prevRowTracker) {
- fm->_prevRowTracker = 0;
- return EINA_FALSE;
- }
- if (fm->focusListIterator == fm->verticalFocusVector.begin()) {
- elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
- return EINA_FALSE;
- }
- --(fm->focusListIterator);
- if (elm_object_disabled_get(*(fm->focusListIterator)) == EINA_TRUE)
- --(fm->focusListIterator);
- elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
- return EINA_TRUE;
- }
- else if (!keyName.compare("Down")) {
- BROWSER_LOGD("[%s:%d] Keyname: %s", __PRETTY_FUNCTION__, __LINE__, ev->keyname);
- if (fm->focusListIterator == fm->verticalFocusVector.end()-1) {
- elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
- return EINA_FALSE;
- }
- ++(fm->focusListIterator);
- if (elm_object_disabled_get(*(fm->focusListIterator)) == EINA_TRUE)
- ++(fm->focusListIterator);
- elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
- return EINA_TRUE;
- }
- return EINA_FALSE;
-}
-
-void FocusManager::_row_tracker(void* data, Evas_Object*, void* event)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- FocusManager* fm = static_cast<FocusManager*>(data);
- Elm_Object_Item* it = static_cast<Elm_Object_Item*>(event);
- unsigned int x, y;
- elm_gengrid_item_pos_get(it, &x, &y);
- fm->_prevRowTracker = fm->_rowTracker;
- fm->_rowTracker = y;
- BROWSER_LOGD("[%s:%d] prev Y:%d, Actual Y:%d", __PRETTY_FUNCTION__, __LINE__, fm->_prevRowTracker, fm->_rowTracker);
-}
-
-void FocusManager::addItem(Evas_Object* it)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- verticalFocusVector.push_back(it);
-}
-
-void FocusManager::setIterator()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- focusListIterator = verticalFocusVector.begin();
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FOCUSMANAGER_H
-#define FOCUSMANAGER_H
-
-#include <Evas.h>
-#include <Ecore.h>
-#include <Elementary.h>
-#include <vector>
-
-class FocusManager
-{
-public:
- FocusManager();
- ~FocusManager();
-
- /**
- * This function runs FocusManager. Set the gengrid as the parameter of this function to run _raw_tracker. If the view does not have gengrid, set nullptr.
- * Before you call this function, add Evas_Object elements to verticalFocusVector using addItem(Evas_Object*) function and set focusListIterator using setIterator() function.
- */
- void startFocusManager(Evas_Object*);
-
- /**
- * This function stops FocusManager.
- */
- void stopFocusManager();
-
- /**
- * Use this function to add Evas_Object to FocusManager. The order matters.
- */
- void addItem(Evas_Object*);
-
- /**
- * Use this function set focusListIterator. Call it after adding items. This function sets iterator at the beginnig of the verticalFocusVector.
- */
- void setIterator();
-private:
- static Eina_Bool _key_down_cb(void *data, int type, void *event);
- static void _row_tracker(void *data, Evas_Object *obj, void *event);
-
- std::vector<Evas_Object*> verticalFocusVector;
- std::vector<Evas_Object*>::iterator focusListIterator;
- unsigned int _rowTracker, _prevRowTracker;
- Ecore_Event_Handler* handlerDown;
- Evas_Object* _gen;
-};
-
-#endif // FOCUSMANAGER_H
-
{
namespace tools
{
+ struct Color {
+ Color() : r(240), g(240), b(240), a(255) {};
+ Color (int r, int g, int b, int a) : r(r), g(g), b(b), a(a) {};
+ Color(const Color& b) {
+ this->r = b.r;
+ this->g = b.g;
+ this->b = b.b;
+ this->a = b.a;
+ }
+ ~Color() = default;
+ bool operator==(const Color& b) const {
+ if (this->r != b.r) return false;
+ if (this->g != b.g) return false;
+ if (this->b != b.b) return false;
+ if (this->a != b.a) return false;
+ return true;
+ };
+ bool operator!=(const Color& b) const {
+ return !(*this == b);
+ };
+ Color& operator=(const Color& b) {
+ this->r = b.r;
+ this->g = b.g;
+ this->b = b.b;
+ this->a = b.a;
+ return *this;
+ };
+ int r, g, b, a;
+ };
+
static const int SUFFIX_CHAR_DEL = 1;
static const char * PROTCOL_BEGIN = "://";
static const char END_SLASH = '/';
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "GengridWrapper.h"
+
+#include <cassert>
+
+#include "app_i18n.h"
+#include "BrowserLogger.h"
+#include "Tools/EflTools.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+GengridWrapper::GengridWrapper()
+ : m_gengrid(nullptr)
+ , m_parent(nullptr)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+GengridWrapper::GengridWrapper(Evas_Object* parent)
+ : m_gengrid(nullptr)
+ , m_parent(parent)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ assert(parent);
+ create();
+}
+
+GengridWrapper::~GengridWrapper()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ unregisterCallbacks();
+ clear();
+}
+
+void GengridWrapper::registerCallback(const std::string& key, Evas_Smart_Cb func, void* data)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_smart_callback_add(m_gengrid, key.c_str(), func, data);
+ m_callbacks[key] = func;
+}
+
+void GengridWrapper::unregisterCallbacks()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ for (auto& el : m_callbacks)
+ evas_object_smart_callback_del(m_gengrid, el.first.c_str(), el.second);
+ m_callbacks.clear();
+}
+
+void GengridWrapper::deleteItem(Elm_Widget_Item* item)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ elm_object_item_del(item);
+ elm_gengrid_realized_items_update(m_gengrid);
+}
+
+void GengridWrapper::deleteSelectedItem()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ deleteItem(elm_gengrid_selected_item_get(m_gengrid));
+}
+
+void GengridWrapper::updateRealized()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ elm_gengrid_realized_items_update(m_gengrid);
+}
+
+void GengridWrapper::init(Evas_Object* parent)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ assert(parent);
+ m_parent = parent;
+ create();
+}
+void GengridWrapper::show()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_show(m_gengrid);
+}
+
+void GengridWrapper::hide()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_hide(m_gengrid);
+}
+
+void GengridWrapper::clear()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ elm_gengrid_clear(m_gengrid);
+}
+
+void GengridWrapper::reorder(const bool& flag)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ elm_gengrid_reorder_mode_set(m_gengrid, flag ? EINA_TRUE : EINA_FALSE);
+}
+
+Evas_Object* GengridWrapper::getContent()
+{
+ if (!m_gengrid)
+ create();
+ return m_gengrid;
+}
+
+void GengridWrapper::itemSizeSet(const int& width, const int& height)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ elm_gengrid_item_size_set(m_gengrid, width, height);
+}
+
+Elm_Widget_Item* GengridWrapper::append(
+ const Elm_Gengrid_Item_Class* itc,
+ const void* data,
+ Evas_Smart_Cb func,
+ const void* func_data)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ return elm_gengrid_item_append(m_gengrid, itc, data, func, func_data);
+}
+
+Elm_Widget_Item* GengridWrapper::insertBefore(
+ const Elm_Gengrid_Item_Class* itc,
+ const void* data,
+ Elm_Widget_Item* relative,
+ Evas_Smart_Cb func,
+ const void *func_data)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ return elm_gengrid_item_insert_before(m_gengrid, itc, data, relative, func, func_data);
+}
+
+}
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef GENGRID_WRAPPER_H
+#define GENGRID_WRAPPER_H
+
+#include <Elementary.h>
+#include <Evas.h>
+#include <string>
+#include <map>
+
+namespace tizen_browser{
+namespace base_ui{
+
+class GengridWrapper
+{
+public:
+ GengridWrapper();
+ GengridWrapper(Evas_Object* parent);
+ ~GengridWrapper();
+ virtual void create() {};
+
+ void init(Evas_Object* parent);
+ void clear();
+ void show();
+ void hide();
+ void registerCallback(const std::string& key, Evas_Smart_Cb func, void* data);
+ void unregisterCallbacks();
+ void deleteItem(Elm_Widget_Item *item);
+ void deleteSelectedItem();
+ void updateRealized();
+ void reorder(const bool&);
+ Evas_Object* getContent();
+ Evas_Object* operator()() { return getContent(); }
+ unsigned count() { return elm_gengrid_items_count(getContent()); }
+ void itemSizeSet(const int& width, const int& height);
+ Elm_Widget_Item* append(
+ const Elm_Gengrid_Item_Class* itc,
+ const void* data,
+ Evas_Smart_Cb func,
+ const void* func_data);
+ Elm_Widget_Item* insertBefore(
+ const Elm_Gengrid_Item_Class* itc,
+ const void* data,
+ Elm_Widget_Item* relative,
+ Evas_Smart_Cb func,
+ const void *func_data);
+protected:
+ Evas_Object* m_gengrid;
+ Evas_Object* m_parent;
+ std::map<std::string, Evas_Smart_Cb> m_callbacks;
+};
+
+}
+}
+
+#endif // GENGRID_WRAPPER_H
#include "app_i18n.h"
-#define ADD_TRAN(x,y) static std::string x = _(y);
-
namespace tizen_browser
{
namespace base_ui
{
-namespace Translations {
- ADD_TRAN(Google,"Google")
- ADD_TRAN(Yahoo,"Yahoo")
- ADD_TRAN(Bing,"Bing")
- ADD_TRAN(TizenPage,"http://www.tizen.org")
- ADD_TRAN(QuickPage,"QUICK_ACCESS")
- ADD_TRAN(MostVisitedPage,"MOST_VISITED")
- ADD_TRAN(OtherPage,"OTHER")
- ADD_TRAN(CurrentPage,"CURRENT")
- ADD_TRAN(Device,"IDS_BR_OPT_DEVICE")
- ADD_TRAN(SDCard,"IDS_BR_OPT_SD_CARD")
- ADD_TRAN(SettingsMainTitle,"IDS_BR_OPT_SETTINGS")
- ADD_TRAN(SettingsMainHomePage, "IDS_BR_BUTTON_HOMEPAGE_ABB")
- ADD_TRAN(SettingsMainHomePageDefault,"IDS_BR_BODY_DEFAULT")
- ADD_TRAN(SettingsMainDefaultSearchEngine,"IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE")
- ADD_TRAN(SettingsMainAutoFillProfiles,"IDS_BR_MBODY_MY_AUTO_FILL_PROFILE")
- ADD_TRAN(SettingsMainAutoFillProfilesSub,"IDS_BR_SBODY_MANAGE_DATA_USED_TO_FILL_IN_FORMS_ONLINE")
- ADD_TRAN(SettingsMainManualZoom,"IDS_BR_MBODY_MANUAL_ZOOM")
- ADD_TRAN(SettingsMainManualZoomSub,"IDS_BR_BODY_OVERRIDE_WEBSITES_REQUEST_TO_CONTROL_ZOOM")
- ADD_TRAN(SettingsMainPrivacy,"IDS_BR_BODY_PRIVACY")
- ADD_TRAN(SettingsMainAdvanced,"IDS_BR_BODY_ADVANCED")
- ADD_TRAN(SettingsDefaultSearchEngineTitle,"IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE")
- ADD_TRAN(SettingsAdvancedTitle,"IDS_BR_BODY_ADVANCED")
- ADD_TRAN(SettingsAdvancedEnableJavaScript,"IDS_BR_TMBODY_TURN_ON_JAVASCRIPT")
- ADD_TRAN(SettingsAdvancedEnableJavaScriptSub,"IDS_BR_BODY_ALLOW_SITES_TO_RUN_JAVASCRIPT")
- ADD_TRAN(SettingsAdvancedBlockPopups,"IDS_BR_BODY_BLOCK_POP_UPS")
- ADD_TRAN(SettingsAdvancedBlockPopupsSub,"IDS_BR_BODY_BLOCK_POP_UPS_ON_WEBPAGES")
- ADD_TRAN(SettingsAdvancedSaveContent,"IDS_BR_HEADER_SAVE_CONTENT_TO_ABB")
- ADD_TRAN(SettingsAdvancedSaveContentTitle,"IDS_BR_HEADER_SAVE_CONTENT_TO_ABB")
- ADD_TRAN(SettingsAdvancedManageWebsiteData,"IDS_BR_TMBODY_MANAGE_WEBSITE_DATA")
- ADD_TRAN(SettingsAdvancedManageWebsiteDataSub,"IDS_BR_SBODY_SET_ADVANCED_SETTINGS_FOR_INDIVIDUAL_WEBSITES")
- ADD_TRAN(SettingsPrivacyTitle,"IDS_BR_BODY_PRIVACY");
- ADD_TRAN(SettingsPrivacyAcceptCookies,"IDS_BR_BODY_ACCEPT_COOKIES")
- ADD_TRAN(SettingsPrivacyAcceptCookiesSub,"IDS_BR_SBODY_ALLOW_SITES_TO_SAVE_AND_READ_COOKIES")
- ADD_TRAN(SettingsPrivacySuggestSearches,"IDS_BR_MBODY_SUGGEST_SEARCHES")
- ADD_TRAN(SettingsPrivacySuggestSearchesSub,"IDS_BR_SBODY_SET_THE_DEVICE_TO_SUGGEST_QUERIES_AND_SITES_IN_THE_WEB_ADDRESS_BAR_AS_YOU_TYPE")
- ADD_TRAN(SettingsPrivacySaveSigninInfo,"IDS_BR_MBODY_SAVE_SIGN_IN_INFO")
- ADD_TRAN(SettingsPrivacySaveSigninInfoSub,"IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG")
- ADD_TRAN(SettingsPrivacyDeletePersonalData,"IDS_BR_BODY_DELETE_PERSONAL_DATA")
- ADD_TRAN(SettingsDelPersDataTitle,"IDS_BR_BODY_DELETE_PERSONAL_DATA")
- ADD_TRAN(SettingsDelPersDataCancel,"IDS_BR_SK_CANCEL")
- ADD_TRAN(SettingsDelPersDataDelete,"IDS_BR_SK_DELETE")
- ADD_TRAN(SettingsDelPersDataSelectAll,"IDS_BR_OPT_SELECT_ALL_ABB")
- ADD_TRAN(SettingsDelPersDataBrowsingHistory,"IDS_BR_BODY_BROWSING_HISTORY")
- ADD_TRAN(SettingsDelPersDataCache,"IDS_BR_OPT_CACHE")
- ADD_TRAN(SettingsDelPersDataCookies,"IDS_BR_BODY_COOKIES_AND_SITE_DATA_ABB")
- ADD_TRAN(SettingsDelPersDataPasswords,"IDS_BR_OPT_PASSWORDS")
- ADD_TRAN(SettingsDelPersDataAutoFillData,"IDS_BR_OPT_AUTO_FILL_DATA")
- ADD_TRAN(SettingsDelPersDataLocationData,"IDS_BR_OPT_LOCATION_ACCESS_DATA")
- ADD_TRAN(SettingsAutoFillProfileTitle,"IDS_BR_MBODY_MY_AUTO_FILL_PROFILE")
- ADD_TRAN(SettingsAutoFillProfileSetMyProfile,"IDS_BR_MBODY_SET_MY_PROFILE")
- ADD_TRAN(SettingsHomePageTitle,"IDS_BR_BUTTON_HOMEPAGE_ABB")
- ADD_TRAN(SettingsHomePageCurrentPage,"IDS_BR_BODY_CURRENT_PAGE")
- ADD_TRAN(SettingsHomePageDefault,"IDS_BR_BODY_DEFAULT")
- ADD_TRAN(SettingsHomePageOther,"IDS_BR_BODY_OTHER_ABB")
- ADD_TRAN(SettingsHomePageMostVisited,"IDS_BR_MBODY_MOST_VISITED_WEBSITES")
- ADD_TRAN(SettingsHomePageQuickAccess,"IDS_BR_HEADER_QUICK_ACCESS_ABB")
+struct Translations {
+ static Translations& instance() {
+ static Translations INSTANCE;
+ return INSTANCE;
+ }
+ Translations(Translations const&) = delete;
+ void operator=(Translations const&) = delete;
+
+ void update() {
+ Google = _("Google");
+ Yahoo = _("Yahoo");
+ Bing = _("Bing");
+ TizenPage = _("http://www.tizen.org");
+ QuickPage = _("QUICK_ACCESS");
+ MostVisitedPage = _("MOST_VISITED");
+ OtherPage = _("OTHER");
+ CurrentPage = _("CURRENT");
+ Device = _("IDS_BR_OPT_DEVICE");
+ SDCard = _("IDS_BR_OPT_SD_CARD");
+ SettingsMainTitle = _("IDS_BR_OPT_SETTINGS");
+ SettingsMainHomePage = _( "IDS_BR_BUTTON_HOMEPAGE_ABB");
+ SettingsMainHomePageDefault = _("IDS_BR_BODY_DEFAULT");
+ SettingsMainDefaultSearchEngine = _("IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE");
+ SettingsMainAutoFillProfiles = _("IDS_BR_MBODY_MY_AUTO_FILL_PROFILE");
+ SettingsMainAutoFillProfilesSub = _("IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE");
+ SettingsMainManualZoom = _("IDS_BR_MBODY_MANUAL_ZOOM");
+ SettingsMainManualZoomSub = _("IDS_BR_BODY_OVERRIDE_WEBSITES_REQUEST_TO_CONTROL_ZOOM");
+ SettingsMainPrivacy = _("IDS_BR_BODY_PRIVACY");
+ SettingsMainAdvanced = _("IDS_BR_BODY_ADVANCED");
+ SettingsDefaultSearchEngineTitle = _("IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE");
+ SettingsAdvancedTitle = _("IDS_BR_BODY_ADVANCED");
+ SettingsAdvancedEnableJavaScript = _("IDS_BR_TMBODY_TURN_ON_JAVASCRIPT");
+ SettingsAdvancedEnableJavaScriptSub = _("IDS_BR_BODY_ALLOW_SITES_TO_RUN_JAVASCRIPT");
+ SettingsAdvancedBlockPopups = _("IDS_BR_BODY_BLOCK_POP_UPS");
+ SettingsAdvancedBlockPopupsSub = _("IDS_BR_BODY_BLOCK_POP_UPS_ON_WEBPAGES");
+ SettingsAdvancedSaveContent = _("IDS_BR_HEADER_SAVE_CONTENT_TO_ABB");
+ SettingsAdvancedSaveContentTitle = _("IDS_BR_HEADER_SAVE_CONTENT_TO_ABB");
+ SettingsAdvancedManageWebsiteData = _("IDS_BR_TMBODY_MANAGE_WEBSITE_DATA");
+ SettingsAdvancedManageWebsiteDataSub = _("IDS_BR_SBODY_SET_ADVANCED_SETTINGS_FOR_INDIVIDUAL_WEBSITES");
+ SettingsPrivacyTitle = _("IDS_BR_BODY_PRIVACY");
+ SettingsPrivacyAcceptCookies = _("IDS_BR_BODY_ACCEPT_COOKIES");
+ SettingsPrivacyAcceptCookiesSub = _("IDS_BR_SBODY_ALLOW_SITES_TO_SAVE_AND_READ_COOKIES");
+ SettingsPrivacySuggestSearches = _("IDS_BR_MBODY_SUGGEST_SEARCHES");
+ SettingsPrivacySuggestSearchesSub = _("IDS_BR_SBODY_SET_THE_DEVICE_TO_SUGGEST_QUERIES_AND_SITES_IN_THE_WEB_ADDRESS_BAR_AS_YOU_TYPE");
+ SettingsPrivacySaveSigninInfo = _("IDS_BR_MBODY_SAVE_SIGN_IN_INFO");
+ SettingsPrivacySaveSigninInfoSub = _("IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG");
+ SettingsPrivacyDeletePersonalData = _("IDS_BR_BODY_DELETE_PERSONAL_DATA");
+ SettingsDelPersDataTitle = _("IDS_BR_BODY_DELETE_PERSONAL_DATA");
+ SettingsDelPersDataCancel = _("IDS_BR_SK_CANCEL");
+ SettingsDelPersDataDelete = _("IDS_BR_SK_DELETE");
+ SettingsDelPersDataSelectAll = _("IDS_BR_OPT_SELECT_ALL_ABB");
+ SettingsDelPersDataBrowsingHistory = _("IDS_BR_BODY_BROWSING_HISTORY");
+ SettingsDelPersDataCache = _("IDS_BR_OPT_CACHE");
+ SettingsDelPersDataCookies = _("IDS_BR_BODY_COOKIES_AND_SITE_DATA_ABB");
+ SettingsDelPersDataPasswords = _("IDS_BR_OPT_PASSWORDS");
+ SettingsDelPersDataAutoFillData = _("IDS_BR_OPT_AUTO_FILL_DATA");
+ SettingsDelPersDataLocationData = _("IDS_BR_OPT_LOCATION_ACCESS_DATA");
+ SettingsAutoFillProfileTitle = _("IDS_BR_MBODY_MY_AUTO_FILL_PROFILE");
+ SettingsAutoFillProfileSetMyProfile = _("IDS_BR_MBODY_SET_MY_PROFILE");
+ SettingsHomePageTitle = _("IDS_BR_BUTTON_HOMEPAGE_ABB");
+ SettingsHomePageCurrentPage = _("IDS_BR_BODY_CURRENT_PAGE");
+ SettingsHomePageDefault = _("IDS_BR_BODY_DEFAULT");
+ SettingsHomePageOther = _("IDS_BR_BODY_OTHER_ABB");
+ SettingsHomePageMostVisited = _("IDS_BR_MBODY_MOST_VISITED_WEBSITES");
+ SettingsHomePageQuickAccess = _("IDS_BR_HEADER_QUICK_ACCESS_ABB");
+ }
+private:
+ Translations() {
+ update();
+ }
+public:
+ std::string Google;
+ std::string Yahoo;
+ std::string Bing;
+ std::string TizenPage;
+ std::string QuickPage;
+ std::string MostVisitedPage;
+ std::string OtherPage;
+ std::string CurrentPage;
+ std::string Device;
+ std::string SDCard;
+ std::string SettingsMainTitle;
+ std::string SettingsMainHomePage;
+ std::string SettingsMainHomePageDefault;
+ std::string SettingsMainDefaultSearchEngine;
+ std::string SettingsMainAutoFillProfiles;
+ std::string SettingsMainAutoFillProfilesSub;
+ std::string SettingsMainManualZoom;
+ std::string SettingsMainManualZoomSub;
+ std::string SettingsMainPrivacy;
+ std::string SettingsMainAdvanced;
+ std::string SettingsDefaultSearchEngineTitle;
+ std::string SettingsAdvancedTitle;
+ std::string SettingsAdvancedEnableJavaScript;
+ std::string SettingsAdvancedEnableJavaScriptSub;
+ std::string SettingsAdvancedBlockPopups;
+ std::string SettingsAdvancedBlockPopupsSub;
+ std::string SettingsAdvancedSaveContent;
+ std::string SettingsAdvancedSaveContentTitle;
+ std::string SettingsAdvancedManageWebsiteData;
+ std::string SettingsAdvancedManageWebsiteDataSub;
+ std::string SettingsPrivacyTitle;
+ std::string SettingsPrivacyAcceptCookies;
+ std::string SettingsPrivacyAcceptCookiesSub;
+ std::string SettingsPrivacySuggestSearches;
+ std::string SettingsPrivacySuggestSearchesSub;
+ std::string SettingsPrivacySaveSigninInfo;
+ std::string SettingsPrivacySaveSigninInfoSub;
+ std::string SettingsPrivacyDeletePersonalData;
+ std::string SettingsDelPersDataTitle;
+ std::string SettingsDelPersDataCancel;
+ std::string SettingsDelPersDataDelete;
+ std::string SettingsDelPersDataSelectAll;
+ std::string SettingsDelPersDataBrowsingHistory;
+ std::string SettingsDelPersDataCache;
+ std::string SettingsDelPersDataCookies;
+ std::string SettingsDelPersDataPasswords;
+ std::string SettingsDelPersDataAutoFillData;
+ std::string SettingsDelPersDataLocationData;
+ std::string SettingsAutoFillProfileTitle;
+ std::string SettingsAutoFillProfileSetMyProfile;
+ std::string SettingsHomePageTitle;
+ std::string SettingsHomePageCurrentPage;
+ std::string SettingsHomePageDefault;
+ std::string SettingsHomePageOther;
+ std::string SettingsHomePageMostVisited;
+ std::string SettingsHomePageQuickAccess;
};
struct SearchEngineTranslation
SearchEngineTranslation(SearchEngineTranslation const&) = delete;
void operator=(SearchEngineTranslation const&) = delete;
std::string get(const std::string& key) { return searchEngine[key]; }
+ static std::string createSearchQuery(const std::string& query, const std::string& searchEngine)
+ {
+ std::string searchString = instance().get(searchEngine);
+ searchString += query;
+ std::replace(searchString.begin(), searchString.end(), ' ', '+');
+ return searchString;
+ }
private:
SearchEngineTranslation() {
- searchEngine[Translations::Google] = "http://www.google.com/search?q=";
- searchEngine[Translations::Yahoo] = "http://www.yahoo.com/search?q=";
- searchEngine[Translations::Bing] = "http://www.bing.com/search?q=";
+ searchEngine[Translations::instance().Google] = "http://www.google.com/search?q=";
+ searchEngine[Translations::instance().Yahoo] = "http://www.yahoo.com/search?q=";
+ searchEngine[Translations::instance().Bing] = "http://www.bing.com/search?q=";
}
std::map<std::string, std::string> searchEngine;
};
#include "app_i18n.h"
-#define ADD_TRAN(x,y) static std::string x = _(y);
-
namespace tizen_browser
{
namespace base_ui
{
-namespace Translations {
- ADD_TRAN(CreatePassword,"IDS_BR_BODY_YOUR_PASSWORD_MUST_CONTAIN_AT_LEAST_PD_CHARACTERS_INCLUDING_AT_LEAST_1_LETTER")
- ADD_TRAN(ConfirmCreatePassword, "IDS_BR_BODY_ENTER_THE_PASSWORD_AGAIN_TO_CONFRIM_IT")
- ADD_TRAN(ConfirmPassword, "IDS_BR_BODY_ENTER_YOUR_CURRENT_SECRET_MODE_PASSWORD")
- ADD_TRAN(IncorrectPassword, "IDS_BR_BODY_AN_INCORRECT_PASSWORD_HAS_BEEN_ENTERED_TRY_AGAIN")
- ADD_TRAN(ShowPassword, "IDS_BR_OPT_SHOW_PASSWORD_ABB2")
- ADD_TRAN(UsePassword, "IDS_BR_BUTTON_USE_PASSWORD_ABB")
- ADD_TRAN(ChangePassword, "IDS_BR_TMBODY_CHANGE_PASSWORD")
+struct TabTranslations {
+ static TabTranslations& instance() {
+ static TabTranslations INSTANCE;
+ return INSTANCE;
+ }
+ TabTranslations(TabTranslations const&) = delete;
+ void operator=(TabTranslations const&) = delete;
+ void update() {
+ CreatePassword = _("IDS_BR_BODY_YOUR_PASSWORD_MUST_CONTAIN_AT_LEAST_PD_CHARACTERS_INCLUDING_AT_LEAST_1_LETTER");
+ ConfirmCreatePassword = _("IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT");
+ ConfirmPassword = _("IDS_BR_BODY_ENTER_YOUR_CURRENT_SECRET_MODE_PASSWORD");
+ IncorrectPassword = _("IDS_BR_BODY_AN_INCORRECT_PASSWORD_HAS_BEEN_ENTERED_TRY_AGAIN");
+ ShowPassword = _("IDS_BR_OPT_SHOW_PASSWORD_ABB2");
+ UsePassword = _("IDS_BR_BUTTON_USE_PASSWORD_ABB");
+ ChangePassword = _("IDS_BR_TMBODY_CHANGE_PASSWORD");
+ }
+private:
+ TabTranslations() {
+ update();
+ }
+public:
+ std::string CreatePassword;
+ std::string ConfirmCreatePassword;
+ std::string ConfirmPassword;
+ std::string IncorrectPassword;
+ std::string ShowPassword;
+ std::string UsePassword;
+ std::string ChangePassword;
};
enum class PasswordAction {
#ifndef URISCHEMES_H
#define URISCHEMES_H
+#include <string>
+#include <map>
+#include <memory>
+#include <vector>
+#include <app_control.h>
+
namespace tizen_browser {
const char* HTTP_SCHEME = "http://";
const char* TIZENSTORE_APP_ID = "org.tizen.tizenstore"; //Tizen store package ID
+static std::map<std::string, std::vector<std::string> > parse_uri(const char *uriToParse) __attribute__ ((unused));
+static Eina_Bool handle_scheme(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_email(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_contact(const char *uri, const char *protocol) __attribute__ ((unused));
+static Eina_Bool launch_dialer(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_message(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_tizenstore(const char *uri) __attribute__ ((unused));
+
+
+static std::map<std::string, std::vector<std::string> > parse_uri(const char *uriToParse)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::string uri = uriToParse;
+ std::map<std::string, std::vector<std::string> > uri_parts;
+ std::string::size_type mainDelimiter;
+ mainDelimiter = uri.find_first_of("?");
+ if (mainDelimiter != std::string::npos) {
+ uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
+ std::string argsString = uri.substr(mainDelimiter+1, std::string::npos);
+ const char *delimiter = "&";
+ std::vector<std::string> argsVector;
+ auto i = 0;
+ auto pos = argsString.find(delimiter);
+ if (pos != std::string::npos) {
+ while (pos != std::string::npos) {
+ argsVector.push_back(argsString.substr(i, pos-i));
+ i = ++pos;
+ pos = argsString.find(delimiter, pos);
+ if (pos == std::string::npos)
+ argsVector.push_back(argsString.substr(i, argsString.length()));
+ }
+ } else
+ argsVector.push_back(argsString.substr(i, argsString.length()));
+
+ const char *valueDelimiter = "=";
+ const char *itemsDelimiter = ";";
+ for (auto item : argsVector) {
+ pos = item.find(valueDelimiter);
+ if (pos != std::string::npos) {
+ std::string key = item.substr(0, pos);
+ std::string value = item.substr(pos+1, std::string::npos);
+
+ auto pos2 = value.find(itemsDelimiter);
+ auto j = 0;
+ if (pos2 != std::string::npos) {
+ while (pos2 != std::string::npos) {
+ uri_parts[key].push_back(value.substr(j, pos2-j));
+ j = ++pos2;
+ pos2 = value.find(itemsDelimiter, pos2);
+ if (pos2 == std::string::npos)
+ uri_parts[key].push_back(value.substr(j, value.length()));
+ }
+ } else
+ uri_parts[key].push_back(value);
+ }
+ }
+ } else {
+ uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
+ }
+ return uri_parts;
+}
+
+static Eina_Bool handle_scheme(const char *uri)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ if (!strncmp(uri, HTTP_SCHEME, strlen(HTTP_SCHEME)))
+ return EINA_FALSE;
+ else if (!strncmp(uri, HTTPS_SCHEME, strlen(HTTPS_SCHEME)))
+ return EINA_FALSE;
+ else if (!strncmp(uri, FILE_SCHEME, strlen(FILE_SCHEME)))
+ return EINA_FALSE;
+ else if (!strncmp(uri, TIZENSTORE_SCHEME, strlen(TIZENSTORE_SCHEME))) {
+ launch_tizenstore(uri);
+ return EINA_TRUE;
+ }
+ else if (!strncmp(uri, MAILTO_SCHEME, strlen(MAILTO_SCHEME))) {
+ launch_email(uri);
+ return EINA_TRUE;
+ }
+ else if (!strncmp(uri, TEL_SCHEME, strlen(TEL_SCHEME))) {
+ launch_dialer(uri);
+ return EINA_TRUE;
+ }
+ else if (!strncmp(uri, TELTO_SCHEME, strlen(TELTO_SCHEME))) {
+ std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(TELTO_SCHEME));
+ launch_dialer(request_uri.c_str());
+ return EINA_TRUE;
+ }
+ else if (!strncmp(uri, CALLTO_SCHEME, strlen(CALLTO_SCHEME))) {
+ std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(CALLTO_SCHEME));
+ launch_dialer(request_uri.c_str());
+ return EINA_TRUE;
+ }
+ else if (!strncmp(uri, SMS_SCHEME, strlen(SMS_SCHEME))) {
+ launch_message(uri);
+ return EINA_TRUE;
+ }
+ else if (!strncmp(uri, SMSTO_SCHEME, strlen(SMSTO_SCHEME))) {
+ std::string request_uri = std::string(SMS_SCHEME) + std::string(uri + strlen(SMSTO_SCHEME));
+ launch_message(request_uri.c_str());
+ return EINA_TRUE;
+ }
+
+ return EINA_FALSE;
+}
+
+static Eina_Bool launch_email(const char *uri)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::map<std::string, std::vector<std::string> >uri_parts = parse_uri(uri);
+
+ app_control_h app_control = NULL;
+ if (app_control_create(&app_control) < 0) {
+ BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
+ return EINA_FALSE;
+ }
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
+ BROWSER_LOGE("Fail to app_control_set_operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ auto it = uri_parts.find("url");
+ if (it != uri_parts.end()) {
+ if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_set_uri");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ } else
+ return EINA_FALSE;
+
+ it = uri_parts.find("subject");
+ if (it != uri_parts.end()) {
+ if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ it = uri_parts.find("body");
+ if (it != uri_parts.end()) {
+ if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ it = uri_parts.find("cc");
+ if (it != uri_parts.end()) {
+ size_t size = it->second.size();
+ const char* cc[size];
+ int i = 0;
+ for(auto item : it->second) {
+ cc[i] = item.c_str();
+ ++i;
+ }
+ if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_CC, cc, size) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data_array");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ it = uri_parts.find("bcc");
+ if (it != uri_parts.end()) {
+ size_t size = it->second.size();
+ const char* bcc[size];
+ int i = 0;
+ for(auto item : it->second) {
+ bcc[i] = item.c_str();
+ ++i;
+ }
+ if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_BCC, bcc, size) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data_array");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+ BROWSER_LOGE("Fail to app_control_send_launch_request");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ app_control_destroy(app_control);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool launch_contact(const char *uri, const char *protocol)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::map<std::string, std::vector<std::string> >uri_parts = parse_uri(uri);
+
+ app_control_h app_control = NULL;
+ if (app_control_create(&app_control) < 0) {
+ BROWSER_LOGE("Fail to create app_control handle");
+ return EINA_FALSE;
+ }
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_ADD) < 0) {
+ BROWSER_LOGE("Fail to app_control_set_operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ if (app_control_set_mime(app_control, "application/vnd.tizen.contact") < 0) {
+ BROWSER_LOGE("Fail to app_control_set_mime");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ auto it = uri_parts.find("url");
+ if (it != uri_parts.end()) {
+ if (!strcmp(protocol, "tel")) {
+ if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_PHONE,
+ it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ } else if (strcmp(protocol, "mailto") == 0) {
+ if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_EMAIL,
+ it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ } else
+ BROWSER_LOGE("Not supported protocol!");
+ }
+ if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+ BROWSER_LOGE("Fail to launch app_control operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ app_control_destroy(app_control);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool launch_dialer(const char *uri)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ app_control_h app_control = NULL;
+ if (app_control_create(&app_control) < 0) {
+ BROWSER_LOGE("Fail to create app_control handle");
+ return EINA_FALSE;
+ }
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_DIAL) < 0) {
+ BROWSER_LOGE("Fail to app_control_set_operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ if (app_control_set_uri(app_control, uri) < 0) {
+ BROWSER_LOGE("app_control_set_uri is failed.");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+ BROWSER_LOGE("Fail to launch app_control operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ app_control_destroy(app_control);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool launch_message(const char *uri)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::map<std::string, std::vector<std::string> >uri_parts = parse_uri(uri);
+
+ app_control_h app_control = NULL;
+ if (app_control_create(&app_control) < 0) {
+ BROWSER_LOGE("Fail to create app_control handle");
+ return EINA_FALSE;
+ }
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
+ BROWSER_LOGE("Fail to set app_control operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ auto it = uri_parts.find("url");
+ if (it != uri_parts.end()) {
+ if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_set_uri");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ else
+ return EINA_FALSE;
+
+ it = uri_parts.find("subject");
+ if (it != uri_parts.end()) {
+ if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ it = uri_parts.find("body");
+ if (it != uri_parts.end()) {
+ if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
+ BROWSER_LOGE("Fail to app_control_add_extra_data");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ }
+ if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+ BROWSER_LOGE("Fail to launch app_control operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ app_control_destroy(app_control);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool launch_tizenstore(const char *uri)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ app_control_h app_control = NULL;
+ if (app_control_create(&app_control) < 0) {
+ BROWSER_LOGE("Fail to create app_control handle");
+ return EINA_FALSE;
+ }
+ if (!app_control) {
+ BROWSER_LOGE("Fail to create app_control handle");
+ return EINA_FALSE;
+ }
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
+ BROWSER_LOGE("Fail to set app_control operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ if (app_control_set_uri(app_control, uri) < 0) {
+ BROWSER_LOGE("Fail to set uri operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ if (app_control_set_app_id(app_control, TIZENSTORE_APP_ID) < 0) {
+ BROWSER_LOGE("Fail to app_control_set_app_id");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+ BROWSER_LOGE("Fail to launch app_control operation");
+ app_control_destroy(app_control);
+ return EINA_FALSE;
+ }
+ app_control_destroy(app_control);
+
+ return EINA_TRUE;
+}
+
} /* end of tizen_browser */
#endif // URISCHEMES_H
#include "ImageButton.edc"
-#include "../../../core/Tools/edc/ColorClasses.edc"
+#include "ColorClasses.edc"
#define BUTTON_MIN_WIDTH_INC 50
#define BUTTON_MIN_HEIGHT_INC 50
collections { base_scale: 2.6;
IMAGE_BUTTON("toolbar_input_ic_cancel.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_cancel.png")
-IMAGE_BUTTON("toolbar_input_ic_refresh.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_refresh.png")
-IMAGE_BUTTON("toolbar_input_ic_security.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security.png")
-IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security_off.png")
group { name: "elm/button/base/custom";
data.item: "vector_ux" "default";
type: RECT;
scale: 1;
description { state: "default" 0.0;
- color_class: "uri_bg";
+ color_class: "transparent";
}
description { state: "disabled" 0.0;
- color_class: "elm/widget/button/default/bg-disabled";
+ color_class: "transparent";
}
}
part { name: "effect_spacer";
} else {
set_state(PART:"icon_rect", "icon_only", 0.0);
set_state(PART:"elm.swallow.content", "icon_only", 0.0);
- set_state(PART:"padding_left_top", "icon_only", 0.0);
}
}
}
}
}
}
-}
\ No newline at end of file
+}
text.min: 0 1;
}
}
- part { name: "text_content_padding";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- min: 0 24;
- align: 0.0 0.0;
- rel1 { to: "elm.text"; relative: 0.0 1.0; }
- rel2 { to_x: "right_padding"; to_y: "base"; relative: 0.0 0.0; }
- }
- }
part { name: "elm.swallow.content";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
align: 0.5 0.0;
- rel1 { to: "text_content_padding"; relative: 0.0 1.0; }
+ rel1 { to_x: "base"; to_y: "elm.text"; relative: 0.0 1.0; }
rel2 { to: "bottom_padding"; relative: 1.0 0.0; }
}
}
#include <Elementary.h>
#include <stdexcept>
#include <app.h>
+#include <app_control_internal.h>
#include <ewk_main_internal.h>
#include <ewk_context.h>
#include <ewk_context_internal.h>
"allow-file-access-from-files",
};
+std::vector<char*> browser_argv;
+
///\note Odroid platform modification
const std::string DEFAULT_URL = "";
const std::string DEFAULT_CALLER = "org.tizen.homescreen-efl";
const int WEB_INSPECTOR_PORT = 9222;
-using BrowserDataPtr = std::shared_ptr<tizen_browser::base_ui::AbstractMainWindow<Evas_Object>>;
+using namespace tizen_browser::base_ui;
+
+using BrowserDataPtr = std::shared_ptr<AbstractMainWindow<Evas_Object>>;
#if WEB_INSPECTOR
static void start_webInspectorServer()
static void set_arguments(char **argv)
{
- std::vector<char*> browser_argv;
+ //std::vector<char*> browser_argv;
browser_argv.push_back(argv[0]);
for (auto arg: engineCommandLineFlags)
browser_argv.push_back(const_cast<char*>(arg));
- ewk_set_arguments(browser_argv.size(), browser_argv.data());
+ //ewk_set_arguments(browser_argv.size(), browser_argv.data());
}
static bool app_create(void* app_data)
tizen_browser::base_ui::AbstractMainWindow<Evas_Object>,
tizen_browser::core::AbstractService
>
- (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleui"));
+ (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleui", "libSimpleUI.so"));
elm_app_base_scale_set(boost::any_cast<double>(tizen_browser::config::Config::getInstance().get("scale")));
return true;
}
(*bd)->destroyUI();
}
-static void app_control(app_control_h app_control, void* app_data){
+static void app_control(app_control_h app_control, void* app_data)
+{
/* to test this functionality please use aul_test command on target:
* $aul_test org.tizen.browser __APP_SVC_URI__ <http://full.url.com/>
*/
- BROWSER_LOGD("%s\n", __func__);
+ BROWSER_LOGD("%s app_control_h=%p\n", __func__,app_control);
char *operation = NULL;
char *request_uri = NULL;
char *request_mime_type = NULL;
char *request_caller = NULL;
char *search_keyword = NULL;
+ char *instance_id = NULL;
+ char *push_data = NULL;
if (app_control_get_operation(app_control, &operation) != APP_CONTROL_ERROR_NONE) {
BROWSER_LOGD("get app_control operation failed");
std::string uri = request_uri != NULL ? std::string(request_uri) : DEFAULT_URL;
std::string caller = request_caller != NULL ? std::string(request_caller) : DEFAULT_CALLER;
+ std::string inst_id;
+ std::string pushData;
if((operation && !strcmp(operation, APP_CONTROL_OPERATION_VIEW)) && (request_uri != NULL)) {
if (request_uri) {
}
}
+ if (app_control_get_instance_id(app_control, &instance_id) == APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("get instance id %s", instance_id);
+ if (instance_id) {
+ inst_id=std::string(instance_id);
+ free(instance_id);
+ }
+ }
+
+ if (app_control_get_extra_data(app_control, "push_data", &push_data) == APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("get push data %s", push_data);
+ if (push_data) {
+ pushData=std::string(push_data);
+ free(push_data);
+ }
+ }
+
if ((operation && !strcmp(operation, APP_CONTROL_OPERATION_SEARCH )) &&
((app_control_get_extra_data(app_control, "http://tizen.org/appcontrol/data/keyword", &search_keyword) == APP_CONTROL_ERROR_NONE) ||
(app_control_get_extra_data(app_control, APP_CONTROL_DATA_TEXT, &search_keyword) == APP_CONTROL_ERROR_NONE))) {
free(request_caller);
free(operation);
+ if(inst_id.empty()) {
+ inst_id="browser0";
+ }
+ std::string pwa_id="--browser-instance-id="+inst_id;
+ BROWSER_LOGD("+++Set Instance-ID=%s",pwa_id.c_str());
+ browser_argv.push_back(const_cast<char*>(pwa_id.c_str()));
+ ewk_set_arguments(browser_argv.size(), browser_argv.data());
+
+ PushPWAData<std::string> pwaData(inst_id, pushData);
auto bd = static_cast<BrowserDataPtr*>(app_data);
+ (*bd)->setHandle(app_control);
+ if (pwaData.dataExist())
+ (*bd)->setPushPWAData(pwaData);
(*bd)->exec(uri, caller, oper);
evas_object_show((*bd)->getMainWindow().get());
elm_win_activate((*bd)->getMainWindow().get());
}
#if PROFILE_MOBILE
-static void app_language_changed(app_event_info*, void *)
+static void app_language_changed(app_event_info*, void* app_data)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
char *language;
// Set the language in elementary
elm_language_set(language);
free(language);
+
+ auto bd = static_cast<BrowserDataPtr*>(app_data);
+ (*bd)->languageChanged();
} else {
BROWSER_LOGD("[%s:%d] Warning, failed to set new language!", __PRETTY_FUNCTION__, __LINE__);
}
#if PROFILE_MOBILE
app_event_handler_h lang_changed_handler;
- ui_app_add_event_handler(&lang_changed_handler, APP_EVENT_LANGUAGE_CHANGED, app_language_changed, NULL);
+ ui_app_add_event_handler(&lang_changed_handler, APP_EVENT_LANGUAGE_CHANGED, app_language_changed, &bd);
#endif
#if WEB_INSPECTOR
</app-control>
<app-control>
<operation name="http://tizen.org/appcontrol/operation/view" />
- <mime name="application/x-shockwave-flash" />
- </app-control>
- <app-control>
- <operation name="http://tizen.org/appcontrol/operation/view" />
- <mime name="image/svg+xml" />
</app-control>
<app-control>
<operation name="http://tizen.org/appcontrol/operation/view" />
<privilege>http://tizen.org/privilege/internet</privilege>
<privilege>http://tizen.org/privilege/appdir.shareddata</privilege>
</privileges>
-</manifest>
\ No newline at end of file
+</manifest>
Name: org.tizen.browser-profile_mobile
Summary: Tizen TV Open Browser
-Version: 2.0.0
+Version: 3.2.0
Release: 0
Provides: org.tizen.browser = %{version}-%{release}
Conflicts: org.tizen.browser-profile_common
BuildRequires: pkgconfig(libsoup-2.4)
BuildRequires: browser-provider-devel
BuildRequires: pkgconfig(efl-extension)
+BuildRequires: pkgconfig(push)
BuildRequires: cmake
BuildRequires: gettext
BuildRequires: pkgconfig(capi-content-media-content)
BuildRequires: pkgconfig(shortcut)
+#This is the main switch for The Dummy Button - ON/OFF
+%define _dummy_button "ON"
+
%define BUILD_UT %{?build_ut:ON}%{!?build_ut:OFF}
%if %BUILD_UT == "ON"
BuildRequires: boost-test
-DBUILD_UT=%{BUILD_UT} \
-DCOVERAGE_STATS=%{COVERAGE_STATS} \
-DPROFILE=mobile \
+ -DDUMMY_BUTTON=%{_dummy_button} \
-DTZ_SYS_RO_PACKAGES=%{TZ_SYS_RO_PACKAGES} \
-DTZ_SYS_RO_ICONS=%{TZ_SYS_RO_ICONS} \
%if "%{?_with_wayland}" == "1"
%files
%manifest org.tizen.browser.manifest
%{_icondir}/org.tizen.browser.png
+%{_icondir}/portrait.png
+%{_icondir}/landscape.png
%{_manifestdir}/%{alias}.xml
%defattr(-,root,root,-)
%{_appdir}/bin/browser
msgid "IDS_BR_BUTTON2_DONE"
msgstr "تم"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "أدخل كلمة المرور مرة أخرى لتأكيدها."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "إنشاء كلمة مرور"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "عدم استخدام كلمة المرور"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "لحماية بيانات الوضع السري، قم بإنشاء كلمة مرور. إذا كنت تستخدم الوضع السري بدون إنشاء كلمة مرور، فلن تتمكّن من منع الآخرين من عرض متصفحك ومحفوظات البحث والإشارات المرجعية والصفحات المحفوظة."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "ستظهر الإشارات المرجعية هنا بعد إضافتها."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "اضبط جهازك لعرض إطار منبثق مع خيار لحفظ اسم المستخدم الخاص بك وكلمة مرورك عندما تُدخل بيانات اعتماد المستخدم لمواقع الويب."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "إدارة ملف التعريف لملء نماذج ويب."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "أضف للعلامات"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "تأكيد كلمة المرور"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "ليس لديك أي علامة تبويب مفتوحة"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "انقر فوق ”علامة تبويب جديدة“ لفتح علامة تبويب جديدة وبدء استكشاف الإنترنت."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Hazırdır"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Təsdiq etmək üçün parolu yenidən daxil et."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Parol yarat"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Paroldan istif etmə"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Gizli rejimin məlumatını qorumaq üçün parol yaradın. Parol yaratmadan Gizli rejimdən istifadə edirsinizsə, başqalarının brauzerinizi və axtarış tarixçənizi, əlfəcinləri və saxlanmış səhifələri görməsinin qarşısını ala bilməyəcəksiniz."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Əlfəcinləri əlavə etdikdən sonra onlar burada görünəcək."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Cihazınızı elə qurun ki, vebsaytlar üçün istifadəçi məlumatlarını daxil edən zaman istifadəçi adınız və parolunuzu saxlamaq seçimi ilə ani mesajı göstərsin."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Avto doldurma profilinizi idarə edin."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Nişanlara əlavə et"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Parolu təsdiqlə"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Açıq tab-vərəqəniz yoxdur"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Yeni tab-vərəqə açmaq üçün Yeni tab-vərəqə vurun və interneti tədqiq etməyə başlayın."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Готово"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Въведете отново паролата, за да я потвърдите."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Създаване на парола"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Да не се изп. парола"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "За да защитите данните на Таен режим, създайте парола. Ако използвате Таен режим, без да създадете парола, няма да можете да се предпазите от това други да виждат браузъра ви и хронологията на търсене, показалците и записаните страници."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "След като добавите показалци, те ще се покажат тук."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Задайте устройството си да показва изскачащи прозорци с опцията да запише вашето потребителско име и парола, когато въвеждате потребителските идентификационни данни за уеб сайтове."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Управлявайте профила си за автоматично попълване."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Добави към маркери"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Потвърждаване на паролата"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Нямате никакви отворени раздели"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Докоснете иконата за нов раздел, за да отворите нов раздел и да започнете да преглеждате в интернет."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Finalitzat"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Torni a introduir la contrasenya per confirmar-la."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contrasenya"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "No usar contrasenya"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Per protegir les dades del mode Secret, creï una contrasenya. Si utilitza el mode Secret sense crear una contrasenya, no podrà impedir que els altres usuaris vegin el seu navegador i l'historial de cerques, els marcadors i les pàgines desades."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Un cop afegits els preferits, es mostraran aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configuri el dispositiu perquè mostri una finestra emergent amb l'opció de desar el nom d'usuari i la contrasenya quan introdueixi les credencials d'usuari dels llocs web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gestionar l'Emplenament automàtic del perfil."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Afegir a Preferits"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contrasenya"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "No té cap pestanya oberta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toqui Pestanya nova per obrir una pestanya nova i començar a explorar Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Hotovo"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Zadejte znovu heslo a potvrďte ho."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Vytvořit heslo"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nepoužívat heslo"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Chcete-li chránit data Režimu utajení, vytvořte heslo. Když použijete Režim utajení bez vytvoření hesla, nebudete moci ostatním uživatelům zabránit, aby se podívali na váš prohlížeč a historii hledání, záložky a uložené stránky."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Až přidáte záložky, zobrazí se zde."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Nastaví zařízení tak, aby se při zadávání přihlašovacích údajů k webovým stránkám zobrazilo okno s možností uložit uživatelské jméno a heslo."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Umožňuje spravovat Profil automaticky vyplňovaných položek."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Přidat záložku"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrďte heslo"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nemáte žádné otevřené karty"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Klepnutím na tlačítko Nová karta otevřete novou kartu a můžete začít procházet Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Udført"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Indtast din adgangskode igen for at bekræfte den."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Opret adgangskode"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Brug ikke adg.-kode"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Opret en adgangskode for at beskytte dine Hemmelig tilstand-data. Hvis du bruger Hemmelig tilstand uden at oprette en adgangskode, kan du ikke forhindre andre i at se din browser- og søgeoversigt, dine bogmærker og dine gemte sider."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Når du har tilføjet bogmærker, vil de blive vist her."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Indstil din enhed til at vise et pop op-vindue med mulighed for at gemme dit brugernavn og din adgangskode, når du indtaster dine brugeroplysninger til websteder."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administrer din automatisk udfyldte profil."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Føj til Bogmærker"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bekræft adgangskoden"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Du har ingen åbne faner"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tryk på Ny fane for at åbne en ny fane og begynde at surfe på internettet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "OK"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Geben Sie Ihr Passwort zur Bestätigung erneut ein."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Passwort erstellen"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Passwort nicht verwenden"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Erstellen Sie ein Passwort, um die Daten Ihres geheimen Modus zu schützen. Wenn Sie den geheimen Modus verwenden, ohne ein Passwort zu erstellen, können andere Personen Ihren Browser- und Suchverlauf, Ihre Lesezeichen und gespeicherten Seiten einsehen."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Nachdem Sie Lesezeichen hinzugefügt haben, werden diese hier angezeigt."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Stellen Sie Ihr Gerät so ein, dass ein Pop-up mit der Option zum Speichern Ihres Benutzernamens und Passworts angezeigt wird, wenn Sie Anmeldeinformationen für Webseiten eingeben."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Automatisch ausgefülltes Profil verwalten."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Zu Favoriten hinzufügen"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bestätigen des Passworts"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Sie haben keine offenen Registerkarten."
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tippen Sie auf „Neuer Tab“, um eine neue Registerkarte zu öffnen und im Internet zu surfen."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "OΚ"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Καταχωρήστε ξανά τον κωδικό σας πρόσβασης για επιβεβαίωση."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Δημιουργία κωδ. πρόσβασης"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Χωρίς χρήση κωδικού"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Δημιουργήστε έναν κωδικό πρόσβασης, για να προστατεύσετε τα δεδομένα της Μυστικής λειτουργίας. Αν χρησιμοποιήσετε τη Μυστική λειτουργία χωρίς να δημιουργήσετε κωδικό πρόσβασης, δεν θα μπορέσετε να εμποδίσετε την προβολή του προγράμματος περιήγησης, του ιστορικού αναζήτησης, των σελιδοδεικτών και των αποθηκευμένων σελίδων από άλλους χρήστες."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Αφού προσθέσετε σελιδοδείκτες, αυτοί θα εμφανίζονται εδώ."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ρυθμίστε τη συσκευή σας ώστε να εμφανίζει ένα αναδυόμενο μήνυμα με την επιλογή για αποθήκευση του ονόματος χρήστη και του κωδικού πρόσβασης όταν καταχωρίζετε διαπιστευτήρια χρήστη σε τοποθεσίες web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Διαχείριση του προφίλ αυτόματης συμπλήρωσης."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Προσθήκη στους σελιδ/τες"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Επιβεβ. κωδικού πρόσβασης"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Δεν έχετε ανοιχτές καρτέλες"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Πατήστε «Νέα καρτέλα» για να ανοίξετε μια νέα καρτέλα και να ξεκινήσετε την εξερεύνηση στο Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Done"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Enter your password again to confirm it."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Create password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Do not use password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "To protect your Secret mode data, create a password. If you use Secret mode without creating a password, you won't be able to prevent others from viewing your browser and search history, bookmarks, and saved pages."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "After you add bookmarks, they will be shown here."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Set your device to show a pop-up with the option to save your username and password when you enter user credentials for websites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Manage your Auto fill profile."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Add to Bookmarks"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirm password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "You don't have any open tabs"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tap New tab to open a new tab and start exploring the internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Done"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Enter your password again to confirm it."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Create password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Do not use password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "To protect your Secret mode data, create a password. If you use Secret mode without creating a password, you won't be able to prevent others from viewing your browser and search history, bookmarks and saved pages."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "After you add bookmarks, they will be shown here."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Set your device to show a pop-up with the option to save your username and password when you enter user credentials for websites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Manage your Auto fill profile."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Add to Bookmarks"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirm password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "You don't have any open tabs"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tap New tab to open a new tab and start exploring the internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Done"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Enter your password again to confirm it."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Create password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Do not use password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "To protect your Secret mode data, create a password. If you use Secret mode without creating a password, you won't be able to prevent others from viewing your browser and search history, bookmarks, and saved pages."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "After you add bookmarks, they will be shown here."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Set your device to show a pop-up with the option to save your username and password when you enter user credentials for websites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Manage your Auto fill profile."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Add to Bookmarks"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirm password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "You don't have any open tabs"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tap New tab to open a new tab and start exploring the internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Guardar"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduzca la contraseña de nuevo para confirmarla."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contraseña"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "No usar contraseña"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Cree una contraseña para proteger sus datos del modo Secreto. Si usa el modo Secreto sin una contraseña, no podrá impedir que otros puedan ver su historial de búsquedas y de navegación, los marcadores y las páginas guardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Después de añadir marcadores, se mostrarán aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configura el dispositivo para que muestre una ventana emergente con la opción de guardar su nombre de usuario y contraseña cuando introduzca las credenciales de usuario en sitios web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administrar su Perfil de Autocompletar."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Añadir a Marcadores"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contraseña"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "No tiene ninguna pestaña abierta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pulse Nueva pestaña para abrir una pestaña nueva y empezar a navegar por Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Realizado"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduzca de nuevo su contraseña para confirmarla."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contraseña"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "No usar contraseña"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Cree una contraseña para proteger los datos del modo Secreto. Si usa el modo Secreto sin crear una contraseña, no podrá impedir que otros vean su historial de búsqueda y del navegador, sus favoritos y sus páginas guardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Después de añadir favoritos, estos se mostrarán aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Definir el dispositivo para que muestre una ventana emergente con la opción de guardar el nombre de usuario y la contraseña cuando se introducen credenciales de usuario de sitios web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administre su perfil de llenado automático"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Añadir a Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contraseña"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "No tiene ventanas abiertas"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pulse Nueva ventana para abrir una ventana nueva y comenzar a navegar en Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Valmis"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Kinnitamiseks sisestage oma parool uuesti."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Parooli loomine"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ära kasuta parooli"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Looge parool, et kaitsta oma salarežiimi andmeid. Kui kasutate salarežiimi ilma paroolita, saavad teised vaadata teie brauseri ja otsingute ajalugu, järjehoidjaid ja salvestatud lehti."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Järjehoidjad kuvatakse siin pärast nende lisamist."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Saate määrata, et teie seade kuvaks hüpikut koos valikuga salvestada oma kasutajanimi ja parool, kui sisestate veebilehtedel kasutajavolitusi."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Saate hallata oma automaatse täitmise profiili."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Lisa järjehoidjatesse"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Parooli kinnitamine"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Teil pole ühtki avatud vahekaarti"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toksake valikut Uus vahekaart, et avada uus vahekaart ja hakata kasutama internetti."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Egina"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Berresteko, idatzi pasahitza berriz."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Sortu pasahitza"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ez erab. pasahitza"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Modu sekretuko datuak babesteko, sortu pasahitza. Modu sekretua pasahitzik sortu gabe erabiltzen baduzu, ezingo diezu eragotzi besteei zure arakatzailea, bilaketa historia, laster markak eta gordetako orriak ikustea."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Laster markak gehitu ondoren, hemen erakutsiko dira."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ezarri gailua webguneetako erabiltzaile kredentzialak idaztean erabiltzaile izena eta pasahitza gordetzeko aukera leiho gainerakor batean erakuts dezan."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Kudeatu automatikoki betetzeko profila."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Laster-marketara gehitu"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Berretsi pasahitza"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Ez duzu fitxarik irekita"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Ukitu Berria beste fitxa bat irekitzeko eta Internet arakatzeko."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Valmis"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Vahvista salasanasi antamalla se uudelleen."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Luo salasana"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Älä käytä salasanaa"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Luo salasana salaisen tilan tietojen suojausta varten. Jos käytät salaista tilaa salasanaa luomatta, et pysty estämään muita tarkastelemasta selaintasi sekä hakuhistoriaasi, kirjanmerkkejä ja tallennettuja sivuja."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Kun olet lisännyt kirjanmerkkejä, ne näytetään täällä."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Aseta laite näyttämään ponnahdusikkuna ja salli käyttäjänimen ja salasanan tallennus, kun annat sivustojen tunnistetiedot."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Hallitse automaattisesti täytettyä profiilia."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Lisää kirjanmerkkeihin"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Vahvista salasana"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Avoimia välilehtiä ei ole"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Voit avata uuden välilehden ja aloittaa verkossa etsimisen napauttamalla Uusi välilehti."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Terminé"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Entrez de nouveau votre mot de passe pour le confirmer."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Créer un mot de passe"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne pas utiliser MDP"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Pour protéger vos données du mode Secret, créez un mot de passe. Si vous utilisez le mode Secret sans créer de mot de passe, vous ne pourrez empêcher personne d'afficher votre historique de navigation et de recherche, vos favoris et vos pages enregistrées."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Les favoris ajoutés seront affichés ici."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configurez votre appareil de façon à afficher une fenêtre contextuelle vous permettant d'enregistrer votre nom d'utilisateur et votre mot de passe lorsque vous saisissez ces informations de connexion sur des sites Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gérez le profil de vos entrées automatiques."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Ajouter aux favoris"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmation mot de passe"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Vous n'avez aucun onglet ouvert"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Appuyez sur l'onglet Nouveau pour ouvrir un nouvel onglet et commencer à naviguer sur Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Terminé"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Entrez de nouveau votre mot de passe pour le confirmer."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Créer un mot de passe"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne pas utiliser MDP"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Pour protéger vos données du mode Secret, créez un mot de passe. Si vous utilisez le mode Secret sans créer de mot de passe, vous ne pourrez empêcher personne d'afficher votre historique de navigation et de recherche, vos favoris et vos pages enregistrées."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Les favoris ajoutés seront affichés ici."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configurez votre appareil de façon à afficher une fenêtre contextuelle vous permettant d'enregistrer votre nom d'utilisateur et votre mot de passe lorsque vous saisissez ces informations de connexion sur des sites Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gérez le profil de vos entrées automatiques."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Ajouter aux signets"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmation mot de passe"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Vous n'avez aucun onglet ouvert"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Touchez l'onglet Nouveau pour ouvrir un nouvel onglet et commencer à naviguer sur Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Déanta"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Iontráil do phasfhocal arís lena dheimhniú."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Cruthaigh pasfhocal"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ná húsáid pasfhocal"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Le do chuid sonraí i Mód rúnda a chosaint, cruthaigh pasfhocal. Má úsáideann tú Mód rúnda gan pasfhocal a chruthú, ní bheidh tú in ann cosc a chur ar dhaoine eile amharc ar do stair bhrabhsálaí agus chuardaigh, leabharmharcanna ná leathanaigh shábháilte."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Tar éis duit leabharmharcanna a chur leis, taispeánfar anseo iad."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Socraigh do ghléas le mír aníos a thaispeáint ar a mbeidh rogha le d'ainm úsáideora agus le do phasfhocal a shábháil nuair a iontrálann tú faisnéis aitheantais úsáideora ar láithreáin ghréasáin."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Bainistigh do Phróifíl uathlíonta."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Cuir le Leabharmharcanna"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Deimhnigh an pasfhocal"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Níl aon tháib ar oscailt agat"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tapáil Táb nua le táb nua a oscailt agus le tosú ar an Idirlíon a thaiscéaladh."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Feito"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Volve inserir o contrasinal para confirmalo."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contrasinal"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Non usar contras."
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Para protexer os datos do modo Secreto, crea un contrasinal. Se usas o modo Secreto sen crear un contrasinal, non poderás evitar que outros usuarios visualicen o teu navegador nin o historial de buscas, os favoritos nin as páxinas gardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Despois de engadir favoritos, estes amosaranse aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Define o teu dispositivo para mostrar unha ventá emerxente coa opción de gardar o teu nome de usuario e contrasinal cando introduces as credenciais de usuario dos sitios web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Xestiona o teu perfil de encher automaticamente."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Engadir a Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contrasinal"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Non tes ningunha pestana aberta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toca Pestana nova para abrir unha pestana nova e comezar a explorar Internet."
+
msgstr "ब्राउजिंग इतिहास से 1 मद हटाई गयी।"
msgid "IDS_BR_TMBODY_NOTIFICATIONS"
-msgstr "à¤\85धिसà¥\82à¤\9aनाà¤\8fà¤\81"
+msgstr "सूचनाएँ"
msgid "IDS_BR_TAB_MOST_VISITED"
msgstr "अधिकतम दौरा किया"
msgstr "जावास्क्रिप्ट चलाएँ"
msgid "IDS_BR_MBODY_RESET_SETTINGS"
-msgstr "रà¥\80सà¥\87à¤\9f सà¥\87à¤\9fिà¤\82à¤\97à¥\8dâ\80\8dस"
+msgstr "सà¥\87à¤\9fिà¤\82à¤\97à¥\8dâ\80\8dस रà¥\80सà¥\87à¤\9f à¤\95रà¥\87à¤\82"
msgid "IDS_BR_MBODY_PRELOAD_WEBPAGES"
msgstr "वेबपेजो को प्रीलोड करें"
msgstr "डिफॉल्ट में रीसेट करें"
msgid "IDS_BR_BODY_RESET_SETTINGS"
-msgstr "रà¥\80सà¥\87à¤\9f सà¥\87à¤\9fिà¤\82à¤\97à¥\8dस"
+msgstr "सà¥\87à¤\9fिà¤\82à¤\97à¥\8dâ\80\8dस रà¥\80सà¥\87à¤\9f à¤\95रà¥\87à¤\82"
msgid "IDS_BR_BODY_RESET_ALL_SETTINGS_TO_THEIR_DEFAULTS"
msgstr "सभी सेटिंग्स को उनके डिफॉल्ट पर रीसेट करें।"
msgid "IDS_BR_BUTTON2_DONE"
msgstr "पूर्ण"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "अपने पासवर्ड की पुष्टि करने के लिए इसे फिर से प्रविष्ट करें।"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "पासवर्ड बनाएँ"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "पासवर्ड उपयोग न करे"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "अपना गुप्त मोड डाटा सुरक्षित करने के लिए, एक पासवर्ड बनाएँ। यदि आप पासवर्ड बनाए बिना गुप्त मोड का उपयोग करते हैं, तो आप अन्य लोगों को अपना ब्राउजर और खोज इतिहास, बुकमार्क्स और सुरक्षित किए गए पेजेस देखने से रोकने में समर्थ नहीं होंगे।"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "आपके द्वारा बुकमार्क्स जोड़ने के बाद, वे यहां दिखाई देंगे।"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "आपके द्वारा वेबसाइट्स के लिए उपयोगकर्ता क्रेडेंशियल्स प्रविष्ट करने पर अपने डिवाइस को उपयोगकर्ता नाम और पासवर्ड सुरक्षित करने के विकल्प वाला पॉप-अप दिखाने के लिए सेट करें।"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "अपनी स्वतः भरण प्रोफाइल प्रबंधित करें।"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "बुकमार्क्स में जोड़ें"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "पासवर्ड की पुष्टि करें"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "आपके पास कोई खुले टैब्स नहीं हैं"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "एक नया टैब खोलने और इंटरनेट एक्सप्लोर करना प्रारंभ करने के लिए “नया टैब” पर टैप करें।"
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "OK"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ponovno unesite lozinku da biste je potvrdili."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Kreiraj lozinku"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne koristi lozinku"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Da biste zaštitili podatke Tajnog načina, stvorite lozinku. Ako upotrebljavate Tajni način bez stvaranja lozinke, nećete moći spriječiti da drugi vide vašu povijest preglednika i povijest pretraživanja, oznake i spremljene stranice."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Oznake će se prikazati ovdje nakon što ih dodate."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Postavite uređaj da bi vam prikazao skočni prozor s opcijom za spremanje korisničkog imena i lozinke kada unesete korisničke podatke za prijavu na web-mjesta."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Upravljajte automatski ispunjenim profilom."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj u Oznake"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrda lozinke"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nemate otvorene kartice"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Dodirnite Nova kartica za otvaranje nove kartice i počnite pregledavati internet."
+
msgstr "Osztóvonal fogópontja"
msgid "IDS_BR_BODY_SIGN_IN_TO_YOUR_SAMSUNG_ACCOUNT_TO_ACCESS_THE_BOOKMARKS_AND_TABS_ON_YOUR_OTHER_DEVICES"
-msgstr "Samsung-fiókjába bejelentkezve hozzáférhet egyéb eszközeiről a könyvjelzőkhöz és lapokhoz."
+msgstr "Samsung accountjába bejelentkezve hozzáférhet egyéb eszközeiről a könyvjelzőkhöz és lapokhoz."
msgid "IDS_BR_BODY_SHOW_OVERVIEW_OF_NEWLY_OPENED_PAGES"
msgstr "Újonnan megnyitott oldalak áttekintésének megjelenítése"
msgstr "Memóriahiba"
msgid "IDS_BR_POP_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
-msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
+msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
msgid "IDS_BR_POP_BROWSERERRORREQUESTTIMEOUT"
msgstr "Kérés időtúllépése."
msgstr "Nem található alkalmazás a fájl megnyitásához."
msgid "IDS_BR_BODY_UNABLE_TO_CONNECT_TO_MOBILE_NETWORKS_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
-msgstr "Repülő üzemmódban nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi hálózathoz, vagy a Beállítások pont megérintése után kapcsolja ki a Repülő üzemmódot, majd próbálja újra."
+msgstr "Repülő üzemmódban nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi-hálózathoz, vagy a Beállítások pont megérintése után kapcsolja ki a Repülő üzemmódot, majd próbálja újra."
msgid "IDS_BR_BODY_THIS_CERTIFICATE_IS_FROM_A_TRUSTED_AUTHORITY"
msgstr "A tanúsítvány megbízható hitelesítésszolgáltatótól származik."
msgstr "Nincs találat"
msgid "IDS_BR_BODY_MOBILE_DATA_IS_TURNED_OFF_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_OR_TAP_SETTINGS_TO_TURN_ON_MOBILE_DATA_AND_THEN_TRY_AGAIN"
-msgstr "A mobil internetkapcsolat ki van kapcsolva. Kapcsolódjon Wi-Fi hálózathoz, vagy a Beállítások pont megérintése után kapcsolja be a mobil internetkapcsolatot, és próbálja újra."
+msgstr "A mobilinternet-kapcsolat ki van kapcsolva. Kapcsolódjon Wi-Fi-hálózathoz, vagy a Beállítások pont megérintése után kapcsolja be a mobilinternet-kapcsolatot, és próbálja újra."
msgid "IDS_BR_BODY_FIT_TO_WIDTH"
msgstr "Szélességhez"
msgstr "Vissza"
msgid "IDS_BR_POP_WI_FI_CONNECTION_REQUIRED_CONNECT_TO_WI_FI_NETWORK_AND_TRY_AGAIN"
-msgstr "Wi-Fi kapcsolat szükséges. Kapcsolódjon a Wi-Fi hálózathoz, és próbálja újra"
+msgstr "Wi-Fi-kapcsolat szükséges. Kapcsolódjon a Wi-Fi-hálózathoz, és próbálja újra"
msgid "IDS_BR_POP_URL_NOT_FOUND"
msgstr "URL nem található."
msgstr "Soha"
msgid "IDS_BR_POP_MOBILE_DATA_IS_DISABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_ENABLE_MOBILE_DATA_AND_TRY_AGAIN"
-msgstr "A mobil internetkapcsolat le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze a mobil internetkapcsolatot, és próbálja újra"
+msgstr "A mobilinternet-kapcsolat le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze a mobilinternet-kapcsolatot, és próbálja újra"
msgid "IDS_BR_POP_LOADING_PLEASE_WAIT_ING"
msgstr "Betöltés. Kis türelmet..."
msgstr "Adja meg a mappa nevét."
msgid "IDS_BR_BODY_ENTER_EMAIL_ADDRESS"
-msgstr "Adja meg az e-mail címet."
+msgstr "Adja meg az e-mail-címet."
msgid "IDS_BR_BODY_EMAIL_ADDRESS"
-msgstr "E-mail cím"
+msgstr "E-mail-cím"
msgid "IDS_BR_BODY_DOWNLOADING_ING"
msgstr "Letöltés..."
msgstr "Nem támogatott médiatípus"
msgid "IDS_BR_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORKS_WHILE_FLIGHT_MODE_IS_ENABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN"
-msgstr "Amíg a Repülő üzemmód be van kapcsolva, nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi hálózathoz, vagy tiltsa le a Repülő üzemmódot, és próbálja újra"
+msgstr "Amíg a Repülő üzemmód be van kapcsolva, nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi-hálózathoz, vagy tiltsa le a Repülő üzemmódot, és próbálja újra"
msgid "IDS_BR_POP_INSTALL_SUCCESS"
msgstr "A telepítés befejeződött."
msgstr "Törlés..."
msgid "IDS_BR_POP_DATA_ROAMING_IS_DISABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
-msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra"
+msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra"
msgid "IDS_BR_OPT_SHARE_VIA"
msgstr "Megosztás"
msgstr "Letöltések"
msgid "IDS_BR_BODY_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
-msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
+msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
msgid "IDS_BR_POP_DOWNLOAD_CANCELLED"
msgstr "Letöltés megszakítva."
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Kész"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Adja meg még egyszer a jelszót."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Jelszó létrehozása"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nem használ jelszót"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Hozzon létre jelszót a Titkos mód védelméhez. A Titkos mód jelszó nélkül használatával nem tudja megakadályozni, hogy mások megtekintsék a böngészési és a keresési előzményeket, a könyvjelzőket és a mentett oldalakat."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Itt jelennek majd meg a hozzáadott könyvjelzők."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Beállíthatja, hogy az eszköz a felhasználónév és a jelszó mentését felajánló előugró ablakot jelenítsen meg, amikor a felhasználó megadja a hitelesítő adatait egy webhelyen."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Kezelheti az automatikus kitöltési profilját."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Könyvjelző mentése"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Jelszó újból"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nincsenek megnyitott lapok"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Érintse meg az Új lap lehetőséget egy új lap nyitásához és a böngészés megkezdéséhez."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Արված է"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Այն հաստատելու համար նորից մուտքագրեք գաղտնաբառը:"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Ստեղծել գաղտնաբառ"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Չօգտգրծել գաղտնաբառ"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Ձեր Գաղտնի ռեժիմի տվյալները պաշտպանելու համար ստեղծեք գաղտնաբառ: Եթե օգտվեք Գաղտնի ռեժիմից՝ առանց գաղտնաբառ ստեղծելու, ապա չեք կարողանա կանխել Ձեր զննարկչի կամ որոնումների պատմության, էջանիշերի և պահպանված էջերի դիտումն այլոց կողմից:"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Ավելացվելուց հետո, էջանիշները կցուցադրվեն այստեղ:"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Սարքը նախադրեք այնպես, որ կայքերի համար նույնականացման տվյալներ մուտքագրելիս ցուցադրվի ելնող պատուհան Ձեր օգտանունն ու գաղտնաբառը պահպանելու ընտրանքով:"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Կառավարեք Ձեր Ինքնալրացվող պրոֆիլը:"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Ավելացնել Էջանիշերում"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Հաստատել գաղտնաբառը"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Դուք բաց ներդիրներ չունեք"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Թակեք «Նոր ներդիր»՝ նոր ներդիր բացելու և ինտերնետը հետազոտելու համար:"
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Lokið"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Sláðu lykilorðið aftur inn til að staðfesta það."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Búa til lykilorð"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ekki nota lykilorð"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Búðu til lykilorð til að vernda leyndarstillingargögnin þín. Ef þú notar leyndarstillingu án þess að búa til lykilorð geturðu ekki hindrað aðra í að skoða vafrann þinn og leitarferil, bókamerki og vistaðar síður."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Bókamerki birtast hér eftir að þeim er bætt við."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Láta tækið opna sprettiglugga þar sem hægt er að vista notandanafn og lykilorð þegar þú slærð inn notandaupplýsingar fyrir vefsvæði."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Vinna með útfyllingarsnið."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Bæta við Bókamerki"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Staðfesta lykilorð"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Þú ert ekki með neina opna flipa"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pikkaðu á „Nýr flipi“ til að opna nýjan flipa og vafra um á netinu."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Fatto"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Inserite nuovamente la password per confermarla."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crea password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Non usare password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Per proteggere i dati della Modalità segreta, create una password. Se utilizzate la Modalità segreta senza creare una password, non potrete impedire agli altri utenti di visualizzare la cronologia del browser e di ricerca, i preferiti e le pagine salvate."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "I preferiti aggiunti saranno visualizzati qui."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Con questa impostazione viene visualizzato un popup che consente di salvare nome utente e password quando inserite le credenziali utente nei siti Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gestite il profilo di riempimento automatico."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Aggiungi a Preferiti"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Conferma password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nessuna scheda aperta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toccate Nuova scheda per aprire una nuova scheda e iniziare a navigare su Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "完了"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "確認のため、再度パスワードを入力してください。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "パスワードを作成"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "パスワードを使用しない"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "シークレットモードのデータを保護するには、パスワードを作成してください。パスワードを作成せずにシークレットモードを使用すると、閲覧履歴、検索履歴、ブックマーク、および保存したページを他者に見られることを防止できません。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "ブックマークを追加すると、ここに表示されます。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Webサイトのユーザー認証情報を入力するときに、ユーザー名とパスワードを保存するオプションを含むポップアップを表示するように端末を設定します。"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "自動入力プロフィールを管理します。"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "ブックマークに追加"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "パスワードを確認"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "開いているタブがありません"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "新しいタブを開いてインターネットへのアクセスを開始するには、[新規タブ]をタップしてください。"
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "შესრულდა"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "დასადასტურებლად ისევ შეიყვანეთ პაროლი."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "შექმენით პაროლი"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "არ გამოიყენო პაროლი"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "თქვენი „საიდუმლო რეჟიმის“ მონაცემების დასაცავად, შექმენით პაროლი. თუ „საიდუმლო რეჟიმს“ გამოიყენებთ პაროლის შექმნის გარეშე, სხვებს ვერ აუკრძალავთ თქვენი ბრაუზერისა და ძიების ისტორიის, სანიშნეებისა და შენახული გვერდების ნახვას."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "სანიშნეების დამატების შემდეგ ისინი გამოჩნდება აქ."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "მოწყობილობაში აირჩიეთ, რომ გამოჩნდეს სარკმლები, მომხმარებლის სახელისა და პაროლის დამახსოვრების შესაძლებლობით, როდესაც შეიყვანთ ვებსაიტის მომხმარებლის ავტორიზაციის პარამეტრებს."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "მართეთ ავტომატური შევსების პროფილი."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "სანიშნეებში დამატება"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "პაროლის დამოწმება"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "გახსნილი ჩანართები არ არის"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "შეეხეთ „ახალ გრაფას“, რომ გაიხსნას ახალი ჩანართი და დაიწყოთ ინტერნეტში საიტების დათვალიერება."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Дайын"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Растау үшін құпиясөзді қайта енгізіңіз."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Құпиясөз жасау"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Құпиясөз қолданбау"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Құпия режимі деректерін сақтау үшін құпиясөз ойлап табыңыз. Егер Құпия режимін құпиясөзсіз орнатататын болсаңыз, өзгелердің сіздің шолғышыңызды, іздеген ақпараттарыңызды, бетбелгілеріңізді және сақталған парақтарыңызды қарауының алдын алуға мүмкіндігіңіз болмайды."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Бетбелгілерді қосқаннан кейін, олар осы жерде көрсетіледі."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Пайдаланушының есептік жазба мәліметтерін веб-сайттарға енгізген кезде пайдаланушы аты мен құпия сөзді сақтау үшін, құрылғыны опциясы бар қалқымалы терезені көрсететіндей етіп орнатыңыз."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Авто толтыру профилін басқарыңыз."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Бетбелгілерге қосу"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Құпия сөзді растау"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Сіз әлі ешқандай қойындыны ашпағансыз"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Жаңа қойындыны ашу үшін, “Жаңа қойынды” түймесін түртіп, Интернетті шолуды бастаңыз."
+
msgid "IDS_BR_POP_NETWORK_ERROR"
-msgstr "ë\84¤í\8a¸ì\9b\8cí\81¬ ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\95\98ì\98\80습니다."
+msgstr "ë\84¤í\8a¸ì\9b\8cí\81¬ ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\96\88습니다."
msgid "IDS_BR_BODY_DESTINATIONS_AUTHENTICATION_REQUIRED"
msgstr "인증이 필요합니다."
msgstr "완료 안 됨"
msgid "IDS_BR_TPOP_WEBPAGE_ADDED_TO_QUICK_ACCESS"
-msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 ë¹ ë¥¸ ì\8b¤í\96\89ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 ë¹ ë¥¸ ì\8b¤í\96\89ì\97\90 ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_TPOP_WEBPAGE_ADDED_TO_BOOKMARKS"
-msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [ë¶\81ë§\88í\81¬]ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [ë¶\81ë§\88í\81¬]ì\97\90 ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_TPOP_QUICK_ACCESS_SHORTCUT_DELETED"
-msgstr "ë¹ ë¥¸ ì\8b¤í\96\89 ë°\94ë¡\9cê°\80기를 ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "ë¹ ë¥¸ ì\8b¤í\96\89 ë°\94ë¡\9cê°\80기를 ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_TPOP_PD_ITEMS_DELETED_FROM_BROWSING_HISTORY"
-msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95목 %dê°\9c를 ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95목 %dê°\9c를 ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_TPOP_OPENING_SAMSUNG_ACCOUNT_ING"
msgstr "삼성 계정 실행 중..."
msgid "IDS_BR_TPOP_LOW_DATA_USAGE_ENABLED"
-msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 ì\8b¤í\96\89í\95\98ì\98\80습니다."
+msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 ì\8b¤í\96\89í\96\88습니다."
msgid "IDS_BR_TPOP_LOW_DATA_USAGE_DISABLED_PDP_OF_BANDWIDTH_SAVED"
-msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 í\95´ì \9cí\95\98ì\98\80ì\8aµë\8b\88ë\8b¤. ë\8c\80ì\97í\8fì\9d\98 %d%를 ì \88ì\95½í\95\98ì\98\80습니다."
+msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 í\95´ì \9cí\96\88ì\8aµë\8b\88ë\8b¤. ë\8c\80ì\97í\8fì\9d\98 %d%를 ì \88ì\95½í\96\88습니다."
msgid "IDS_BR_TPOP_IMAGE_COPIED_TO_CLIPBOARD"
-msgstr "ì\9d´ë¯¸ì§\80를 í\81´ë¦½ë³´ë\93\9cì\97\90 ë³µì\82¬í\95\98ì\98\80습니다."
+msgstr "ì\9d´ë¯¸ì§\80를 í\81´ë¦½ë³´ë\93\9cì\97\90 ë³µì\82¬í\96\88습니다."
msgid "IDS_BR_TPOP_FAILED_TO_ADD_TO_HOME_SCREEN_ABB"
-msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 못í\95\98ì\98\80습니다."
+msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 못í\96\88습니다."
msgid "IDS_BR_TPOP_DOWNLOADING_IMAGE_ING"
msgstr "이미지 다운로드 중..."
msgid "IDS_BR_TPOP_DATA_SAVING_STATISTICS_RESET"
-msgstr "ë\8d°ì\9d´í\84° ì \88ì\95½ í\86µê³\84를 ì´\88기í\99\94í\95\98ì\98\80습니다."
+msgstr "ë\8d°ì\9d´í\84° ì \88ì\95½ í\86µê³\84를 ì´\88기í\99\94í\96\88습니다."
msgid "IDS_BR_TPOP_BOOKMARK_DELETED"
-msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_TPOP_ADDED_TO_QUICK_ACCESS_LIST"
-msgstr "[ë¹ ë¥¸ ì\8b¤í\96\89]ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "[ë¹ ë¥¸ ì\8b¤í\96\89]ì\97\90 ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_TPOP_ADDED_TO_HOME_SCREEN"
-msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_TPOP_1_POP_UP_BLOCKED"
-msgstr "í\8c\9dì\97\85 1ê°\9c를 ì°¨ë\8b¨í\95\98ì\98\80습니다."
+msgstr "í\8c\9dì\97\85 1ê°\9c를 ì°¨ë\8b¨í\96\88습니다."
msgid "IDS_BR_TPOP_1_ITEM_DELETED_FROM_BROWSING_HISTORY"
-msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95목 1ê°\9c를 ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95목 1ê°\9c를 ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_TMBODY_NOTIFICATIONS"
msgstr "알림"
msgstr "페이지 정보가 변경되어 인증서를 볼 수 없습니다."
msgid "IDS_BR_POP_TO_SIGN_IN_TO_THIS_WEBSITE_USING_YOUR_FINGERPRINTS_GO_TO_SETTINGS_AND_ENABLE_WEB_SIGN_IN"
-msgstr "지문을 이용하여 웹사이트에 로그인하려면 [설정]에서 [웹 로그인]을 실행하세요."
+msgstr "지문을 이용하여 웹사이트에 로그인하려면 설정에서 [웹 로그인]을 실행하세요."
msgid "IDS_BR_POP_THIS_CERTIFICATE_IS_NOT_FROM_A_TRUSTED_AUTHORITY"
msgstr "신뢰할 수 없는 기관에서 발급한 인증서입니다."
msgstr "설정을 초기화합니다."
msgid "IDS_BR_POP_SETTIGS_SAVED"
-msgstr "ì\84¤ì \95ì\9d\84 ì \80ì\9e¥í\95\98ì\98\80습니다."
+msgstr "ì\84¤ì \95ì\9d\84 ì \80ì\9e¥í\96\88습니다."
msgid "IDS_BR_POP_SECURITY_POLICY_RESTRICTS_USE_OF_INTERNET_BROWSER"
-msgstr "보안정책에 따라 [인터넷]을 사용할 수 없습니다."
+msgstr "보안정책에 따라 인터넷을 사용할 수 없습니다."
msgid "IDS_BR_POP_SAVED_TO_BOOKMARKS"
-msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì \80ì\9e¥í\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì \80ì\9e¥í\96\88습니다."
msgid "IDS_BR_POP_RENAME_TAG"
msgstr "태그 이름 변경"
msgstr "%1$s(%2$s)에서 오프라인에서 사용할 수 있도록 용량이 큰 데이터를 내 디바이스에 저장하려고 합니다."
msgid "IDS_BR_POP_P1SS_HAS_BEEN_DETECTED_DETECTED_IN_C_P2SS_SOME_CONTENT_HAS_BEEN_BLOCKED_TO_PROTECT_YOUR_DEVICE"
-msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\95\98ì\98\80ì\8aµë\8b\88ë\8b¤.\nê°\90ì§\80 ì\9c\84ì¹\98: %2$s\n\në\94\94ë°\94ì\9d´ì\8a¤ë¥¼ ë³´í\98¸í\95\98기 ì\9c\84í\95´ ì\9d¼ë¶\80 ì½\98í\85\90ì¸ ë¥¼ ì°¨ë\8b¨í\95\98ì\98\80습니다."
+msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\96\88ì\8aµë\8b\88ë\8b¤.\nê°\90ì§\80 ì\9c\84ì¹\98: %2$s\n\në\94\94ë°\94ì\9d´ì\8a¤ë¥¼ ë³´í\98¸í\95\98기 ì\9c\84í\95´ ì\9d¼ë¶\80 ì½\98í\85\90ì¸ ë¥¼ ì°¨ë\8b¨í\96\88습니다."
msgid "IDS_BR_POP_P1SS_HAS_BEEN_DETECTED_DETECTED_IN_C_P2SS_OPEN_WEBPAGE_ANYWAY_Q"
-msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\95\98ì\98\80습니다.\n감지 위치: %2$s\n\n그래도 웹페이지를 열까요?"
+msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\96\88습니다.\n감지 위치: %2$s\n\n그래도 웹페이지를 열까요?"
msgid "IDS_BR_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
msgstr "저장공간이 부족합니다. 일부 항목을 삭제한 후 다시 시도하세요."
msgstr "사용할 수 없습니다."
msgid "IDS_BR_POP_MOVED"
-msgstr "ì\9d´ë\8f\99í\95\98ì\98\80습니다."
+msgstr "ì\9d´ë\8f\99í\96\88습니다."
msgid "IDS_BR_POP_ENTER_URL"
msgstr "URL을 입력하세요."
msgstr "기록을 삭제할까요?"
msgid "IDS_BR_POP_BOOKMARK_REMOVED"
-msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_POP_ALREADY_EXISTS"
msgstr "동일한 항목이 있습니다."
msgstr "쿠키를 저장하고 읽을 수 있도록 허용합니다."
msgid "IDS_BR_POP_ADDED_TO_BOOKMARKS"
-msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_OPT_WINDOWS"
msgstr "실행 창 보기"
msgstr "우편번호"
msgid "IDS_BR_BODY_PD_POP_UPS_BLOCKED_ABB"
-msgstr "í\8c\9dì\97\85 %dê°\9c를 ì°¨ë\8b¨í\95\98ì\98\80습니다."
+msgstr "í\8c\9dì\97\85 %dê°\9c를 ì°¨ë\8b¨í\96\88습니다."
msgid "IDS_BR_BODY_PAGE_LOADED_T_TTS"
msgstr "페이지 불러오기를 완료했습니다"
msgstr "지문:"
msgid "IDS_BR_BODY_FAILED_TO_ADD_TO_HOME_SCREEN_ABB"
-msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 못í\95\98ì\98\80습니다."
+msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 못í\96\88습니다."
msgid "IDS_BR_BODY_ENTER_YOUR_NAME_ABB"
msgstr "이름을 입력하세요."
msgstr "기본 페이지"
msgid "IDS_BR_BODY_DATA_USAGE_REDUCED_BY_P1SDP_HP2SD_KB_OF_P3SD_KB_RECEIVED_TAP_HERE_TO_RESET_STATISTICS"
-msgstr "%3$dKB를 %2$dKB í\81¬ê¸°ë¡\9c ë°\9bì\95\84, ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89ì\9d´ %1$d% ê°\90ì\86\8cí\95\98ì\98\80습니다. 통계를 초기화하려면 여기를 누르세요."
+msgstr "%3$dKB를 %2$dKB í\81¬ê¸°ë¡\9c ë°\9bì\95\84, ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89ì\9d´ %1$d% ê°\90ì\86\8cí\96\88습니다. 통계를 초기화하려면 여기를 누르세요."
msgid "IDS_BR_BODY_CUSTOM_USER_AGENT"
msgstr "사용자 에이전트 설정"
msgstr "현재 페이지"
msgid "IDS_BR_BODY_CREATED"
-msgstr "ì\83\88ë¡\9c ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\83\88ë¡\9c ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_BODY_COUNTY_ABB"
msgstr "지역"
msgstr "다운로드 시작하는 중..."
msgid "IDS_BR_TPOP_FOLDER_RENAMED"
-msgstr "í\8f´ë\8d\94 ì\9d´ë¦\84ì\9d\84 ë³\80ê²½í\95\98ì\98\80습니다."
+msgstr "í\8f´ë\8d\94 ì\9d´ë¦\84ì\9d\84 ë³\80ê²½í\96\88습니다."
msgid "IDS_BR_TMBODY_SUGGEST_SEARCH_TERMS_AND_URLS"
msgstr "검색어 및 URL 제안"
msgstr "검색을 완료하였습니다"
msgid "IDS_BR_POP_READY"
-msgstr "ì¤\80ë¹\84í\95\98ì\98\80습니다."
+msgstr "ì¤\80ë¹\84í\96\88습니다."
msgid "IDS_BR_POP_INFORM_MEMORY_ERROR"
-msgstr "ë©\94모리 ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\95\98ì\98\80습니다."
+msgstr "ë©\94모리 ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\96\88습니다."
msgid "IDS_BR_POP_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
msgstr "[데이터 로밍]이 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나 [데이터 로밍]을 실행한 후 다시 시도하세요."
msgid "IDS_BR_POP_BROWSERERRORREQUESTTIMEOUT"
-msgstr "ì\9a\94ì² ì\8b\9cê°\84ì\9d\84 ì´\88ê³¼í\95\98ì\98\80습니다."
+msgstr "ì\9a\94ì² ì\8b\9cê°\84ì\9d\84 ì´\88ê³¼í\96\88습니다."
msgid "IDS_BR_POP_A_WI_FI_CONNECTION_IS_REQUIRED_TAP_OK_TO_GO_TO_YOUR_WI_FI_SETTINGS"
msgstr "Wi-Fi 연결이 필요합니다. Wi-Fi 설정으로 이동하려면 확인 버튼을 누르세요."
msgstr "일치하는 검색 결과가 없습니다."
msgid "IDS_BR_BODY_MOBILE_DATA_IS_TURNED_OFF_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_OR_TAP_SETTINGS_TO_TURN_ON_MOBILE_DATA_AND_THEN_TRY_AGAIN"
-msgstr "[모바일 데이터]가 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나, [모바일 데이터]를 실행할 수 있도록 설정 버튼을 누른 후 다시 시도하세요."
+msgstr "모바일 데이터 기능이 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나, 모바일 데이터 기능을 실행할 수 있도록 설정 버튼을 누른 후 다시 시도하세요."
msgid "IDS_BR_BODY_FIT_TO_WIDTH"
msgstr "너비에 맞추기"
msgstr "URL"
msgid "IDS_BR_POP_SAVED"
-msgstr "ì \80ì\9e¥í\95\98ì\98\80습니다."
+msgstr "ì \80ì\9e¥í\96\88습니다."
msgid "IDS_BR_POP_REMOVED"
-msgstr "ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_POP_PD_ITEMS_WILL_BE_DELETED"
msgstr "항목 %d개를 삭제합니다."
msgid "IDS_BR_POP_PD_ITEMS_SELECTED"
-msgstr "í\95목 %dê°\9c를 ì\84 í\83\9dí\95\98ì\98\80습니다."
+msgstr "í\95목 %dê°\9c를 ì\84 í\83\9dí\96\88습니다."
msgid "IDS_BR_POP_NO_ITEMS_SELECTED"
msgstr "선택한 항목이 없습니다."
msgstr "안 함"
msgid "IDS_BR_POP_MOBILE_DATA_IS_DISABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_ENABLE_MOBILE_DATA_AND_TRY_AGAIN"
-msgstr "[모바일 데이터]를 해제하였습니다. Wi-Fi 네트워크에 연결하거나 [모바일 데이터]를 실행한 후 다시 시도하세요."
+msgstr "모바일 데이터 기능을 해제했습니다. Wi-Fi 네트워크에 연결하거나 모바일 데이터 기능을 실행한 후 다시 시도하세요."
msgid "IDS_BR_POP_LOADING_PLEASE_WAIT_ING"
msgstr "불러오는 중입니다. 잠시 기다리세요..."
msgstr "URL이 바르지 않습니다."
msgid "IDS_BR_POP_FAIL"
-msgstr "ì\99\84ë£\8cí\95\98ì§\80 못í\95\98ì\98\80습니다."
+msgstr "ì\99\84ë£\8cí\95\98ì§\80 못í\96\88습니다."
msgid "IDS_BR_POP_ENTER_TITLE_ABB"
msgstr "제목 입력"
msgstr "다시 보지 않기"
msgid "IDS_BR_POP_DOWNLOADCOMPLETE"
-msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì\99\84ë£\8cí\95\98ì\98\80습니다."
+msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì\99\84ë£\8cí\96\88습니다."
msgid "IDS_BR_POP_DISABLED"
-msgstr "í\95´ì \9cí\95\98ì\98\80습니다."
+msgstr "í\95´ì \9cí\96\88습니다."
msgid "IDS_BR_POP_DELETE_Q"
msgstr "삭제할까요?"
msgid "IDS_BR_POP_DELETED"
-msgstr "ì\82ì \9cí\95\98ì\98\80습니다."
+msgstr "ì\82ì \9cí\96\88습니다."
msgid "IDS_BR_POP_CLOSE_APPLICATION_Q"
msgstr "애플리케이션을 종료할까요?"
msgid "IDS_BR_POP_BOOKMARK_ADDED"
-msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_POP_AUTOMATIC_BRIGHTNESS"
msgstr "자동 밝기"
msgstr "항목 1개를 삭제합니다."
msgid "IDS_BR_POP_1_ITEM_SELECTED"
-msgstr "í\95목 1ê°\9c를 ì\84 í\83\9dí\95\98ì\98\80습니다."
+msgstr "í\95목 1ê°\9c를 ì\84 í\83\9dí\96\88습니다."
msgid "IDS_BR_OPT_TRANSLATE"
msgstr "번역"
msgstr "북마크"
msgid "IDS_BR_OPT_ADDED"
-msgstr "ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_OPT_ADD"
msgstr "추가"
msgstr "제목"
msgid "IDS_BR_BODY_THE_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_HAS_BEEN_EXCEEDED"
-msgstr "ìµ\9cë\8c\80 ê¸\80ì\9e\90 ì\88\98(%d)를 ì´\88ê³¼í\95\98ì\98\80습니다."
+msgstr "ìµ\9cë\8c\80 ê¸\80ì\9e\90 ì\88\98(%d)를 ì´\88ê³¼í\96\88습니다."
msgid "IDS_BR_BODY_STREAMING"
msgstr "스트리밍"
msgstr "비행기 탑승 모드 실행 중에는 모바일 네트워크에 연결할 수 없습니다. Wi-Fi 네트워크에 연결하거나 비행기 탑승 모드를 해제한 후 다시 시도하세요."
msgid "IDS_BR_POP_INSTALL_SUCCESS"
-msgstr "ì\84¤ì¹\98를 ì\99\84ë£\8cí\95\98ì\98\80습니다."
+msgstr "ì\84¤ì¹\98를 ì\99\84ë£\8cí\96\88습니다."
msgid "IDS_BR_POP_INSTALLATION_FAILED"
-msgstr "ì\84¤ì¹\98í\95\98ì§\80 못í\95\98ì\98\80습니다."
+msgstr "ì\84¤ì¹\98í\95\98ì§\80 못í\96\88습니다."
msgid "IDS_BR_POP_DELETING_ING"
msgstr "삭제 중..."
msgstr "다시 시도"
msgid "IDS_BR_BODY_REQUEST_FAILED"
-msgstr "ì\9a\94ì²í\95\98ì§\80 못í\95\98ì\98\80습니다."
+msgstr "ì\9a\94ì²í\95\98ì§\80 못í\96\88습니다."
msgid "IDS_BR_BODY_LOGIN"
msgstr "로그인"
msgstr "[데이터 로밍]이 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나 [데이터 로밍]을 실행한 후 다시 시도하세요."
msgid "IDS_BR_POP_DOWNLOAD_CANCELLED"
-msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì·¨ì\86\8cí\95\98ì\98\80습니다."
+msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì·¨ì\86\8cí\96\88습니다."
msgid "IDS_BR_BUTTON_SECRET_ON_ABB"
msgstr "비밀 모드 실행"
msgstr "홈페이지 설정"
msgid "IDS_BR_TPOP_WEBPAGE_ADDED_TO_QUICK_ACCESS_LIST"
-msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [ë¹ ë¥¸ ì\8b¤í\96\89]ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [ë¹ ë¥¸ ì\8b¤í\96\89]ì\97\90 ì¶\94ê°\80í\96\88습니다."
msgid "IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"
msgstr "빠른 실행 편집"
msgstr "항목 선택"
msgid "IDS_BR_BODY_YOUR_PASSWORD_MUST_CONTAIN_AT_LEAST_PD_CHARACTERS_INCLUDING_AT_LEAST_1_LETTER"
-msgstr "비밀번호를 %d자 이상 입력하세요.(문자 1개 이상 포함)"
+msgstr "비밀번호를 %d자 이상 입력하세요.\n(문자 1개 이상 포함)"
msgid "IDS_BR_BODY_AN_INCORRECT_PASSWORD_HAS_BEEN_ENTERED_TRY_AGAIN"
msgstr "입력된 비밀번호가 바르지 않습니다. 다시 시도하세요."
msgid "IDS_BR_BUTTON2_DONE"
msgstr "완료"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "확인을 위해 비밀번호를 한 번 더 입력하세요."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "비밀번호 설정"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "비밀번호 사용 안 함"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "비밀 모드 데이터를 보호하려면 비밀번호를 만드세요. 비밀번호를 설정하지 않고 이 모드를 사용하면 내 검색기록, 방문기록, 북마크, 저장된 페이지가 다른 사람에게 노출되지 않도록 보호할 수 없습니다."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "북마크를 추가하면 여기에 표시됩니다."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "웹사이트에 로그인할 때 사용자 ID 및 비밀번호 저장 옵션 팝업을 표시합니다."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "내 프로필을 저장하고 관리할 수 있습니다."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "북마크에 추가"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "비밀번호 확인"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "열린 탭이 없습니다"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "새 탭을 열어 인터넷을 사용하려면 새 탭 버튼을 누르세요."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Atlikta"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Dar kartą įveskite slaptažodį, kad patvirtintumėte."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Kurti slaptažodį"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nenaudokit slaptaž."
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Norėdami apsaugoti slaptojo režimo duomenis, sukurkite slaptažodį. Jei slaptuoju režimu naudositės nesukūrę slaptažodžio, kiti galės peržiūrėti jūsų naršyklės ir paieškos istoriją, adresyno įrašus ir išsaugotus puslapius."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Kai pridėsite adresyno įrašų, jie bus rodomi čia."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Nustatykite, kad įrenginyje būtų parodytas iškylantysis langas su parinktimi išsaugoti naudotojo vardą bei slaptažodį, kai svetainėse įvedami naudotojo kredencialai."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Tvarkykite savo automatiškai užpildomą profilį."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Pridėti prie adresyno įrašų"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Patvirtinti slaptažodį"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nesate atidarę jokių skirtukų"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Naują skirtuką atidarykite bakstelėdami „Naujas skirtukas“ ir naršykite internete."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Gatavs"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ievadiet paroli vēlreiz, lai to apstiprinātu."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Izveidot paroli"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Neizmantot paroli"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Izveidojiet paroli, lai aizsargātu slepenā režīma datus. Ja slepeno režīmu izmantosit bez paroles, jūs nevarēsit liegt citām personām skatīt jūsu pārlūkprogrammas un meklēšanas vēsturi, grāmatzīmes un saglabātās lapas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Pēc grāmatzīmju pievienošanas tās tiks parādītas šeit."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Iestatiet, lai ierīce rādītu uznirstošo logu ar iespēju saglabāt jūsu lietotājvārdu un paroli, kad tīmekļa vietnēs ievadāt lietotāja akreditācijas datus."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Pārvaldiet savu automātiskās aizpildīšanas profilu."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Pievienot grāmatzīmēm"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Apstiprināt paroli"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Jums nav nevienas atvērtas cilnes"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pieskarieties pie Jauna cilne, lai atvērtu jaunu cilni un sāktu pārlūkot internetu."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Готово"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Внесете ја лозинката повторно за потврда."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Направи лозинка"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Не користи лозинка"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "За да ги заштитите своите податоци во Таен режим, направете лозинка. Ако користите Таен режим без да направите лозинка, нема да можете да ги спречите другите да ја гледаат историјата на Вашиот прегледник и на пребарувањата, ознаките и зачуваните страници."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Откако ќе додадете ознаки, ќе се прикажат тука."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Поставете ги уредите да прикажуваат појавен прозорец со опцијата за меморирање на корисничкото име и лозинката кога ќе внесувате кориснички акредитиви за интернет-страници."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Уредување на профилот за автоматско пополнување."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Додај во Омилени"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Потврда на лозинката"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Немате отворени картички"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Допрете Нова картичка за да отворите нова картичка и да почнете да истражувате на интернет."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Utført"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Angi passordet på nytt for å bekrefte det."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Opprett passord"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ikke bruk passord"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "For å beskytte Hemmelig modus-dataene må du opprette et passord. Hvis du bruker Hemmelig modus uten å opprette et passord, vil du ikke kunne hindre andre fra å vise nettleser- og søkehistorikken, bokmerkene og lagrede sider."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Når du har lagt til bokmerker, vises de her."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Angi at enheten skal vise et sprettoppvarsel med valget om å lagre brukernavnet og passordet ditt når du angir påloggingsinformasjon for nettsteder."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administrer autoutfyllingsprofilen din."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Legg til i Bokmerker"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bekreft passord"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Du har ingen åpne faner"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Trykk på Ny fane for å åpne en ny fane og begynne å utforske Internett."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Klaar"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Voer uw wachtwoord nogmaals in om het te bevestigen."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Wachtwoord maken"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Wachtw. niet gebr."
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Maak een wachtwoord om uw gegevens in Geheime stand te beschermen. Als u Geheime stand wilt gebruiken zonder een wachtwoord te maken, kunt u niet voorkomen dat anderen uw browser- en zoekhistorie, favorieten en opgeslagen pagina's bekijken."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Nadat u favorieten hebt toegevoegd, worden ze hier getoond."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Stel uw apparaat in op het weergeven van een pop-up met de optie om uw gebruikersnaam en wachtwoord op te slaan, wanneer u gebruikergegevens voor websites invoert."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Beheer uw profiel voor automatisch aanvullen."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Toevoegen aan Favorieten"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Wachtwoord bevestigen"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "U hebt geen open tabbladen"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tik op Nieuw tabblad om een nieuw tabblad te openen en internet te verkennen."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Gotowe"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Wprowadź hasło ponownie, aby je potwierdzić."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Utwórz hasło"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nie używaj hasła"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Utwórz hasło, aby zabezpieczyć dane trybu chronionego. W przypadku używania trybu chronionego bez utworzenia hasła nie będzie można zapobiec wyświetlaniu przez inne osoby historii przeglądarki i wyszukiwania, zakładek ani zapisanych stron."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Zakładki zostaną tu wyświetlone po ich dodaniu."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ustaw urządzenie tak, aby pokazywało wyskakujące okno z opcją zapisywania nazwy użytkownika i hasła po wprowadzeniu poświadczeń użytkownika dla witryn internetowych."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Zarządzaj profilem automatycznego wypełniania."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj do zakładek"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potwierdzanie hasła"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nie masz jeszcze żadnych otwartych kart"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Dotknij opcji Nowa karta, aby otworzyć nową kartę i zacząć przeglądać Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Concluído"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Insira sua senha novamente para confirmá-la."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Criar senha"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Não usar senha"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Para proteger seus dados do Modo secreto, crie uma senha. Se usar o Modo secreto sem criar uma senha, você não poderá impedir que outras pessoas vejam seu navegador e pesquisem o histórico, os favoritos e as páginas salvas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Após adicionar os marcadores, eles serão exibidos aqui."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Define seu aparelho para mostrar uma janela pop-up com a opção de salvar seu nome de usuário e a senha quando você inserir as credenciais de usuário para os sites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gerencia seu perfil de Entradas de autopreenchimento."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Adicionar aos Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar senha"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Você não tem nenhuma guia aberta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toque em Nova guia para abrir uma nova guia e começar a explorar a Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Concluir"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduza novamente a sua palavra-passe para a confirmar."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Criar palavra-passe"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Não usar pal.-passe"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Para proteger os seus dados do Modo secreto, crie uma palavra-passe. Se utilizar o Modo secreto sem criar uma palavra-passe, não poderá impedir as outras pessoas de verem o seu histórico dos browsers e de procuras, os seus favoritos e as suas páginas guardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Depois de adicionar favoritos, estes serão mostrados aqui."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Defina o seu dispositivo para mostrar um pop-up com a opção de guardar o seu nome de utilizador e palavra-passe quando introduzir as credenciais de utilizador de sites Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gerir o seu perfil de preenchimento automático."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Adicionar aos Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar palavra-passe"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Não tem nenhum separador aberto"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toque em Novo separador para abrir um separador novo e começar a explorar a Internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Efectuat"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduceți-vă din nou parola pentru a o confirma."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Creare parolă"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nu se util. parola"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Pentru a vă proteja datele din Modul Secret, creați o parolă. Dacă utilizați Modul Secret fără a crea o parolă, nu veți putea împiedica vizualizarea browserului și a istoricului de căutare, a marcajelor și a paginilor salvate de către alte persoane."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "După ce adăugați marcaje, acestea vor fi afișate aici."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Setați dispozitivul să afișeze o fereastră pop-up cu opțiunea de salvare a numelui de utilizator și a parolei atunci când introduceți acreditările de utilizator pentru site-urile web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gestionați profilul de Completare automată."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Adăugare la Marcaje"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmare parolă"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nu aveți nicio filă deschisă"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Atingeți Filă nouă pentru a deschide o filă nouă și a începe să explorați internetul."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Готово"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Для подтверждения введите пароль еще раз."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Создать пароль"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Не использ. пароль"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Создайте пароль для защиты данных в секретном режиме. Если вы будете использовать секретный режим без пароля, то не сможете никому помешать просмотреть историю браузера и поиска, закладки и сохраненные страницы."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Здесь будут показаны добавленные закладки."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Отображение всплывающего окна с предложением сохранить учетные данные, которые вы вводите на веб-сайтах."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Управление профилем автозаполнения."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Добавить в Закладки"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Подтверждение пароля"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Открытые вкладки отсутствуют"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Коснитесь пункта “Новая вкладка”, чтобы открыть новую вкладку и начать работу в Интернете."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Hotovo"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Znova zadajte heslo na jeho potvrdenie."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Vytvorenie hesla"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nepoužívať heslo"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Vytvorte si heslo na ochranu svojich údajov v aplikácii Tajný režim. Ak budete používať aplikáciu Tajný režim bez vytvorenie hesla, nebudete môcť zabrániť ostatným používateľom, aby si prezerali vašu históriu prehliadača a vyhľadávania, vaše záložky a uložené stránky."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Tu sa zobrazia záložky po ich pridaní."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Zariadenie sa nastaví na zobrazenie kontextového okna s možnosťou uložiť meno používateľa a heslo, keď zadáte používateľské poverenia pre webové lokality."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Môžete spravovať profil automatického vypĺňania."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Pridať do priečinka Záložky"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrďte heslo"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nemáte otvorené žiadne karty"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Ťuknutím na tlačidlo Nová karta môžete otvoriť novú kartu a začať si prehliadať internetové stránky."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Končano"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Znova vnesite geslo, da ga potrdite."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Ustvarjanje gesla"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne uporabi gesla"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Za zaščito podatkov v skrivnostnem načinu ustvarite geslo. Če boste skrivnostni način uporabljali brez gesla, drugim ne boste mogli preprečiti ogledovanja zgodovine brskanja in iskanja, zaznamkov ter shranjenih strani."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Ko dodate zaznamke, bodo prikazani tukaj."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Nastavite, da naprava prikaže pojavno okno z možnostjo shranjevanja uporabniškega imena in gesla, ko vnašate uporabniške poverilnice za spletna mesta."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Upravljanje profila za samodejno izpolnjevanje."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj med zaznamke"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potrdite geslo"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nimate odprtih zavihkov"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pritisnite Nov zavihek, da odprete nov zavihek in začnete raziskovati internet."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Kraj"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ponovo unesite svoju lozinku za njenu potvrdu."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Kreiraj lozinku"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne koristi lozinku"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Da biste zaštitili podatke Tajnog režima, kreirajte lozinku. Ako koristite Tajni režim bez kreiranja lozinke, nećete moći da sprečite druge korisnike da prikazuju istoriju vašeg pretraživača i istoriju pretrage, obeleživače i sačuvane stranice."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Nakon što dodate obeleživače, oni će se prikazati ovde."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Podesite da uređaj prikazuje iskačući prozor sa opcijom za čuvanje korisničkog imena i lozinke kada unesete akreditive korisnika za sajtove."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Upravljaj funkcijom Automatsko popunjavanje profila."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj u obeleživače"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrdite lozinku"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Niste otvorili nijednu karticu"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Kucnite na opciju Nova kartica da biste otvorili novu karticu i započeli istraživanje interneta."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Klar"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ange lösenordet igen för att bekräfta det."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Skapa lösenord"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Anv. inte lösenord"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Skydda uppgifterna i Hemligt läge genom att skapa ett lösenord. Om du använder Hemligt läge utan lösenord kan du inte hindra andra från att titta på din webbläsar- och sökhistorik, dina bokmärken och dina sparade sidor."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "När du har lagt till bokmärken visas de här."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ställ in enheten så att ett popup-fönster visas med möjlighet att spara ditt användarnamn och lösenord när du anger inloggningsuppgifter på webbplatser."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Hantera din Autofyll-profil."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Lägg till i Bokmärken"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bekräfta lösenordet"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Du har inga öppna flikar"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Öppna en ny flik genom att trycka på Ny flik och börja utforska internet."
+
msgstr "Tercihi hatırla."
msgid "IDS_BR_BODY_CERTIFICATE_SERIAL_NUMBER"
-msgstr " Seri numarası"
+msgstr "Seri numarası"
msgid "IDS_BR_HEADER_ISSUED_BY_C"
msgstr "Düzenleyen:"
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Tamam"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Onaylamak için şifrenizi tekrar girin."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Şifre oluştur"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Şifre kullanma"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Gizli mod verilerinizi korumak için bir şifre oluşturun. Gizli modu şifre oluşturmaksızın kullanıyorsanız başkalarının tarayıcı ve arama geçmişinizi, yer imlerinizi ve kayıtlı sayfalarınızı görüntülemesini engelleyemezsiniz."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Eklediğiniz yer imleri burada gösterilir."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Cihazınızı, web siteleri için kullanıcı kimlik bilgilerini girdiğinizde kullanıcı adınızı ve şifrenizi kaydetme seçeneğinin bulunduğu bir açılır pencereyi gösterecek şekilde ayarlayın."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Otomatik doldurma profilinizi yönetin."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Yer imlerine ekle"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Şifreyi onayla"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Açık sekmeniz yok"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Yeni bir sekme açıp İnterneti keşfetmeye başlamak için Yeni sekme öğesine dokunun."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Готово"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Уведіть пароль ще раз для підтвердження."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Створити пароль"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Не викор. пароль"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Щоб захистити дані секретного режиму, створіть пароль. Якщо секретний режим не захищено паролем, ви не зможете завадити іншим особам переглядати ваш браузер, історію пошуку, закладки та збережені сторінки."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Тут буде відображено закладки, після того як ви їх додасте."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Відображення спливаючого вікна з пропозицією зберегти облікові дані, які ви вводите на веб-сайтах."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Керування профілем автозаповнення."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Додати до закладок"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Підтвердження пароля"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Ви ще не відкрили жодної вкладки"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Торкніться «Нова вкладка», щоб відкрити нову вкладку та почати роботу в Інтернеті."
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "Bajarildi"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Parolni tasdiqlash uchun uni qayta kiriting."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Parol yaratish"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Parol ishlatilmasin"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Sir rejimi ma’lumotlarini himoya qilish uchun parol yarating. Agar Sir rejimidan parol yaratmasdan foydalansangiz, boshqalarning brauzer, qidirish jurnali, xatcho‘plar va saqlangan sahifalaringizni ko‘rishini ta’qiqlay olmaysiz."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Xatcho‘plar qo‘shilgandan so‘ng, ular bu yerda ko‘rsatiladi."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Veb-saytlar uchun hisob ma’lumotlarini kiritganingizda, qurilmangizni foydalanuvchi nomi va parolni saqlash opsiyasi mavjud qalqib chiquvchi oynani ko‘rsatadigan qilib sozlash."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Avtomatik to‘ldirish profilingizni boshqarish."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Saqlangan veb-hujjatlarga qo‘shish"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Parolni tasdiqlash"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Ochiq panellar mavjud emas"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Yangi ilovani ochish va Internetni kezish uchun Yangi ilovaga teging."
+
msgstr "禁用低数据使用量"
msgid "IDS_BR_OPT_DISABLED"
-msgstr "不使用简繁转换"
+msgstr "关"
msgid "IDS_BR_OPT_DELETE_SAVED_PAGE_ABB"
msgstr "删除已保存的页面"
msgstr "互联网记录未储存。"
msgid "IDS_BR_BODY_INTERNET"
-msgstr "互联网"
+msgstr "浏览器"
msgid "IDS_BR_BODY_IMPROVE_PERFORMANCE_WHEN_LOADING_PAGES"
msgstr "改进载入页面时的性能"
msgid "IDS_BR_BUTTON2_DONE"
msgstr "完成"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "请再次输入混合密码进行确认。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "创建密码"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "不使用密码"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "若要保护您的保密模式数据,请创建混合密码。如果您在不创建混合密码的情况下使用保密模式,您将无法阻止他人查看您的浏览器和搜索历史记录、书签以及已保存的页面。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "添加书签后,其将显示在此处。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "设置您的设备在输入网站用户证书时弹出保存用户名及密码选项的弹窗"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "管理您的自动填写资料"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "添加到书签"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "确认混合密码"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "您没有任何打开的页面"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "点击【新页面】可打开新页面并开始浏览互联网。"
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "完成"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "再次輸入您的密碼以確認。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "建立密碼"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "不要使用密碼"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "若要保護您的保密模式數據,請建立密碼。如果您使用保密模式且未建立密碼,您將無法防止其他人查看您的瀏覽器與搜尋歷程記錄、書籤及已儲存的頁面。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "加入書籤後,其將顯示於此。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "設定裝置以顯示包含在輸入網站用戶憑證時用於儲存用戶名稱與密碼選項的彈出式視窗。"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "管理您的自動填寫個人資料。"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "加到書籤"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "確認密碼"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "您未開啟任何標籤"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "輕觸 [新標籤] 以開啟新標籤並開始探索互聯網。"
+
msgid "IDS_BR_BUTTON2_DONE"
msgstr "完成"
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "請再次輸入密碼以確認。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "建立密碼"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "不要使用密碼"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "若要保護無痕模式資料,請建立一組密碼。若未建立密碼即使用無痕模式,則無法防止其他使用者檢視您的瀏覽器與搜尋歷程記錄、書籤以及儲存的網頁。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "新增書籤後,將顯示於此。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "將您的裝置設為顯示包含選項的彈出視窗,以於輸入網站使用者憑證時儲存您的使用者名稱與密碼。"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "管理您的自動填入設定檔。"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "加至書籤"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "確認密碼"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "您沒有任何使用中的分頁"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "輕觸 [新標籤] 即可開啟新標籤並開始探索網際網路。"
+
, m_group_item_class(nullptr)
, m_folder_item_class(nullptr)
, m_add_to_qa_item_class(nullptr)
- , m_edjFilePath("")
+ , m_edjFilePath(std::string(EDJE_DIR) + std::string("BookmarkFlowUI/BookmarkFlowUI.edj"))
, m_title("")
, m_url("")
+ , m_updateUrl("")
, m_add_to_qa(false)
+ , m_qa_lock(false)
, m_state(false)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("BookmarkFlowUI/BookmarkFlowUI.edj");
createGenlistItemClasses();
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
evas_object_smart_callback_del(m_done_button, "clicked", _done_clicked);
evas_object_smart_callback_del(m_cancel_button, "clicked", _cancel_clicked);
+ evas_object_smart_callback_del(m_genlist, "language,changed", _language_changed);
if (m_entry_item_class)
elm_genlist_item_class_free(m_entry_item_class);
{
BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, url.c_str());
m_url = url;
+ m_updateUrl = m_url;
}
void BookmarkFlowUI::setFolder(services::SharedBookmarkItem bookmarkItem)
m_cancel_button = elm_button_add(m_layout);
elm_object_part_content_set(m_layout, "title_left_btn", m_cancel_button);
elm_object_style_set(m_cancel_button, "naviframe/title_left");
- elm_object_text_set(m_cancel_button, _("IDS_BR_SK_CANCEL"));
+ elm_object_translatable_text_set(m_cancel_button, "IDS_BR_SK_CANCEL");
evas_object_smart_callback_add(m_cancel_button, "clicked", _cancel_clicked, this);
evas_object_size_hint_weight_set(m_cancel_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_cancel_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
m_done_button = elm_button_add(m_layout);
elm_object_part_content_set(m_layout, "title_right_btn", m_done_button);
elm_object_style_set(m_done_button, "naviframe/title_right");
- elm_object_text_set(m_done_button, _("IDS_BR_BUTTON2_DONE"));
+ elm_object_translatable_text_set(m_done_button, "IDS_BR_BUTTON2_DONE");
evas_object_smart_callback_add(m_done_button, "clicked", _done_clicked, this);
evas_object_size_hint_weight_set(m_done_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_done_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_genlist_mode_set(m_genlist, ELM_LIST_COMPRESS);
evas_object_size_hint_weight_set(m_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
elm_object_part_content_set(m_layout, "elm.swallow.content", m_genlist);
evas_object_show(m_genlist);
}
+void BookmarkFlowUI::_language_changed(void *data, Evas_Object* obj, void*)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ if (!data) {
+ BROWSER_LOGE("data is null");
+ return;
+ }
+ auto self = static_cast<BookmarkFlowUI*>(data);
+ self->fillGenlist();
+ elm_genlist_realized_items_update(obj);
+}
+
void BookmarkFlowUI::fillGenlist()
{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
elm_genlist_clear(m_genlist);
//Add title entry
EntryData *titleEntryData = new EntryData();
- titleEntryData->category = _("IDS_BR_BODY_TITLE");
- titleEntryData->entry = m_title;
+ titleEntryData->category = "IDS_BR_BODY_TITLE";
titleEntryData->bookmarkFlowUI = this;
m_title_entry = elm_genlist_item_append(m_genlist, m_entry_item_class, titleEntryData, nullptr,
//Add URL entry
if (m_state) {
EntryData *urlEntryData = new EntryData();
- urlEntryData->category = _("IDS_BR_BODY_ADDBOOKMARKURL");
- urlEntryData->entry = m_url;
+ urlEntryData->category = "IDS_BR_BODY_ADDBOOKMARKURL";
urlEntryData->bookmarkFlowUI = this;
m_url_entry = elm_genlist_item_append(m_genlist, m_entry_item_class, urlEntryData, nullptr,
ELM_GENLIST_ITEM_NONE, nullptr, urlEntryData);
//Add QuickAccess checkbox
if (!m_state)
elm_genlist_item_append(m_genlist, m_add_to_qa_item_class, this, nullptr, ELM_GENLIST_ITEM_NONE,
- _qa_clicked, this);
+ ((m_add_to_qa && m_qa_lock) ? nullptr :_qa_clicked),
+ ((m_add_to_qa && m_qa_lock) ? nullptr : this));
+
}
void BookmarkFlowUI::updateTopContent()
{
if (m_state)
- elm_object_translatable_part_text_set(m_layout, "elm.text.title", _("IDS_BR_HEADER_EDIT_BOOKMARK"));
+ elm_object_translatable_part_text_set(m_layout, "elm.text.title", "IDS_BR_HEADER_EDIT_BOOKMARK");
else
- elm_object_translatable_part_text_set(m_layout, "elm.text.title", _("IDS_BR_OPT_ADD_BOOKMARK"));
+ elm_object_translatable_part_text_set(m_layout, "elm.text.title", "IDS_BR_OPT_ADD_BOOKMARK");
}
void BookmarkFlowUI::updateDoneButton()
evas_object_size_hint_align_set(entry_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
Evas_Object* entry = elm_entry_add(entry_layout);
+ entryData->limit = tools::EflTools::setEntryLimit(entry,
+ entryData->category != "IDS_BR_BODY_ADDBOOKMARKURL");
elm_entry_single_line_set(entry, EINA_TRUE);
elm_entry_scrollable_set(entry, EINA_TRUE);
evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_entry_entry_set(entry, elm_entry_utf8_to_markup(entryData->entry.c_str()));
- if (entryData->category == _("IDS_BR_BODY_ADDBOOKMARKURL"))
+ if (entryData->category == "IDS_BR_BODY_TITLE")
+ elm_entry_entry_set(entry, elm_entry_utf8_to_markup(
+ entryData->bookmarkFlowUI->m_title.c_str()));
+ else if (entryData->category == "IDS_BR_BODY_ADDBOOKMARKURL")
+ elm_entry_entry_set(entry, elm_entry_utf8_to_markup(
+ entryData->bookmarkFlowUI->m_updateUrl.c_str()));
+
+ if (entryData->category == "IDS_BR_BODY_ADDBOOKMARKURL")
elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_URL);
ObjectData* objectData = new ObjectData();
objectData->object = entry_layout;
+ objectData->fieldType = entryData->category;
objectData->bookmarkFlowUI = entryData->bookmarkFlowUI;
evas_object_smart_callback_add(entry, "changed", _entry_changed, objectData);
bookmarkFlowUI->m_qa_checkbox = elm_check_add(obj);
evas_object_propagate_events_set(bookmarkFlowUI->m_qa_checkbox, EINA_FALSE);
elm_check_state_set(bookmarkFlowUI->m_qa_checkbox, bookmarkFlowUI->m_add_to_qa ? EINA_TRUE : EINA_FALSE);
- evas_object_smart_callback_add(bookmarkFlowUI->m_qa_checkbox, "changed", _add_to_qa_state_changed, bookmarkFlowUI);
+ if (bookmarkFlowUI->m_add_to_qa && bookmarkFlowUI->m_qa_lock)
+ elm_object_disabled_set(bookmarkFlowUI->m_qa_checkbox, true);
+ else
+ evas_object_smart_callback_add(bookmarkFlowUI->m_qa_checkbox, "changed", _add_to_qa_state_changed, bookmarkFlowUI);
evas_object_show(bookmarkFlowUI->m_qa_checkbox);
return bookmarkFlowUI->m_qa_checkbox;
}
if (data && part) {
if (!strcmp(part, "elm.text")) {
EntryData *entryData = static_cast<EntryData*>(data);
- return strdup(entryData->category.c_str());
+ return strdup(_(entryData->category.c_str()));
}
} else
BROWSER_LOGE("[%s:%d] Data or part is null", __PRETTY_FUNCTION__, __LINE__);
if (data && part) {
FolderData *folderData = static_cast<FolderData*>(data);
if (!strcmp(part, "elm.text"))
- return strdup(elm_entry_utf8_to_markup(folderData->name.c_str()));
+ return strdup(elm_entry_utf8_to_markup(_(folderData->name.c_str())));
} else
BROWSER_LOGE("[%s:%d] Data or part is null", __PRETTY_FUNCTION__, __LINE__);
return nullptr;
}
if (bookmarkFlowUI->m_add_to_qa)
- bookmarkFlowUI->addToQuickAccess(bookmarkFlowUI->m_url, bookmarkFlowUI->m_title);
+ bookmarkFlowUI->addToQuickAccess(bookmarkFlowUI->m_updateUrl, bookmarkFlowUI->m_title);
bookmarkFlowUI->closeBookmarkFlowClicked();
bookmarkFlowUI->m_add_to_qa = false;
else
elm_object_signal_emit(objectData->object, "elm,action,show,button", "");
objectData->bookmarkFlowUI->updateDoneButton();
+
+ if (objectData->fieldType == "IDS_BR_BODY_TITLE")
+ objectData->bookmarkFlowUI->m_title = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
+ else if (objectData->fieldType == "IDS_BR_BODY_ADDBOOKMARKURL")
+ objectData->bookmarkFlowUI->m_updateUrl = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
} else
BROWSER_LOGW("[%s] data or obj = nullptr", __PRETTY_FUNCTION__);
}
public:
BookmarkFlowUI();
~BookmarkFlowUI();
+ BookmarkFlowUI(const BookmarkFlowUI&) = delete;
+ BookmarkFlowUI& operator=(const BookmarkFlowUI&) = delete;
+
//AbstractUIComponent interface methods
void init(Evas_Object *parent);
Evas_Object *getContent();
virtual std::string getName();
void setState(bool state);
+ void setQaState(const bool &state) { m_add_to_qa = state; m_qa_lock = state;}
void setTitle(const std::string& title);
void setURL(const std::string& title);
void setFolder(services::SharedBookmarkItem bookmarkItem);
struct EntryData {
std::string category;
- std::string entry;
+ Elm_Entry_Filter_Limit_Size *limit;
BookmarkFlowUI* bookmarkFlowUI;
+
+ ~EntryData() {
+ if (limit)
+ free(limit);
+ }
};
struct ObjectData {
Evas_Object* object;
+ std::string fieldType;
BookmarkFlowUI* bookmarkFlowUI;
};
static char* _genlist_text_get(void* data, Evas_Object*, const char* part);
static char* _genlist_folder_text_get(void* data, Evas_Object*, const char* part);
static char* _genlist_add_to_qa_text_get(void* data, Evas_Object*, const char* part);
+ static void _language_changed(void *data, Evas_Object* obj, void*);
static void _done_clicked(void* data, Evas_Object*, void*);
static void _cancel_clicked(void* data, Evas_Object*, void*);
std::string m_edjFilePath;
std::string m_title;
std::string m_url;
+ std::string m_updateUrl;
bool m_add_to_qa;
+ bool m_qa_lock;
bool m_state;
};
EXPORT_SERVICE(BookmarkManagerUI, "org.tizen.browser.bookmarkmanagerui")
BookmarkManagerUI::BookmarkManagerUI()
- : m_parent(nullptr)
+ : m_edjFilePath(std::string(EDJE_DIR) + std::string("BookmarkManagerUI/BookmarkManagerUI.edj"))
+ , m_parent(nullptr)
, m_content(nullptr)
, m_modulesToolbar(nullptr)
, m_navigatorToolbar(nullptr)
+ , m_box(nullptr)
, m_genlist(nullptr)
, m_empty_layout(nullptr)
, m_select_all(nullptr)
+ , m_historyGenlist(nullptr)
, m_bookmark_item_class(nullptr)
, m_state(BookmarkManagerState::Default)
, m_reordered(false)
, m_selected_count(0)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("BookmarkManagerUI/BookmarkManagerUI.edj");
createGenlistItemClasses();
}
BookmarkManagerUI::~BookmarkManagerUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_modulesToolbar) {
+ evas_object_smart_callback_del(m_modulesToolbar, "language,changed", _modules_toolbar_language_changed);
+ evas_object_del(m_modulesToolbar);
+ }
+ if (m_navigatorToolbar) {
+ evas_object_smart_callback_del(m_navigatorToolbar, "language,changed", _navigation_toolbar_language_changed);
+ evas_object_del(m_modulesToolbar);
+ }
+ if (m_genlist)
+ evas_object_smart_callback_del(m_genlist, "language,changed", _language_changed);
if (m_bookmark_item_class)
elm_genlist_item_class_free(m_bookmark_item_class);
default:
break;
}
- } else if (!strcmp(part, "elm.swallow.icon.2") && bookmarkData->bookmarkItem->getPrivate()) {
- Evas_Object* layout = elm_layout_add(obj);
- elm_layout_file_set(layout, bookmarkData->bookmarkManagerUI->m_edjFilePath.c_str(), "private_image");
- return layout;
}
} else
BROWSER_LOGE("[%s:%d] Data or part is null", __PRETTY_FUNCTION__, __LINE__);
void BookmarkManagerUI::createModulesToolbar()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_modulesToolbar) {
+ evas_object_smart_callback_del(m_modulesToolbar, "language,changed", _modules_toolbar_language_changed);
+ evas_object_del(m_modulesToolbar);
+ }
m_modulesToolbar = elm_toolbar_add(m_content);
elm_object_style_set(m_modulesToolbar, "tabbar/notitle");
elm_toolbar_transverse_expanded_set(m_modulesToolbar, EINA_TRUE);
elm_object_part_content_set(m_content, "modules_toolbar", m_modulesToolbar);
evas_object_show(m_modulesToolbar);
+ evas_object_smart_callback_add(
+ m_modulesToolbar,
+ "language,changed",
+ _modules_toolbar_language_changed,
+ this);
elm_toolbar_item_append(m_modulesToolbar, nullptr, _("IDS_BR_BODY_BOOKMARKS"), _modules_bookmarks_clicked, this);
elm_toolbar_item_append(m_modulesToolbar, nullptr, _("IDS_BR_MBODY_HISTORY"), _modules_history_clicked, this);
}
+void BookmarkManagerUI::_modules_toolbar_language_changed(void* data, Evas_Object*, void*)
+{
+ if (!data) {
+ BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+ auto self = static_cast<BookmarkManagerUI*>(data);
+ self->createModulesToolbar();
+}
+
void BookmarkManagerUI::createNavigatorToolbar()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_navigatorToolbar) {
+ evas_object_smart_callback_del(m_navigatorToolbar, "language,changed", _navigation_toolbar_language_changed);
+ evas_object_del(m_navigatorToolbar);
+ }
m_navigatorToolbar = elm_toolbar_add(m_content);
+ evas_object_smart_callback_add(m_navigatorToolbar, "language,changed", _navigation_toolbar_language_changed, this);
elm_object_style_set(m_navigatorToolbar, "navigationbar");
elm_toolbar_shrink_mode_set(m_navigatorToolbar, ELM_TOOLBAR_SHRINK_SCROLL);
evas_object_show(m_navigatorToolbar);
}
+void BookmarkManagerUI::_navigation_toolbar_language_changed(void* data , Evas_Object*, void*)
+{
+ if (!data) {
+ BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+ auto self = static_cast<BookmarkManagerUI*>(data);
+ self->createNavigatorToolbar();
+ for (const auto& it : self->m_folder_path)
+ elm_toolbar_item_append(
+ self->m_navigatorToolbar,
+ nullptr,
+ _(it->getTitle().c_str()),
+ _navigatorFolderClicked,
+ self);
+}
+
void BookmarkManagerUI::createGenlist()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
evas_object_size_hint_align_set(m_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_smart_callback_add(m_genlist, "moved", _genlist_bookmark_moved, this);
evas_object_smart_callback_add(m_genlist, "realized", _genlist_bookmark_realized, this);
+ evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
elm_box_pack_end(m_box, m_genlist);
evas_object_show(m_genlist);
elm_bg_color_set(bg, 255, 255, 255);
elm_object_part_content_set(m_select_all, "elm.swallow.bg", bg);
- elm_object_part_text_set(m_select_all, "elm.text", _("IDS_BR_OPT_SELECT_ALL"));
+ elm_object_translatable_part_text_set(m_select_all, "elm.text", "IDS_BR_OPT_SELECT_ALL");
evas_object_event_callback_add(m_select_all, EVAS_CALLBACK_MOUSE_DOWN, _select_all_down, this);
evas_object_smart_callback_add(checkbox, "changed", _select_all_state_changed, this);
evas_object_show(m_select_all);
}
+void BookmarkManagerUI::_language_changed(void *, Evas_Object* obj, void*)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ elm_genlist_realized_items_update(obj);
+}
+
void BookmarkManagerUI::createEmptyLayout()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
evas_object_size_hint_weight_set(m_empty_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_translatable_part_text_set(m_empty_layout, "elm.text", _("IDS_BR_BODY_NO_BOOKMARKS"));
- elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", "After you add bookmarks, they will be shown here.");
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_BODY_NO_BOOKMARKS");
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE");
elm_layout_signal_emit(m_empty_layout, "text,disabled", "");
elm_layout_signal_emit(m_empty_layout, "align.center", "elm");
m_naviframe->addLeftButton(_cancel_clicked, this);
//TODO: Missing translation. In guidelines this should be uppercase
- m_naviframe->setLeftButtonText(_("IDS_BR_SK_CANCEL"));
+ m_naviframe->setLeftButtonText("IDS_BR_SK_CANCEL");
m_naviframe->addRightButton(_accept_clicked, this);
m_naviframe->addPrevButton(_prev_clicked, this);
}
if (!bookmarkData->bookmarkItem->is_folder())
elm_object_item_signal_emit(bookmarkItem, "elm,state,elm.text.sub,visible", "elm");
- if (bookmarkData->bookmarkItem->getPrivate())
- elm_object_item_signal_emit(bookmarkItem, "elm,state,elm.swallow.end,visible", "elm");
} else {
BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
}
Evas_Object *checkbox = elm_object_part_content_get(bookmarkManagerUI->m_select_all, "elm.swallow.end");
elm_check_state_set(checkbox, !elm_check_state_get(checkbox));
_select_all_state_changed(bookmarkManagerUI, checkbox, nullptr);
+ elm_object_signal_emit(bookmarkManagerUI->m_select_all, "elm,state,clicked", "elm");
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
m_folder_path.clear();
}
m_folder_path.push_back(parent);
- elm_toolbar_item_append(m_navigatorToolbar, NULL, parent->getTitle().c_str(), _navigatorFolderClicked, this);
+ elm_toolbar_item_append(
+ m_navigatorToolbar,
+ nullptr,
+ _(parent->getTitle().c_str()),
+ _navigatorFolderClicked,
+ this);
}
addFilteredBookmarkItems(BookmarkManagerGenlistFilter::All);
}
prepareHistoryContent();
break;
case BookmarkManagerState::HistoryView:
- elm_toolbar_item_selected_set(
- elm_toolbar_first_item_get(m_modulesToolbar),
- EINA_TRUE);
- prepareBookmarksContent();
- closeBookmarkManagerClicked();
changeState(BookmarkManagerState::Default);
+ closeBookmarkManagerClicked();
break;
default:
changeState(BookmarkManagerState::Default);
if (data) {
BookmarkManagerUI *bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
Elm_Object_Item *clicked = static_cast<Elm_Object_Item*>(event_info);
+ elm_toolbar_item_selected_set(elm_toolbar_last_item_get(bookmarkManagerUI->m_navigatorToolbar), EINA_TRUE);
Elm_Object_Item *it = elm_toolbar_last_item_get(bookmarkManagerUI->m_navigatorToolbar);
if (clicked == it)
return;
elm_box_pack_end(m_box, m_historyGenlist);
evas_object_hide(m_genlist);
evas_object_show(m_historyGenlist);
+ updateNoHistoryText();
}
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
auto self = static_cast<BookmarkManagerUI*>(data);
- self->changeState(BookmarkManagerState::Default);
+ if (self->m_state == BookmarkManagerState::HistoryView ||
+ self->m_state == BookmarkManagerState::HistoryDeleteView)
+ self->changeState(BookmarkManagerState::Default);
+ self->m_naviframe->setTitle("IDS_BR_BODY_BOOKMARKS");
self->prepareBookmarksContent();
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
elm_genlist_realized_items_update(m_genlist);
showNaviframePrevButton(false);
//TODO: Missing translation. In guidelines this should be uppercase
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+ m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
showToolbars(true);
elm_object_signal_emit(m_content, "hide_modules_toolbar", "ui");
evas_object_hide(m_modulesToolbar);
break;
case BookmarkManagerState::Edit:
m_reordered = false;
- m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_BOOKMARK"));
+ m_naviframe->setTitle("IDS_BR_HEADER_SELECT_BOOKMARK");
showToolbars(false);
evas_object_hide(m_navigatorToolbar);
break;
elm_genlist_realized_items_update(m_genlist);
showNaviframePrevButton(false);
//TODO: Missing translation. In guidelines this should be uppercase
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DELETE"));
+ m_naviframe->setRightButtonText("IDS_BR_SK_DELETE");
updateDeleteTopContent();
showToolbars(false);
evas_object_hide(m_navigatorToolbar);
elm_genlist_realized_items_update(m_genlist);
showNaviframePrevButton(false);
//TODO: Missing translation. In guidelines this should be uppercase
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+ m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
updateDeleteTopContent();
showToolbars(false);
evas_object_hide(m_navigatorToolbar);
break;
case BookmarkManagerState::Reorder:
showNaviframePrevButton(true);
- m_naviframe->setTitle(_("IDS_BR_OPT_REORDER_ABB"));
+ m_naviframe->setTitle("IDS_BR_OPT_REORDER_ABB");
showToolbars(false);
evas_object_hide(m_navigatorToolbar);
elm_genlist_reorder_mode_set(m_genlist, EINA_TRUE);
break;
case BookmarkManagerState::HistoryView:
- updateNoBookmarkText();
showNaviframePrevButton(true);
- m_naviframe->setTitle(_("IDS_BR_MBODY_HISTORY"));
+ m_naviframe->setTitle("IDS_BR_MBODY_HISTORY");
showToolbars(true);
evas_object_hide(m_navigatorToolbar);
elm_object_part_content_unset(m_content, "navigator_toolbar");
evas_object_hide(m_select_all);
break;
case BookmarkManagerState::HistoryDeleteView:
- updateNoBookmarkText();
- m_naviframe->setTitle(_("IDS_BR_MBODY_HISTORY"));
+ clearSelection();
+ m_naviframe->setTitle("IDS_BR_MBODY_HISTORY");
showNaviframePrevButton(false);
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+ m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
updateDeleteTopContent();
showToolbars(false);
evas_object_hide(m_navigatorToolbar);
break;
case BookmarkManagerState::Default:
default:
+ elm_toolbar_item_selected_set(elm_toolbar_first_item_get(m_modulesToolbar), EINA_TRUE);
updateNoBookmarkText();
reoderBookmarkItems();
showNaviframePrevButton(true);
- m_naviframe->setTitle(_("IDS_BR_BODY_BOOKMARKS"));
+ m_naviframe->setTitle("IDS_BR_BODY_BOOKMARKS");
showToolbars(true);
evas_object_show(m_navigatorToolbar);
elm_object_part_content_set(m_content, "navigator_toolbar", m_navigatorToolbar);
if (m_reordered) {
m_reordered = false;
Elm_Object_Item *it = elm_genlist_first_item_get(m_genlist);
- BookmarkData *bookmarkData;
int order = 1;
while (it) {
- bookmarkData = static_cast<BookmarkData*>(elm_object_item_data_get(it));
+ auto bookmarkData = static_cast<BookmarkData*>(elm_object_item_data_get(it));
if (order != bookmarkData->bookmarkItem->getOrder()) {
bookmarkData->bookmarkItem->setOrder(order);
bookmarkItemOrderEdited(bookmarkData->bookmarkItem);
void BookmarkManagerUI::updateNoBookmarkText()
{
- if (m_map_bookmark.size() ||
- (m_state == BookmarkManagerState::HistoryView || m_state == BookmarkManagerState::HistoryDeleteView)) {
+ if (m_map_bookmark.size()) {
evas_object_hide(m_empty_layout);
elm_object_signal_emit(m_content, "hide_overlay", "ui");
} else {
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_BODY_NO_BOOKMARKS");
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
+ "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE");
+ evas_object_show(m_empty_layout);
+ elm_object_signal_emit(m_content, "show_overlay", "ui");
+ }
+}
+
+void BookmarkManagerUI::updateNoHistoryText()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (elm_genlist_items_count(m_historyGenlist)==0) {
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_NPBODY_NO_HISTORY");
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
+ "IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE");
evas_object_show(m_empty_layout);
elm_object_signal_emit(m_content, "show_overlay", "ui");
}
+ else {
+ evas_object_hide(m_empty_layout);
+ elm_object_signal_emit(m_content, "hide_overlay", "ui");
+ }
}
void BookmarkManagerUI::updateDeleteClick(int id)
if (m_selected_count)
m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % m_selected_count).str());
else
- m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_ITEMS_ABB2"));
+ m_naviframe->setTitle("IDS_BR_HEADER_SELECT_ITEMS_ABB2");
m_naviframe->setRightButtonEnabled(m_selected_count);
}
public:
BookmarkManagerUI();
~BookmarkManagerUI();
+ BookmarkManagerUI(const BookmarkManagerUI&) = delete;
+ BookmarkManagerUI& operator=(const BookmarkManagerUI&) = delete;
+
//AbstractUIComponent interface methods
void init(Evas_Object *parent);
void showUI();
void insertSelectAll();
void reoderBookmarkItems();
void updateNoBookmarkText();
+ void updateNoHistoryText();
void updateDeleteClick(int id);
void updateDeleteTopContent();
void removeHistoryItems();
static void _cm_create_folder_clicked(void*, Evas_Object*, void*);
static char* _genlist_bookmark_text_get(void *data, Evas_Object *obj, const char *part);
static Evas_Object *_genlist_bookmark_content_get(void *data, Evas_Object *obj, const char *part);
+ static void _language_changed(void *, Evas_Object* obj, void*);
+ static void _modules_toolbar_language_changed(void *, Evas_Object* obj, void*);
+ static void _navigation_toolbar_language_changed(void *, Evas_Object* obj, void*);
std::string m_edjFilePath;
}
}
- group { name: "private_image";
- images.image: "internet_ic_private_mode.png" COMP;
- parts {
- part {
- name: "image";
- type: IMAGE;
- mouse_events: 1;
- repeat_events: 0;
- description {
- state: "default" 0.0;
- fixed: 1 1;
- align: 0.5 0.5;
- min: INCOGNITO_IMAGE_SIZE INCOGNITO_IMAGE_SIZE;
- max: INCOGNITO_IMAGE_SIZE INCOGNITO_IMAGE_SIZE;
- visible: 1;
- image.normal: "internet_ic_private_mode.png";
- color_class: "AO030";
- }
- }
- }
- }
-
group {
name: "naviframe_content";
parts {
return;
}
- m_root = std::make_shared<BookmarkItem>(ROOT_FOLDER_ID, "", _("IDS_BR_BODY_BOOKMARKS"), "", -1, 1);
+ m_root = std::make_shared<BookmarkItem>(ROOT_FOLDER_ID, "", "IDS_BR_BODY_BOOKMARKS", "", -1, 1);
m_root->set_folder_flag(true);
}
if (thumbnail && thumbnail->getSize() > 0){
std::unique_ptr<tizen_browser::tools::Blob> thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail);
if (thumb_blob){
- unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData());
+ auto thumb =
+ const_cast<unsigned char*>(static_cast<const unsigned char*>(thumb_blob->getData()));
bp_bookmark_adaptor_set_snapshot(id, thumbnail->getWidth(), thumbnail->getHeight(), thumb, thumb_blob->getLength());
bookmark->setThumbnail(thumbnail);
} else
if (favicon && favicon->getSize() > 0){
std::unique_ptr<tizen_browser::tools::Blob> favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon);
if (favicon_blob){
- unsigned char * fav = std::move((unsigned char*)favicon_blob->getData());
+ auto fav =
+ const_cast<unsigned char*>(static_cast<const unsigned char*>(favicon_blob->getData()));
bp_bookmark_adaptor_set_icon(id, favicon->getWidth(), favicon->getHeight(), fav, favicon_blob->getLength());
bookmark->setFavicon(favicon);
} else
return bookmark;
}
-void BookmarkService::updateBookmarkItemSnapshot(const std::string & url, tools::BrowserImagePtr snapshot)
+void BookmarkService::updateBookmarkItemSnapshot(const std::string& url, tools::BrowserImagePtr snapshot)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
int id = getBookmarkId(url);
if (id != 0 && snapshot) {
std::unique_ptr<tools::Blob> snapshot_blob = tools::EflTools::getBlobPNG(snapshot);
- unsigned char * snap = std::move((unsigned char*)snapshot_blob->getData());
+ auto snap =
+ const_cast<unsigned char*>(static_cast<const unsigned char*>(snapshot_blob->getData()));
if (bp_bookmark_adaptor_set_snapshot(id, snapshot->getWidth(), snapshot->getHeight(), snap,
snapshot_blob->getLength()) < 0)
errorPrint("bp_history_adaptor_set_snapshot");
BROWSER_LOGW("Snapshot update not handled properly");
}
-bool BookmarkService::editBookmark(const std::string & url, const std::string & title, unsigned int folder_id)
+bool BookmarkService::editBookmark(const std::string& url, const std::string& title, unsigned int folder_id)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return (update_bookmark_notify(getBookmarkId(url), title.c_str(), url.c_str(), folder_id, -1) == 1);
}
}
-bool BookmarkService::delete_by_id_notify(int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- BROWSER_LOGD("id[%d]", id);
-
- BookmarkItem item;
- get_item_by_id(id, &item);
- return deleteBookmark(id);
-}
-
-bool BookmarkService::delete_by_uri(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- BROWSER_LOGD("uri[%s]", uri);
- bp_bookmark_property_cond_fmt properties;
- properties.parent = -1;
- properties.type = 0;
- properties.is_operator = -1;
- properties.is_editable = -1;
- //conditions for querying
- bp_bookmark_rows_cond_fmt conds;
- conds.limit = 1;
- conds.offset = 0;
- conds.order_offset = BP_BOOKMARK_O_SEQUENCE;
- conds.ordering = 0;
- conds.period_offset = BP_BOOKMARK_O_DATE_CREATED;
- conds.period_type = BP_BOOKMARK_DATE_ALL;
-
- int *ids = nullptr;
- int ids_count = -1;
- int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
- bool result = false;
- if (ret >= 0 && ids_count > 0)
- {
- result = delete_by_id_notify(ids[0]);
- free(ids);
- }
-
- return result;
-}
-
int BookmarkService::update_bookmark(int id, const char *title, const char *uri, int parent_id, int order,
bool is_duplicate_check_needed, bool is_URI_check_needed)
{
bool is_URI_exist = (uri != nullptr && strlen(uri) > 0);
bool is_title_exist = (title != nullptr && strlen(title) > 0);
- int ret = -1;
if (is_duplicate_check_needed) {
bp_bookmark_property_cond_fmt properties;
properties.parent = -1;
int ids_count = -1;
//This is a bookmark item so check for any such URL already exists
if (is_URI_exist && is_URI_check_needed) {
- ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
+ auto ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
free(ids);
if (ret < 0) {
errorPrint("bp_bookmark_adaptor_get_cond_ids_p");
return ret;
}
-bool BookmarkService::is_in_bookmark(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- BROWSER_LOGD("uri[%s]", uri);
-
- int id = 0;
- return get_id(uri, &id);
-}
-
-bool BookmarkService::get_id(const char *uri, int *bookmark_id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- bp_bookmark_property_cond_fmt properties;
- properties.parent = -1;
- properties.type = 0;
- properties.is_operator = -1;
- properties.is_editable = -1;
- //conditions for querying
- bp_bookmark_rows_cond_fmt conds;
- conds.limit = 1;
- conds.offset = 0;
- conds.order_offset = BP_BOOKMARK_O_SEQUENCE;
- conds.ordering = 0;
- conds.period_offset = BP_BOOKMARK_O_DATE_CREATED;
- conds.period_type = BP_BOOKMARK_DATE_ALL;
-
- int *ids = nullptr;
- int ids_count = -1;
- int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
- bool result = ((ret >= 0) && (ids_count > 0));
- if (result) {
- *bookmark_id = ids[0];
- }
- free(ids);
- return result;
-}
-
bool BookmarkService::get_item_by_id(int id, BookmarkItem *item)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
if (id == 0) {
- item->setTitle(_("IDS_BR_BODY_BOOKMARKS"));
+ item->setTitle("IDS_BR_BODY_BOOKMARKS");
item->setAddress("");
item->setId(id);
item->setParent(-1);
#include "service_macros.h"
#include "BookmarkItem.h"
#include "BrowserImage.h"
-#include "AbstractFavoriteService.h"
+#include "StorageService.h"
namespace tizen_browser{
namespace services{
class BROWSER_EXPORT BookmarkService
- : public tizen_browser::interfaces::AbstractFavoriteService
+ : public core::AbstractService
{
public:
BookmarkService();
*/
bool getItem(const std::string & url, BookmarkItem *item);
- bool delete_by_id_notify(int id);
- bool delete_by_uri(const char *uri);
int update_bookmark(int id, const char *title, const char *uri, int parent_id, int order,
bool is_duplicate_check_needed = false, bool is_URI_check_needed = false);
int update_bookmark_notify(int id, const char *title, const char *uri, int parent_id, int order,
bool delete_all(void);
bool get_item_by_id(int id, BookmarkItem *item);
int get_count(void);
- bool get_id(const char *uri, int *bookmark_id);
- bool is_in_bookmark(const char *uri);
int getFolderId(const std::string & title, int parent);
+ boost::signals2::signal<void (std::shared_ptr<services::BookmarkItem>)> bookmarkAdded;
+ boost::signals2::signal<void (const std::string& uri)> bookmarkDeleted;
+ boost::signals2::signal<void ()> bookmarksDeleted;
+
private:
/**
* Help method printing last bp_bookmark_error_defs error.
project(services)
add_subdirectory(WebEngineService)
+add_subdirectory(WebEngineMin)
add_subdirectory(QuickAccess)
add_subdirectory(HistoryUI)
add_subdirectory(TabUI)
add_subdirectory(SimpleUI)
add_subdirectory(SettingsUI)
add_subdirectory(WebPageUI)
+add_subdirectory(WebPageMin)
add_subdirectory(BookmarkFlowUI)
add_subdirectory(BookmarkManagerUI)
add_subdirectory(StorageService)
CertificateContents::CertificateContents()
: m_mainLayout(nullptr)
+ , m_genlist(nullptr)
, m_parent(nullptr)
+ , m_edjFilePath(std::string(EDJE_DIR) + std::string("CertificateService/CertificatePopup.edj"))
, m_certificate(nullptr)
+ , m_hostType(HOST_TYPE::HOST_ABSENT)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("CertificateService/CertificatePopup.edj");
elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
}
}
}
-void CertificateContents::setCurrentTabCertData(std::string host, std::string pem, HOST_TYPE type)
+void CertificateContents::setCurrentTabCertData(const std::string& host, const std::string& pem, const HOST_TYPE& type)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
Elm_Genlist_Item_Class *item_class = elm_genlist_item_class_new();
if (!item_class) {
BROWSER_LOGE("elm_genlist_item_class_new for item_class failed");
+ elm_genlist_item_class_free(field_item_class);
return m_genlist;
}
item_class->item_style = "cert_title_value_text";
elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
}
+ elm_genlist_item_class_free(field_item_class);
+ elm_genlist_item_class_free(item_class);
+
return m_genlist;
}
Evas_Object* getContent();
void unsecureHostAllowed();
- void setCurrentTabCertData(std::string host, std::string pem, HOST_TYPE type);
+ void setCurrentTabCertData(const std::string& host, const std::string& pem, const HOST_TYPE& type);
Eina_Bool isValidCertificate() const { return m_hostType == SECURE_HOST; }
bool isValidCertificate(const std::string& uri);
min: 0 110;
}
}
+ rect { "padding_left"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 0 0;
+ fixed: 1 1;
+ rel1.to: "bg";
+ }
+ }
+ rect { "padding_right"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 1 1;
+ fixed: 1 1;
+ rel2.to: "bg";
+ }
+ }
part {
name: "auth_text";
type: TEXTBLOCK;
fixed: 1 0;
align: 0 0;
rel1 {
- to: "bg";
- relative: 0.0 0.0;
+ to: "padding_left";
+ relative: 1.0 1.0;
}
rel2 {
- to: "bg";
- relative: 1.0 1.0;
+ to: "padding_right";
+ relative: 0.0 0.0;
}
text {
style: "auth_text_style";
min: 0 70;
}
}
+ rect { "padding_left"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 0 0;
+ fixed: 1 1;
+ rel1.to: "bg";
+ }
+ }
+ rect { "padding_right"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 1 1;
+ fixed: 1 1;
+ rel2.to: "bg";
+ }
+ }
part {
name: "field_text";
type: TEXTBLOCK;
max: -1 -1;
align: 0 0;
rel1 {
- to: "bg";
- relative: 0.0 0.0;
+ to: "padding_left";
+ relative: 1.0 1.0;
}
rel2 {
- to: "bg";
- relative: 1.0 1.0;
+ to: "padding_right";
+ relative: 0.0 0.0;
}
text {
style: "field_text_style";
min: 0 110;
}
}
+ rect { "padding_left"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 0 0;
+ fixed: 1 1;
+ rel1.to: "bg";
+ }
+ }
+ rect { "padding_right"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 1 1;
+ fixed: 1 1;
+ rel2.to: "bg";
+ }
+ }
part {
name: "title_text";
type: TEXTBLOCK;
align: 0 0;
color: 80 80 80 255;
rel1 {
- to: "bg";
- relative: 0.0 0.0;
+ to: "padding_left";
+ relative: 1.0 1.0;
}
rel2 {
- to: "bg";
- relative: 1.0 1.0;
+ to: "padding_right";
+ relative: 0.0 0.0;
}
text {
style: "title_text_style";
min: 0 110;
}
}
+ rect { "padding_left"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 0 0;
+ fixed: 1 1;
+ rel1.to: "bg";
+ }
+ }
+ rect { "padding_right"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 1 1;
+ fixed: 1 1;
+ rel2.to: "bg";
+ }
+ }
part {
name: "auth_text";
type: TEXTBLOCK;
min: 632 100;
max: -1 -1;
rel1 {
- to: "bg";
- relative: 0.0 0.0;
+ to: "padding_left";
+ relative: 1.0 1.0;
}
rel2 {
- to: "bg";
- relative: 1.0 1.0;
+ to: "padding_right";
+ relative: 0.0 0.0;
}
text {
style: "text_style";
#define FIND_WORD_MAX_COUNT 10000
#define FIND_ON_PAGE_MAX_TEXT 1000
-#include <Elementary.h>
#include <vector>
#include <string>
#include <string.h>
EXPORT_SERVICE(FindOnPageUI, "org.tizen.browser.findonpageui")
FindOnPageUI::FindOnPageUI()
- : m_fop_layout(NULL)
- , m_entry(NULL)
- , m_down_button(NULL)
- , m_up_button(NULL)
- , m_clear_button(NULL)
- , m_parent(NULL)
+ : m_parent(nullptr)
+ , m_fop_layout(nullptr)
+ , m_entry(nullptr)
+ , m_down_button(nullptr)
+ , m_up_button(nullptr)
+ , m_clear_button(nullptr)
+ , m_limit(nullptr)
, m_total_count(0)
, m_current_index(0)
- , m_input_word(NULL)
+ , m_input_word(nullptr)
, m_isVisible(false)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
evas_object_smart_callback_del(m_entry, "activated", __enter_key_cb);
evas_object_smart_callback_del(m_entry, "changed", __entry_changed_cb);
- evas_object_smart_callback_del(m_entry, "clicked", __entry_clicked_cb);
evas_object_del(m_fop_layout);
eina_stringshare_del(m_input_word);
+
+ if (m_limit)
+ free(m_limit);
}
void FindOnPageUI::show()
if (!m_fop_layout)
m_fop_layout = createFindOnPageUILayout();
showUI();
- show_ime();
}
void FindOnPageUI::init(Evas_Object* parent)
elm_entry_entry_append(m_entry, markup_text);
if (markup_text)
free(markup_text);
+ if (elm_entry_is_empty(m_entry))
+ show_ime();
}
void FindOnPageUI::clear_text(void)
// Entry.
m_entry = elm_entry_add(m_fop_layout);
- elm_object_style_set(m_entry, "fop_entry");
+ m_limit = tools::EflTools::setEntryLimit(m_entry);
+ tools::EflTools::setExpandHints(m_entry);
elm_entry_single_line_set(m_entry, EINA_TRUE);
elm_entry_scrollable_set(m_entry, EINA_TRUE);
elm_entry_autocapital_type_set(m_entry, ELM_AUTOCAPITAL_TYPE_NONE);
elm_entry_cnp_mode_set(m_entry, ELM_CNP_MODE_PLAINTEXT);
elm_entry_input_panel_enabled_set(m_entry, EINA_TRUE);
elm_entry_input_panel_return_key_type_set(m_entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH);
-
- evas_object_size_hint_weight_set(m_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_entry_text_style_user_push(m_entry, "DEFAULT='font=Tizen:style=Light font_size=36'");
evas_object_smart_callback_add(m_entry, "activated", __enter_key_cb, this);
evas_object_smart_callback_add(m_entry, "changed", __entry_changed_cb, this);
- evas_object_smart_callback_add(m_entry, "clicked", __entry_clicked_cb, this);
- elm_object_translatable_part_text_set(m_entry, "elm.guide", "IDS_BR_OPT_FIND_ON_PAGE");
+ elm_object_translatable_part_text_set(m_entry, "elm.guide",
+ (std::string("<font=Tizen:style=Light font_size=36>") +
+ std::string(_("IDS_BR_OPT_FIND_ON_PAGE")) +
+ std::string("</font>")).c_str());
static Elm_Entry_Filter_Limit_Size limit_filter_data;
limit_filter_data.max_byte_count = 0;
elm_object_part_content_set(m_fop_layout, "elm.swallow.entry", m_entry);
// Clear button
- m_clear_button = elm_button_add(m_fop_layout);
- elm_object_style_set(m_clear_button, "basic_button");
+ m_clear_button = elm_button_add(m_fop_layout);;
+ elm_object_style_set(m_clear_button, "custom");
elm_atspi_accessible_name_set(m_clear_button, _("IDS_BR_OPT_CLEAR_ALL"));
evas_object_smart_callback_add(m_clear_button, "clicked", __clear_clicked_cb, this);
- elm_object_part_content_set(m_fop_layout, "clear_button_click", m_clear_button);
+
+ elm_object_part_content_set(m_fop_layout, "elm.swallow.button", m_clear_button);
+
+ Evas_Object *icon = elm_icon_add(m_clear_button);
+ elm_image_file_set(icon, m_edjFilePath.c_str(), "toolbar_input_ic_cancel.png");
+ elm_object_part_content_set(m_clear_button, "elm.swallow.content", icon);
// Down button.
m_down_button = elm_button_add(m_fop_layout);
- elm_object_style_set(m_down_button, "basic_button");
+ elm_object_style_set(m_down_button, "custom");
elm_atspi_accessible_name_set(m_down_button, _("IDS_BR_SK_NEXT"));
evas_object_smart_callback_add(m_down_button, "clicked", __down_clicked_cb, this);
elm_object_part_content_set(m_fop_layout, "down_button_click", m_down_button);
+ icon = elm_icon_add(m_down_button);
+ elm_image_file_set(icon, m_edjFilePath.c_str(), "find_on_page_prev.png");
+ elm_object_part_content_set(m_down_button, "elm.swallow.content", icon);
+
// Up button.
m_up_button = elm_button_add(m_fop_layout);
- elm_object_style_set(m_up_button, "basic_button");
+ elm_object_style_set(m_up_button, "custom");
elm_atspi_accessible_name_set(m_up_button, _("IDS_BR_SK_PREVIOUS"));
evas_object_smart_callback_add(m_up_button, "clicked", __up_clicked_cb, this);
elm_object_part_content_set(m_fop_layout, "up_button_click", m_up_button);
- Evas_Object *close_click = elm_button_add(m_fop_layout);
- elm_object_style_set(close_click, "basic_button");
- evas_object_smart_callback_add(close_click, "clicked", __close_clicked_cb, this);
- elm_object_part_content_set(m_fop_layout, "close_click", close_click);
+ icon = elm_icon_add(m_up_button);
+ elm_image_file_set(icon, m_edjFilePath.c_str(), "find_on_page_next.png");
+ elm_object_part_content_set(m_up_button, "elm.swallow.content", icon);
elm_object_part_content_set(m_parent, "findonpage", m_fop_layout);
_set_count(0, 0);
m_isVisible = false;
}
-void FindOnPageUI::__close_clicked_cb(void* data, Evas_Object*, void*)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- FindOnPageUI *fop = static_cast<FindOnPageUI*>(data);
- fop->closeFindOnPageUIClicked();
-}
-
void FindOnPageUI::_set_count(int index, int total)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
digit_count = 1;
const char *elm_text = elm_entry_entry_get(m_entry);
- if (elm_text == NULL || strlen(elm_text) == 0) {
+ if (elm_text == nullptr || strlen(elm_text) == 0) {
// Show 0/0
elm_object_signal_emit(m_fop_layout, "digit_1,signal", "");
} else {
// Change count layout size.
- snprintf(text_buffer,sizeof(text_buffer), "digit_%d,signal", digit_count);
+ snprintf(text_buffer, sizeof(text_buffer), "digit_%d,signal", digit_count);
elm_object_signal_emit(m_fop_layout, text_buffer, "");
}
snprintf(text_buffer, sizeof(text_buffer),"%d/%d", index, total);
- elm_object_part_text_set(m_fop_layout, "elm.text.count", text_buffer);
+ elm_object_translatable_part_text_set(m_fop_layout, "elm.text.count", text_buffer);
- if (total <= 1) {
+ if (total < 1) {
BROWSER_LOGD("total %d", total);
_disable_up_button(EINA_TRUE);
_disable_down_button(EINA_TRUE);
fop->m_current_index = fop->m_total_count;
fop->_set_count(fop->m_current_index, fop->m_total_count);
}
-void FindOnPageUI::__entry_clicked_cb(void *data, Evas_Object*/*obj*/, void* /*event_info*/)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto fop = static_cast<FindOnPageUI*>(data);
- if (fop)
- fop->show_ime();
-}
void FindOnPageUI::__entry_changed_cb(void *data, Evas_Object *obj, void* /*event_info*/)
{
const char *elm_text = elm_entry_entry_get(obj);
if (!elm_text || strlen(elm_text) == 0) {
fop->_set_count(0, 0);
- elm_object_signal_emit(fop->m_fop_layout, "hide,clear,button,signal", "");
+ elm_object_signal_emit(fop->m_fop_layout, "elm,action,hide,button", "");
eina_stringshare_replace(&fop->m_input_word, "");
// On deleting last character, send empty string to clear the highlight.
struct FindData fd = {"", EINA_FALSE, NULL, NULL};
char *text = elm_entry_markup_to_utf8(elm_text);
BROWSER_LOGD("Previous text=[%s], Current text[%s]", fop->m_input_word ? fop->m_input_word : "", text);
- elm_object_signal_emit(fop->m_fop_layout, "show,clear,button,signal", "");
+ elm_object_signal_emit(fop->m_fop_layout, "elm,action,show,button", "");
if (strlen(text) >= FIND_ON_PAGE_MAX_TEXT) {
elm_entry_entry_set(fop->m_entry, "");
fop->_set_count(0, 0);
elm_object_focus_set(fop->m_entry, EINA_TRUE);
- elm_object_signal_emit(fop->m_fop_layout, "hide,clear,button,signal", "");
+ elm_object_signal_emit(fop->m_fop_layout, "elm,action,hide,button", "");
}
-void FindOnPageUI::__down_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
+void FindOnPageUI::__up_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
FindOnPageUI *fop = static_cast<FindOnPageUI*>(data);
elm_object_focus_set(obj, EINA_TRUE);
}
-void FindOnPageUI::__up_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
+void FindOnPageUI::__down_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
FindOnPageUI *fop = static_cast<FindOnPageUI*>(data);
#include <Evas.h>
#include <boost/signals2/signal.hpp>
+#include <Elementary.h>
#include "AbstractUIComponent.h"
#include "AbstractService.h"
static void __down_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void __up_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void __enter_key_cb(void *data, Evas_Object *obj, void *event_info);
- static void __entry_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void __entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
static void __text_found_cb(void *data, Evas_Object *obj, void *event_info);
- static void __close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+ Evas_Object *m_parent;
Evas_Object *m_fop_layout;
Evas_Object *m_entry;
Evas_Object *m_down_button;
Evas_Object *m_up_button;
Evas_Object *m_clear_button;
- Evas_Object *m_parent;
+
+ Elm_Entry_Filter_Limit_Size *m_limit;
int m_total_count;
int m_current_index;
+#include "../../../core/Tools/edc/CustomButton.edc"
collections {
- #if PROFILE_MOBILE
- base_scale: 2.6;
- #else
- base_scale: 2.0;
- #endif
- group{
- name: "elm/button/base/basic_button";
- parts {
- part{
- name: "button";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- color: 0 0 0 0;
- }
- }
- part{
- name: "over";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "button";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "button";
- }
- color: 0 0 0 0;
- }
- }
- }
- programs{
- program {
- name: "mouse_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- emit("elm,action,click", "");
- }
- }
- }
- }
- group {
- name: "elm/entry/selection/fop_entry";
- parts {
- part {
- name: "bg";
- scale:1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 224 237 251 255;
- }
- }
- }
- }
- group {
- name: "elm/entry/cursor/fop_entry";
- parts {
- part {
- name: "bg";
- scale:1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 22 120 237 255;
- min: 2 42;
- max: 2 42;
- visible: 0;
- }
- description {
- state: "focused" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- name: "focused";
- signal: "elm,action,focus";
- source: "elm";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- }
- program {
- name: "unfocused";
- signal: "elm,action,unfocus";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- }
- }
- group {
- name: "elm/entry/base-single/fop_entry";
- styles {
- style {
- name: "fop-entry-style-unselected";
- base: "font=Sans font_size="28" wrap=none color=#969696";
- tag: "br" "";
- }
- style {
- name: "fop-entry-style-selected";
- base: "font=Sans font_size="28" wrap=none color=#4088d3";
- tag: "br" "";
- }
- }
- parts {
- part {
- name: "bg";
- scale:1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 255 255 255 255;
- }
- }
- part {
- name: "elm.guide";
- scale:1;
- type: TEXTBLOCK;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- rel1.relative: 0.0 0.0;
- rel2.relative: 1.0 1.0;
- align: 0.0 0.0;
- text {
- style: "fop-entry-style-unselected";
- min: 0 1;
- }
- }
- description {
- state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- part {
- name: "label.text.clip";
- scale:1;
- type: RECT;
- description {
- state: "default" 0.0;
- }
- }
- part {
- name: "elm.text";
- scale:1;
- multiline: 0;
- entry_mode: EDITABLE;
- select_mode: DEFAULT;
- cursor_mode: BEFORE;
- type: TEXTBLOCK;
- clip_to: "label.text.clip";
- source: "elm/entry/selection/fop_entry";
- source4: "elm/entry/cursor/fop_entry";
- description {
- state: "default" 0.0;
- max: -1 82;
- rel1.relative: 0.0 0.0;
- rel2.relative: 1.0 1.0;
- align: 0.0 0.0;
- text {
- style: "fop-entry-style-selected";
- min: 0 1;
- }
- }
- }
- }
- programs {
- program {
- name: "focus";
- signal: "load";
- source: "";
- action: FOCUS_SET;
- target: "elm.text";
- }
- program {
- name: "gdisabled";
- signal: "elm,guide,disabled";
- source: "elm";
- action: STATE_SET "hidden" 0.0;
- target: "elm.guide";
- }
- program {
- name: "genabled";
- signal: "elm,guide,enabled";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.guide";
- }
- }
- }
+ base_scale: 2.6;
+
+ IMAGE_BUTTON("find_on_page_next.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "find_on_page_next.png")
+ IMAGE_BUTTON("find_on_page_prev.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "find_on_page_prev.png")
+
group {
name: "find-on-page-layout";
images {
- image: "btn_bar_stop_nor.png" COMP;
- image: "find_on_page_prev.png" COMP;
- image: "find_on_page_next.png" COMP;
image: "web_shadow.png" COMP;
}
color_classes{
name: "focusBgColor";
color: 69 143 255 255;
}
- color_class{
- name: "transparent";
- color: 0 0 0 0;
- }
}
styles {
style {
state: "default" 0.0;
color: 247 247 247 255;
align: 0 0;
- min: 720 104;
+ min: 0 104;
max: -1 104;
rel1 {
relative: 0.0 0.0;
}
}
}
- part {
+ rect {
name: "entry_bg";
- type: SPACER;
scale: 1;
description {
state: "default" 0.0;
- min: 350 92;
- max: -1 92;
+ min: 0 80;
+ max: -1 80;
align: 0.0 0.5;
fixed: 0 1;
+ color: 255 255 255 255;
rel1 {
relative: 1.0 0.0;
to: "entry_spacer";
scale: 1;
description {
state: "default" 0.0;
- min: 350 92;
- max: -1 92;
+ min: 0 80;
+ max: -1 80;
align: 0.0 0.5;
fixed: 0 1;
rel1 {
to: "entry_bg";
}
rel2 {
- relative: 0.0 1.0;
- to_x: "clear_button_bg";
- to_y: "entry_bg";
- }
- }
- }
- part {
- name: "clear_button_spacer";
- scale:1;
- mouse_events: 1;
- type: SPACER;
- description {
- state: "default" 0.0;
- fixed: 1 1;
- align: 1 0.5;
- min: 10 92;
- max: 10 92;
- rel1 {
- relative: 0.0 0.0;
- to: "entry_bg";
- }
- rel2 {
relative: 1.0 1.0;
to: "entry_bg";
}
}
- }
- part {
- name: "clear_button_bg";
- scale:1;
- mouse_events: 1;
- type: RECT;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 1 0.5;
- min: 42 92;
- max: 42 92;
- rel1 {
- relative: 0.0 0.0;
- to: "entry_bg";
- }
- rel2 {
- relative: 0.0 1.0;
- to: "clear_button_spacer";
- }
- color_class: transparent;
- }
- }
- part {
- name: "clear_button_icon";
- type: IMAGE;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- fixed: 1 1;
- align: 0 .5;
- min: 42 46;
- max: 42 46;
- rel1 {
- relative: 0.0 0.0;
- to: "clear_button_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "clear_button_bg";
- }
- image.normal: "btn_bar_stop_nor.png";
- }
- description {
- state: "show" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part {
- name: "clear_button_click";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0 .5;
- fixed: 1 1;
- min: 42 46;
- max: 42 46;
- rel1 {
- relative: 0.0 0.0;
- to: "clear_button_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "clear_button_bg";
- }
- color_class: transparent;
- }
- description {
- state: "show" 0.0;
- inherit: "default" 0.0;
- visible: 1;
+ description { "show_button";
+ inherit: "default" 0.0;
+ rel2 {
+ relative: 0.0 1.0;
+ to: "elm.swallow.button_left_padding";
+ }
+ }
+ }
+ spacer { "elm.swallow.button_left_padding"; scale;
+ description { "default";
+ min: 10 0;
+ max: 10 -1;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1.to: "entry_bg";
+ rel2 {
+ to_x: "elm.swallow.button";
+ to_y: "entry_bg";
+ relative: 0.0 1.0;
+ }
+ }
+ }
+ swallow { "elm.swallow.button"; scale;
+ description { "default";
+ min: 80 80;
+ max: 80 80;
+ align: 1.0 0.5;
+ fixed: 1 1;
+ visible: 0;
+ rel1.to: "entry_bg";
+ rel2 {
+ relative: 0.0 1.0;
+ to: "elm.swallow.button_right_padding";
+ }
+ }
+ description { "show_button";
+ inherit: "default";
+ visible: 1;
+ }
+ }
+ spacer { "elm.swallow.button_right_padding"; scale;
+ description { "default";
+ min: 10 0;
+ max: 10 -1;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1.to: "entry_bg";
+ rel2.to: "entry_bg";
}
}
part {
scale: 1;
description {
state: "default" 0.0;
- min: 10 104;
- max: 10 104;
+ min: 40 104;
+ max: 40 104;
fixed: 1 1;
- align: 1 0;
+ align: 1 .5;
rel1 {
relative: 0.0 0.0;
to: "bg_clipper";
}
rel2 {
relative: 0.0 1.0;
- to: "down_button_bg";
+ to: "down_button_click";
}
}
}
scale: 1;
description {
state: "default" 0.0;
- min: 110 104;
- max: 110 104;
- fixed: 1 1;
+ min: 0 104;
+ max: 72 104;
+ fixed: 0 1;
align: 1 .5;
rel1 {
relative: 0.0 0.0;
description {
state: "default" 0.0;
fixed: 1 1;
- align: 1 0;
- min: 10 104;
- max: 10 104;
- rel1 {
- relative: 0.0 0.0;
- to: "bg_clipper";
- }
- rel2 {
- relative: 0.0 1.0;
- to: "close_bg";
- }
- }
- }
- part {
- name: "up_button_bg";
- scale:1;
- mouse_events: 1;
- type: RECT;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
align: 1 0.5;
- min: 56 56;
- max: 56 56;
+ min: 24 104;
+ max: 24 104;
rel1 {
relative: 0.0 0.0;
to: "bg_clipper";
}
rel2 {
- relative: 0.0 1.0;
- to: "up_button_spacer";
- }
- color_class: transparent;
- }
- description {
- state: "highlight" 0.0;
- inherit: "default" 0.0;
- color_class: focusBgColor;
- visible: 1;
- }
- }
- part {
- name: "up_button_icon";
- type: IMAGE;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 0 0;
- min: 56 56;
- max: 56 56;
- rel1 {
- relative: 0.0 0.0;
- to: "up_button_bg";
- }
- rel2 {
relative: 1.0 1.0;
- to: "up_button_bg";
+ to: "bg_clipper";
}
- image.normal: "find_on_page_prev.png";
}
}
part {
description {
state: "default" 0.0;
visible: 1;
- align: 0 0;
+ align: 1 .5;
fixed: 1 1;
- min: 56 56;
- max: 56 56;
+ min: 80 80;
+ max: 80 80;
rel1 {
relative: 0.0 0.0;
- to: "up_button_bg";
+ to: "bg_clipper";
}
rel2 {
- relative: 1.0 1.0;
- to: "up_button_bg";
+ relative: 0.0 1.0;
+ to: "up_button_spacer";
}
- color_class: transparent;
}
}
part {
description {
state: "default" 0.0;
fixed: 1 1;
- align: 1 0;
- min: 10 104;
- max: 10 104;
+ align: 1 .5;
+ min: 48 104;
+ max: 48 104;
rel1 {
relative: 0.0 0.0;
to: "bg_clipper";
}
rel2 {
relative: 0.0 1.0;
- to: "up_button_bg";
+ to: "up_button_click";
}
}
}
part {
- name: "down_button_bg";
+ name: "down_button_click";
scale:1;
- mouse_events: 1;
- type: RECT;
+ type: SWALLOW;
description {
state: "default" 0.0;
visible: 1;
fixed: 1 1;
align: 1 .5;
- min: 56 56;
- max: 56 56;
+ min: 80 80;
+ max: 80 80;
rel1 {
relative: 0.0 0.0;
to: "bg_clipper";
relative: 0.0 1.0;
to: "down_button_spacer";
}
- color_class: transparent;
- }
- description {
- state: "highlight" 0.0;
- inherit: "default" 0.0;
- color_class: focusBgColor;
- visible: 1;
- }
- }
- part {
- name: "down_button_icon";
- type: IMAGE;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 0 0;
- min: 56 56;
- max: 56 56;
- rel1 {
- relative: 0.0 0.0;
- to: "down_button_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "down_button_bg";
- }
- image.normal: "find_on_page_next.png";
- }
- }
- part {
- name: "down_button_click";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 1 1;
- min: 56 56;
- max: 56 56;
- rel1 {
- relative: 0.0 0.0;
- to: "down_button_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "down_button_bg";
- }
- color_class: transparent;
}
}
part {
description {
state: "default" 0.0;
fixed: 1 1;
- align: 1 0;
- min: 10 104;
- max: 10 104;
+ align: 1 0;
+ min: 40 104;
+ max: 40 104;
rel1 {
relative: 0.0 0.0;
to: "bg_clipper";
}
}
part {
- name: "close_spacer";
- scale:1;
- mouse_events: 1;
- type: SPACER;
- description {
- state: "default" 0.0;
- fixed: 1 1;
- align: 1 .5;
- min: 10 104;
- max: 10 104;
- rel1 {
- relative: 0.0 0.0;
- to: "bg_clipper";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg_clipper";
- }
- }
- }
- part {
- name: "close_bg";
- scale:1;
- mouse_events: 1;
- type: RECT;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 1 .5;
- min: 46 54;
- max: 46 54;
- rel1 {
- relative: 0.0 0.0;
- to: "bg_clipper";
- }
- rel2 {
- relative: 0.0 1.0;
- to: "close_spacer";
- }
- color_class: transparent;
- }
- description {
- state: "highlight" 0.0;
- inherit: "default" 0.0;
- color_class: focusBgColor;
- visible: 1;
- }
- }
- part {
- name: "close_icon";
- type: IMAGE;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 0 0;
- min: 46 54;
- max: 46 54;
- rel1 {
- relative: 0.0 0.0;
- to: "close_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "close_bg";
- }
- image.normal: "btn_bar_stop_nor.png";
- }
- description {
- state: "highlight" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part {
- name: "close_click";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 1 1;
- min: 46 54;
- max: 46 54;
- rel1 {
- relative: 0.0 0.0;
- to: "close_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "close_bg";
- }
- color_class: transparent;
- }
- }
- part {
name: "fop_bar_shadow";
type: IMAGE;
scale: 1;
}
}
programs{
- program {
- name: "mouse_down_close_click";
- signal: "mouse,down,1";
- source: "close_click";
- action: STATE_SET "highlight" 0.0;
- target: "close_bg";
- target: "close_icon";
- }
- program {
- name: "mouse_up_close_click";
- signal: "mouse,up,1";
- source: "close_click";
- action: STATE_SET "default" 0.0;
- target: "close_bg";
- target: "close_icon";
- }
- program {
- name: "show_clear_button";
- signal: "show,clear,button,signal";
+ program { "show_button";
+ signal: "elm,action,show,button";
source: "";
- action: STATE_SET "show" 0.0;
- target: "clear_button_bg";
- target: "clear_button_icon";
- target: "clear_button_click";
+ action: STATE_SET "show_button";
+ target: "elm.swallow.entry";
+ target: "elm.swallow.button";
}
- program {
- name: "hide_clear_button";
- signal: "hide,clear,button,signal";
+ program { "hide_button";
+ signal: "elm,action,hide,button";
source: "";
- action: STATE_SET "default" 0.0;
- target: "clear_button_bg";
- target: "clear_button_icon";
- target: "clear_button_click";
- }
- program {
- name: "mouse_down_upbutton_click";
- signal: "mouse,down,1";
- source: "up_button_click";
- action: STATE_SET "highlight" 0.0;
- target: "up_button_bg";
- target: "up_button_icon";
- }
- program {
- name: "mouse_up_upbutton_click";
- signal: "mouse,up,1";
- source: "up_button_click";
- action: STATE_SET "default" 0.0;
- target: "up_button_bg";
- target: "up_button_icon";
- }
- program {
- name: "mouse_down_downbutton_click";
- signal: "mouse,down,1";
- source: "down_button_click";
- action: STATE_SET "highlight" 0.0;
- target: "down_button_bg";
- target: "down_button_icon";
- }
- program {
- name: "mouse_up_downbutton_click";
- signal: "mouse,up,1";
- source: "down_button_click";
- action: STATE_SET "default" 0.0;
- target: "down_button_bg";
- target: "down_button_icon";
+ action: STATE_SET "default";
+ target: "elm.swallow.entry";
+ target: "elm.swallow.button";
}
}
}
{
HistoryItem::HistoryItem(HistoryItem && other) noexcept
+ : m_visitCounter(0)
{
try {
if (this != &other) {
: m_primaryKey(id)
, m_url(url)
, m_title(title)
+ , m_visitDate()
, m_lastVisit()
, m_favIcon(favicon)
+ , m_visitCounter(0)
{
if (thumbnail)
m_thumbnail = thumbnail;
: m_primaryKey(id)
, m_url(url)
, m_title()
+ , m_visitDate()
, m_lastVisit()
, m_favIcon(std::make_shared<tizen_browser::tools::BrowserImage>())
+ , m_visitCounter(0)
{
-
}
HistoryItem::HistoryItem(const HistoryItem& source)
: m_primaryKey(source.m_primaryKey)
, m_url(source.m_url)
, m_title(source.m_title)
+ , m_visitDate(source.m_visitDate)
, m_lastVisit(source.m_lastVisit)
+ , m_thumbnail(source.m_thumbnail)
, m_favIcon(source.m_favIcon)
+ , m_urifavicon(source.m_urifavicon)
, m_visitCounter(source.m_visitCounter)
{
HistoryItem::~HistoryItem()
{
-
}
HistoryItem & HistoryItem::operator=(HistoryItem && other) noexcept
return *this;
}
-bool HistoryItem::operator==(const HistoryItem& other)
+bool HistoryItem::operator==(const HistoryItem& other) const
{
return (m_url == other.m_url);
}
-bool HistoryItem::operator!=(const HistoryItem& other)
+bool HistoryItem::operator!=(const HistoryItem& other) const
{
return (m_url != other.m_url);
}
m_lastVisit = visitDate;
}
-boost::posix_time::ptime HistoryItem::getLastVisit() const
-{
- return m_lastVisit;
-}
-
// TODO Replace with std::time_t to_time_t(ptime pt) from boost/date_time/posix_time/conversion.hpp after migration
// to boost ver. 1.58
time_t HistoryItem::getLastVisitAsTimeT() const
m_visitCounter = visitCounter;
}
-int HistoryItem::getVisitCounter()
-{
- return m_visitCounter;
-}
-
void HistoryItem::setFavIcon(tools::BrowserImagePtr favIcon)
{
m_favIcon = favIcon;
}
-tools::BrowserImagePtr HistoryItem::getFavIcon()
+tools::BrowserImagePtr HistoryItem::getFavIcon() const
{
return m_favIcon;
}
m_urifavicon = uri;
}
-std::string HistoryItem::getUriFavicon() {
- return m_urifavicon;
-}
-
-
}
}
*
* @return bool
*/
- bool operator==(const HistoryItem& other);
- bool operator!=(const HistoryItem& other);
+ bool operator==(const HistoryItem& other) const;
+ bool operator!=(const HistoryItem& other) const;
void setUrl(const std::string & url);
std::string getUrl() const;
std::string getTitle() const;
void setLastVisit(boost::posix_time::ptime visitDate);
- boost::posix_time::ptime getLastVisit() const;
time_t getLastVisitAsTimeT() const;
void setVisitCounter(int visitCounter);
- int getVisitCounter();
void setThumbnail(tools::BrowserImagePtr thumbnail);
tools::BrowserImagePtr getThumbnail() const;
void setFavIcon(tools::BrowserImagePtr favIcon);
- tools::BrowserImagePtr getFavIcon();
+ tools::BrowserImagePtr getFavIcon() const;
void setUriFavicon(const std::string & uri);
- std::string getUriFavicon();
int getId() const { return m_primaryKey; };
private:
EXPORT_SERVICE(HistoryService, DOMAIN_HISTORY_SERVICE)
const int SEARCH_LIKE = 1;
+const int SEARCH_EQUALS = 0;
HistoryService::HistoryService() : m_testDbMod(false)
{
BROWSER_LOGD("HistoryService");
+ bp_history_adaptor_initialize();
}
HistoryService::~HistoryService()
{
+ BROWSER_LOGD("HistoryService");
+ bp_history_adaptor_deinitialize();
}
-void HistoryService::setStorageServiceTestMode(bool testmode) {
- m_testDbMod = testmode;
-}
-
-void HistoryService::errorPrint(std::string method) const
+void HistoryService::errorPrint(const std::string& method) const
{
int error_code = bp_history_adaptor_get_errorcode();
BROWSER_LOGE("[%s:%d] %s error: %d (%s)", __PRETTY_FUNCTION__, __LINE__,
- method.c_str(), error_code,
- tools::capiWebError::historyErrorToString(error_code).c_str());
+ method.c_str(), error_code,
+ tools::capiWebError::historyErrorToString(error_code).c_str());
}
-int HistoryService::getHistoryItemsCount(){
+int HistoryService::getHistoryItemsCount()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
int *ids = nullptr;
int count=0;
bp_history_rows_cond_fmt conds;
conds.ordering = 1; //way of ordering 0 asc 1 desc
conds.period_offset = BP_HISTORY_O_DATE_CREATED;
conds.period_type = BP_HISTORY_DATE_TODAY;
- if (bp_history_adaptor_get_cond_ids_p(&ids, &count, &conds, 0, nullptr, 0)
+ if (bp_history_adaptor_get_cond_ids_p(&ids, &count, &conds, 0, nullptr, SEARCH_EQUALS)
< 0) {
errorPrint("bp_history_adaptor_get_cond_ids_p");
}
return count;
}
-bool HistoryService::isDuplicate(const char* url) const
+bool HistoryService::isDuplicate(const std::string& url)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(url);
- int *ids=nullptr;
- int count=0;
- bp_history_rows_cond_fmt conds;
- conds.limit = -1; //no of rows to get negative means no limitation
- conds.offset = -1; //the first row's index
- conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort
- conds.ordering = 1; //way of ordering 0 asc 1 desc
- conds.period_offset = BP_HISTORY_O_DATE_CREATED;
- conds.period_type = BP_HISTORY_DATE_TODAY;
- if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0 ) {
- errorPrint("bp_history_adaptor_get_cond_ids_p");
- }
-
- bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_DATE_CREATED);
-
- for (int i = 0; i < count; i++) {
- bp_history_info_fmt history_info;
- if (bp_history_adaptor_get_info(ids[i], offset, &history_info) < 0) {
- BROWSER_LOGE("[%s:%d] bp_history_adaptor_get_info error ",
- __PRETTY_FUNCTION__, __LINE__);
- return false;
- }
- if (!history_info.url) {
- BROWSER_LOGD("Warning: history entry without url!");
- } else if (!strcmp(history_info.url, url)) {
- int freq;
- bp_history_adaptor_get_frequency(ids[i], &freq);
- bp_history_adaptor_set_frequency(ids[i], freq + 1);
- bp_history_adaptor_set_date_visited(ids[i],-1);
- bp_history_adaptor_easy_free(&history_info);
- return true;
- }
- bp_history_adaptor_easy_free(&history_info);
+ auto urlId = getHistoryId(url);
+ if (urlId) {
+ BROWSER_LOGW("[%s:%d] Duplicated. %d", __PRETTY_FUNCTION__, __LINE__, urlId);
+ bp_history_adaptor_visit(urlId);
+ return true;
}
return false;
}
-std::shared_ptr<HistoryItemVector> HistoryService::getHistoryAll()
-{
- return getHistoryItems(BP_HISTORY_DATE_ALL);
-}
-
std::shared_ptr<HistoryItemVector> HistoryService::getHistoryToday()
{
return getHistoryItems(BP_HISTORY_DATE_TODAY);
return getHistoryItems(BP_HISTORY_DATE_OLDER);
}
-#if PWA
int HistoryService::getHistoryCnt(const int& id)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
retVal = freq;
return retVal;
}
-#endif
std::shared_ptr<HistoryItemVector> HistoryService::getMostVisitedHistoryItems()
{
- std::shared_ptr<HistoryItemVector> ret_history_list(new HistoryItemVector);
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::shared_ptr<HistoryItemVector> ret_history_list =
+ std::make_shared<HistoryItemVector>();
int *ids=nullptr;
int count=-1;
//TODO: consider to change below line to BP_HISTORY_DATE_LAST_MONTH
conds.period_type = BP_HISTORY_DATE_ALL; // set from which period most visited sites are generated
- if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0 ) {
+ if (bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, SEARCH_EQUALS) < 0 )
errorPrint("bp_history_adaptor_get_cond_ids_p");
- }
bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FREQUENCY | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED | BP_HISTORY_O_THUMBNAIL);
int freq_arr[1000] = {0, };
- for(int i = 0; i< count; i++){
+ for (int i = 0; i< count; ++i) {
int freq;
if (0 == bp_history_adaptor_get_frequency(ids[i], &freq))
- {
freq_arr[i] = freq;
- }
}
int index_array[13] = {0, };
- int j=0;
+ int j = 0;
int maximum = freq_arr[0];
- int position = 0;
- for(int k=1; k<=12;k++){
- if(k > count || count == 0)
+ for (int k=1; k<=12; k++) {
+ if (k > count || count == 0)
break;
maximum = freq_arr[0];
- position = 0;
+ int position = 0;
- for(int i =1;i<count;i++){
- if (freq_arr[i] > maximum)
- {
+ for (int i = 1; i < count; ++i) {
+ if (freq_arr[i] > maximum) {
maximum = freq_arr[i];
position = i;
}
freq_arr[position] = -1;
}
- for(int i = 0; i < j; i++){
+ for (int i = 0; i < j; ++i) {
bp_history_info_fmt history_info;
if (bp_history_adaptor_get_info(ids[index_array[i]], offset,
&history_info) < 0) {
} else {
BROWSER_LOGD("history thumbnail lenght is -1");
}
- if(history_info.frequency > 0)
+ if (history_info.frequency > 0)
ret_history_list->push_back(history);
bp_history_adaptor_easy_free(&history_info);
}
return ret_history_list;
}
-void HistoryService::cleanMostVisitedHistoryItems()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- int *ids=nullptr;
- int count=-1;
- bp_history_rows_cond_fmt conds;
- conds.limit = -1; // no of rows to get negative means no limitation
- conds.offset = -1; // the first row's index
- conds.order_offset = BP_HISTORY_O_ALL; // property to sort
- conds.ordering = 1; // way of ordering 0 asc 1 desc
- conds.period_offset = BP_HISTORY_O_DATE_CREATED;
- conds.period_type = BP_HISTORY_DATE_ALL; // set from which period most visited sites are generated
-
- if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0 ) {
- errorPrint("bp_history_adaptor_get_cond_ids_p");
- return;
- }
-
- for(int i = 0; i < count; i++){
- bp_history_adaptor_set_frequency(ids[i], 0);
- }
- BROWSER_LOGD("Deleted Most Visited Sites!");
-}
-
std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByKeyword(
const std::string & keyword, int maxItems)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
std::string search("%" + keyword + "%"); // add SQL 'any character' signs
std::shared_ptr<HistoryItemVector> items(new HistoryItemVector);
conds.period_offset = BP_HISTORY_O_DATE_VISITED;
conds.period_type = BP_HISTORY_DATE_ALL;
- if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, BP_HISTORY_O_URL, search.c_str(), SEARCH_LIKE) < 0) {
+ if (bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, BP_HISTORY_O_URL, search.c_str(), SEARCH_LIKE) < 0) {
errorPrint("bp_history_adaptor_get_cond_ids_p");
return items;
}
bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_DATE_VISITED);
- for(int i = 0; i < count; i++) {
+ for (int i = 0; i < count; ++i) {
bp_history_info_fmt history_info;
if (bp_history_adaptor_get_info(ids[i], offset, &history_info) < 0) {
BROWSER_LOGE("[%s:%d] bp_history_adaptor_get_info error ",
return items;
}
-void HistoryService::addHistoryItem(const std::string & url,
- const std::string & title,
- tools::BrowserImagePtr favicon)
+void HistoryService::addHistoryItem(
+ const std::string & url,
+ const std::string & title,
+ tools::BrowserImagePtr favicon)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return;
}
- if (isDuplicate(url.c_str()))
+ if (isDuplicate(url)) {
+ BROWSER_LOGW("[%s:%d] Duplicated url.", __PRETTY_FUNCTION__, __LINE__);
return;
+ }
int id = -1;
- if(bp_history_adaptor_create(&id) < 0) {
+ if (bp_history_adaptor_create(&id) < 0) {
errorPrint("bp_history_adaptor_create");
+ return;
}
if (bp_history_adaptor_set_url(id, url.c_str()) < 0) {
errorPrint("bp_history_adaptor_set_url");
+ bp_history_adaptor_delete(id);
+ return;
}
if (bp_history_adaptor_set_title(id, title.c_str()) < 0) {
errorPrint("bp_history_adaptor_set_title");
+ bp_history_adaptor_delete(id);
+ return;
}
- if (bp_history_adaptor_set_date_visited(id,-1) < 0) {
- errorPrint("bp_history_adaptor_set_date_visited");
- }
- if (bp_history_adaptor_set_frequency(id, 1) < 0) {
- errorPrint("bp_history_adaptor_set_frequency");
+ if (bp_history_adaptor_visit(id) < 0) {
+ errorPrint("bp_history_adaptor_visit");
+ bp_history_adaptor_delete(id);
+ return;
}
+ updateBlob(id, favicon, BlobType::FAVICON);
+}
- if (favicon) {
- std::unique_ptr<tools::Blob> favicon_blob = tools::EflTools::getBlobPNG(favicon);
- if (!favicon_blob){
- BROWSER_LOGW("getBlobPNG failed");
- return;
- }
- unsigned char * fav = std::move((unsigned char*)favicon_blob->getData());
- if (bp_history_adaptor_set_icon(id, favicon->getWidth(), favicon->getHeight(), fav, favicon_blob->getLength()) < 0) {
- errorPrint("bp_history_adaptor_set_icon");
+bool HistoryService::updateBlob(
+ const int& id, tools::BrowserImagePtr image, const BlobType& type)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (image) {
+ auto blob = tools::EflTools::getBlobPNG(image);
+ if (!blob) {
+ BROWSER_LOGW("getBlobPNG failed");
+ return false;
+ }
+ unsigned char* data = (unsigned char*)blob->getData();
+
+ int ret = 0;
+ switch (type) {
+ case BlobType::FAVICON:
+ ret = bp_history_adaptor_set_icon(
+ id, image->getWidth(),
+ image->getHeight(), data,
+ blob->getLength());
+ break;
+ case BlobType::SNAPSHOT:
+ ret = bp_history_adaptor_set_snapshot(
+ id, image->getWidth(),
+ image->getHeight(), data,
+ blob->getLength());
+ break;
+ }
+ if (!data || ret < 0) {
+ errorPrint("bp_history_adaptor_set_icon");
+ return false;
}
+ return true;
}
+ return false;
}
void HistoryService::updateHistoryItemFavicon(const std::string & url, tools::BrowserImagePtr favicon)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
int id = getHistoryId(url);
- if (id!=0) {
- if (favicon) {
- std::unique_ptr<tools::Blob> favicon_blob = tools::EflTools::getBlobPNG(favicon);
- if (!favicon_blob){
- BROWSER_LOGW("getBlobPNG failed");
- return;
- }
- unsigned char * fav = std::move((unsigned char*)favicon_blob->getData());
- if (bp_history_adaptor_set_icon(id, favicon->getWidth(), favicon->getHeight(), fav, favicon_blob->getLength()) < 0) {
- errorPrint("bp_history_adaptor_set_icon");
- }
+ if (id) {
+ if (!updateBlob(id, favicon, BlobType::FAVICON)) {
+ BROWSER_LOGW("getBlobPNG failed");
+ return;
}
} else {
BROWSER_LOGW("Cannot update favicon, there is no such history item!");
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
int id = getHistoryId(url);
- if (id != 0 && snapshot) {
- std::unique_ptr<tools::Blob> snapshot_blob = tools::EflTools::getBlobPNG(snapshot);
- if (!snapshot_blob){
+ if (id) {
+ if (!updateBlob(id, snapshot, BlobType::SNAPSHOT)) {
BROWSER_LOGW("getBlobPNG failed");
return;
}
- unsigned char * snap = std::move((unsigned char*)snapshot_blob->getData());
- if (bp_history_adaptor_set_snapshot(id, snapshot->getWidth(), snapshot->getHeight(), snap,
- snapshot_blob->getLength()) < 0)
- errorPrint("bp_history_adaptor_set_snapshot");
}
}
void HistoryService::clearAllHistory()
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
bp_history_adaptor_reset();
- history_list.clear();
- historyAllDeleted();
}
-int HistoryService::getHistoryId(const std::string & url)
+int HistoryService::getHistoryId(const std::string& url)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
bp_history_rows_cond_fmt conds;
conds.limit = -1;
conds.offset = 0;
conds.ordering = 0;
conds.period_offset = BP_HISTORY_O_DATE_CREATED;
conds.period_type = BP_HISTORY_DATE_ALL;
- int *ids = nullptr;
+ int* ids = nullptr;
int ids_count = 0;
- if(bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0) < 0) {
+ if (bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), SEARCH_EQUALS) < 0) {
errorPrint("bp_history_adaptor_get_cond_ids_p");
} else if (ids_count != 0) {
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
int i = *ids;
free(ids);
return i;
void HistoryService::clearURLHistory(const std::string & url)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
int id = getHistoryId(url);
if (id!=0)
bp_history_adaptor_delete(id);
- if(0 == getHistoryItemsCount())
- historyEmpty(true);
- historyDeleted(url);
}
-void HistoryService::deleteHistoryItem(int id) {
+void HistoryService::deleteHistoryItem(int id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (bp_history_adaptor_delete(id) < 0) {
errorPrint("bp_history_adaptor_delete");
}
void HistoryService::setMostVisitedFrequency(int id, int frequency)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (bp_history_adaptor_set_frequency(id, frequency) < 0 )
errorPrint("bp_history_adaptor_set_frequency");
}
std::shared_ptr<HistoryItem> HistoryService::getHistoryItem(int * ids, int idNumber)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_VISITED);
bp_history_info_fmt history_info;
if (bp_history_adaptor_get_info(ids[idNumber], offset, &history_info) < 0) {
std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItems(bp_history_date_defs period)
{
- std::shared_ptr<HistoryItemVector> ret_history_list(new HistoryItemVector);
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::shared_ptr<HistoryItemVector> ret_history_list =
+ std::make_shared<HistoryItemVector>();
int *ids=nullptr;
int count=-1;
conds.period_offset = BP_HISTORY_O_DATE_VISITED;
conds.period_type = period;
- if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0) {
+ if (bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, SEARCH_EQUALS) < 0)
errorPrint("bp_history_adaptor_get_cond_ids_p");
- }
- for(int i = 0; i< count; i++) {
+ for (int i = 0; i< count; ++i) {
std::shared_ptr<HistoryItem> item = getHistoryItem(ids, i);
if (!item)
BROWSER_LOGW("[%s:%d] empty history item! ", __PRETTY_FUNCTION__, __LINE__);
return ret_history_list;
}
-std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByURL(
- const std::string& url, int maxItems)
-{
- return getHistoryItemsByKeyword(tools::extractDomain(url), maxItems);
-}
-
std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByKeywordsString(
const std::string& keywordsString, const int maxItems,
const unsigned int minKeywordLength, bool uniqueUrls)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (keywordsString.empty())
return std::make_shared<HistoryItemVector>();
namespace services
{
+enum class BlobType
+{
+ FAVICON,
+ SNAPSHOT
+};
+
class BROWSER_EXPORT HistoryService: public tizen_browser::core::AbstractService
{
public:
const std::string & title,
tools::BrowserImagePtr favicon);
+ bool updateBlob(
+ const int& id, tools::BrowserImagePtr favicon, const BlobType& type = BlobType::FAVICON);
void updateHistoryItemFavicon(const std::string & url,
tools::BrowserImagePtr favicon);
void updateHistoryItemSnapshot(const std::string & url,
void deleteHistoryItem(int id);
void setMostVisitedFrequency(int id, int frequency);
std::shared_ptr<HistoryItem> getHistoryItem(const std::string & url);
- std::shared_ptr<HistoryItemVector> getHistoryAll();
std::shared_ptr<HistoryItemVector> getHistoryToday();
std::shared_ptr<HistoryItemVector> getHistoryYesterday();
std::shared_ptr<HistoryItemVector> getHistoryLastWeek();
std::shared_ptr<HistoryItemVector> getHistoryLastMonth();
std::shared_ptr<HistoryItemVector> getHistoryOlder();
std::shared_ptr<HistoryItemVector> getMostVisitedHistoryItems();
- void cleanMostVisitedHistoryItems();
std::shared_ptr<HistoryItemVector> getHistoryItemsByKeyword(const std::string & keyword, int maxItems);
- std::shared_ptr<HistoryItemVector> getHistoryItemsByURL(const std::string & url, int maxItems);
-#if PWA
int getHistoryCnt(const int& id);
-#endif
/**
* @brief Searches for history items matching given pattern.
const unsigned int minKeywordLength, bool uniqueUrls = false);
int getHistoryItemsCount();
- void setStorageServiceTestMode(bool testmode = true);
-
- boost::signals2::signal<void (bool)>historyEmpty;
- boost::signals2::signal<void (const std::string& uri)> historyDeleted;
- boost::signals2::signal<void ()> historyAllDeleted;
private:
bool m_testDbMod;;
- std::vector<std::shared_ptr<HistoryItem>> history_list;
std::shared_ptr<tizen_browser::services::StorageService> m_storageManager;
/**
* Help method printing last bp_history_error_defs error.
*/
- void errorPrint(std::string method) const;
+ void errorPrint(const std::string& method) const;
/**
* @throws StorageExceptionInitialization on error
*/
- void initDatabaseBookmark(const std::string & db_str);
+ void initDatabaseBookmark(const std::string& db_str);
std::shared_ptr<HistoryItem> getHistoryItem(int* ids, int idNumber = 0);
std::shared_ptr<HistoryItemVector> getHistoryItems(bp_history_date_defs period = BP_HISTORY_DATE_TODAY);
- bool isDuplicate(const char* url) const;
+ bool isDuplicate(const std::string& url);
};
}
++itItem;
}
-bool containsDuplicates(std::shared_ptr<HistoryItemVector> vec,
- std::shared_ptr<HistoryItem> checked)
+bool containsDuplicates(const std::shared_ptr<HistoryItemVector>& vec,
+ const std::shared_ptr<HistoryItem>& checked)
{
bool found = false;
for (auto& s : *vec)
/**
* @brief Returns true, if vector contains at least two items with the same url.
*/
-bool containsDuplicates(std::shared_ptr<HistoryItemVector> vec,
- std::shared_ptr<HistoryItem> checked);
+bool containsDuplicates(const std::shared_ptr<HistoryItemVector>& vec,
+ const std::shared_ptr<HistoryItem>& checked);
/**
* @brief Removes history items with urls duplicating other items.
set(HistoryUI_SRCS
HistoryUI.cpp
- HistoryUIFocusManager.cpp
HistoryPeriod.cpp
HistoryDaysListManager/HistoryDaysListManagerMob.cpp
HistoryDaysListManager/mob/HistoryDayItemMob.cpp
include(EDCCompile)
set(edcFiles
- History_mob.edc
HistoryDaysList_mob.edc
)
using WebsiteVisitItemData = struct WebsiteVisitItemData_
{
- WebsiteVisitItemData_(std::shared_ptr<services::HistoryItem> historyItem)
+ explicit WebsiteVisitItemData_(const std::shared_ptr<services::HistoryItem>& historyItem)
: historyItem(historyItem)
{
}
{
WebsiteHistoryItemData_(const std::string& websiteTitle,
const std::string& websiteDomain,
- std::shared_ptr<tools::BrowserImage> favIcon,
+ const std::shared_ptr<tools::BrowserImage>& favIcon,
const WebsiteVisitItemDataPtr& item) :
websiteTitle(websiteTitle), websiteDomain(websiteDomain),
favIcon(favIcon), websiteVisitItem(item)
, m_history_day_item_class(elm_genlist_item_class_new())
, m_history_item_item_class(elm_genlist_item_class_new())
, m_history_download_item_class(elm_genlist_item_class_new())
+ , m_genlist(nullptr)
, m_isRemoveMode(false)
- , m_delete_count(0)
+ , m_selected_count(0)
, m_history_count(0)
, m_isSelectAllChecked(EINA_FALSE)
, m_downloadManagerItem(nullptr)
if (id->self->m_isRemoveMode) {
auto check(elm_check_add(obj));
evas_object_smart_callback_add(check, "changed", _check_state_changed, id);
+ elm_check_state_set(check, id->self->m_isSelectAllChecked);
+ evas_object_propagate_events_set(check, EINA_FALSE);
return check;
}
}
return nullptr;
}
-void HistoryDaysListManagerMob::countItemsToDelete()
+void HistoryDaysListManagerMob::updateDeleteClick(const int &id)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_delete_count = 0;
- auto it(elm_genlist_first_item_get(m_genlist));
- while ((it = elm_genlist_item_next_get(it))) {
- auto check(elm_object_item_part_content_get(it, "elm.swallow.end"));
- if (!check)
- continue;
- auto state(elm_check_state_get(check));
- m_itemsToDelete[it] = state;
- if (state == EINA_TRUE)
- ++m_delete_count;
- if (m_delete_count == m_history_count) {
- auto first(elm_genlist_first_item_get(m_genlist));
- auto firstCheck(elm_object_item_part_content_get(first, "elm.swallow.end"));
- elm_check_state_set(firstCheck, EINA_TRUE);
- }
- if (it == elm_genlist_last_item_get(m_genlist) &&
- m_delete_count == 0) {
- auto first(elm_genlist_first_item_get(m_genlist));
- auto firstCheck(elm_object_item_part_content_get(first, "elm.swallow.end"));
- elm_check_state_set(firstCheck, EINA_FALSE);
- }
- }
- setSelectedItemsCount(m_delete_count);
- setRightButtonEnabledForHistory(m_delete_count);
+ m_map_selected[id] = (m_map_selected[id] == EINA_TRUE) ? EINA_FALSE : EINA_TRUE;
+ m_selected_count += (m_map_selected[id] == EINA_TRUE) ? 1 : -1;
+ m_isSelectAllChecked = (m_selected_count == m_history_count) ? EINA_TRUE : EINA_FALSE;
+ elm_genlist_item_update(m_selectAllItem);
+ elm_genlist_realized_items_update(m_genlist);
+ setSelectedItemsCount(m_selected_count);
+ setRightButtonEnabledForHistory(m_selected_count);
}
void HistoryDaysListManagerMob::selectAllCheckboxes()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto it(elm_genlist_first_item_get(m_genlist));
- auto firstCheck(elm_object_item_part_content_get(it, "elm.swallow.end"));
- m_isSelectAllChecked = elm_check_state_get(firstCheck);
-
- while ((it = elm_genlist_item_next_get(it))) {
- auto check(elm_object_item_part_content_get(it, "elm.swallow.end"));
- if (!check)
- continue;
- elm_check_state_set(check, m_isSelectAllChecked);
- }
- if (m_isSelectAllChecked == EINA_TRUE && elm_genlist_items_count(m_genlist) > 1)
- m_delete_count = m_history_count;
- if (m_isSelectAllChecked == EINA_FALSE)
- m_delete_count = 0;
- setSelectedItemsCount(m_delete_count);
- setRightButtonEnabledForHistory(m_delete_count);
+ m_isSelectAllChecked = elm_check_state_get(elm_object_item_part_content_get(
+ m_selectAllItem, "elm.swallow.end"));
+ for (auto& it : m_map_selected)
+ it.second = m_isSelectAllChecked;
+
+ m_selected_count = m_isSelectAllChecked == EINA_TRUE ? m_history_count : 0;
+ setSelectedItemsCount(m_selected_count);
+ setRightButtonEnabledForHistory(m_selected_count);
+ elm_genlist_realized_items_update(m_genlist);
}
void HistoryDaysListManagerMob::_check_state_changed(void* data, Evas_Object* obj, void*)
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
auto id(static_cast<ItemData*>(data));
- auto first(elm_genlist_first_item_get(id->self->m_genlist));
- auto check(elm_object_item_part_content_get(first, "elm.swallow.end"));
-
- if (check == obj)
+ if (elm_object_item_part_content_get(id->self->m_selectAllItem, "elm.swallow.end") == obj)
id->self->selectAllCheckboxes();
else
- id->self->countItemsToDelete();
+ id->self->updateDeleteClick(id->websiteVisitItem->historyItem->getId());
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
auto arrow_layout(elm_layout_add(obj));
auto edjeDir(EDJE_DIR + std::string("HistoryUI/HistoryDaysList.edj"));
- elm_layout_file_set(arrow_layout, edjeDir.c_str(), "arrow-layout");
-
- auto edje(elm_layout_edje_get(arrow_layout));
- edje_object_signal_emit(edje, "state,contracted,signal", "");
- if (dayData->expanded)
- edje_object_signal_emit(edje, "state,expanded,signal", "");
-
+ elm_layout_file_set(arrow_layout, edjeDir.c_str(),
+ dayData->expanded ? "arrow-layout-expanded" : "arrow-layout-contracted");
return arrow_layout;
}
return nullptr;
if (data && !strcmp(part, "elm.swallow.end")) {
auto check(elm_check_add(obj));
auto item(static_cast<ItemData*>(data));
- if (item->self->m_isRemoveMode){
- elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ if (item->self->m_isRemoveMode) {
evas_object_smart_callback_add(check, "changed", _check_state_changed, data);
- if (item->self->m_selectAllItem &&
- item->self->m_isSelectAllChecked == EINA_TRUE) {
- auto firstCheck(elm_object_item_part_content_get(item->self->m_selectAllItem, "elm.swallow.end"));
- elm_check_state_set(firstCheck, item->self->m_isSelectAllChecked);
- }
- elm_check_state_set(check, item->self->m_isSelectAllChecked);
+ elm_check_state_set(check,
+ item->self->m_map_selected[item->websiteVisitItem->historyItem->getId()]);
return check;
} else {
evas_object_smart_callback_del(check, "changed", _check_state_changed);
- elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
}
}
return nullptr;
// TODO Download history is planed for the 2nd phase
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_parent = parent;
+ m_map_selected.clear();
+ m_selected_count = 0;
+ m_isSelectAllChecked = EINA_FALSE;
m_isRemoveMode = isRemoveMode;
if (m_genlist) {
id->websiteVisitItem = nullptr;
id->websiteHistoryItemData = nullptr;
id->str = nullptr;
+ /*TODO: Uncomment this feature when Download History is supported (Phase 2).
if (!m_isRemoveMode) {
- id->str = _("IDS_BR_BODY_DOWNLOAD_HISTORY");
- m_downloadManagerItem = elm_genlist_item_append(
- m_genlist, m_history_download_item_class,
- id,
- nullptr, ELM_GENLIST_ITEM_NONE,
- nullptr, nullptr);
- elm_object_item_disabled_set(m_downloadManagerItem, EINA_TRUE);
- } else {
+ id->str = _("IDS_BR_BODY_DOWNLOAD_HISTORY");
+ m_downloadManagerItem = elm_genlist_item_append(
+ m_genlist, m_history_download_item_class,
+ id,
+ nullptr, ELM_GENLIST_ITEM_NONE,
+ nullptr, nullptr);
+ elm_object_item_disabled_set(m_downloadManagerItem, EINA_TRUE);
+ }*/
+ if (m_isRemoveMode) {
id->str = _("IDS_BR_OPT_SELECT_ALL");
m_selectAllItem = elm_genlist_item_append(
m_genlist, m_history_download_item_class,
id,
nullptr, ELM_GENLIST_ITEM_NONE,
- nullptr, nullptr);
+ _select_all_selected, id);
}
return m_genlist;
}
HistoryPeriod period)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
std::vector<WebsiteHistoryItemDataPtr> historyItems;
for (auto& item : *items) {
auto pageViewItem(std::make_shared<WebsiteVisitItemData>(item));
item->getUrl(),
websiteFavicon,
pageViewItem));
+ m_map_selected.insert({item->getId(), m_isSelectAllChecked});
++m_history_count;
}
auto dayItem(std::make_shared<HistoryDayItemData>(toString(period), historyItems));
ELM_GENLIST_ITEM_NONE,
_item_selected,
itData));
- self->m_itemsToDelete[listItem] = EINA_FALSE;
+ self->m_itemsToDelete.insert({itData->websiteVisitItem->historyItem->getId(), listItem});
self->m_visitItemData[listItem] = el->websiteVisitItem;
}
self->m_itemData[it]->expanded = true;
elm_genlist_realized_items_update(genlist);
}
-void HistoryDaysListManagerMob::_item_selected(void* data, Evas_Object *, void *)
+void HistoryDaysListManagerMob::_select_all_selected(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto iD(static_cast<ItemData*>(data));
- iD->self->signalHistoryItemClicked(
- iD->websiteVisitItem->historyItem->getUrl().c_str(),
- iD->websiteVisitItem->historyItem->getTitle().c_str());
- delete iD;
+ if (data) {
+ auto iD(static_cast<ItemData*>(data));
+ Evas_Object *check = elm_object_item_part_content_get(iD->self->m_selectAllItem, "elm.swallow.end");
+ elm_check_state_set(check, !elm_check_state_get(check));
+ _check_state_changed(data, check, nullptr);
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+ }
+}
+
+void HistoryDaysListManagerMob::_item_selected(void* data, Evas_Object*, void* event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data && event_info) {
+ auto iD(static_cast<ItemData*>(data));
+ if (iD->self->m_isRemoveMode) {
+ elm_genlist_item_update(static_cast<Elm_Object_Item*>(event_info));
+ iD->self->updateDeleteClick(iD->websiteVisitItem->historyItem->getId());
+ } else {
+ iD->self->signalHistoryItemClicked(
+ iD->websiteVisitItem->historyItem->getUrl().c_str(),
+ iD->websiteVisitItem->historyItem->getTitle().c_str());
+ }
+ } else {
+ BROWSER_LOGW("[%s] data or event_info = nullptr", __PRETTY_FUNCTION__);
+ }
}
void HistoryDaysListManagerMob::_tree_item_pressed(void* data, Evas_Object*, void* event_info)
return;
}
for (auto& x : m_itemsToDelete) {
- if (x.second == EINA_TRUE) {
+ if (m_map_selected[x.first] == EINA_TRUE) {
onWebsiteHistoryItemVisitItemClicked(
- m_visitItemData[x.first], true);
- x.second = EINA_FALSE;
- m_visitItemData.erase(x.first);
- m_expandedState.erase(x.first);
+ m_visitItemData[x.second], true);
+ m_map_selected[x.first] = EINA_FALSE;
+ m_visitItemData.erase(x.second);
+ m_expandedState.erase(x.second);
m_itemsToDelete.erase(x.first);
--m_history_count;
}
public:
HistoryDaysListManagerMob();
virtual ~HistoryDaysListManagerMob();
+ HistoryDaysListManagerMob(const HistoryDaysListManagerMob&) = delete;
+ HistoryDaysListManagerMob& operator=(const HistoryDaysListManagerMob&) = delete;
void createGenlistItemClasses();
static char* _genlist_history_day_text_get(void *data, Evas_Object *, const char *part);
static void _tree_item_expanded(void*, Evas_Object*, void*);
static void _tree_item_contracted(void*, Evas_Object*, void*);
static void _tree_item_pressed(void*, Evas_Object*, void*);
+ static void _select_all_selected(void *data, Evas_Object *obj, void *event_info);
static void _item_selected(void *data, Evas_Object *obj, void *event_info);
static Evas_Object* _genlist_history_download_content_get(void*, Evas_Object* obj, const char *part);
static Evas_Object* _genlist_history_item_content_get(void *data, Evas_Object *, const char *part);
void onWebsiteHistoryItemVisitItemClicked(
const WebsiteVisitItemDataPtrConst websiteVisitItemData,
bool remove);
- void countItemsToDelete();
+ void updateDeleteClick(const int& id);
void selectAllCheckboxes();
void removeSelectedItems();
bool isSelectAllChecked() const { return m_isSelectAllChecked == EINA_TRUE; }
void connectSignals();
void appendDayItem(HistoryDayItemDataPtr dayItemData);
void showNoHistoryMessage(bool show);
- bool isHistoryDayListEmpty() {return m_dayItems.empty();}
+ bool isHistoryDayListEmpty() const {return m_dayItems.empty();}
/**
* @brief remove item from view and from vector
Evas_Object* m_genlist;
std::map<Elm_Object_Item*, HistoryDayItemDataPtr> m_itemData;
std::map<Elm_Object_Item*, Eina_Bool> m_expandedState;
- std::map<Elm_Object_Item*, Eina_Bool> m_itemsToDelete;
+ std::map<int, Elm_Object_Item*> m_itemsToDelete;
std::map<Elm_Object_Item*, WebsiteVisitItemDataPtr> m_visitItemData;
+ std::map<int, Eina_Bool> m_map_selected;
bool m_isRemoveMode;
std::vector<ItemData*> m_itemDataVector;
- size_t m_delete_count;
+ size_t m_selected_count;
size_t m_history_count;
Eina_Bool m_isSelectAllChecked;
Elm_Object_Item* m_downloadManagerItem;
, m_boxMainVertical(nullptr)
, m_layoutHeader(nullptr)
, m_boxHeader(nullptr)
+ , m_layoutBoxWebsites(nullptr)
+ , m_boxWebsites(nullptr)
{
for (auto& websiteHistoryItemData : dayItemData->websiteHistoryItems) {
auto websiteHistoryItem =
m_layoutHeader = elm_layout_add(m_layoutMain);
evas_object_size_hint_align_set(m_layoutHeader, 0.0, 0.0);
elm_layout_file_set(m_layoutHeader, edjeFiles->historyDaysList.c_str(), "layoutHeader");
- elm_object_text_set(m_layoutHeader, m_dayItemData->day.c_str());
+ elm_object_translatable_text_set(m_layoutHeader, m_dayItemData->day.c_str());
m_layoutBoxWebsites = elm_layout_add(m_layoutMain);
tools::EflTools::setExpandHints(m_layoutBoxWebsites);
class HistoryDayItemMob
{
public:
- HistoryDayItemMob(HistoryDayItemDataPtr dayItemData);
+ explicit HistoryDayItemMob(HistoryDayItemDataPtr dayItemData);
virtual ~HistoryDayItemMob();
Evas_Object* init(Evas_Object* parent,
HistoryDaysListManagerEdjePtr edjeFiles);
namespace base_ui {
WebsiteHistoryItemMob::WebsiteHistoryItemMob(WebsiteHistoryItemDataPtr websiteHistoryItemData)
- : m_websiteHistoryItemData(websiteHistoryItemData)
+ : m_eflObjectsDeleted(false)
+ , m_websiteHistoryItemData(websiteHistoryItemData)
, m_websiteHistoryItemTitle(
std::make_shared<WebsiteHistoryItemTitleMob>(websiteHistoryItemData))
, m_websiteHistoryItemVisitItems(
class WebsiteHistoryItemMob
{
public:
- WebsiteHistoryItemMob(WebsiteHistoryItemDataPtr websiteHistoryItemData);
+ explicit WebsiteHistoryItemMob(WebsiteHistoryItemDataPtr websiteHistoryItemData);
virtual ~WebsiteHistoryItemMob();
Evas_Object* init(Evas_Object* parent,
HistoryDaysListManagerEdjePtr edjeFiles);
HistoryDaysListManagerEdjePtr edjeFiles);
/// used to indicate, if efl object were already deleted
- bool m_eflObjectsDeleted = false;
+ bool m_eflObjectsDeleted;
WebsiteHistoryItemDataPtr m_websiteHistoryItemData;
WebsiteHistoryItemTitleMobPtr m_websiteHistoryItemTitle;
WebsiteHistoryItemTitleMob::WebsiteHistoryItemTitleMob(
WebsiteHistoryItemDataPtr websiteHistoryItemData)
: m_websiteHistoryItemData(websiteHistoryItemData)
+ , m_clickBlocked(false)
, m_buttonSelect(nullptr)
+ , m_buttonDelete(nullptr)
, m_imageFavIcon(nullptr)
, m_imageFavIconMask(nullptr)
, m_layoutMain(nullptr)
+ , m_layerGesture(nullptr)
, m_boxMain(nullptr)
, m_layoutContent(nullptr)
, m_layoutButtonDelete(nullptr)
return;
WebsiteHistoryItemTitleMob* self =
static_cast<WebsiteHistoryItemTitleMob*>(data);
- if (self->getClickBlock()) {
- self->setClickBlock(false);
+ if (self->m_clickBlocked) {
+ self->m_clickBlocked = false;
return;
}
signalButtonClicked(self->getWebsiteHistoryItemDataPtr(), false);
return;
WebsiteHistoryItemTitleMob* self =
static_cast<WebsiteHistoryItemTitleMob*>(data);
- if (self->getClickBlock()) {
- self->setClickBlock(false);
+ if (self->m_clickBlocked) {
+ self->m_clickBlocked = false;
return;
}
signalButtonClicked(self->getWebsiteHistoryItemDataPtr(), true);
auto info = static_cast<Elm_Gesture_Line_Info*>(event_info);
if (info->momentum.mx != 0 || info->momentum.my != 0) {
// prevents click event, when gesture occurred
- self->setClickBlock(true);
+ self->m_clickBlocked = true;
// ignore too small gestures
if (abs(info->momentum.mx) < GESTURE_MOMENTUM_MIN)
return flag;
0.5);
elm_layout_file_set(lay, edjeFilePath.c_str(),
"layoutButtonDelete");
- elm_object_text_set(lay, _("IDS_BR_SK_CLEAR"));
+ elm_object_translatable_text_set(lay, "IDS_BR_SK_CLEAR");
m_buttonDelete = elm_button_add(parent);
elm_object_part_content_set(lay, "buttonSelect", m_buttonDelete);
Evas_Object* layout = elm_layout_add(parent);
tools::EflTools::setExpandHints(layout);
elm_layout_file_set(layout, edjeFilePath.c_str(), "layoutTextSummaryTitle");
- elm_object_text_set(layout, m_websiteHistoryItemData->websiteTitle.c_str());
+ elm_object_translatable_text_set(layout, m_websiteHistoryItemData->websiteTitle.c_str());
return layout;
}
class WebsiteHistoryItemTitleMob
{
public:
- WebsiteHistoryItemTitleMob(
+ explicit WebsiteHistoryItemTitleMob(
WebsiteHistoryItemDataPtr websiteHistoryItemData);
virtual ~WebsiteHistoryItemTitleMob();
Evas_Object* init(Evas_Object* parent, const std::string& edjeFilePath);
- WebsiteHistoryItemDataPtr getWebsiteHistoryItemDataPtr()
- {
- return m_websiteHistoryItemData;
- }
+ WebsiteHistoryItemDataPtr getWebsiteHistoryItemDataPtr() const {return m_websiteHistoryItemData;}
// static signals to allow easy connection in HistoryDaysListManager
static boost::signals2::signal<void(const WebsiteHistoryItemDataPtr, bool)> signalButtonClicked;
void showButtonDelete(bool show);
- void setClickBlock(bool blocked) {clickBlocked = blocked;}
- bool getClickBlock() {return clickBlocked;}
- // prevents click event, when gesture occured
- bool clickBlocked = false;
private:
Evas_Object* createLayoutContent(Evas_Object* parent,
static Evas_Event_Flags _gestureOccured(void *data, void *event_info);
WebsiteHistoryItemDataPtr m_websiteHistoryItemData;
+ // prevents click event, when gesture occured
+ bool m_clickBlocked;
Evas_Object* m_buttonSelect;
Evas_Object* m_buttonDelete;
const int WebsiteHistoryItemVisitItemsMob::GESTURE_MOMENTUM_MIN = 2000;
WebsiteHistoryItemVisitItemsMob::WebsiteHistoryItemVisitItemsMob(WebsiteVisitItemDataPtr websiteVisitItem)
- : m_eflObjectsDeleted(nullptr)
+ : m_eflObjectsDeleted(false)
+ , m_websiteVisitItem { websiteVisitItem, LayoutVisitItemObjects() }
, m_layoutMain(nullptr)
, m_boxMainVertical(nullptr)
{
- VisitItemObjects obj;
- obj.websiteVisitItemData = websiteVisitItem;
- m_websiteVisitItem = obj;
}
WebsiteHistoryItemVisitItemsMob::~WebsiteHistoryItemVisitItemsMob()
elm_layout_file_set(layoutContent, edjeFilePath.c_str(),
"layoutMainContent");
- elm_object_part_text_set(layoutContent, "textTitle",
+ elm_object_translatable_part_text_set(layoutContent, "textTitle",
websiteVisitItemData->historyItem->getTitle().c_str());
- elm_object_part_text_set(layoutContent, "textUrl",
+ elm_object_translatable_part_text_set(layoutContent, "textUrl",
websiteVisitItemData->historyItem->getUrl().c_str());
// TODO Replace with std::time_t to_time_t(ptime pt) in the future
}
std::strftime(buffer,80,"%R",&ts_ret);
- elm_object_part_text_set(layoutContent, "textTime", buffer);
+ elm_object_translatable_part_text_set(layoutContent, "textTime", buffer);
Evas_Object* buttonSelect = elm_button_add(parent);
elm_object_part_content_set(layoutContent, "buttonSelect", buttonSelect);
Evas_Object* lay = elm_layout_add(parent);
evas_object_size_hint_align_set(lay, EVAS_HINT_FILL, 0.5);
elm_layout_file_set(lay, edjeFilePath.c_str(), "layoutButtonDelete");
- elm_object_text_set(lay, _("IDS_BR_SK_CLEAR"));
+ elm_object_translatable_text_set(lay, "IDS_BR_SK_CLEAR");
Evas_Object* buttonDelete = elm_button_add(parent);
elm_object_part_content_set(lay, "buttonSelect", buttonDelete);
}
bool WebsiteHistoryItemVisitItemsMob::contains(
- WebsiteVisitItemDataPtrConst websiteVisitItemData)
+ WebsiteVisitItemDataPtrConst websiteVisitItemData) const
{
if (m_websiteVisitItem.websiteVisitItemData == websiteVisitItemData)
return true;
struct LayoutVisitItemObjects layoutVisitItemObjects;
};
public:
- WebsiteHistoryItemVisitItemsMob(WebsiteVisitItemDataPtr websiteVisitItems);
+ explicit WebsiteHistoryItemVisitItemsMob(WebsiteVisitItemDataPtr websiteVisitItems);
virtual ~WebsiteHistoryItemVisitItemsMob();
Evas_Object* init(Evas_Object* parent, const std::string& edjeFilePath);
/**
// static signals to allow easy connection in HistoryDaysListManager
static boost::signals2::signal<void(const WebsiteVisitItemDataPtr, bool)> signalButtonClicked;
- bool contains(WebsiteVisitItemDataPtrConst websiteVisitItemData);
+ bool contains(WebsiteVisitItemDataPtrConst websiteVisitItemData) const;
void removeItem(WebsiteVisitItemDataPtrConst websiteVisitItemData);
int getVisitItemsId();
int size() {return eina_list_count(elm_box_children_get(m_boxMainVertical));}
HistoryUI::HistoryUI()
: m_parent(nullptr)
- , m_main_layout(nullptr)
, m_buttonClose(nullptr)
, m_buttonClear(nullptr)
, m_daysList(nullptr)
, m_modulesToolbar(nullptr)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("HistoryUI/History.edj");
-
if (!m_historyDaysListManager)
m_historyDaysListManager = std::make_shared<HistoryDaysListManagerMob>();
m_historyDaysListManager->setRightButtonEnabledForHistory.connect(
boost::bind(&HistoryUI::setRightButtonEnabled, this, _1));
m_historyDaysListManager->setSelectedItemsCount.connect([this](auto count){
- m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str());
+ m_naviframe->setTitle(
+ count ? (boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str()
+ : "IDS_BR_HEADER_SELECT_ITEMS_ABB2");
});
}
void HistoryUI::showUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_main_layout);
m_naviframe->show();
- evas_object_show(m_main_layout);
}
void HistoryUI::hideUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_main_layout);
- evas_object_hide(m_main_layout);
clearItems();
m_naviframe->hide();
}
void HistoryUI::createHistoryUILayout()
{
- elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
if (!m_naviframe)
m_naviframe = std::make_shared<NaviframeWrapper>(m_parent);
- m_main_layout = elm_layout_add(m_naviframe->getLayout());
- m_naviframe->setContent(m_main_layout);
-
- elm_layout_file_set(m_main_layout, m_edjFilePath.c_str(), "history-layout");
- evas_object_size_hint_weight_set(m_main_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(m_main_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ m_naviframe->setContent(createDaysList(m_naviframe->getLayout()));
- m_daysList = createDaysList(m_main_layout);
- clearItems();
createTopContent();
elm_object_signal_emit(m_naviframe->getLayout(), "show_toolbars", "ui");
Evas_Object* HistoryUI::createDaysList(Evas_Object* parent, bool isRemoveMode)
{
- M_ASSERT(history_layout);
+ M_ASSERT(parent);
- auto list = m_historyDaysListManager->createDaysList(parent, isRemoveMode);
+ m_daysList = m_historyDaysListManager->createDaysList(parent, isRemoveMode);
- evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(m_daysList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_daysList, EVAS_HINT_FILL, EVAS_HINT_FILL);
- return list;
+ return m_daysList;
}
void HistoryUI::removeSelectedHistoryItems()
Evas_Object* getContent();
void showUI();
void hideUI();
- Evas_Object* createDaysList(Evas_Object* history_layout, bool isRemoveMode = false);
+ Evas_Object* createDaysList(Evas_Object* parent, bool isRemoveMode = false);
void removeSelectedHistoryItems();
virtual std::string getName();
void addHistoryItems(std::shared_ptr<services::HistoryItemVector>,
static Evas_Object* _listActionBarContentGet(void *data, Evas_Object *obj, const char *part);
static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
- std::string m_edjFilePath;
Evas_Object *m_parent;
- Evas_Object *m_main_layout;
Evas_Object *m_buttonClose;
Evas_Object *m_buttonClear;
Evas_Object *m_daysList;
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "HistoryUIFocusManager.h"
-#include "HistoryDaysListManager/HistoryDaysListManager.h"
-
-namespace tizen_browser{
-namespace base_ui{
-
-HistoryUIFocusManager::HistoryUIFocusManager(
- HistoryDaysListManagerPtr historyDaysListManager)
- : m_historyDaysListManager(historyDaysListManager)
-{
-}
-
-HistoryUIFocusManager::~HistoryUIFocusManager()
-{
-}
-
-void HistoryUIFocusManager::setFocusObj(Evas_Object* obj)
-{
- m_focusObject = obj;
-}
-
-#if !PROFILE_MOBILE
-void HistoryUIFocusManager::refreshFocusChain()
-{
- elm_object_focus_custom_chain_unset(m_focusObject);
-
- m_historyDaysListManager->setFocusChain(m_focusObject);
-
- elm_object_focus_custom_chain_append(m_focusObject, m_buttonClear, NULL);
- elm_object_focus_custom_chain_append(m_focusObject, m_buttonClose, NULL);
- elm_object_focus_set(m_buttonClose, EINA_TRUE);
-}
-
-void HistoryUIFocusManager::unsetFocusChain()
-{
- elm_object_focus_custom_chain_unset(m_focusObject);
-}
-#endif
-
-void HistoryUIFocusManager::setHistoryUIButtons(Evas_Object* buttonClose, Evas_Object* buttonClear)
-{
- m_buttonClose = buttonClose;
- m_buttonClear = buttonClear;
-}
-
-}
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef HISTORYUIFOCUSMANAGER_H_
-#define HISTORYUIFOCUSMANAGER_H_
-
-#include <memory>
-#include <Elementary.h>
-
-namespace tizen_browser{
-namespace base_ui{
-
-class HistoryDaysListManager;
-using HistoryDaysListManagerPtr = std::shared_ptr<HistoryDaysListManager>;
-
-class HistoryUIFocusManager
-{
-public:
- HistoryUIFocusManager(HistoryDaysListManagerPtr historyDaysListManager);
- virtual ~HistoryUIFocusManager();
- void setFocusObj(Evas_Object* obj);
- void refreshFocusChain();
- void unsetFocusChain();
- void setHistoryUIButtons(Evas_Object* buttonClose, Evas_Object* buttonClear);
-
-private:
- Evas_Object* m_focusObject{nullptr};
- HistoryDaysListManagerPtr m_historyDaysListManager;
-
- Evas_Object* m_buttonClose{nullptr};
- Evas_Object* m_buttonClear{nullptr};
-};
-
-}
-}
-
-#endif /* HISTORYUIFOCUSMANAGER_H_ */
collections { base_scale: 2.6;
group {
- name: "arrow-layout";
+ name: "arrow-layout-expanded";
images {
image: "core_icon_expand_close.png" COMP;
image: "core_icon_expand_open.png" COMP;
inherit: "default" 0.0;
image.normal: "core_icon_expand_close.png";
}
+ description {
+ state: "expand" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "core_icon_expand_open.png";
+ }
}
}
programs {
program {
name: "expanded";
signal: "state,expanded,signal";
- action: STATE_SET "default" 0.0;
+ action: STATE_SET "expand" 0.0;
target: "elm.icon.image";
}
program {
}
}
}
+ group { name: "arrow-layout-contracted";
+ inherit: "arrow-layout-expanded";
+ parts {
+ part {
+ name: "elm.icon.image";
+ scale : 1;
+ type : IMAGE;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 64 64 ;
+ max: 64 64;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ image.normal: "core_icon_expand_close.png";
+ color: 61 185 204 255;
+ }
+ }
+ }
+ }
+
group { name: "layoutScrollerDays";
parts {
BACKGROUND_COVER("", 1, "colorMainBg")
+++ /dev/null
-collections { base_scale: 2.6;
- group {
- name: "history-layout";
- parts {
- part {
- name: "history_bg";
- type: RECT;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 244 244 244 255;
- }
- }
- part {
- name: "action_bar_history";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- min: 0 108;
- max: -1 108;
- align: 0.0 0.0;
- fixed: 0 1;
- rel1 {
- relative: 0.0 0.0;
- to: "history_bg";
- }
- }
- }
- part {
- name: "history_list";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- min: 0 0;
- max: -1 -1;
- align: 0.0 0.0;
- fixed: 0 0;
- rel1 {
- relative: 0.0 1.0;
- to: "action_bar_history";
- }
- }
- }
- }
- }
- group {
- name: "action_bar";
- parts{
- part {
- name: "bg_clipper";
- scale:1;
- type: RECT;
- description {
- state: "default" 0.0;
- color: 255 255 255 255;
- align: 0.0 0.0;
- }
- }
- part {
- name: "history_manager_title";
- scale:1;
- type: TEXT;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 0.5 0.5;
- color: 51 51 51 255;
- rel1 {
- relative: 0.0 0.0;
- to: "bg_clipper";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg_clipper";
- }
- text {
- text: "History Manager";
- font: "Tizen";
- size: 45;
- align: 0.5 0.5;
- }
- }
- }
- part {
- name: "clear_spacer";
- scale: 1;
- type: SPACER;
- description {
- state: "default" 0.0;
- align: 1.0 1.0;
- min: 16 22;
- max: 16 22;
- fixed: 1 1;
- }
- }
- part {
- name: "clearhistory_click";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 1.0 1.0;
- fixed: 1 1;
- min: 64 64;
- max: 64 64;
- rel2 {
- relative: 0.0 0.0;
- to: "clear_spacer";
- }
- }
- }
- part {
- name: "close_spacer";
- scale: 1;
- type: SPACER;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 16 22;
- max: 16 22;
- fixed: 1 1;
- }
- }
- part {
- name: "close_click";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.0 0.0;
- fixed: 1 1;
- min: 64 64;
- max: 64 64;
- rel1 {
- relative: 1.0 1.0;
- to: "close_spacer";
- }
- }
- }
- }
- }
-}
self->rightPressed();
else if(!keyName.compare("KEY_ENTER"))
self->enterPressed();
-#if PROFILE_MOBILE
else if(!keyName.compare("XF86Back"))
self->XF86BackPressed();
-#else
- else if(!keyName.compare("F11") || !keyName.compare("XF86Back"))
- self->backPressed();
- else if(!keyName.compare("XF86Red")) // F4 - Red
- self->redPressed();
- else if(!keyName.compare("XF86Green")) // F5 - Green
- self->greenPressed();
- else if(!keyName.compare("XF86Yellow")) // F6 - Yellow
- self->yellowPressed();
- else if(!keyName.compare("XF86Blue")) // F7 - Blue
- self->bluePressed();
-#endif
+ else if(!keyName.compare("XF86Menu"))
+ self->XF86MenuPressed();
else if(!keyName.compare("Escape"))
self->escapePressed();
boost::signals2::signal<void ()> rightPressed;
boost::signals2::signal<void ()> backPressed;
boost::signals2::signal<void ()> escapePressed;
-#if PROFILE_MOBILE
boost::signals2::signal<void ()> XF86BackPressed;
+ boost::signals2::signal<void ()> XF86MenuPressed;
boost::signals2::signal<void ()> menuButtonPressed;
-#else
- boost::signals2::signal<void ()> redPressed;
- boost::signals2::signal<void ()> greenPressed;
- boost::signals2::signal<void ()> yellowPressed;
- boost::signals2::signal<void ()> bluePressed;
-#endif
boost::signals2::signal<void (int, int)> mouseClicked;
/**
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef QA_GENGRID_H
+#define QA_GENGRID_H
+
+#include <Elementary.h>
+#include <Evas.h>
+#include <string>
+#include <map>
+
+#include "Tools/GengridWrapper.h"
+#include "BrowserLogger.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+class QAGengrid : public GengridWrapper
+{
+public:
+ QAGengrid() : GengridWrapper::GengridWrapper() {};
+ QAGengrid(Evas_Object* parent) : GengridWrapper::GengridWrapper(parent) {};
+ virtual ~QAGengrid() = default;
+ void create() override {
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_gengrid = elm_gengrid_add(m_parent);
+
+ elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ tools::EflTools::setExpandHints(m_gengrid);
+
+ elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
+ elm_scroller_bounce_set(m_gengrid, EINA_FALSE, EINA_FALSE);
+ evas_object_pass_events_set(m_gengrid, EINA_FALSE);
+
+ evas_object_show(m_gengrid);
+ }
+};
+
+}
+}
+
+#endif // QA_GENGRID_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the License);
* you may not use this file except in compliance with the License.
, m_layout(nullptr)
, m_horizontalScroller(nullptr)
, m_box(nullptr)
- , m_quickAccessView(nullptr)
- , m_mostVisitedView(nullptr)
- , m_quickAccessGengrid(nullptr)
- , m_mostVisitedGengrid(nullptr)
+ , m_qaEditLayout(nullptr)
+ , m_mvEditLayout(nullptr)
+ , m_quickAccessGengrid()
+ , m_mostVisitedGengrid()
+ , m_empty_layout(nullptr)
, m_index(nullptr)
+ , m_addQuickAccessItem(nullptr)
, m_currPage(QuickAccess::QUICKACCESS_PAGE)
, m_quickAccess_item_class(nullptr)
, m_mostVisited_item_class(nullptr)
, m_quickAccess_tile_class(nullptr)
, m_state(QuickAccessState::Default)
, m_verticalScroller(nullptr)
+ , m_reordered(false)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
edjFilePath = EDJE_DIR;
QuickAccess::~QuickAccess()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- clearQuickAccessGengrid();
- clearMostVisitedGengrid();
+ m_quickAccessGengrid.clear();
+ m_mostVisitedGengrid.clear();
elm_gengrid_item_class_free(m_quickAccess_item_class);
elm_gengrid_item_class_free(m_mostVisited_item_class);
elm_gengrid_item_class_free(m_quickAccess_tile_class);
m_parent = parent;
}
-
Evas_Object* QuickAccess::getContent()
{
M_ASSERT(m_parent);
- if (!m_layout) {
+ if (!m_layout)
createQuickAccessLayout(m_parent);
- }
return m_layout;
}
+Evas_Object *QuickAccess::getQuickAccessEditLayout()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_qaEditLayout) {
+ elm_object_part_content_set(m_qaEditLayout, "view", m_quickAccessGengrid());
+ return m_qaEditLayout;
+ }
+
+ m_qaEditLayout = elm_layout_add(m_parent);
+ elm_layout_file_set(m_qaEditLayout, edjFilePath.c_str(), "edit_layout");
+ tools::EflTools::setExpandHints(m_mvEditLayout);
+ elm_object_part_content_set(m_qaEditLayout, "view", m_quickAccessGengrid());
+ return m_qaEditLayout;
+}
+
+Evas_Object *QuickAccess::getMostVisitedEditLayout()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_mvEditLayout) {
+ elm_object_part_content_set(m_mvEditLayout, "view", m_mostVisitedGengrid());
+ return m_mvEditLayout;
+ }
+
+ m_mvEditLayout = elm_layout_add(m_parent);
+ elm_layout_file_set(m_mvEditLayout, edjFilePath.c_str(), "edit_layout");
+ tools::EflTools::setExpandHints(m_mvEditLayout);
+ elm_object_part_content_set(m_mvEditLayout, "view", m_mostVisitedGengrid());
+ return m_mvEditLayout;
+}
+
void QuickAccess::createItemClasses()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_quickAccess_tile_class->func.text_get = nullptr;
m_quickAccess_tile_class->func.content_get = _grid_quickaccessADD_content_get;
m_quickAccess_tile_class->func.state_get = nullptr;
- m_quickAccess_tile_class->func.del = nullptr;
+ m_quickAccess_tile_class->func.del = _grid_quickaccessADD_del;
}
}
-
void QuickAccess::createQuickAccessLayout(Evas_Object* parent)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_desktopMode = false; //TODO: delete this
if (m_layout)
evas_object_del(m_layout);
m_layout = elm_layout_add(parent);
elm_layout_file_set(m_layout, edjFilePath.c_str(), "main_layout");
- evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set (m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ tools::EflTools::setExpandHints(m_layout);
evas_object_show(m_layout);
evas_object_event_callback_add(m_layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
m_index = elm_index_add(m_layout);
- evas_object_size_hint_weight_set(m_index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(m_index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ tools::EflTools::setExpandHints(m_index);
elm_object_style_set(m_index, "pagecontrol");
elm_index_horizontal_set(m_index, EINA_TRUE);
elm_index_autohide_disabled_set(m_index, EINA_TRUE);
elm_index_level_go(m_index, 0);
m_horizontalScroller = elm_scroller_add(m_layout);
- elm_scroller_page_scroll_limit_set(m_horizontalScroller, 1, 0);
- elm_scroller_movement_block_set(m_horizontalScroller, ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL);
- elm_scroller_loop_set(m_horizontalScroller, EINA_FALSE, EINA_FALSE);
- elm_scroller_page_relative_set(m_horizontalScroller, 1.0, 0.0);
- elm_scroller_policy_set(m_horizontalScroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
elm_scroller_bounce_set(m_horizontalScroller, EINA_FALSE, EINA_FALSE);
+ elm_scroller_policy_set(m_horizontalScroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
elm_object_part_content_set(m_layout, "view", m_horizontalScroller);
evas_object_smart_callback_add(m_horizontalScroller, "scroll,anim,stop",
_horizontalScroller_scroll, this);
createBox(m_horizontalScroller);
+ createEmptyLayout();
}
void QuickAccess::createBox(Evas_Object* parent)
evas_object_show(m_box);
createQuickAccessView(m_box);
- elm_box_pack_end(m_box, m_quickAccessView);
createMostVisitedView(m_box);
- elm_box_pack_end(m_box, m_mostVisitedView);
}
void QuickAccess::createMostVisitedView(Evas_Object * parent)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_mostVisitedView)
- evas_object_del(m_mostVisitedView);
-
- m_mostVisitedView = elm_layout_add(parent);
- elm_layout_theme_set(m_mostVisitedView, "layout", "application", "default");
- evas_object_size_hint_weight_set(m_mostVisitedView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set (m_mostVisitedView, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(m_mostVisitedView);
-
- evas_object_event_callback_add(m_mostVisitedView, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
-
- m_mostVisitedGengrid = createMostVisitedGengrid(m_mostVisitedView);
- evas_object_smart_callback_add(m_mostVisitedGengrid, "realized", _quickAccess_tile_realized, this); //TODO
-
- evas_object_show(m_mostVisitedGengrid);
+ m_mostVisitedGengrid.init(parent);
+ m_mostVisitedGengrid.registerCallback("realized", _quickAccess_tile_realized, this);
}
void QuickAccess::createQuickAccessView(Evas_Object * parent)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_quickAccessView = elm_layout_add(parent);
- elm_layout_theme_set(m_quickAccessView, "layout", "application", "default");
- evas_object_size_hint_weight_set(m_quickAccessView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(m_quickAccessView, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(m_quickAccessView);
-
- m_quickAccessGengrid = createQuickAccessGengrid(m_quickAccessView);
- evas_object_smart_callback_add(m_quickAccessGengrid, "realized", _quickAccess_tile_realized, this);
-
- evas_object_show(m_quickAccessGengrid);
-}
-
-void QuickAccess::deleteQuickAccessSelectedItem(Elm_Widget_Item *item)
-{
- elm_object_item_del(item);
- elm_gengrid_realized_items_update(m_quickAccessGengrid);
+ m_quickAccessGengrid.init(parent);
+ m_quickAccessGengrid.registerCallback("realized", _quickAccess_tile_realized, this);
+ m_quickAccessGengrid.registerCallback("moved", _quickAccess_tile_moved, this);
}
-Evas_Object* QuickAccess::createQuickAccessGengrid(Evas_Object *parent)
+void QuickAccess::createEmptyLayout()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- Evas_Object *quickAccessGengrid = elm_gengrid_add(parent);
+ m_empty_layout = elm_layout_add(m_layout);
+ elm_layout_theme_set(m_empty_layout, "layout", "nocontents", "default");
+
+ tools::EflTools::setExpandHints(m_empty_layout);
- elm_gengrid_select_mode_set(quickAccessGengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
- elm_gengrid_multi_select_set(quickAccessGengrid, EINA_TRUE);
- elm_scroller_policy_set(quickAccessGengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- evas_object_size_hint_weight_set(quickAccessGengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(quickAccessGengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_NPBODY_NO_SHORTCUTS");
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", "IDS_BR_BODY_AFTER_YOU_VISIT_WEBPAGES_THE_PAGES_YOU_HAVE_VISITED_THE_MOST_WILL_BE_SHOWN_HERE");
- elm_gengrid_align_set(quickAccessGengrid, 0.5, 0.1);
- elm_scroller_bounce_set(quickAccessGengrid, EINA_FALSE, EINA_FALSE);
+ elm_layout_signal_emit(m_empty_layout, "text,disabled", "");
+ elm_layout_signal_emit(m_empty_layout, "align.center", "elm");
- return quickAccessGengrid;
+ elm_object_part_content_set(m_layout, "elm.swallow.content_overlay", m_empty_layout);
+ evas_object_color_set(m_empty_layout, 249, 249, 249, 255);
}
-Evas_Object *QuickAccess::createMostVisitedGengrid(Evas_Object *parent)
+void QuickAccess::updateNoMostVisitedText()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- Evas_Object *mostVisitedGengrid = elm_gengrid_add(parent);
- evas_object_size_hint_weight_set(mostVisitedGengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(mostVisitedGengrid, EVAS_HINT_FILL, EVAS_HINT_EXPAND);
- elm_gengrid_align_set(mostVisitedGengrid, 0.5, 0.1);
- elm_scroller_bounce_set(mostVisitedGengrid, EINA_FALSE, EINA_FALSE);
+ if (m_currPage == MOST_VISITED_PAGE) {
+ if (m_mostVisitedGengrid.count() > 0) {
+ evas_object_hide(m_empty_layout);
+ m_mostVisitedGengrid.show();
+ elm_object_signal_emit(m_layout, "hide_overlay", "ui");
+ } else {
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_NPBODY_NO_SHORTCUTS");
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", "IDS_BR_BODY_AFTER_YOU_VISIT_WEBPAGES_THE_PAGES_YOU_HAVE_VISITED_THE_MOST_WILL_BE_SHOWN_HERE");
+ m_mostVisitedGengrid.show();
+ evas_object_show(m_empty_layout);
+ elm_object_signal_emit(m_layout, "show_overlay", "ui");
+ }
+ } else {
+ evas_object_hide(m_empty_layout);
+ elm_object_signal_emit(m_layout, "hide_overlay", "ui");
+ }
- return mostVisitedGengrid;
}
void QuickAccess::_addToQuickAccess_clicked(void * data, Evas_Object *, void *)
{
BROWSER_LOGD("[%s:%d] currPage: %d", __PRETTY_FUNCTION__, __LINE__, m_currPage);
if (m_currPage == MOST_VISITED_PAGE) {
- elm_object_translatable_part_text_set(m_layout, "screen_title", "Most visited websites"); //TODO: translate
+ elm_object_translatable_part_text_set(m_layout, "screen_title", _("IDS_BR_BODY_MOST_VISITED_SITES"));
setIndexPage(&MOST_VISITED_PAGE);
} else {
- elm_object_translatable_part_text_set(m_layout, "screen_title", "Quick access"); //TODO: translate
+ elm_object_translatable_part_text_set(m_layout, "screen_title", _("IDS_BR_HEADER_QUICK_ACCESS_ABB"));
setIndexPage(&QUICKACCESS_PAGE);
}
+ updateNoMostVisitedText();
}
void QuickAccess::_horizontalScroller_scroll(void* data, Evas_Object* /*scroller*/, void* /*event_info*/)
if (data) {
auto self = static_cast<QuickAccess*>(data);
int page_no;
- elm_scroller_current_page_get(self->m_horizontalScroller, &page_no, NULL);
+ elm_scroller_current_page_get(self->m_horizontalScroller, &page_no, nullptr);
self->m_currPage = page_no;
self->setPageTitle();
} else {
itemData->item = hi;
itemData->quickAccess = this;
- elm_gengrid_item_append(m_mostVisitedGengrid, m_mostVisited_item_class, itemData, _thumbMostVisitedClicked, itemData);
+ m_mostVisitedGengrid.append(
+ m_mostVisited_item_class, itemData, _thumbMostVisitedClicked, itemData);
}
void QuickAccess::setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> items)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- clearMostVisitedGengrid();
+ m_mostVisitedGengrid.clear();
for (auto it = items->begin(); it != items->end(); ++it)
addMostVisitedItem(*it);
QuickAccessItemData *itemData = new QuickAccessItemData();
itemData->item = qa;
itemData->quickAccess = this;
- elm_gengrid_item_append(m_quickAccessGengrid, m_quickAccess_item_class, itemData, _thumbQuickAccessClicked, itemData);
+ itemData->genlistItem = m_quickAccessGengrid.append(
+ m_quickAccess_item_class, itemData, nullptr, nullptr);
}
-void QuickAccess::clearMostVisitedGengrid()
+void QuickAccess::addQuickAccessItemBeforeADDButton(const services::SharedQuickAccessItem& qa)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_gengrid_clear(m_mostVisitedGengrid);
+ QuickAccessItemData *itemData = new QuickAccessItemData();
+ itemData->item = qa;
+ itemData->quickAccess = this;
+ itemData->genlistItem = m_quickAccessGengrid.insertBefore(
+ m_quickAccess_item_class, itemData, m_addQuickAccessItem, nullptr, nullptr);
}
void QuickAccess::setQuickAccessItems(services::SharedQuickAccessItemVector items)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- clearQuickAccessGengrid();
+ m_quickAccessGengrid.clear();
for (auto it = items.begin(); it != items.end(); ++it)
addQuickAccessItem(*it);
items.clear();
void QuickAccess::addToQuickAccessTile()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_gengrid_item_append(m_quickAccessGengrid, m_quickAccess_tile_class, this, _addToQuickAccess_clicked, this);
+ m_addQuickAccessItem = m_quickAccessGengrid.append(
+ m_quickAccess_tile_class, this, nullptr, nullptr);
}
void QuickAccess::setIndexPage(const void *page) const
auto landscape = isLandscape();
if (landscape) {
if (*landscape) {
- elm_gengrid_item_size_set(
- m_quickAccessGengrid,
+ elm_layout_signal_emit(m_layout, "set,landscape", "ui");
+ m_quickAccessGengrid.itemSizeSet(
Z3_SCALE_SIZE(QUICKACCESS_ITEM_WIDTH_LANDSCAPE),
Z3_SCALE_SIZE(QUICKACCESS_ITEM_HEIGHT_LANDSCAPE));
-
- elm_gengrid_item_size_set(
- m_mostVisitedGengrid,
+ m_mostVisitedGengrid.itemSizeSet(
Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH_LANDSCAPE),
Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT_LANDSCAPE));
+ elm_scroller_page_size_set(m_horizontalScroller, ELM_SCALE_SIZE(SCROLLER_LANDSCAPE_PAGE), 0);
} else {
- elm_gengrid_item_size_set(
- m_quickAccessGengrid,
+ elm_layout_signal_emit(m_layout, "set,horizontal", "ui");
+ m_quickAccessGengrid.itemSizeSet(
Z3_SCALE_SIZE(QUICKACCESS_ITEM_WIDTH),
Z3_SCALE_SIZE(QUICKACCESS_ITEM_HEIGHT));
-
- elm_gengrid_item_size_set(
- m_mostVisitedGengrid,
+ m_mostVisitedGengrid.itemSizeSet(
Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH),
Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT));
+ elm_scroller_page_size_set(m_horizontalScroller, ELM_SCALE_SIZE(SCROLLER_PORTRAIT_PAGE), 0);
}
} else {
BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
}
}
+void QuickAccess::_quickAccess_tile_moved(void *data, Evas_Object *, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data) {
+ auto self = static_cast<QuickAccess*>(data);
+ self->m_reordered = true;
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+ }
+}
+
void QuickAccess::_layout_resize_cb(void* data, Evas* /*e*/, Evas_Object* /*obj*/, void* /*event_info*/)
{
BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
if (data) {
auto self = static_cast<QuickAccess*>(data);
int w, h;
- evas_object_geometry_get(self->m_layout, NULL, NULL, &w, &h);
- evas_object_size_hint_min_set(self->m_mostVisitedGengrid, w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
- evas_object_size_hint_min_set(self->m_quickAccessGengrid, w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
+ evas_object_geometry_get(self->m_layout, nullptr, nullptr, &w, &h);
+ evas_object_size_hint_min_set(self->m_mostVisitedGengrid(), w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
+ evas_object_size_hint_min_set(self->m_quickAccessGengrid(), w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
self->showScrollerPage(self->m_currPage);
}
}
-Evas_Object * QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object* obj, const char *part)
+Evas_Object *QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object* obj, const char *part)
{
BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
if (data) {
if (!strcmp(part, "elm.swallow.icon")) {
Evas_Object *button = elm_button_add(obj);
elm_object_style_set(button, "roundedrect");
- elm_object_part_text_set(button, "button_text", itemData->item->getTitle().c_str());
+ elm_object_translatable_part_text_set(button, "button_text", itemData->item->getTitle().c_str());
+ evas_object_smart_callback_add(button, "clicked", _thumbQuickAccessClicked, data);
if (itemData->item->has_favicon()) {
// Favicon
} else {
if (itemData->item->getTitle().length() > 0) {
auto firstLetter = std::string(1, static_cast<char>(std::toupper(itemData->item->getTitle()[0])));
- elm_object_part_text_set(button, "center_label", firstLetter.c_str());
+ elm_object_translatable_part_text_set(button, "center_label", firstLetter.c_str());
}
elm_layout_signal_emit(button, "show,bg,rectangle", "event");
if (!strcmp(part, "elm.swallow.icon")) {
Evas_Object *button = elm_button_add(obj);
elm_object_style_set(button, "roundedrectADD");
- elm_object_part_text_set(button, "button_text", "Add");
+ elm_object_translatable_part_text_set(button, "button_text", "Add");
elm_layout_signal_emit(button, "show,bg,rectangle", "event");
setButtonColor(button, 150, 180, 255, 255);
+ evas_object_smart_callback_add(button, "clicked", _addToQuickAccess_clicked, data);
return button;
}
} else {
{
BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
auto itemData = static_cast<QuickAccessItemData*>(data);
- if (itemData)
+ if (itemData) {
+ auto button = elm_object_item_part_content_get(itemData->genlistItem, "elm.swallow.icon");
+ evas_object_smart_callback_del(button, "clicked", _thumbQuickAccessClicked);
+ if (itemData->quickAccess->m_state == QuickAccessState::Edit) {
+ button = elm_object_item_part_content_get(itemData->genlistItem, "elm.button");
+ evas_object_smart_callback_del(button, "clicked", __quckAccess_del_clicked);
+ }
+
delete itemData;
+ }
+}
+
+void QuickAccess::_grid_quickaccessADD_del(void *data, Evas_Object*)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ auto itemData = static_cast<QuickAccess*>(data);
+ if (itemData) {
+ auto button = elm_object_item_part_content_get(itemData->m_addQuickAccessItem,
+ "elm.swallow.icon");
+ evas_object_smart_callback_del(button, "clicked", _addToQuickAccess_clicked);
+ }
}
void QuickAccess::__quckAccess_del_clicked(void *data, Evas_Object */*obj*/, void *)
if (data) {
auto itemData = static_cast<QuickAccessItemData*>(data);
itemData->quickAccess->deleteQuickAccessItem(itemData->item);
- itemData->quickAccess->deleteQuickAccessSelectedItem(
- elm_gengrid_selected_item_get(itemData->quickAccess->m_quickAccessGengrid));
+ itemData->quickAccess->m_quickAccessGengrid.deleteSelectedItem();
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
QuickAccessItemData * itemData = reinterpret_cast<QuickAccessItemData *>(data);
if (itemData->quickAccess->m_state == QuickAccessState::Default)
- itemData->quickAccess->openURLquickaccess(itemData->item, itemData->quickAccess->isDesktopMode());
+ itemData->quickAccess->openURLquickaccess(itemData->item);
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
if (itemData->quickAccess->m_state == QuickAccessState::Default) {
- itemData->quickAccess->openURLhistory(itemData->item, false);
+ itemData->quickAccess->openURLhistory(itemData->item);
}
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
elm_scroller_page_show(m_horizontalScroller, MOST_VISITED_PAGE, 0);
m_mv_delete_list.clear();
-}
-
-void QuickAccess::clearQuickAccessGengrid()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_gengrid_clear(m_quickAccessGengrid);
+ setPageTitle();
}
void QuickAccess::showQuickAccess()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_currPage = QuickAccess::QUICKACCESS_PAGE;
elm_scroller_page_show(m_horizontalScroller, QUICKACCESS_PAGE, 0);
+ setPageTitle();
}
void QuickAccess::editQuickAccess()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_state = QuickAccessState::Edit;
- elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_TRUE);
- elm_gengrid_realized_items_update(m_quickAccessGengrid);
- elm_object_part_content_unset(m_quickAccessView, "elm.swallow.content");
- evas_object_hide(m_mostVisitedGengrid);
+ m_quickAccessGengrid.reorder(true);
+ m_quickAccessGengrid.updateRealized();
+ elm_box_unpack_all(m_box);
+ m_mostVisitedGengrid.hide();
}
void QuickAccess::deleteMostVisited()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_state = QuickAccessState::DeleteMostVisited;
- elm_gengrid_realized_items_update(m_mostVisitedGengrid);
- elm_object_part_content_unset(m_mostVisitedView, "elm.swallow.content");
- evas_object_hide(m_quickAccessGengrid);
+ m_mostVisitedGengrid.updateRealized();
+ elm_box_unpack_all(m_box);
+ m_quickAccessGengrid.hide();
}
void QuickAccess::deleteSelectedMostVisitedItems()
}
}
+void QuickAccess::reorderQuickAccessItems()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_reordered) {
+ m_reordered = false;
+ Elm_Object_Item *it = elm_gengrid_first_item_get(m_quickAccessGengrid());
+ int order = 1;
+ while (it) {
+ if (it != m_addQuickAccessItem) {
+ auto itemData = static_cast<QuickAccessItemData*>(elm_object_item_data_get(it));
+ if (order != itemData->item->getOrder()) {
+ itemData->item->setOrder(order);
+ itemData->quickAccess->reorderQuickAccessItem(itemData->item, order);
+ }
+ ++order;
+ }
+ it = elm_gengrid_item_next_get(it);
+ }
+ }
+}
+
void QuickAccess::editingFinished()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_FALSE);
+ m_quickAccessGengrid.reorder(false);
+ if (m_state == QuickAccessState::Edit)
+ elm_object_part_content_unset(m_qaEditLayout, "view");
+ else if (m_state == QuickAccessState::DeleteMostVisited)
+ elm_object_part_content_unset(m_mvEditLayout, "view");
m_state = QuickAccessState::Default;
+
}
void QuickAccess::showScrollerPage(int page)
BROWSER_LOGD("[%s:%d] currPage: %d", __PRETTY_FUNCTION__, __LINE__, m_currPage);
getQuickAccessItems();
getMostVisitedItems();
- elm_object_part_content_set(m_mostVisitedView, "elm.swallow.content", m_mostVisitedGengrid);
- elm_object_part_content_set(m_quickAccessView, "elm.swallow.content", m_quickAccessGengrid);
- evas_object_show(m_mostVisitedGengrid);
- evas_object_show(m_quickAccessGengrid);
+ elm_box_pack_end(m_box, m_quickAccessGengrid());
+ elm_box_pack_end(m_box, m_mostVisitedGengrid());
+ m_mostVisitedGengrid.show();
+ m_quickAccessGengrid.show();
orientationChanged();
showScrollerPage(m_currPage);
- setPageTitle();
+ _layout_resize_cb(this, nullptr, nullptr, nullptr);
}
void QuickAccess::hideUI()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (m_state == QuickAccessState::Default) {
evas_object_hide(m_layout);
- clearMostVisitedGengrid();
- clearQuickAccessGengrid();
+ m_mostVisitedGengrid.clear();
+ m_quickAccessGengrid.clear();
}
}
free(msg);
}
-bool QuickAccess::isDesktopMode() const
-{
- return m_desktopMode;
-}
-
-void QuickAccess::setDesktopMode(bool mode)
-{
- m_desktopMode = mode;
-}
-
bool QuickAccess::canBeBacked(int tabCount)
{
return (tabCount != 0);
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the License);
* you may not use this file except in compliance with the License.
#include "services/HistoryService/HistoryItemTypedef.h"
#include "QuickAccessItem.h"
#include "Tools/EflTools.h"
+#include "QAGengrid.h"
namespace tizen_browser{
namespace base_ui{
public:
QuickAccess();
~QuickAccess();
+ QuickAccess(const QuickAccess&) = delete;
+ QuickAccess& operator=(const QuickAccess&) = delete;
+
void init(Evas_Object *main_layout);
Evas_Object* getContent();
- Evas_Object* getQuickAccessGengrid() {return m_quickAccessGengrid;}
- Evas_Object* getMostVisitedGengrid() {return m_mostVisitedGengrid;}
- void setQuickAccessState(QuickAccessState state) {m_state = state;}
- QuickAccessState getQuickAccessState() {return m_state;}
+ Evas_Object* getQuickAccessEditLayout();
+ Evas_Object* getMostVisitedEditLayout();
+ unsigned getMostVisitedItemsCount() { return m_mostVisitedGengrid.count(); }
+ void setQuickAccessState(QuickAccessState state) { m_state = state; }
+ QuickAccessState getQuickAccessState() const { return m_state; }
void setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> vec);
void setQuickAccessItems(services::SharedQuickAccessItemVector vec);
void hideUI();
void showUI();
virtual std::string getName();
- bool isDesktopMode() const;
- void setDesktopMode(bool mode);
bool canBeBacked(int tabCount);
void backButtonClicked();
bool isMostVisitedActive();
void editQuickAccess();
void deleteMostVisited();
void deleteSelectedMostVisitedItems();
+ void reorderQuickAccessItems();
void editingFinished();
+ void addQuickAccessItemBeforeADDButton(const services::SharedQuickAccessItem& qa);
- boost::signals2::signal<void (services::SharedQuickAccessItem, bool)> openURLquickaccess;
- boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>, bool)> openURLhistory;
+ boost::signals2::signal<void (services::SharedQuickAccessItem)> openURLquickaccess;
+ boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>)> openURLhistory;
boost::signals2::signal<void ()> getMostVisitedItems;
boost::signals2::signal<void ()> getQuickAccessItems;
boost::signals2::signal<void ()> addQuickAccessClicked;
boost::signals2::signal<void ()> switchViewToWebPage;
boost::signals2::signal<void (services::SharedQuickAccessItem)> deleteQuickAccessItem;
+ boost::signals2::signal<void (services::SharedQuickAccessItem, unsigned)> reorderQuickAccessItem;
boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>, int)> removeMostVisitedItem;
boost::signals2::signal<void (int)> sendSelectedMVItemsCount;
{
services::SharedQuickAccessItem item;
QuickAccess* quickAccess;
+ Elm_Object_Item* genlistItem;
};
void createItemClasses();
void addMostVisitedItem(std::shared_ptr<services::HistoryItem>);
void addQuickAccessItem(services::SharedQuickAccessItem);
- void clearMostVisitedGengrid();
- void clearQuickAccessGengrid();
- Evas_Object* createQuickAccessGengrid(Evas_Object *parent);
- Evas_Object* createMostVisitedGengrid(Evas_Object *parent);
+ void createEmptyLayout();
+ void updateNoMostVisitedText();
void showScrollerPage(int page);
void setPageTitle();
void addToQuickAccessTile();
void setIndexPage(const void *page) const;
bool isOrientationLandscape() const;
- static void _quickAccess_tile_realized(void * data, Evas_Object * obj, void * event_info);
+ static void _quickAccess_tile_realized(void * data, Evas_Object *obj, void *event_info);
+ static void _quickAccess_tile_moved(void *data, Evas_Object *obj, void *event_info);
static void _layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
void createBox(Evas_Object* parent);
void createQuickAccessLayout(Evas_Object *parent);
void createMostVisitedView(Evas_Object *parent);
void createQuickAccessView(Evas_Object *parent);
- void deleteQuickAccessSelectedItem(Elm_Widget_Item *item);
static Evas_Object * _grid_quickaccess_content_get(void *data, Evas_Object *obj, const char *part);
static Evas_Object * _grid_quickaccessADD_content_get(void *data, Evas_Object *obj, const char *part);
static void _grid_quickaccess_del(void *data, Evas_Object *obj);
+ static void _grid_quickaccessADD_del(void *data, Evas_Object *obj);
static void __quckAccess_del_clicked(void *data, Evas_Object *, void *);
static char* _grid_mostVisited_text_get(void *data, Evas_Object *obj, const char *part);
static Evas_Object * _grid_mostVisited_content_get(void *data, Evas_Object *obj, const char *part);
Evas_Object *m_parent;
Evas_Object *m_layout;
- Evas_Object* m_horizontalScroller;
+ Evas_Object *m_horizontalScroller;
Evas_Object *m_box;
- Evas_Object *m_quickAccessView;
- Evas_Object *m_mostVisitedView;
- Evas_Object *m_quickAccessGengrid;
- Evas_Object *m_mostVisitedGengrid;
- Evas_Object* m_index;
+ Evas_Object *m_qaEditLayout;
+ Evas_Object *m_mvEditLayout;
+ QAGengrid m_quickAccessGengrid;
+ QAGengrid m_mostVisitedGengrid;
+ Evas_Object *m_empty_layout;
+ Evas_Object *m_index;
+ Elm_Object_Item *m_addQuickAccessItem;
std::vector<Evas_Object *> m_tiles;
int m_currPage;
Elm_Gengrid_Item_Class * m_mostVisited_item_class;
Elm_Gengrid_Item_Class * m_quickAccess_tile_class;
std::string edjFilePath;
- bool m_desktopMode;
QuickAccessState m_state;
Evas_Object* m_verticalScroller;
+ bool m_reordered;
std::list<std::shared_ptr<services::HistoryItem>> m_mv_delete_list;
static const int MOST_VISITED_PAGE;
static const int QUICKACCESS_PAGE;
static const int MOSTVISITED_ITEM_HEIGHT_LANDSCAPE = 208;
static const int HEADER_HEIGHT = 116+38;
static const int DEFAULT_BUTTON_COLOR = 190;
+ // TODO: scroller arbitrary values, probably can be changed to screen
+ // size after solving http://suprem.sec.samsung.net/jira/browse/TWF-2437
+ static const int SCROLLER_PORTRAIT_PAGE = 1040;
+ static const int SCROLLER_LANDSCAPE_PAGE = 2200;
};
}
}
}
+ spacer { "titleSpacer"; scale;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: screen_title_area; }
+ rel2 { relative: 1.0 1.0; to: screen_title_area; }
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: 32 0;
+ max: 32 0;
+ }
+ description {
+ state: "landscape" 0.0;
+ inherit: "default";
+ min: 60 0;
+ max: 60 0;
+ }
+ }
+
part {
name: "screen_title";
type: TEXT;
fixed: 1 1;
color: 0 180 220 255;
rel1 {
- to: "screen_title_area"; //TODO: ditto
- relative: 0 0;
+ to: "titleSpacer";
+ relative: 1 0;
}
rel2 {
to: "screen_title_area";
text {
text: "Most Visited";
font: "Tizen";
- align: 0.1 0.5;
+ align: 0.0 0.5;
size: 45;
}
}
}
part {
+ name: "elm.swallow.content_overlay";
+ scale: 1;
+ type: SWALLOW;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.0;
+ fixed: 0 0;
+ rel1 {
+ relative: 0.0 0.0;
+ to: "view";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "view";
+ }
+ }
+ description {
+ state: "empty" 0.0;
+ inherit: "default";
+ visible: 1;
+ }
+ }
+
+ part {
name: "index_container";
type: RECT;
scale: 1;
}
}
}
-}
-group { name: "page_layout";
- data {
- item: "focus_highlight" "off";
+ programs {
+ program { name: "set,landscape";
+ signal: "set,landscape";
+ source: "ui";
+ action: STATE_SET "landscape" 0.0;
+ target: "titleSpacer";
+ }
+ program { name: "set,horizontal";
+ signal: "set,horizontal";
+ source: "ui";
+ action: STATE_SET "default" 0.0;
+ target: "titleSpacer";
+ }
+ program {
+ name: "show_overlay";
+ signal: "show_overlay";
+ source: "ui";
+ action: STATE_SET "empty" 0.0;
+ target: "elm.swallow.content_overlay";
+ }
+ program {
+ name: "hide_overlay";
+ signal: "hide_overlay";
+ source: "ui";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content_overlay";
+ }
}
+}
+group {
+ name: "edit_layout";
parts {
- part { name: "bg";
- type: RECT;
- scale: 1;
- mouse_events: 0;
- description { state: "default" 0.0;
- color: 144 0 0 255;
- align: 0.0 0.0;
- visible: DEVELOPMENT;
- fixed: 0 0;
- min: LAYOUT_WIDTH 0;
- max: -1 -1;
- rel1 {
- relative: 0 0;
- }
- rel2{
- relative: 1 1;
- }
- }
- description { state: "landscape" 0.0;
- inherit: "default" 0.0;
- min: LAYOUT_WIDTH_LANDSCAPE 0;
- max: -1 -1;
- }
+ spacer { "top_spacer"; scale;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: 0 52;
+ max: 0 52;
+ }
}
- part { name: "center_swallow";
+ part {
+ name: "view";
type: SWALLOW;
scale: 1;
+ mouse_events: 1;
description { state: "default" 0.0;
- align: 0.5 0.0;
- visible: 1;
- min: BIG_TILE_WIDTH 0;
- max: BIG_TILE_WIDTH -1;
- rel1 {
- to: "bg";
- relative: 0 0;
- }
- rel2 {
- to: "bg";
- relative: 1 1;
- }
- }
- description { state: "empty" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- description { state: "landscape" 0.0;
- inherit: "default" 0.0;
- min: TOTAL_TILES_WIDTH_LANDSCAPE 0;
- max: TOTAL_TILES_WIDTH_LANDSCAPE -1;
- }
- }
-
- part { name: "elm.text.empty";
- type: TEXT;
- scale: 1;
- description { state: "default" 0.0;
- visible: 0;
- align: 0.5 0.5;
- color: 0 0 0 179;
- text {
- text: "empty";
- font: "Sans";
- size: 32;
- align: 0.5 0.4;
- }
+ align: 0.0 0.0;
+ fixed: 0 0;
rel1 {
- to: "bg";
- relative: 0 0;
+ to: "top_spacer";
+ relative: 0 1;
}
rel2 {
- to: "bg";
relative: 1 1;
}
}
- description { state: "empty" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
-
- programs {
- program { name: "empty";
- signal: "empty,view";
- source: "quickaccess";
- action: STATE_SET "empty" 0.0;
- target: "elm.text.empty";
- target: "center_swallow";
- }
- program { name: "not_empty";
- signal: "not,empty,view";
- source: "quickaccess";
- action: STATE_SET "default" 0.0;
- target: "elm.text.empty";
- target: "center_swallow";
- }
- program {
- name: "set_landscape";
- signal: "set,landscape";
- source: "quickaccess";
- action: STATE_SET "landscape" 0.0;
- target: "bg";
- target: "center_swallow";
}
}
}
type: SPACER;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
min: QA_BTN_WIDTH QA_BTN_HEIGHT;
max: QA_BTN_WIDTH QA_BTN_HEIGHT;
type: RECT;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description {
visible: 0;
align: 0.0 0.0;
type: RECT;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
min: ICON_SIZE ICON_SIZE;
max: ICON_SIZE ICON_SIZE;
type: SWALLOW;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
visible: 0;
rel1 { relative: 0.0 0.0; to: "button_icon"; }
type: IMAGE;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description {
image.normal: "mask.png";
rel1 { relative: 0.0 0.0; to: "button_icon"; }
type: TEXT;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
align: 0.0 0.0;
color_class: "ATO003";
type: RECT;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description {
visible: 0;
align: 0.0 0.0;
type: TEXTBLOCK;
scale: 1;
mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
align: 0.5 0.0;
color: 0 0 0 255;
part { name: "effect_spacer";
type: SPACER;
scale: 1;
+ mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
fixed: 1 1;
rel1.relative: 0.5 0.5;
type: SWALLOW;
clip_to: "tizen_vg_shape_clipper";
scale: 1;
+ mouse_events: 0;
+ repeat_events: 0;
description { state: "default" 0.0;
fixed: 1 1;
rel1.relative: 0.5 0.5;
}
part { name: "tizen_vg_shape_clipper";
type: RECT;
+ mouse_events: 0;
+ repeat_events: 0;
+ scale: 1;
description { state: "default" 0.0;
color_class: "transparent";
visible: 0;
}
part { name: "event";
type: RECT;
+ scale: 1;
+ repeat_events: 0;
description { state: "default" 0.0;
rel1.to: "button_bg";
rel2.to: "button_bg";
namespace tizen_browser{
namespace base_ui{
-typedef enum _profileComposeMode
+enum profileComposeMode
{
profile_create = 0,
profile_edit
-} profileComposeMode;
+};
-typedef enum _profileEditErrorcode
+enum profileEditErrorcode
{
profile_edit_failed = 0,
profile_already_exist,
update_error_none
-} profileEditErrorcode;
+};
-typedef enum _profileSaveErrorcode
+enum profileSaveErrorcode
{
profile_create_failed = 0,
duplicate_profile,
save_error_none
-} profileSaveErrorcode;
+};
-typedef struct _AutoFillFormItemData {
+struct AutoFillFormItemData {
unsigned profile_id;
- const char *name;
- const char *company;
- const char *primary_address;
- const char *secondary_address;
- const char *city_town;
- const char *state_province_region;
- const char *post_code;
- const char *country;
- const char *phone_number;
- const char *email_address;
+ const char* name;
+ const char* company;
+ const char* primary_address;
+ const char* secondary_address;
+ const char* city_town;
+ const char* state_province_region;
+ const char* post_code;
+ const char* country;
+ const char* phone_number;
+ const char* email_address;
bool activation;
profileComposeMode compose_mode;
-} AutoFillFormItemData;
+};
class AutoFillFormItem {
public:
- AutoFillFormItem(AutoFillFormItemData *item_data);
+ explicit AutoFillFormItem(AutoFillFormItemData *item_data);
~AutoFillFormItem(void);
friend bool operator==(AutoFillFormItem item1, AutoFillFormItem item2) {
return ((!item1.getName() && !item2.getName()) && !strcmp(item1.getName(), item2.getName()));
}
- unsigned getProfileId(void) { return m_itemData.profile_id; }
- const char *getName(void) { return m_itemData.name; }
- const char *getCompany(void) {return m_itemData.company; }
- const char *getPrimaryAddress(void) {return m_itemData.primary_address; }
- const char *getSecondaryAddress2(void) { return m_itemData.secondary_address; }
- const char *getCityTown(void) { return m_itemData.city_town; }
- const char *getStateProvince(void) { return m_itemData.state_province_region; }
- const char *getPostCode(void) { return m_itemData.post_code; }
- const char *getCountry(void) { return m_itemData.country; }
- const char *getPhoneNumber(void) { return m_itemData.phone_number; }
- const char *getEmailAddress(void) { return m_itemData.email_address; }
- Eina_Bool getActivation(void) { return (m_itemData.activation == true) ? EINA_TRUE : EINA_FALSE; }
- profileComposeMode getItemComposeMode(void) { return m_itemData.compose_mode; }
+ unsigned getProfileId(void) const { return m_itemData.profile_id; }
+ const char *getName(void) const { return m_itemData.name; }
+ const char *getCompany(void) const {return m_itemData.company; }
+ const char *getPrimaryAddress(void) const {return m_itemData.primary_address; }
+ const char *getSecondaryAddress2(void) const { return m_itemData.secondary_address; }
+ const char *getCityTown(void) const { return m_itemData.city_town; }
+ const char *getStateProvince(void) const { return m_itemData.state_province_region; }
+ const char *getPostCode(void) const { return m_itemData.post_code; }
+ const char *getCountry(void) const { return m_itemData.country; }
+ const char *getPhoneNumber(void) const { return m_itemData.phone_number; }
+ const char *getEmailAddress(void) const { return m_itemData.email_address; }
+ Eina_Bool getActivation(void) const { return (m_itemData.activation == true) ? EINA_TRUE : EINA_FALSE; }
+ profileComposeMode getItemComposeMode(void) const { return m_itemData.compose_mode; }
void setName(const char *name) { m_itemData.name = name; }
void setCompany(const char *company) {m_itemData.company = company; }
return r.erase(0, r.find_first_not_of(drop));
}
-SettingsAFCreator::SettingsAFCreator(Evas_Object* parent, bool profile_exists)
- : m_scroller(nullptr)
+SettingsAFCreator::SettingsAFCreator(Evas_Object* parent)
+ : SettingsUI(parent)
+ , m_scroller(nullptr)
, m_box(nullptr)
, m_editErrorcode(update_error_none)
, m_saveErrorcode(save_error_none)
, m_item(nullptr)
, m_ewkContext(ewk_context_default_get())
- , m_profile_exists(profile_exists)
, m_profile(nullptr)
{
- init(parent);
SPSC.autoFillCleared.connect([this](){
- m_profile_exists = false;
clearFields();
});
};
SettingsAFCreator::~SettingsAFCreator()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- SPSC.autoFillCleared.disconnect_all_slots();
for (auto& it : genlistCallbackVector) {
unregisterCallbacksForEditfield(it->editfield);
evas_object_del(it->editfield);
unregisterCallbacksForEntry(it->entry);
evas_object_del(it->entry);
+ free(it->limit);
}
if (m_box)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_profile_exists) {
- void* item_data(nullptr);
- Eina_List* list(nullptr);
- Eina_List* entire_item_list(
- ewk_context_form_autofill_profile_get_all(ewk_context_default_get()));
-
- EINA_LIST_FOREACH(entire_item_list, list, item_data) {
- if (item_data) {
- m_profile = static_cast<Ewk_Autofill_Profile*>(item_data);
- break;
- }
+ void* item_data { nullptr };
+ Eina_List* list { nullptr };
+ Eina_List* entire_item_list {
+ ewk_context_form_autofill_profile_get_all(m_ewkContext) };
+
+ EINA_LIST_FOREACH(entire_item_list, list, item_data) {
+ if (item_data) {
+ m_profile = static_cast<Ewk_Autofill_Profile*>(item_data);
+ break;
}
}
BROWSER_LOGE("Malloc failed to get item_data");
return;
}
- memset(item_data, 0x00, sizeof(AutoFillFormItemData));
item_data->profile_id = ewk_autofill_profile_id_get(m_profile);
item_data->name = ewk_autofill_profile_data_get(m_profile, EWK_PROFILE_NAME);
item_data->company = ewk_autofill_profile_data_get(m_profile, EWK_PROFILE_COMPANY);
evas_object_show(m_scroller);
if (m_item->getItemComposeMode() == profile_edit)
- m_naviframe->setTitle("Edit info");
+ m_naviframe->setTitle("IDS_BR_HEADER_EDIT_INFO_ABB");
else
- m_naviframe->setTitle("Add info");
+ m_naviframe->setTitle("IDS_BR_HEADER_ADD_INFO_ABB");
m_naviframe->addLeftButton(__cancel_button_cb, this);
m_naviframe->addRightButton(__done_button_cb, this);
m_naviframe->setPrevButtonVisible(false);
m_naviframe->setLeftButtonVisible(true);
m_naviframe->setRightButtonVisible(true);
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
- m_naviframe->setLeftButtonText(_("IDS_BR_SK_CANCEL"));
+ m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
+ m_naviframe->setLeftButtonText("IDS_BR_SK_CANCEL");
m_naviframe->setRightButtonEnabled(false);
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto layout(elm_layout_add(parent));
- setExpandHints(layout);
- if (!elm_layout_file_set(layout, m_edjFilePath.c_str(), "affcv_item"))
+ if (!elm_layout_file_set(layout, m_edjFilePath.c_str(), "elm/genlist/item/entry_custom_layout/default"))
BROWSER_LOGD("[%s:%d] item layout creation failed", __PRETTY_FUNCTION__, __LINE__);
- elm_object_part_text_set(layout, "field_name", fieldName);
+ setExpandHints(layout);
+ elm_object_signal_emit(layout, "elm,state,elm.swallow.bg,visible", "elm");
+ elm_object_translatable_part_text_set(layout, "elm.text", fieldName);
auto editfield(elm_layout_add(layout));
- if (!elm_layout_file_set(editfield, m_edjFilePath.c_str(), "edit-field"))
- BROWSER_LOGD("[%s:%d] item layout creation failed", __PRETTY_FUNCTION__, __LINE__);
- evas_object_size_hint_align_set(editfield, EVAS_HINT_FILL, 0.0);
- evas_object_size_hint_weight_set(editfield, EVAS_HINT_EXPAND, 0.0);
+ elm_layout_theme_set(editfield, "layout", "editfield", "multiline");
+ setExpandHints(editfield);
auto entry(elm_entry_add(editfield));
- elm_object_style_set(entry, "entry_style");
elm_entry_single_line_set(entry, EINA_TRUE);
elm_entry_scrollable_set(entry, EINA_TRUE);
- elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+ setExpandHints(entry);
+ auto limit(tools::EflTools::setEntryLimit(entry));
cb_data->user_data = this;
cb_data->editfield = editfield;
cb_data->entry = entry;
cb_data->it = layout;
+ cb_data->limit = limit;
#if defined(HW_MORE_BACK_KEY)
eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
#endif
elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_NEXT);
elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &(m_entryLimitSize));
- elm_object_part_content_set(editfield, "editfield_entry", entry);
+ elm_object_part_content_set(editfield, "elm.swallow.content", entry);
auto button(elm_button_add(editfield));
- elm_object_style_set(button, "basic_button");
+ elm_object_style_set(button, "editfield_clear");
evas_object_smart_callback_add(button, "clicked", __entry_clear_button_clicked_cb, entry);
- elm_object_part_content_set(editfield, "entry_clear_button", button);
-
- if (!elm_entry_is_empty(entry))
- elm_object_signal_emit(editfield, "show,clear,button,signal", "");
+ elm_object_part_content_set(editfield, "elm.swallow.button", button);
- elm_object_part_content_set(layout, "entry_swallow", editfield);
+ elm_object_part_content_set(layout, "elm.swallow.content", editfield);
evas_object_show(cb_data->editfield);
evas_object_show(cb_data->entry);
evas_object_show(cb_data->it);
void SettingsAFCreator::clearFields()
{
if (m_item) {
- elm_object_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_countryItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_phoneItemCallbackData.entry, "elm.text", "");
- elm_object_part_text_set(m_emailItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_countryItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_phoneItemCallbackData.entry, "elm.text", "");
+ elm_object_translatable_part_text_set(m_emailItemCallbackData.entry, "elm.text", "");
}
}
createInputLayout(m_box, strdup(_("IDS_BR_BODY_FULL_NAME_ABB")), &m_fullNameItemCallbackData);
elm_box_pack_end(m_box, m_fullNameItemCallbackData.it);
if (m_item->getName() && strlen(m_item->getName()))
- elm_object_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", m_item->getName());
+ elm_object_translatable_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", m_item->getName());
// company_name
m_companyNameItemCallbackData.type = profile_composer_title_company_name;
createInputLayout(m_box, strdup(_("IDS_BR_BODY_COMPANY_NAME_ABB")), &m_companyNameItemCallbackData);
elm_box_pack_end(m_box, m_companyNameItemCallbackData.it);
if (m_item->getCompany() && strlen(m_item->getCompany()))
- elm_object_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", m_item->getCompany());
+ elm_object_translatable_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", m_item->getCompany());
// address 1
m_addressLine1ItemCallbackData.type = profile_composer_title_address_line_1;
createInputLayout(m_box, strdup(_("IDS_BR_BODY_ADDRESS_LINE_1_ABB")), &m_addressLine1ItemCallbackData);
elm_box_pack_end(m_box, m_addressLine1ItemCallbackData.it);
if (m_item->getPrimaryAddress() && strlen(m_item->getPrimaryAddress()))
- elm_object_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", m_item->getPrimaryAddress());
+ elm_object_translatable_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", m_item->getPrimaryAddress());
// address 2
m_addressLine2ItemCallbackData.type = profile_composer_title_address_line_2;
createInputLayout(m_box, strdup(_("IDS_BR_BODY_ADDRESS_LINE_2_ABB")), &m_addressLine2ItemCallbackData);
elm_box_pack_end(m_box, m_addressLine2ItemCallbackData.it);
if (m_item->getSecondaryAddress2() && strlen(m_item->getSecondaryAddress2()))
- elm_object_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", m_item->getSecondaryAddress2());
+ elm_object_translatable_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", m_item->getSecondaryAddress2());
// city town
m_cityTownItemCallbackData.type = profile_composer_title_city_town;
createInputLayout(m_box, strdup(_("Town/City/County")), &m_cityTownItemCallbackData);
elm_box_pack_end(m_box, m_cityTownItemCallbackData.it);
if (m_item->getCityTown() && strlen(m_item->getCityTown()))
- elm_object_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", m_item->getCityTown());
+ elm_object_translatable_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", m_item->getCityTown());
// country
m_countryItemCallbackData.type = profile_composer_title_country;
createInputLayout(m_box, strdup(_("IDS_BR_MBODY_COUNTRY_REGION")), &m_countryItemCallbackData);
elm_box_pack_end(m_box, m_countryItemCallbackData.it);
if (m_item->getCountry() && strlen(m_item->getCountry()))
- elm_object_part_text_set(m_countryItemCallbackData.entry, "elm.text", m_item->getCountry());
+ elm_object_translatable_part_text_set(m_countryItemCallbackData.entry, "elm.text", m_item->getCountry());
// post code
m_postCodeItemCallbackData.type = profile_composer_title_post_code;
elm_entry_markup_filter_append(m_postCodeItemCallbackData.entry, elm_entry_filter_limit_size, &m_entryLimitSize);
elm_entry_markup_filter_append(m_postCodeItemCallbackData.entry, elm_entry_filter_accept_set, &m_entry_accept_set);
if (m_item->getPostCode() && strlen(m_item->getPostCode()))
- elm_object_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", m_item->getPostCode());
+ elm_object_translatable_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", m_item->getPostCode());
elm_entry_input_panel_layout_set(m_postCodeItemCallbackData.entry, ELM_INPUT_PANEL_LAYOUT_NUMBERONLY);
elm_entry_prediction_allow_set(m_postCodeItemCallbackData.entry, EINA_FALSE);
createInputLayout(m_box, strdup(_("IDS_BR_BODY_PHONE")), &m_phoneItemCallbackData);
elm_box_pack_end(m_box, m_phoneItemCallbackData.it);
if (m_item->getPhoneNumber() && strlen(m_item->getPhoneNumber()))
- elm_object_part_text_set(m_phoneItemCallbackData.entry, "elm.text", m_item->getPhoneNumber());
+ elm_object_translatable_part_text_set(m_phoneItemCallbackData.entry, "elm.text", m_item->getPhoneNumber());
Elm_Entry_Filter_Accept_Set entry_accept_set;
entry_accept_set.accepted = PHONE_FIELD_VALID_ENTRIES;
entry_accept_set.rejected = NULL;
createInputLayout(m_box, strdup(_("IDS_BR_OPT_SENDURLVIA_EMAIL")), &m_emailItemCallbackData);
elm_box_pack_end(m_box, m_emailItemCallbackData.it);
if (m_item->getEmailAddress() && strlen(m_item->getEmailAddress()))
- elm_object_part_text_set(m_emailItemCallbackData.entry, "elm.text", m_item->getEmailAddress());
+ elm_object_translatable_part_text_set(m_emailItemCallbackData.entry, "elm.text", m_item->getEmailAddress());
elm_entry_input_panel_return_key_type_set(m_emailItemCallbackData.entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
evas_object_smart_callback_add(m_emailItemCallbackData.entry, "activated", __done_button_cb, this);
elm_entry_input_panel_layout_set(m_emailItemCallbackData.entry, ELM_INPUT_PANEL_LAYOUT_EMAIL);
Evas_Object *editfield = static_cast<Evas_Object*>(data);
if (!elm_entry_is_empty(obj) && elm_object_focus_get(obj))
- elm_object_signal_emit(editfield, "show,clear,button,signal", "");
+ elm_object_signal_emit(editfield, "elm,action,show,button", "");
else
- elm_object_signal_emit(editfield, "hide,clear,button,signal", "");
+ elm_object_signal_emit(editfield, "elm,action,hide,button", "");
}
void SettingsAFCreator::__done_button_cb(void* data, Evas_Object*, void*)
SettingsAFCreator *safc = static_cast<SettingsAFCreator*>(data);
if (safc->applyEntryData() == EINA_FALSE)
return;
+ safc->m_naviframe->setTitle("IDS_BR_HEADER_EDIT_INFO_ABB");
SPSC.closeSettingsUIClicked();
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
SPSC.closeSettingsUIClicked();
+ SPSC.settingsAutofillCreateCancelClicked();
}
void SettingsAFCreator::__entry_changed_cb(void* data, Evas_Object* obj, void*)
SettingsAFCreator *view = static_cast<SettingsAFCreator*>(cb_data->user_data);
const char* text = elm_entry_entry_get(obj);
if (text && strlen(text) > 0)
- elm_object_signal_emit(cb_data->editfield, "show,clear,button,signal", "");
+ elm_object_signal_emit(cb_data->editfield, "elm,action,show,button", "");
else
- elm_object_signal_emit(cb_data->editfield, "hide,clear,button,signal", "");
+ elm_object_signal_emit(cb_data->editfield, "elm,action,hide,button", "");
auto isEmpty(elm_entry_is_empty(view->m_fullNameItemCallbackData.entry) == EINA_TRUE);
view->m_naviframe->setRightButtonEnabled(!isEmpty);
: public SettingsUI
{
public:
- SettingsAFCreator(){};
- SettingsAFCreator(Evas_Object* parent, bool profile_exists);
+ SettingsAFCreator() = delete;
+ explicit SettingsAFCreator(Evas_Object* parent);
virtual ~SettingsAFCreator();
virtual bool populateLayout(Evas_Object* genlist);
Evas_Object* createScroller(Evas_Object *parent);
Evas_Object* editfield;
Evas_Object* entry;
Evas_Object* it;
+ Elm_Entry_Filter_Limit_Size* limit;
};
void createInputLayout(Evas_Object* parent, char* fieldName, genlistCallbackData* cb_data);
void clearFields();
void addItems();
protected:
- std::map<unsigned, ItemData> m_buttonsMap;
Evas_Object* m_scroller;
Evas_Object* m_box;
std::shared_ptr<AutoFillFormItem> m_item;
Ewk_Context* m_ewkContext;
- bool m_profile_exists;
Ewk_Autofill_Profile* m_profile;
};
namespace base_ui{
SettingsAFProfile::SettingsAFProfile(Evas_Object* parent)
- : m_profile(nullptr)
+ : SettingsUI(parent)
+ , m_profile(nullptr)
, m_itemData(nullptr)
, m_profileName(std::string())
{
- init(parent);
- SPSC.setProfileName.connect([this](std::string name){m_profileName = name;});
- SPSC.autoFillCleared.connect([this](){
+ SPSC.setProfileName.connect([this](auto name){
+ BROWSER_LOGD("[%s:%d] set profile name", __PRETTY_FUNCTION__, __LINE__);
+ m_profileName = name;
+ });
+ SPSC.autoFillCleared.connect([this]{
+ BROWSER_LOGD("[%s:%d] clear profile name", __PRETTY_FUNCTION__, __LINE__);
m_profileName.clear();
m_profile = nullptr;
});
SettingsAFProfile::~SettingsAFProfile()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ SPSC.autoFillCleared.disconnect_all_slots();
}
void SettingsAFProfile::updateButtonMap()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
ItemData profileName;
- void* item_data(nullptr);
- Eina_List* list(nullptr);
- Eina_List* entire_item_list(
- ewk_context_form_autofill_profile_get_all(ewk_context_default_get()));
+ void* item_data { nullptr };
+ Eina_List* list { nullptr };
+ Eina_List* entire_item_list {
+ ewk_context_form_autofill_profile_get_all(ewk_context_default_get()) };
// ID for the item is not always 1 so we need to return the first existing one
EINA_LIST_FOREACH(entire_item_list, list, item_data) {
}
profileName.buttonText = m_profile ?
profileName.buttonText = ewk_autofill_profile_data_get(m_profile, EWK_PROFILE_NAME) :
- profileName.buttonText = _(Translations::SettingsAutoFillProfileSetMyProfile.c_str());
+ profileName.buttonText = Translations::instance().SettingsAutoFillProfileSetMyProfile.c_str();
if (!m_profileName.empty())
profileName.buttonText = m_profileName;
m_naviframe->setLeftButtonVisible(false);
m_naviframe->setRightButtonVisible(false);
m_naviframe->setPrevButtonVisible(true);
- m_naviframe->setTitle(_(Translations::SettingsAutoFillProfileTitle.c_str()));
+ m_naviframe->setTitle(Translations::instance().SettingsAutoFillProfileTitle.c_str());
- appendGenlist(genlist, m_setting_item_class, m_itemData.get(), _select_profile_cb);
+ appendGenlist(
+ genlist,
+ m_setting_item_class,
+ m_itemData.get(),
+ [](auto, auto, auto){SPSC.settingsAutofillProfileClicked();}
+ );
return true;
}
-
-void SettingsAFProfile::_select_profile_cb(void* data, Evas_Object*, void*)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (!data) {
- BROWSER_LOGE("data is null");
- return;
- }
- auto self = static_cast<SettingsAFProfile*>(data);
- if (self->m_profile)
- SPSC.settingsAutofillProfileClicked(true);
- else
- SPSC.settingsAutofillProfileClicked(false);
-}
}
}
: public SettingsUI
{
public:
- SettingsAFProfile(){};
- SettingsAFProfile(Evas_Object* parent);
+ SettingsAFProfile() = delete;
+ explicit SettingsAFProfile(Evas_Object* parent);
virtual ~SettingsAFProfile();
- virtual bool populateList(Evas_Object* genlist);
- virtual void updateButtonMap();
- static void _select_profile_cb(void* data, Evas_Object*, void*);
+ bool populateList(Evas_Object* genlist) override;
+ void updateButtonMap() override;
protected:
Ewk_Autofill_Profile* m_profile;
std::shared_ptr<ItemData> m_itemData;
namespace base_ui{
SettingsAdvanced::SettingsAdvanced(Evas_Object* parent)
- : m_popup(nullptr)
+ : SettingsUI(parent)
+ , m_popup(nullptr)
{
- init(parent);
- updateButtonMap();
+ updateButtonMapInternal();
vconf_notify_key_changed("memory/sysman/mmc", notifyStorageChange, this);
SPSC.settingsSaveContentRadioPopupPtr.connect(
[this](auto popup){m_popup = popup;});
SPSC.settingsSaveContentRadioPopupPtr.disconnect_all_slots();
}
-void SettingsAdvanced::updateButtonMap()
+void SettingsAdvanced::updateButtonMapInternal()
{
ItemData enable_js;
- enable_js.buttonText = _(Translations::SettingsAdvancedEnableJavaScript.c_str());
- enable_js.subText = _(Translations::SettingsAdvancedEnableJavaScriptSub.c_str());
+ enable_js.buttonText = Translations::instance().SettingsAdvancedEnableJavaScript.c_str();
+ enable_js.subText = Translations::instance().SettingsAdvancedEnableJavaScriptSub.c_str();
enable_js.sui = this;
enable_js.id = ENABLE_JS;
ItemData block_popups;
- block_popups.buttonText = _(Translations::SettingsAdvancedBlockPopups.c_str());
- block_popups.subText = _(Translations::SettingsAdvancedBlockPopupsSub.c_str());
+ block_popups.buttonText = Translations::instance().SettingsAdvancedBlockPopups.c_str();
+ block_popups.subText = Translations::instance().SettingsAdvancedBlockPopupsSub.c_str();
block_popups.sui = this;
block_popups.id = BLOCK_POPUPS;
ItemData save_content;
- save_content.buttonText = _(Translations::SettingsAdvancedSaveContent.c_str());
+ save_content.buttonText = Translations::instance().SettingsAdvancedSaveContent.c_str();
save_content.subText = []() {
auto sig =
SPSC.getWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION);
return (sig && !sig->empty()) ?
_(sig->c_str()) :
- _(Translations::Device.c_str());
+ Translations::instance().Device.c_str();
}();
save_content.sui = this;
save_content.id = SAVE_CONTENT;
boost::bind(&SettingsAdvanced::setContentDestination, this, _1));
}
+void SettingsAdvanced::updateButtonMap()
+{
+ updateButtonMapInternal();
+}
+
void SettingsAdvanced::changeGenlistStorage()
{
int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
m_naviframe->setLeftButtonVisible(false);
m_naviframe->setRightButtonVisible(false);
m_naviframe->setPrevButtonVisible(true);
- m_naviframe->setTitle(_(Translations::SettingsAdvancedTitle.c_str()));
+ m_naviframe->setTitle(Translations::instance().SettingsAdvancedTitle.c_str());
m_genlistItems[SettingsAdvancedOptions::ENABLE_JS] =
appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsAdvancedOptions::ENABLE_JS], _check_cb);
switch (static_cast<RadioButtons>(button)) {
case RadioButtons::DEVICE:
- m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = _(Translations::Device.c_str());
+ m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = Translations::instance().Device.c_str();
setStorageType(SettingsStorageType::DEVICE);
SPSC.setWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION,
- Translations::Device);
+ Translations::instance().Device);
break;
case RadioButtons::SD_CARD:
- m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = _(Translations::SDCard.c_str());
+ m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = Translations::instance().SDCard.c_str();
setStorageType(SettingsStorageType::SD_CARD);
SPSC.setWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION,
- Translations::SDCard);
+ Translations::instance().SDCard);
break;
default:
return;
: public SettingsUI
{
public:
- SettingsAdvanced(Evas_Object* parent);
+ explicit SettingsAdvanced(Evas_Object* parent);
virtual ~SettingsAdvanced();
bool populateList(Evas_Object* genlist) override;
void updateButtonMap() override;
void setContentDestination(int button);
bool setStorageType(SettingsStorageType type);
private:
+ void updateButtonMapInternal(); // internal version for proper call from constructor
RadioPopup* m_popup;
};
namespace base_ui{
SettingsDelPersData::SettingsDelPersData(Evas_Object* parent)
+ : SettingsUI(parent)
{
- init(parent);
- updateButtonMap();
+ updateButtonMapInternal();
};
SettingsDelPersData::~SettingsDelPersData()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
-void SettingsDelPersData::updateButtonMap()
+void SettingsDelPersData::updateButtonMapInternal()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
// TODO Missing translations
ItemData selectAll;
- selectAll.buttonText = _(Translations::SettingsDelPersDataSelectAll.c_str());
+ selectAll.buttonText = Translations::instance().SettingsDelPersDataSelectAll.c_str();
selectAll.sui = this;
selectAll.id = SELECT_ALL;
ItemData browsHistory;
- browsHistory.buttonText = _(Translations::SettingsDelPersDataBrowsingHistory.c_str());
+ browsHistory.buttonText = Translations::instance().SettingsDelPersDataBrowsingHistory.c_str();
browsHistory.sui = this;
browsHistory.id = BROWSING_HISTORY;
ItemData cache;
- cache.buttonText = _(Translations::SettingsDelPersDataCache.c_str());
+ cache.buttonText = Translations::instance().SettingsDelPersDataCache.c_str();
cache.sui = this;
cache.id = CACHE;
ItemData cookies;
- cookies.buttonText = _(Translations::SettingsDelPersDataCookies.c_str());
+ cookies.buttonText = Translations::instance().SettingsDelPersDataCookies.c_str();
cookies.sui = this;
cookies.id = COOKIES_AND_SITE;
ItemData pass;
- pass.buttonText = _(Translations::SettingsDelPersDataPasswords.c_str());
+ pass.buttonText = Translations::instance().SettingsDelPersDataPasswords.c_str();
pass.sui = this;
pass.id = PASSWORDS;
ItemData autofill;
- autofill.buttonText = _(Translations::SettingsDelPersDataAutoFillData.c_str());
+ autofill.buttonText = Translations::instance().SettingsDelPersDataAutoFillData.c_str();
autofill.sui = this;
autofill.id = DEL_PERS_AUTO_FILL;
ItemData loc;
- loc.buttonText = _(Translations::SettingsDelPersDataLocationData.c_str());
+ loc.buttonText = Translations::instance().SettingsDelPersDataLocationData.c_str();
loc.sui = this;
loc.id = LOCATION;
m_buttonsMap[SettingsDelPersDataOptions::LOCATION] = loc;
}
+void SettingsDelPersData::updateButtonMap()
+{
+ updateButtonMapInternal();
+}
+
+void SettingsDelPersData::resetOptionValues()
+{
+ m_option[SettingsDelPersDataOptions::SELECT_ALL] = false;
+ m_option[SettingsDelPersDataOptions::BROWSING_HISTORY] = true;
+ m_option[SettingsDelPersDataOptions::CACHE] = true;
+ m_option[SettingsDelPersDataOptions::COOKIES_AND_SITE] = true;
+ m_option[SettingsDelPersDataOptions::PASSWORDS] = false;
+ m_option[SettingsDelPersDataOptions::DEL_PERS_AUTO_FILL] = false;
+ m_option[SettingsDelPersDataOptions::LOCATION] = false;
+}
+
bool SettingsDelPersData::populateList(Evas_Object* genlist)
{
- m_naviframe->setTitle(_(Translations::SettingsDelPersDataTitle.c_str()));
+ m_naviframe->setTitle(Translations::instance().SettingsDelPersDataTitle.c_str());
m_naviframe->addLeftButton(__cancel_button_cb, this);
m_naviframe->addRightButton(__delete_button_cb, this);
m_naviframe->setPrevButtonVisible(false);
m_naviframe->setLeftButtonVisible(true);
m_naviframe->setRightButtonVisible(true);
- m_naviframe->setRightButtonText(_(Translations::SettingsDelPersDataDelete.c_str()));
- m_naviframe->setLeftButtonText(_(Translations::SettingsDelPersDataCancel.c_str()));
-
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::SELECT_ALL], nullptr);
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::BROWSING_HISTORY], nullptr);
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::CACHE], nullptr);
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::COOKIES_AND_SITE], nullptr);
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::PASSWORDS], nullptr);
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::DEL_PERS_AUTO_FILL], nullptr);
- appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::LOCATION], nullptr);
+ m_naviframe->setRightButtonText(Translations::instance().SettingsDelPersDataDelete.c_str());
+ m_naviframe->setLeftButtonText(Translations::instance().SettingsDelPersDataCancel.c_str());
+
+ resetOptionValues();
+
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::SELECT_ALL], _check_cb);
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::BROWSING_HISTORY], _check_cb);
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::CACHE], _check_cb);
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::COOKIES_AND_SITE], _check_cb);
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::PASSWORDS], _check_cb);
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::DEL_PERS_AUTO_FILL], _check_cb);
+ appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::LOCATION], _check_cb);
return true;
}
+void SettingsDelPersData::_check_cb(void*, Evas_Object* obj, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto el = elm_genlist_selected_item_get(obj);
+ auto check = elm_object_item_part_content_get(el, "elm.swallow.end");
+ auto value = !elm_check_state_get(check);
+
+ elm_check_state_set(check, value);
+ evas_object_smart_callback_call(check, "changed", nullptr);
+}
+
void SettingsDelPersData::__cancel_button_cb(void*, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
Evas_Object* SettingsDelPersData::createNormalCheckBox(Evas_Object* obj, ItemData* itd)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto check = elm_check_add(obj);
- elm_object_style_set(check, "default");
+
+ Evas_Object* check{ elm_check_add(obj) };
evas_object_smart_callback_add(check, "changed", grid_item_check_changed, itd);
- if (static_cast<SettingsDelPersDataOptions>(itd->id) == BROWSING_HISTORY ||
- static_cast<SettingsDelPersDataOptions>(itd->id) == CACHE ||
- static_cast<SettingsDelPersDataOptions>(itd->id) == COOKIES_AND_SITE) {
- elm_check_state_set(check, EINA_TRUE);
- setOption(itd->id, true);
- } else {
- elm_check_state_set(check, EINA_FALSE);
- setOption(itd->id, false);
- }
+ elm_object_style_set(check, "default");
+ elm_check_state_set(check, getOption(itd->id) ? EINA_TRUE : EINA_FALSE);
+ evas_object_repeat_events_set(check, EINA_FALSE);
+ evas_object_propagate_events_set(check, EINA_FALSE);
+
return check;
}
self->setOption(
itd->id,
static_cast<bool>(value));
+ if ((value == false) && (self->getOption(SELECT_ALL) == true)) {
+ elm_check_state_set(self->getCheckboxes()[SELECT_ALL], false);
+ self->setOption(SELECT_ALL, false);
+ }
}
bool val = self->getOption(SELECT_ALL);
if (self->getOption(LOCATION) != val &&
{
public:
SettingsDelPersData(){};
- SettingsDelPersData(Evas_Object* parent);
+ explicit SettingsDelPersData(Evas_Object* parent);
virtual ~SettingsDelPersData();
- virtual bool populateList(Evas_Object* genlist);
- virtual void updateButtonMap();
- virtual Evas_Object* createNormalCheckBox(Evas_Object*, ItemData*);
+ void resetOptionValues();
+ bool populateList(Evas_Object* genlist) override;
+ void updateButtonMap() override;
+ Evas_Object* createNormalCheckBox(Evas_Object*, ItemData*) override;
+ static void _realized_cb(void* data, Evas_Object*, void* event_info);
static void grid_item_check_changed(void* data, Evas_Object* obj, void*);
+ static void _check_cb(void*, Evas_Object* obj, void*);
static void __cancel_button_cb(void* data, Evas_Object*, void*);
static void __delete_button_cb(void* data, Evas_Object*, void*);
-protected:
- std::map<unsigned, ItemData> m_buttonsMap;
+private:
+ void updateButtonMapInternal(); // internal version for proper call from constructor
};
}
namespace tizen_browser{
namespace base_ui{
-const std::string SettingsHomePage::DEF_HOME_PAGE = Translations::TizenPage;
-const std::string SettingsHomePage::QUICK_PAGE = _(Translations::QuickPage.c_str());
-const std::string SettingsHomePage::MOST_VISITED_PAGE = _(Translations::MostVisitedPage.c_str());
-const std::string SettingsHomePage::OTHER_PAGE = _(Translations::OtherPage.c_str());
-const std::string SettingsHomePage::CURRENT_PAGE = _(Translations::CurrentPage.c_str());
+const std::string SettingsHomePage::DEF_HOME_PAGE = Translations::instance().TizenPage;
SettingsHomePage::SettingsHomePage(Evas_Object* parent)
-{
- init(parent);
-};
+ : SettingsUI(parent)
+{ }
SettingsHomePage::~SettingsHomePage()
{
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
ItemData defaultPage;
- defaultPage.buttonText = _(Translations::SettingsHomePageDefault.c_str());
- defaultPage.subText = DEF_HOME_PAGE;
+ defaultPage.buttonText = Translations::instance().SettingsHomePageDefault.c_str();
+ defaultPage.subText = SettingsHomePage::DEF_HOME_PAGE;
defaultPage.sui = this;
defaultPage.id = DEFAULT;
ItemData current;
- current.buttonText = _(Translations::SettingsHomePageCurrentPage.c_str());
+ current.buttonText = Translations::instance().SettingsHomePageCurrentPage.c_str();
current.subText = getCurrentPage();
current.sui = this;
current.id = CURRENT;
ItemData quick;
- quick.buttonText = _(Translations::SettingsHomePageQuickAccess.c_str());
+ quick.buttonText = Translations::instance().SettingsHomePageQuickAccess.c_str();
quick.sui = this;
quick.id = QUICK_ACCESS;
ItemData most;
- most.buttonText = _(Translations::SettingsHomePageMostVisited.c_str());
+ most.buttonText = Translations::instance().SettingsHomePageMostVisited.c_str();
most.sui = this;
most.id = MOST_VIS;
ItemData other;
- other.buttonText = _(Translations::SettingsHomePageOther.c_str());
+ other.buttonText = Translations::instance().SettingsHomePageOther.c_str();
other.subText = [this]() -> std::string {
auto sig = SPSC.getWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
- auto otherPage = (sig && !sig->empty()) ? *sig : _(Translations::TizenPage.c_str());
+ auto otherPage = (sig && !sig->empty()) ? *sig : SettingsHomePage::DEF_HOME_PAGE.c_str();
- if (!otherPage.compare(QUICK_PAGE) ||
- !otherPage.compare(MOST_VISITED_PAGE) ||
- !otherPage.compare(DEF_HOME_PAGE) ||
- otherPage.find(CURRENT_PAGE) != std::string::npos) {
+ if (!otherPage.compare(Translations::instance().QuickPage.c_str()) ||
+ !otherPage.compare(Translations::instance().MostVisitedPage.c_str()) ||
+ !otherPage.compare(SettingsHomePage::DEF_HOME_PAGE) ||
+ otherPage.find(Translations::instance().CurrentPage.c_str()) != std::string::npos) {
otherPage = m_buttonsMap[SettingsHomePageOptions::OTHER].subText;
}
return otherPage;
auto stateString = []() -> std::string {
auto sig = SPSC.getWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
- return (sig && !sig->empty()) ? *sig : DEF_HOME_PAGE;
+ return (sig && !sig->empty()) ? *sig : SettingsHomePage::DEF_HOME_PAGE;
}();
- if (!stateString.compare(QUICK_PAGE)) {
+ if (!stateString.compare(Translations::instance().QuickPage.c_str())) {
elm_radio_value_set(m_radio, SettingsHomePageOptions::QUICK_ACCESS);
- } else if (!stateString.compare(MOST_VISITED_PAGE)) {
+ } else if (!stateString.compare(Translations::instance().MostVisitedPage.c_str())) {
elm_radio_value_set(m_radio, SettingsHomePageOptions::MOST_VIS);
- } else if (!stateString.compare(DEF_HOME_PAGE)) {
+ } else if (!stateString.compare(SettingsHomePage::DEF_HOME_PAGE)) {
elm_radio_value_set(m_radio, SettingsHomePageOptions::DEFAULT);
- } else if (stateString.find(CURRENT_PAGE) != std::string::npos ||
+ } else if (stateString.find(Translations::instance().CurrentPage.c_str()) != std::string::npos ||
!stateString.compare(getCurrentPage())) {
elm_radio_value_set(m_radio, SettingsHomePageOptions::CURRENT);
} else {
m_naviframe->setLeftButtonVisible(false);
m_naviframe->setRightButtonVisible(false);
m_naviframe->setPrevButtonVisible(true);
- m_naviframe->setTitle(_(Translations::SettingsHomePageTitle.c_str()));
+ m_naviframe->setTitle(Translations::instance().SettingsHomePageTitle.c_str());
updateButtonMap();
m_itemsMap[SettingsHomePageOptions::DEFAULT] =
auto self = static_cast<SettingsHomePage*>(data);
SPSC.setWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
- SettingsHomePage::CURRENT_PAGE + self->getCurrentPage());
+ Translations::instance().CurrentPage.c_str() + self->getCurrentPage());
self->updateButtonMap();
+ SPSC.closeSettingsUIClicked();
}
void SettingsHomePage::_default_cb(void* data, Evas_Object*, void*)
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
SettingsHomePage::DEF_HOME_PAGE);
self->updateButtonMap();
+ SPSC.closeSettingsUIClicked();
}
void SettingsHomePage::_quick_cb(void* data, Evas_Object*, void*)
auto self = static_cast<SettingsHomePage*>(data);
SPSC.setWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
- SettingsHomePage::QUICK_PAGE);
+ Translations::instance().QuickPage.c_str());
self->updateButtonMap();
+ SPSC.closeSettingsUIClicked();
}
void SettingsHomePage::_most_visited_cb(void* data, Evas_Object*, void*)
auto self = static_cast<SettingsHomePage*>(data);
SPSC.setWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
- SettingsHomePage::MOST_VISITED_PAGE);
+ Translations::instance().MostVisitedPage.c_str());
self->updateButtonMap();
+ SPSC.closeSettingsUIClicked();
}
void SettingsHomePage::_other_cb(void*, Evas_Object*, void*)
{
public:
SettingsHomePage(){};
- SettingsHomePage(Evas_Object* parent);
+ explicit SettingsHomePage(Evas_Object* parent);
std::string getCurrentPage();
virtual ~SettingsHomePage();
virtual bool populateList(Evas_Object* genlist);
static void _most_visited_cb(void *data, Evas_Object*obj , void* event_info);
static void _other_cb(void* data, Evas_Object* obj, void* event_info);
static const std::string DEF_HOME_PAGE;
- static const std::string QUICK_PAGE;
- static const std::string MOST_VISITED_PAGE;
- static const std::string OTHER_PAGE;
- static const std::string CURRENT_PAGE;
private:
std::map<SettingsHomePageOptions, Elm_Object_Item*> m_itemsMap;
namespace base_ui{
SettingsMain::SettingsMain(Evas_Object* parent)
-{
- init(parent);
-};
+ : SettingsUI(parent)
+{ }
+
SettingsMain::~SettingsMain()
{
void SettingsMain::updateButtonMap()
{
ItemData homePage;
- homePage.buttonText = _(Translations::SettingsMainHomePage.c_str());
- homePage.subText = _(Translations::SettingsMainHomePageDefault.c_str());
+ homePage.buttonText = Translations::instance().SettingsMainHomePage.c_str();
+ homePage.subText = Translations::instance().SettingsMainHomePageDefault.c_str();
homePage.sui = this;
homePage.id = HOME;
ItemData search;
- search.buttonText = _(Translations::SettingsMainDefaultSearchEngine.c_str());
- search.subText = []() -> std::string {
- auto sig =
- SPSC.getWebEngineSettingsParamString(
- basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
- return (sig && !sig->empty()) ?
- *sig :
- Translations::Google;
- }();
+ search.buttonText = Translations::instance().SettingsMainDefaultSearchEngine.c_str();
+ auto sig = SPSC.getWebEngineSettingsParamString(
+ basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
+ auto sub = (sig && !sig->empty()) ? *sig : Translations::instance().Google;
+
+ search.subText = _(sub.c_str());
search.sui = this;
search.id = SEARCH;
ItemData autofill;
- autofill.buttonText = _(Translations::SettingsMainAutoFillProfiles.c_str());
- autofill.subText = _(Translations::SettingsMainAutoFillProfilesSub.c_str());
+ autofill.buttonText = Translations::instance().SettingsMainAutoFillProfiles.c_str();
+ autofill.subText = Translations::instance().SettingsMainAutoFillProfilesSub.c_str();
autofill.sui = this;
autofill.id = AUTO_FILL_PROFILE;
ItemData zoom;
- zoom.buttonText = _(Translations::SettingsMainManualZoom.c_str());
- zoom.subText = _(Translations::SettingsMainManualZoomSub.c_str());
+ zoom.buttonText = Translations::instance().SettingsMainManualZoom.c_str();
+ zoom.subText = Translations::instance().SettingsMainManualZoomSub.c_str();
zoom.sui = this;
zoom.id = ZOOM;
ItemData privacy;
- privacy.buttonText = _(Translations::SettingsMainPrivacy.c_str());
+ privacy.buttonText = Translations::instance().SettingsMainPrivacy.c_str();
privacy.sui = this;
privacy.id = PRIVACY;
ItemData advanced;
- advanced.buttonText = _(Translations::SettingsMainAdvanced.c_str());
+ advanced.buttonText = Translations::instance().SettingsMainAdvanced.c_str();
advanced.sui = this;
advanced.id = ADVANCED;
m_naviframe->setLeftButtonVisible(false);
m_naviframe->setRightButtonVisible(false);
m_naviframe->setPrevButtonVisible(true);
- m_naviframe->setTitle(_(Translations::SettingsMainTitle.c_str()));
+ m_naviframe->setTitle(Translations::instance().SettingsMainTitle.c_str());
updateButtonMap();
m_genlistItems[SettingsMainOptions::HOME] =
SPSC.getWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
- return (sig && !sig->empty()) ? (*sig) : Translations::TizenPage;
+ return (sig && !sig->empty()) ? (*sig) : Translations::instance().TizenPage;
}
void SettingsMain::_home_page_cb(void*, Evas_Object*, void*)
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
switch (static_cast<RadioButtons>(button)) {
case RadioButtons::GOOGLE:
- m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::Google;
+ m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::instance().Google;
break;
case RadioButtons::YAHOO:
- m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::Yahoo;
+ m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::instance().Yahoo;
break;
case RadioButtons::BING:
- m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::Bing;
+ m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::instance().Bing;
break;
default:
return;
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto homePage(getHomePage());
- auto it(homePage.find(Translations::CurrentPage));
+ auto it(homePage.find(Translations::instance().CurrentPage));
boost::optional<std::string> currentOpt(SPSC.requestCurrentPage());
std::string currentURL = std::string();
if (currentOpt && !currentOpt->empty())
currentURL = *currentOpt;
- if (!homePage.compare(Translations::TizenPage)) {
+ if (!homePage.compare(Translations::instance().TizenPage)) {
m_buttonsMap[SettingsMainOptions::HOME].subText =
- Translations::TizenPage;
- } else if (!homePage.compare(Translations::QuickPage)) {
+ Translations::instance().TizenPage.c_str();
+ } else if (!homePage.compare(Translations::instance().QuickPage)) {
m_buttonsMap[SettingsMainOptions::HOME].subText =
- Translations::SettingsHomePageQuickAccess;
- } else if (!homePage.compare(Translations::MostVisitedPage)) {
+ Translations::instance().SettingsHomePageQuickAccess.c_str();
+ } else if (!homePage.compare(Translations::instance().MostVisitedPage)) {
m_buttonsMap[SettingsMainOptions::HOME].subText =
- Translations::SettingsHomePageMostVisited;
+ Translations::instance().SettingsHomePageMostVisited.c_str();
} else if (!homePage.compare(currentURL)) {
m_buttonsMap[SettingsMainOptions::HOME].subText =
- Translations::SettingsHomePageCurrentPage;
+ Translations::instance().SettingsHomePageCurrentPage.c_str();
} else if (it != std::string::npos) {
- homePage.erase(it, Translations::CurrentPage.length());
- m_buttonsMap[SettingsMainOptions::HOME].subText = homePage;
+ homePage.erase(it, Translations::instance().CurrentPage.length());
+ m_buttonsMap[SettingsMainOptions::HOME].subText = _(homePage.c_str());
SPSC.setWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
homePage);
} else {
- m_buttonsMap[SettingsMainOptions::HOME].subText = homePage;
+ m_buttonsMap[SettingsMainOptions::HOME].subText = _(homePage.c_str());
}
elm_genlist_realized_items_update(m_genlist);
}
HOME,
SEARCH,
AUTO_FILL_PROFILE,
- AUTO_FILL_CREATOR_WITHOUT_PROFILE,
- AUTO_FILL_CREATOR_WITH_PROFILE,
+ AUTO_FILL_CREATOR,
PRIVACY,
ZOOM,
ADVANCED,
{
public:
SettingsMain(){};
- SettingsMain(Evas_Object* parent);
+ explicit SettingsMain(Evas_Object* parent);
virtual ~SettingsMain();
bool populateList(Evas_Object* genlist) override;
Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData* itd) override;
boost::bind(&SettingsManager::showSettingsAdvancedUI, this));
SPSC.settingsDelPersDataClicked.connect(
boost::bind(&SettingsManager::showSettingsDelPrivDataUI, this));
- SPSC.settingsAutofillProfileClicked.connect(
- boost::bind(&SettingsManager::showSettingsAutofillCreatorUI, this, _1));
+ SPSC.settingsAutofillProfileClicked.connect([this]{
+ showSettingsAutofillCreatorUI();});
+ SPSC.settingsAutofillCreateCancelClicked.connect([this]{
+ m_settingsViews.erase(AUTO_FILL_CREATOR);});
}
std::shared_ptr<SettingsUI>& SettingsManager::addView(const SettingsMainOptions& s)
case AUTO_FILL_PROFILE:
m_settingsViews[s] = std::make_shared<SettingsAFProfile>(m_parent);
break;
- case AUTO_FILL_CREATOR_WITH_PROFILE:
- m_settingsViews[s] = std::make_shared<SettingsAFCreator>(m_parent, true);
- break;
- case AUTO_FILL_CREATOR_WITHOUT_PROFILE:
- m_settingsViews[s] = std::make_shared<SettingsAFCreator>(m_parent, false);
+ case AUTO_FILL_CREATOR:
+ m_settingsViews[s] = std::make_shared<SettingsAFCreator>(m_parent);
break;
case PRIVACY:
m_settingsViews[s] = std::make_shared<SettingsPrivacy>(m_parent);
SPSC.showSettings(SettingsMainOptions::AUTO_FILL_PROFILE);
}
-void SettingsManager::showSettingsAutofillCreatorUI(bool profile)
+void SettingsManager::showSettingsAutofillCreatorUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (profile)
- SPSC.showSettings(
- SettingsMainOptions::AUTO_FILL_CREATOR_WITH_PROFILE);
- else
- SPSC.showSettings(
- SettingsMainOptions::AUTO_FILL_CREATOR_WITHOUT_PROFILE);
+ SPSC.showSettings(SettingsMainOptions::AUTO_FILL_CREATOR);
}
void SettingsManager::showSettingsPrivacyUI()
void showSettingsBaseUI();
void showSettingsHomePageUI();
void showSettingsAutofillUI();
- void showSettingsAutofillCreatorUI(bool);
+ void showSettingsAutofillCreatorUI();
void showSettingsPrivacyUI();
void showSettingsUserAgentUI();
void showSettingsAdvancedUI();
B_SIG<void ()> settingsAutofillClicked;
B_SIG<void ()> settingsAdvancedClicked;
B_SIG<void ()> settingsUserAgentClicked;
- B_SIG<void (bool)> settingsAutofillProfileClicked;
+ B_SIG<void ()> settingsAutofillProfileClicked;
+ B_SIG<void ()> settingsAutofillCreateCancelClicked;
B_SIG<void (const std::string&)> homePageChanged;
B_SIG<std::string ()> requestCurrentPage;
B_SIG<bool ()> isLandscape;
SettingsPrivacy::SettingsPrivacy(Evas_Object* parent)
+ : SettingsUI(parent)
{
- init(parent);
- updateButtonMap();
-};
+ updateButtonMapInternal();
+}
SettingsPrivacy::~SettingsPrivacy()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
-void SettingsPrivacy::updateButtonMap()
+void SettingsPrivacy::updateButtonMapInternal()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
ItemData cookies;
- cookies.buttonText = _(Translations::SettingsPrivacyAcceptCookies.c_str());
- cookies.subText = _(Translations::SettingsPrivacyAcceptCookiesSub.c_str());
+ cookies.buttonText = Translations::instance().SettingsPrivacyAcceptCookies.c_str();
+ cookies.subText = Translations::instance().SettingsPrivacyAcceptCookiesSub.c_str();
cookies.sui = this;
cookies.id = SettingsPrivacyOptions::COOKIES;
ItemData signIn;
- signIn.buttonText = _(Translations::SettingsPrivacySaveSigninInfo.c_str());
- signIn.subText = _(Translations::SettingsPrivacySaveSigninInfo.c_str());
+ signIn.buttonText = Translations::instance().SettingsPrivacySaveSigninInfo.c_str();
+ signIn.subText = Translations::instance().SettingsPrivacySaveSigninInfoSub.c_str();
signIn.sui = this;
signIn.id = SettingsPrivacyOptions::SIGNIN_INFO;
ItemData delPerData;
- delPerData.buttonText = _(Translations::SettingsPrivacyDeletePersonalData.c_str());
+ delPerData.buttonText = Translations::instance().SettingsPrivacyDeletePersonalData.c_str();
delPerData.sui = this;
delPerData.id = SettingsPrivacyOptions::DEL_PER_DATA;
m_buttonsMap[SettingsPrivacyOptions::DEL_PER_DATA] = delPerData;
}
+void SettingsPrivacy::updateButtonMap()
+{
+ updateButtonMapInternal();
+}
+
bool SettingsPrivacy::populateList(Evas_Object* genlist)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_naviframe->setLeftButtonVisible(false);
m_naviframe->setRightButtonVisible(false);
m_naviframe->setPrevButtonVisible(true);
- m_naviframe->setTitle(_(Translations::SettingsPrivacyTitle.c_str()));
+ m_naviframe->setTitle(Translations::instance().SettingsPrivacyTitle.c_str());
appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::COOKIES], _check_cb);
appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::SIGNIN_INFO], _check_cb);
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto value = elm_check_state_get(obj);
- if (value == EINA_TRUE)
- ewk_cookie_manager_accept_policy_set(
- ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
- else
- ewk_cookie_manager_accept_policy_set(
- ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_NEVER);
+
+ SPSC.setWebEngineSettingsParam(
+ basic_webengine::WebEngineSettings::ENABLE_COOKIES,
+ static_cast<bool>(value));
}
void SettingsPrivacy::_signin_cb(void*, Evas_Object* obj, void*)
SPSC.settingsDelPersDataClicked();
}
+Evas_Object* SettingsPrivacy::createOnOffCheckBox(Evas_Object* obj, ItemData* itd)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Evas_Object* check { elm_check_add(obj) };
+ elm_object_style_set(check, "on&off");
+ elm_check_state_set(check, getCheckState(itd->id));
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ return check;
+}
+
+Eina_Bool SettingsPrivacy::getCheckState(int id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::optional<bool> sig;
+
+ switch (id) {
+ case COOKIES:
+ sig = SPSC.getWebEngineSettingsParam(
+ basic_webengine::WebEngineSettings::ENABLE_COOKIES);
+ break;
+ case SIGNIN_INFO:
+ sig = SPSC.getWebEngineSettingsParam(
+ basic_webengine::WebEngineSettings::REMEMBER_PASSWORDS);
+ break;
+ default:
+ sig = false;
+ break;
+ }
+ return (sig && *sig) ? EINA_TRUE : EINA_FALSE;
+}
+
}
}
{
public:
SettingsPrivacy(){};
- SettingsPrivacy(Evas_Object* parent);
+ explicit SettingsPrivacy(Evas_Object* parent);
virtual ~SettingsPrivacy();
bool populateList(Evas_Object* genlist) override;
void updateButtonMap() override;
+ Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData* itd) override;
+ Eina_Bool getCheckState(int id);
static void _cookies_cb(void *data, Evas_Object*obj , void* event_info);
static void _signin_cb(void *data, Evas_Object*obj , void* event_info);
static void _del_per_data_cb(void *data, Evas_Object*obj , void* event_info);
static void _realized_cb(void* data, Evas_Object* obj, void* event_info);
static void _check_cb(void* data, Evas_Object* obj, void* event_info);
+private:
+ void updateButtonMapInternal(); // internal version for proper call from constructor
};
}
, m_settings_layout(nullptr)
, m_items_layout(nullptr)
, m_parent(nullptr)
+ , m_layout(nullptr)
, m_radio(nullptr)
{
+ m_setting_item_class = nullptr;
+ m_setting_double_item_class = nullptr;
+ m_setting_check_on_of_item_class = nullptr;
+ m_setting_check_normal_item_class = nullptr;
+ m_setting_check_radio_item_class = nullptr;
+
+ init();
+}
+
+SettingsUI::SettingsUI(Evas_Object* parent)
+ : m_naviframe(nullptr)
+ , m_genlist(nullptr)
+ , m_settings_layout(nullptr)
+ , m_items_layout(nullptr)
+ , m_parent(parent)
+ , m_layout(nullptr)
+ , m_radio(nullptr)
+{
+ m_setting_item_class = nullptr;
+ m_setting_double_item_class = nullptr;
+ m_setting_check_on_of_item_class = nullptr;
+ m_setting_check_normal_item_class = nullptr;
+ m_setting_check_radio_item_class = nullptr;
+
+ init();
+}
+
+void SettingsUI::init()
+{
+ Translations::instance().update();
m_edjFilePath = EDJE_DIR;
m_edjFilePath.append("SettingsUI/SettingsMobileUI.edj");
elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
m_setting_check_radio_item_class = createItemClass("type1",_gengrid_item_text_get, _gengrid_item_content_radio_get);
}
+void SettingsUI::init(Evas_Object* parent)
+{
+ m_parent = parent;
+}
+
Elm_Gengrid_Item_Class* SettingsUI::createItemClass(
const char* style,
Elm_Gen_Item_Text_Get_Cb text_cb,
evas_object_del(m_radio);
}
-void SettingsUI::init(Evas_Object* parent)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(parent);
- m_parent = parent;
-}
-
Evas_Object* SettingsUI::getContent()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
void SettingsUI::showUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Translations::instance().update();
m_naviframe->show();
updateButtonMap();
if (m_genlist || elm_genlist_items_count(m_genlist)) {
}
}
-Evas_Object* SettingsUI::createActionBar(Evas_Object* settings_layout)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- Evas_Object* actionBar = elm_layout_add(settings_layout);
- elm_object_part_content_set(settings_layout, "actionbar_swallow", actionBar);
- evas_object_size_hint_weight_set(actionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(actionBar, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- elm_layout_file_set(actionBar, m_edjFilePath.c_str(), "action_bar");
- Evas_Object *close_click_btn = elm_button_add(actionBar);
- elm_object_style_set(close_click_btn, "basic_button");
- evas_object_smart_callback_add(close_click_btn, "clicked", SettingsUI::close_clicked_cb, this);
- elm_object_part_content_set(actionBar, "close_click", close_click_btn);
- elm_object_translatable_part_text_set(actionBar, "settings_title", "IDS_BR_BODY_SETTINGS");
-
- return actionBar;
-}
-
Evas_Object* SettingsUI::_gengrid_item_content_radio_get(void* data, Evas_Object* obj, const char* part)
{
if (!data) {
void SettingsUI::_language_changed(void *data, Evas_Object* obj, void*)
{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
if (!data) {
BROWSER_LOGE("data is null");
return;
}
- SettingsUI* self = static_cast<SettingsUI*>(data);
+ Translations::instance().update();
+ auto self = static_cast<SettingsUI*>(data);
self->updateButtonMap();
+ elm_genlist_clear(obj);
+ self->populateList(obj);
elm_genlist_realized_items_update(obj);
}
elm_genlist_multi_select_set(m_genlist, EINA_FALSE);
elm_scroller_policy_set(m_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
elm_scroller_bounce_set(m_genlist, EINA_FALSE, EINA_FALSE);
+ elm_genlist_mode_set(m_genlist, ELM_LIST_COMPRESS);
evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
elm_object_part_content_set(layout, "options_swallow", m_genlist);
evas_object_show(m_genlist);
{
public:
SettingsUI();
+ explicit SettingsUI(Evas_Object* parent);
virtual ~SettingsUI();
+ SettingsUI(const SettingsUI&) = delete;
+ SettingsUI& operator=(const SettingsUI&) = delete;
+
virtual bool populateList(Evas_Object*) { return false; };
virtual bool populateLayout(Evas_Object*) { return false; };
virtual void updateButtonMap(){};
const void *data,
Evas_Smart_Cb func);
void prepareLayout(Evas_Object* layout);
- Evas_Object* createActionBar(Evas_Object* settings_layout);
Evas_Object* createSettingsMobilePage(Evas_Object* settings_layout);
Evas_Object* createMainView(Evas_Object* settings_layout);
Evas_Object* getGenlist() { return m_genlist; }
Evas_Object* getRadioGroup() { return m_radio; }
private:
+ void init();
Evas_Object* createSettingsUILayout(Evas_Object* parent);
static void close_clicked_cb(void* data, Evas_Object* obj, void* event_info);
namespace base_ui{
SettingsUserAgent::SettingsUserAgent(Evas_Object* parent)
+ : SettingsUI(parent)
{
- init(parent);
- updateButtonMap();
-};
+ updateButtonMapInternal();
+}
SettingsUserAgent::~SettingsUserAgent()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
-void SettingsUserAgent::updateButtonMap()
+void SettingsUserAgent::updateButtonMapInternal()
{
for (auto i = 0; i < UA_ITEMS_COUNT; ++i) {
ItemData content;
}
}
+void SettingsUserAgent::updateButtonMap()
+{
+ updateButtonMapInternal();
+}
+
bool SettingsUserAgent::populateList(Evas_Object* genlist)
{
m_naviframe->setLeftButtonVisible(false);
: public SettingsUI
{
public:
- SettingsUserAgent(Evas_Object* parent);
+ explicit SettingsUserAgent(Evas_Object* parent);
virtual ~SettingsUserAgent();
- virtual bool populateList(Evas_Object* genlist) override;
- virtual void updateButtonMap() override;
+ bool populateList(Evas_Object* genlist) override;
+ void updateButtonMap() override;
Evas_Object* createRadioButton(Evas_Object* obj, ItemData* itd) override;
private:
+ void updateButtonMapInternal(); // internal version for proper call from constructor
struct UserAgentItem {
UserAgentItem(std::string&& n, std::string&& s)
: name(n)
-collections { base_scale: 2.6;
-
-group {
- name: "affdv-layout";
- images {
- image: "navi_ic_back_nor.png" COMP;
- }
- parts {
- part {
- name: "bg_clipper";
- type : RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- fixed: 0 0;
- min: 1 1;
- max: -1 -1;
- visible: 1;
- align: 0 0;
- color: 243 243 243 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- part {
- name: "select_all_bg";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 0;
- min: 1 72;
- max: -1 72;
- color: 231 231 231 255;
- rel1 { relative: 0.0 0.0; to: "bg_clipper";}
- rel2 { relative: 1.0 1.0; }
- }
- }
- rect {
- name: "select_all_text_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0 0;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "select_all_bg";}
- rel2 { relative: 1.0 1.0; to: "select_all_bg";}
- }
- }
- rect {
- name: "select_all_text_spacer_2";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 1 1;
- fixed: 1 1;
- min: 72 0;
- max: 72 0;
- rel1 { relative: 0.0 0.0; to: "select_all_bg";}
- rel2 { relative: 1.0 1.0; to: "select_all_bg";}
- }
- }
- part {
- name: "select_all_text";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 56 0;
- fixed: 1 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 1.0 1.0; to: "select_all_text_spacer";}
- rel2 { relative: 0.0 0.0; to: "select_all_text_spacer_2";}
- text {
- text: "Select all";
- font: "Sans";
- size: 30;
- align: 0.0 0.5;
- }
- }
- }
- rect {
- name: "select_all_checkbox_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 1 1;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "select_all_bg";}
- rel2 { relative: 1.0 1.0; to: "select_all_bg";}
- }
- }
- part {
- name: "select_all_checkbox";
- scale:1;
- mouse_events: 1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 1 0.5;
- fixed: 1 1;
- min: 48 48;
- max: 48 48;
- rel1 { relative: 0.0 0.0; to: "select_all_bg";}
- rel2 { relative: 0.0 0.0; to: "select_all_checkbox_spacer";}
- }
- }
- part {
- name: "select_all_checkbox_button";
- scale:1;
- mouse_events: 1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0.5;
- fixed: 0 0;
- min: 0 0;
- max: -1 -1;
- rel1 { relative: 0.0 0.0; to: "select_all_bg";}
- rel2 { relative: 1.0 1.0; to: "select_all_bg";}
- color_class: transparent;
- }
- }
- part {
- name: "bottom_bar_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 1;
- min: 1 100;
- max: -1 100;
- color: 255 255 255 255;
- rel1 { relative: 0.0 0.0; to: "bg_clipper";}
- rel2 { relative: 1.0 1.0; to: "bg_clipper";}
- }
- }
- part {
- name: "del_bg_border";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 0.5;
- min: 1 100;
- max: -1 100;
- color: 0 0 0 77;
- rel1 { relative: 0.0 0.0; to: "bottom_bar_bg";}
- rel2 { relative: 1.0 1.0; to: "bottom_bar_bg";}
- }
- }
- part {
- name: "del_bg";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 0;
- align: 0.5 0.5;
- min: 1 1;
- max: -1 -1;
- color: 255 255 255 255;
- rel1 { relative: 0+(1/720) 0+(1/100); to: "del_bg_border";}
- rel2 { relative: 1-(1/720) 1-(1/100); to: "del_bg_border";}
- }
- }
- part {
- name: "del_text";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 56 0;
- fixed: 1 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 0.0 0.0; to: "del_bg";}
- rel2 { relative: 1.0 1.0; to: "del_bg";}
- text {
- text: "Delete";
- font: "Sans";
- size: 40;
- align: 0.5 0.5;
- }
- }
- description {
- state: "dim" 0.0;
- inherit: "default" 0.0;
- color: 207 207 207 255;
- }
- }
- part {
- name: "del_button";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.5 0.5;
- fixed: 0 1;
- min: 1 100;
- max: -1 100;
- rel1 { relative: 0.0 0.0; to: "del_bg";}
- rel2 { relative: 1.0 1.0; to: "del_bg";}
- color_class: transparent;
- }
- }
- part {
- name: "affdv_genlist";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 0 0;
- min: 1 0;
- max: -1 -1;
- rel1 { relative: 0.0 1.0; to: "select_all_bg";}
- rel2 { relative: 1.0 0.0; to: "bottom_bar_bg";}
- }
- }
- }
- programs {
- program {
- name: "show_del_button";
- signal: "show,del,button,signal";
- source: "";
- action: STATE_SET "default" 0.0;
- target: "del_text";
- }
- program {
- name: "dim_del_button";
- signal: "dim,del,button,signal";
- source: "";
- action: STATE_SET "dim" 0.0;
- target: "del_text";
- }
- }
-}
-
-group {
- name: "elm/genlist/item/affdv_item/default";
- data.item: "texts" "item_title";
- data.item: "contents" "checkbox";
- parts {
- part {
- name: "item_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- min: 1 100;
- max: -1 100;
- color: 247 247 247 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- rect {
- name: "item_title_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0 0;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "item_bg";}
- rel2 { relative: 1.0 1.0; to: "item_bg";}
- }
- }
- rect {
- name: "select_all_text_spacer_2";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 1 1;
- fixed: 1 1;
- min: 72 0;
- max: 72 0;
- rel1 { relative: 0.0 0.0; to: "item_bg";}
- rel2 { relative: 1.0 1.0; to: "item_bg";}
- }
- }
- part {
- name: "item_title";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 350 100;
- max: -1 -1;
- fixed: 0 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 1.0 1.0; to: "item_title_spacer";}
- rel2 { relative: 0.0 0.0; to: "select_all_text_spacer_2";}
- text {
- text: "First name";
- font: "Sans";
- size: 36;
- align: 0.0 0.5;
- }
- }
- }
- rect {
- name: "checkbox_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 1 1;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "item_bg";}
- rel2 { relative: 1.0 1.0; to: "item_bg";}
- }
- }
- part {
- name: "checkbox";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 1 0.5;
- min: 48 48;
- max: 48 48;
- rel1 { relative: 0.0 0.0; to: "item_bg";}
- rel2 { relative: 0.0 0.0; to: "checkbox_spacer";}
- }
- }
- }
-}
-
-group {
- name: "affcv-layout";
- images {
- image: "navi_ic_back_nor.png" COMP;
- }
- parts {
- part {
- name: "bg_clipper";
- type : RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 1 1;
- max: -1 -1;
- visible: 1;
- fixed: 0 0;
- align: 0 0;
- color: 255 255 255 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- part {
- name: "affcv_genlist";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 0 0;
- min: 1 0;
- max: -1 -1;
- rel1 { relative: 0.0 0.0; to: "bg_clipper";}
- rel2 { relative: 1.0 1.0; to: "bg_clipper";}
- }
- }
- }
-}
-
-group {
- name : "affcv_item";
- data.item: "texts" "field_name";
- data.item: "contents" "entry_swallow entry_clear_button";
- images {
- image: "btn_bar_stop_nor.png" COMP;
- }
- parts {
- part {
- name: "bg";
- scale : 1;
- type : RECT;
- description {
- state: "default" 0.0;
- min: 1 150;
- max: -1 150;
- visible: 1;
- align: 0 0;
- color: 255 255 255 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- part {
- name: "field_name";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 350 50;
- max: -1 50;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 0.05 0.0; to: "bg"; offset: 0 15;}
- rel2 { relative: 1.0 1.0; to: "bg";}
- text {
- text: "Full name";
- font: "Sans";
- size: 30;
- align: 0 0.0;
- }
- }
- }
- part {
- name: "entry_swallow";
- scale : 1;
- type : SWALLOW;
- description {
- state: "default" 0.0;
- min: 1 80;
- max: -1 80;
- visible: 1;
- align: 0 0.8;
- rel1 { relative: 0.05 0.0; to:"bg"; }
- rel2 { relative: 0.95 1.0; to:"bg"; }
- }
- }
- part {
- name: "line";
- scale : 1;
- type : RECT;
- description {
- state: "default" 0.0;
- min: 1 1;
- max: -1 1;
- visible: 1;
- align: 0 0;
- color: 0 0 0 255;
- rel1 { relative: 0.05 1.0; to: "bg"; offset: 0 -1;}
- rel2 { relative: 0.95 1.0; to: "bg";}
- }
- }
- }
-}
-
-group {
- name: "elm/entry/selection/entry_style";
- parts {
- part {
- name: "bg";
- scale:1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 224 237 251 255;
- }
- }
- }
- }
- group {
- name: "elm/entry/cursor/entry_style";
- parts {
- part {
- name: "bg";
- scale:1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 10 132 229 255;
- min: 3 38;
- max: 3 38;
- visible: 0;
- }
- description {
- state: "focused" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- name: "focused";
- signal: "elm,action,focus";
- source: "elm";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- after: "cursor_show";
- }
- program {
- name: "unfocused";
- signal: "elm,action,unfocus";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "bg";
- after: "stop_action";
- }
- program { name: "cursor_show";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- after: "cursor_show_timer";
- }
- program { name: "cursor_hide";
- action: STATE_SET "default" 0.0;
- target: "bg";
- transition: SINUSOIDAL 0.2;
- after: "cursor_hide_timer";
- }
- program { name: "cursor_show_timer";
- in: 0.4 0.0;
- after: "cursor_hide";
- }
- program { name: "cursor_hide_timer";
- in: 0.3 0.0;
- after: "cursor_show";
- }
- program {
- name: "stop_action";
- action: ACTION_STOP;
- target: "cursor_show";
- target: "cursor_hide";
- target: "cursor_show_timer";
- target: "cursor_hide_timer";
- }
- }
- }
-
-group {
- name: "elm/entry/base-single/entry_style";
- data {
- item: focus_highlight "off";
- }
- styles {
- style {
- name: "entry-style";
- base: "font=Sans:style=SVD_Medium font_size="42" wrap=none color=#969696";
- tag: "br" "";
- }
- }
- parts {
- part {
- name: "bg";
- type : RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 1 80;
- max: -1 80;
- visible: 1;
- fixed: 1 1;
- align: 0 0;
- color: 255 255 255 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- part {
- name: "elm.text";
- scale: 1;
- multiline: 0;
- entry_mode: EDITABLE;
- select_mode: DEFAULT;
- cursor_mode: BEFORE;
- type: TEXTBLOCK;
- source: "elm/entry/selection/entry_style";
- source4: "elm/entry/cursor/entry_style";
- description {
- state: "default" 0.0;
- max: -1 80;
- visible: 1;
- fixed: 0 0;
- rel1 { relative: 0.0 0.0; to: "bg";}
- rel2 { relative: 1.0 1.0; to: "bg";}
- align: 0.0 0.0;
- text {
- style: "entry-style";
- min: 0 1;
- }
- }
- }
- }
- programs {
- program {
- name: "focus";
- signal: "load";
- source: "";
- action: FOCUS_SET;
- target: "elm.text";
- }
- }
-}
-
-group {
- name: "edit-field";
- data {
- item: focus_highlight "off";
- }
- parts {
- part {
- name: "editfield_entry";
- scale : 1;
- type : SWALLOW;
- description {
- state: "default" 0.0;
- fixed: 0 1;
- min: 1 80;
- max: -1 80;
- visible: 1;
- align: 0.0 0.0;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- description {
- state: "show" 0.0;
- inherit: "default";
- rel2 {
- relative: 0.0 1.0;
- to: "clear_icon";
- }
- }
- }
- part {
- name: "clear_icon";
- type: IMAGE;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- fixed: 1 1;
- align: 1 0.5;
- min: 56 56;
- max: 56 56;
- rel1 { relative: 0.0 0.0;}
- rel2 { relative: 1.0 1.0;}
- image.normal: "btn_bar_stop_nor.png";
- }
- description {
- state: "show" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part {
- name: "entry_clear_button";
- scale : 1;
- type : SWALLOW;
- description {
- state: "default" 0.0;
- min: 56 56;
- max: 56 56;
- visible: 0;
- align: 0.0 0.0;
- rel1 { relative: 0.0 0.0; to:"clear_icon"; }
- rel2 { relative: 1.0 1.0; to:"clear_icon"; }
- }
- description {
- state: "show" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- name: "show_clear_button";
- signal: "show,clear,button,signal";
- source: "";
- action: STATE_SET "show" 0.0;
- target: "clear_icon";
- target: "entry_clear_button";
- target: "editfield_entry";
- }
- program {
- name: "hide_clear_button";
- signal: "hide,clear,button,signal";
- source: "";
- action: STATE_SET "default" 0.0;
- target: "clear_icon";
- target: "entry_clear_button";
- target: "editfield_entry";
- }
- }
-}
-
-group {
- name: "afflv-layout";
- images {
- image: "navi_ic_back_nor.png" COMP;
- }
- parts {
- part {
- name: "bg_clipper";
- type : RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 1 1;
- max: -1 -1;
- visible: 1;
- fixed: 0 0;
- align: 0 0;
- color: 243 243 243 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- part {
- name: "profile_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 0;
- min: 1 72;
- max: -1 72;
- color: 231 231 231 255;
- rel1 { relative: 0.0 0.0; to: "bg_clipper";}
- rel2 { relative: 1.0 1.0; }
- }
- }
- rect {
- name: "profile_text_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0 0;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "profile_bg";}
- rel2 { relative: 1.0 1.0; to: "profile_bg";}
- }
- }
- part {
- name: "profile_text";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 56 0;
- fixed: 1 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 1.0 1.0; to: "profile_text_spacer";}
- rel2 { relative: 1.0 1.0; to: "profile_bg";}
- text {
- font: "Sans";
- size: 30;
- align: 0.0 0.5;
- }
- }
- }
- part {
- name: "bottom_bar_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 1;
- min: 1 100;
- max: -1 100;
- color: 255 255 255 255;
- rel2 { relative: 1 1; to: "bg_clipper";}
- }
- }
- part {
- name: "add_profile_bg_border";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 0;
- min: 1 100;
- max: -1 100;
- color: 0 0 0 77;
- rel1 { relative: 0.0 0.0; to: "bottom_bar_bg";}
- rel2 { relative: 0.5 1.0; to: "bottom_bar_bg";}
- }
- }
- part {
- name: "add_profile_bg";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 0;
- align: 0 0.5;
- min: 1 1;
- max: -1 -1;
- color: 255 255 255 255;
- rel1 { relative: 0+(1/720) 0+(1/100); to: "add_profile_bg_border";}
- rel2 { relative: 1-(1/720) 1-(1/100); to: "add_profile_bg_border";}
- }
- }
- part {
- name: "add_profile_text";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 56 1;
- max: -1 100;
- fixed: 0 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 0.0 0.0; to: "add_profile_bg";}
- rel2 { relative: 1.0 1.0; to: "add_profile_bg";}
- text {
- text: "Add";
- font: "Sans";
- size: 40;
- align: 0.5 0.5;
- }
- }
- }
- part {
- name: "add_profile_button";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 1 1;
- min: 1 100;
- max: -1 100;
- rel1 { relative: 0.0 0.0; to: "add_profile_bg";}
- rel2 { relative: 1.0 1.0; to: "add_profile_bg";}
- color_class: transparent;
- }
- }
- part {
- name: "delete_profile_bg_border";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 1;
- align: 0 0;
- min: 1 100;
- max: -1 100;
- color: 0 0 0 77;
- rel1 { relative: 0.5 0.0; to: "bottom_bar_bg";}
- rel2 { relative: 1.0 1.0; to: "bottom_bar_bg";}
- }
- }
- part {
- name: "delete_profile_bg";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 0;
- align: 1 0.5;
- min: 1 1;
- max: -1 -1;
- color: 255 255 255 255;
- rel1 { relative: 0+(1/720) 0+(1/100); to: "delete_profile_bg_border";}
- rel2 { relative: 1-(1/720) 1-(1/100); to: "delete_profile_bg_border";}
- }
- }
- part {
- name: "delete_profile_text";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 56 0;
- fixed: 1 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 0.0 0.0; to: "delete_profile_bg";}
- rel2 { relative: 1.0 1.0; to: "delete_profile_bg";}
- text {
- text: "Delete";
- font: "Sans";
- size: 40;
- align: 0.5 0.5;
- }
- }
- description {
- state: "dim" 0.0;
- inherit: "default" 0.0;
- color: 207 207 207 255;
- }
- }
- part {
- name: "delete_profile_button";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 1 1;
- min: 1 100;
- max: -1 100;
- rel1 { relative: 0.0 0.0; to: "delete_profile_bg";}
- rel2 { relative: 1.0 1.0; to: "delete_profile_bg";}
- color_class: transparent;
- }
- }
- part {
- name: "afflv_genlist";
- scale:1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- fixed: 0 0;
- min: 1 1;
- max: -1 -1;
- rel1 { relative: 0.0 1.0; to: "profile_bg";}
- rel2 { relative: 1.0 0.0; to: "bottom_bar_bg";}
- }
- }
- }
- programs {
- program {
- name: "show_del_button";
- signal: "show,del,button,signal";
- source: "";
- action: STATE_SET "default" 0.0;
- target: "delete_profile_text";
- }
- program {
- name: "dim_del_button";
- signal: "dim,del,button,signal";
- source: "";
- action: STATE_SET "dim" 0.0;
- target: "delete_profile_text";
- }
- }
-}
-
-group {
- name: "elm/genlist/item/afflv_item/default";
- data.item: "texts" "item_title";
- parts {
- part {
- name: "item_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0 0;
- min: 1 100;
- max: -1 100;
- color: 247 247 247 255;
- rel1 { relative: 0.0 0.0; }
- rel2 { relative: 1.0 1.0; }
- }
- }
- rect {
- name: "item_title_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0 0;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "item_bg";}
- rel2 { relative: 1.0 1.0; to: "item_bg";}
- }
- }
- rect {
- name: "item_title_spacer_2";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 1 1;
- fixed: 1 1;
- min: 24 0;
- max: 24 0;
- rel1 { relative: 0.0 0.0; to: "item_bg";}
- rel2 { relative: 1.0 1.0; to: "item_bg";}
- }
- }
- part {
- name: "item_title";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 350 100;
- max: -1 -1;
- fixed: 0 0;
- align: 0 0;
- color: 64 64 64 255;
- rel1 { relative: 1.0 1.0; to: "item_title_spacer";}
- rel2 { relative: 0.0 0.0; to: "item_title_spacer_2";}
- text {
- text: "First name";
- font: "Sans";
- size: 36;
- align: 0.0 0.5;
- }
- }
- }
- }
-}
-
-} // Collections
+#include "../../../core/Tools/edc/EntryCustomLayout.edc"
set(SimpleUI_SRCS
SimpleUI.cpp
InputPopup.cpp
- SimplePopup.cpp
NotificationPopup.cpp
ViewManager.cpp
RadioPopup.cpp
ProgressiveWebApp.cpp
+ TextPopup.cpp
+ ContentPopup.cpp
+ SplashScreen.cpp
)
-if (${PROFILE} MATCHES "mobile")
-set(SimpleUI_SRCS ${SimpleUI_SRCS}
- TextPopup_mob.cpp
- ContentPopup_mob.cpp
- )
-endif (${PROFILE} MATCHES "mobile")
-
include(Coreheaders)
include(EFLHelpers)
include(EWebKitHelpers)
include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/services)
include_directories(${CMAKE_SOURCE_DIR}/services/WebPageUI)
+include_directories(${CMAKE_SOURCE_DIR}/services/WebPageMin)
include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService)
-include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService/src)
+include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineMin)
include_directories(${CMAKE_SOURCE_DIR}/services/StorageService)
include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkFlowUI)
include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkManagerUI)
-include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService)
+include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkService)
include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService)
include_directories(${CMAKE_SOURCE_DIR}/services/TabService)
include_directories(${CMAKE_SOURCE_DIR}/services/HistoryUI)
add_library(${PROJECT_NAME} SHARED ${SimpleUI_SRCS})
add_dependencies(${PROJECT_NAME} WebPageUI)
+add_dependencies(${PROJECT_NAME} WebPageMin)
+add_dependencies(${PROJECT_NAME} WebEngineMin)
add_dependencies(${PROJECT_NAME} StorageService)
add_dependencies(${PROJECT_NAME} HistoryService)
add_dependencies(${PROJECT_NAME} TabService)
add_dependencies(${PROJECT_NAME} BookmarkFlowUI)
add_dependencies(${PROJECT_NAME} BookmarkManagerUI)
+add_dependencies(${PROJECT_NAME} BookmarkService)
add_dependencies(${PROJECT_NAME} QuickAccess)
add_dependencies(${PROJECT_NAME} HistoryUI)
add_dependencies(${PROJECT_NAME} TabUI)
add_dependencies(${PROJECT_NAME} FindOnPageUI)
target_link_libraries(${PROJECT_NAME} WebPageUI)
+target_link_libraries(${PROJECT_NAME} WebPageMin)
+target_link_libraries(${PROJECT_NAME} WebEngineMin)
target_link_libraries(${PROJECT_NAME} StorageService)
target_link_libraries(${PROJECT_NAME} HistoryService)
target_link_libraries(${PROJECT_NAME} TabService)
target_link_libraries(${PROJECT_NAME} SettingsUI)
target_link_libraries(${PROJECT_NAME} BookmarkFlowUI)
target_link_libraries(${PROJECT_NAME} BookmarkManagerUI)
+target_link_libraries(${PROJECT_NAME} BookmarkService)
target_link_libraries(${PROJECT_NAME} PlatformInputManager)
target_link_libraries(${PROJECT_NAME} CertificateService)
target_link_libraries(${PROJECT_NAME} FindOnPageUI)
include(EDCCompile)
#please do not add edc/ directory
-if (${PROFILE} MATCHES "mobile")
-set(edcFiles
- InputPopup_mob.edc
- NotificationPopup_mob.edc
- Tooltip.edc
- ViewManager.edc
- TextPopup_mob.edc
- ContentPopup_mob.edc
- )
-else (${PROFILE} MATCHES "mobile")
set(edcFiles
- InputPopup.edc
NotificationPopup.edc
- Tooltip.edc
ViewManager.edc
+ TextPopup.edc
)
-endif (${PROFILE} MATCHES "mobile")
foreach(edec ${edcFiles})
- string(REGEX REPLACE "(_mob)?.edc" ".edj" target_name ${edec})
+ string(REPLACE ".edc" ".edj" target_name ${edec})
EDJ_TARGET(${target_name}
${CMAKE_CURRENT_SOURCE_DIR}/edc/${edec}
${CMAKE_CURRENT_BINARY_DIR})
-#include "ContentPopup_mob.h"
+#include "ContentPopup.h"
#include "ServiceManager.h"
#include "AbstractMainWindow.h"
#include "Tools/EflTools.h"
ContentPopup::~ContentPopup()
{
buttonClicked.disconnect_all_slots();
- evas_object_del(m_layout);
+ for (auto& button : m_buttons) {
+ evas_object_smart_callback_del(button.m_evasObject, "clicked", _response_cb);
+ evas_object_del(button.m_evasObject);
+ }
+ evas_object_del(m_popup);
}
ContentPopup::ContentPopup(Evas_Object* parent)
: m_parent(parent)
- , m_layout(nullptr)
- , m_buttons_box(nullptr)
, m_content(nullptr)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("SimpleUI/ContentPopup.edj");
- elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
createLayout();
}
ContentPopup::ContentPopup(Evas_Object* parent,
const std::string& title)
: m_parent(parent)
- , m_layout(nullptr)
- , m_buttons_box(nullptr)
+ , m_content(nullptr)
, m_title(title)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("SimpleUI/ContentPopup.edj");
- elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
+ m_popup = nullptr;
createLayout();
}
void ContentPopup::show()
{
- evas_object_show(m_layout);
- elm_object_part_content_set(m_parent, "popup_content", m_layout);
+ evas_object_show(m_popup);
popupShown(this);
}
void ContentPopup::setTitle(const std::string& title)
{
this->m_title = title;
- elm_object_translatable_part_text_set(m_layout, "title_text", m_title.c_str());
+ elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
}
void ContentPopup::setContent(Evas_Object* content)
{
m_content = content;
- elm_object_content_set(m_scroller, content);
+ elm_object_content_set(m_popup, m_content);
}
void ContentPopup::addButton(const PopupButtons& button, bool dismissOnClick)
{
- auto btn = elm_button_add(m_buttons_box);
+ auto btn = elm_button_add(m_popup);
+ elm_object_style_set(btn, "bottom");
+ evas_object_size_hint_max_set(btn, MAX_BUTTON_SIZE, MAX_BUTTON_SIZE);
m_buttons.push_back(Button(button, dismissOnClick, btn));
- elm_object_style_set(btn, "text-popup-button");
evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_part_text_set(btn, "elm.text", _(buttonsTranslations[button].c_str()));
- elm_box_pack_end(m_buttons_box, btn);
+ elm_object_translatable_text_set(btn, _(buttonsTranslations[button].c_str()));
evas_object_smart_callback_add(btn, "clicked", _response_cb, (void*) this);
+ auto buttonString = std::string("button") + std::to_string(m_buttons.size());
+ elm_object_part_content_set(m_popup, buttonString.c_str(), btn);
evas_object_show(btn);
- if (m_buttons.size() > 1) // separator for more buttons than one
- elm_object_signal_emit(btn, "visible", "ui");
}
void ContentPopup::createLayout()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_parent);
- m_layout = elm_layout_add(m_parent);
- elm_object_tree_focus_allow_set(m_layout, EINA_FALSE);
- elm_layout_file_set(m_layout, m_edjFilePath.c_str(), "text_popup_layout");
- evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, 0);
- evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_translatable_part_text_set(m_layout, "title_text", m_title.c_str());
- evas_object_event_callback_add(m_layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
-
- m_buttons_box = elm_box_add(m_layout);
- elm_box_horizontal_set(m_buttons_box, EINA_TRUE);
- evas_object_size_hint_weight_set(m_buttons_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(m_buttons_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(m_buttons_box);
- elm_object_part_content_set(m_layout, "buttons_swallow", m_buttons_box);
-
- m_scroller = elm_scroller_add(m_layout);
- elm_object_part_content_set(m_layout, "content_swallow", m_scroller);
- evas_object_show(m_scroller);
+ m_popup = elm_popup_add(m_parent);
+ elm_popup_align_set(m_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+ evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
+ evas_object_event_callback_add(m_popup, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
+ evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
}
void ContentPopup::_layout_resize_cb(void* data, Evas* /*e*/, Evas_Object* /*obj*/, void* /*event_info*/)
auto self = static_cast<ContentPopup*>(data);
int w;
- evas_object_geometry_get(self->m_layout, NULL, NULL, &w, NULL);
+ evas_object_geometry_get(self->m_popup, NULL, NULL, &w, NULL);
w -= 2 * Z3_SCALE_SIZE(MARGIN);
elm_label_wrap_width_set(self->m_content, w);
}
-
+void ContentPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+ auto self = static_cast<ContentPopup*>(data);
+ self->dismiss();
+}
}
-
}
namespace base_ui
{
+struct PopupData {
+ virtual ~PopupData() {};
+};
+
+struct CertificatePopupData : public PopupData {
+ basic_webengine::CertificateConfirmationPtr cert;
+};
+
class ContentPopup : public interfaces::AbstractPopup
{
public:
void addButton(const PopupButtons& button, bool dismissOnClick = true);
boost::signals2::signal<void (PopupButtons)> buttonClicked;
boost::signals2::signal<bool ()> isLandscape;
+ boost::signals2::signal<void (const std::string&, const bool&)> setDBBoolParamValue;
~ContentPopup();
- Evas_Object* getMainLayout() { return m_scroller; }
+ Evas_Object* getMainLayout() { return m_popup; }
private:
- ContentPopup(Evas_Object* parent);
+ explicit ContentPopup(Evas_Object* parent);
ContentPopup(Evas_Object* parent, const std::string& title);
void createLayout();
static void _layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _response_cb(void* data, Evas_Object* obj, void* event_info);
+ static void _dismiss_cb(void* data, Evas_Object* obj, void*);
struct Button {
Button(PopupButtons type, bool dismissOnClick, Evas_Object* object)
};
Evas_Object* m_parent;
- Evas_Object* m_layout;
- Evas_Object* m_buttons_box;
- Evas_Object* m_scroller;
+ Evas_Object* m_popup;
Evas_Object* m_content;
std::vector<Button> m_buttons;
std::string m_title;
std::string m_message;
std::string m_edjFilePath;
static const int MARGIN = 44;
+ static const int MAX_BUTTON_SIZE = 496;
};
}
+++ /dev/null
-#include "CustomPopup.h"
-#include "BrowserLogger.h"
-
-CustomPopup::CustomPopup(Evas_Object* main_layout) :
- m_popup(NULL),
- m_content(NULL),
- m_mainLayout(main_layout)
-{
-
-}
-
-CustomPopup::CustomPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char* title, char* okButtonText, char* cancelButtonText) :
- m_popup(NULL),
- m_mainLayout(main_layout),
- m_content(content),
- m_message(message),
- m_title(title),
- m_okButtonText(okButtonText),
- m_cancelButtonText(cancelButtonText)
-{
-
-}
-
-void CustomPopup::setTitle(const std::string& title)
-{
- m_title = title;
-}
-
-void CustomPopup::setMessage(const std::string& message)
-{
- m_message = message;
-}
-
-void CustomPopup::setContent(Evas_Object* content)
-{
- m_content = content;
-}
-
-void CustomPopup::setOkButtonText(const std::string& okButtonText)
-{
- m_okButtonText = okButtonText;
-}
-
-void CustomPopup::setCancelButtonText(const std::string& cancelButtonText)
-{
- m_cancelButtonText = cancelButtonText;
-}
-
-void CustomPopup::show()
-{
- BROWSER_LOGD("[%s],", __func__);
- std::string edjePath = std::string(EDJE_DIR);
- edjePath.append("SimpleUI/CustomPopup.edj");
- elm_theme_extension_add(0, edjePath.c_str());
- m_popup = elm_layout_add(m_mainLayout);
- if(m_content)
- elm_layout_file_set(m_popup, edjePath.c_str(), "own_popup_long");
- else
- elm_layout_file_set(m_popup, edjePath.c_str(), "own_popup");
- BROWSER_LOGI("PATH: %s", edjePath.c_str());
- elm_object_part_text_set(m_popup, "title_text", m_title.c_str());
-
- Evas_Object *buttonsBox = elm_box_add(m_popup);
- elm_box_horizontal_set(buttonsBox, EINA_TRUE);
-
- if (!m_okButtonText.empty())
- {
- BROWSER_LOGD("Button1, %s", edjePath.c_str());
- Evas_Object *btn1 = elm_button_add(buttonsBox);
- evas_object_size_hint_weight_set(btn1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btn1, 0.5, 0.5);
- elm_object_style_set(btn1, "standard_button");
- elm_object_part_text_set(btn1, "elm.text", m_okButtonText.c_str());
- elm_box_pack_end(buttonsBox, btn1);
- evas_object_smart_callback_add(btn1, "clicked", popup_ok_cb, (void*)this);
- evas_object_show(btn1);
- }
-
- if (!m_cancelButtonText.empty())
- {
- BROWSER_LOGD("Button2");
- Evas_Object *btn2 = elm_button_add(buttonsBox);
- evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btn2, 0.5, 0.5);
- elm_object_style_set(btn2, "standard_button");
- elm_object_part_text_set(btn2, "elm.text", m_cancelButtonText.c_str());
- elm_box_pack_end(buttonsBox, btn2);
- evas_object_smart_callback_add(btn2, "clicked", popup_cancel_cb, (void*)this);
- evas_object_show(btn2);
- }
-
- if(!m_message.empty())
- elm_object_part_text_set(m_popup, "elm.text", m_message.c_str());
-
- evas_object_show(buttonsBox);
- elm_object_part_content_set(m_popup, "buttons", buttonsBox);
- elm_object_part_content_set(m_popup, "content", m_content);
- elm_object_part_content_set(m_mainLayout, "popup", m_popup);
-
- elm_object_signal_emit(m_mainLayout, "elm,state,show", "elm");
-}
-
-void CustomPopup::hide()
-{
- elm_object_signal_emit(m_mainLayout, "elm,state,hide", "elm");
-}
-
-void CustomPopup::popup_ok_cb(void *data, Evas_Object *btn, void*)
-{
- BROWSER_LOGD("[%s],", __func__);
- CustomPopup *ownPopup = static_cast<CustomPopup*>(data);
- ownPopup->on_ok(ownPopup->m_content);
-}
-void CustomPopup::popup_cancel_cb(void *data, Evas_Object *btn, void*)
-{
- BROWSER_LOGD("[%s],", __func__);
- CustomPopup *ownPopup = static_cast<CustomPopup*>(data);
- ownPopup->on_cancel(ownPopup->m_content);
-}
-
+++ /dev/null
-#ifndef CUSTOMPOPUP_H
-#define CUSTOMPOPUP_H
-
-#include <Elementary.h>
-#include <boost/signals2.hpp>
-
-class CustomPopup{
-
-public:
- CustomPopup(Evas_Object *main_layout);
- CustomPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char *title, char* okButtonText, char* cancelButtonText);
-
- /**
- * Theese setters should be called before showing popup.
- */
- void setContent(Evas_Object *content);
- void setMessage(const std::string &message);
- void setTitle(const std::string &title);
- void setOkButtonText(const std::string &okButtonText);
- void setCancelButtonText(const std::string &cancelButtonText);
-
- void show();
- void hide();
- boost::signals2::signal<void (Evas_Object *)> on_ok;
- boost::signals2::signal<void (Evas_Object *)> on_cancel;
-
-private:
- static void popup_ok_cb(void *data, Evas_Object *btn, void*);
- static void popup_cancel_cb(void *data, Evas_Object *btn, void*);
- Evas_Object *m_popup;
- Evas_Object *m_content;
- std::string m_message, m_title, m_okButtonText, m_cancelButtonText;
-
-protected:
- Evas_Object *m_mainLayout;
-};
-
-#endif
m_icon(nullptr),
m_button_left(nullptr),
m_button_right(nullptr),
+ m_entry_layout(nullptr),
m_entry(nullptr),
m_box(nullptr),
- m_label(nullptr)
+ m_label(nullptr),
+ m_limit(nullptr)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("SimpleUI/InputPopup.edj");
- elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
m_bad_words.push_back("");
}
}
if (m_label)
evas_object_del(m_label);
+ if (m_limit)
+ free(m_limit);
if (m_box)
evas_object_del(m_box);
if (m_popup)
return inputPopup;
}
-void InputPopup::setInput(const std::string& input)
-{
- m_input = input;
-}
-
void InputPopup::setTitle(const std::string& title)
{
m_title = title;
void InputPopup::show()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- createLayout();
+ if (!m_popup)
+ createLayout();
popupShown(this);
elm_object_disabled_set(
elm_object_translatable_part_text_set(m_popup, "default", m_message.c_str());
elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
+ evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
m_box = elm_box_add(m_popup);
tools::EflTools::setExpandHints(m_box);
elm_entry_single_line_set(m_label, EINA_TRUE);
elm_entry_scrollable_set(m_label, EINA_FALSE);
elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
- elm_object_text_set(m_label, elm_entry_utf8_to_markup(m_message.c_str()));
+ elm_object_translatable_text_set(m_label, elm_entry_utf8_to_markup(m_message.c_str()));
elm_box_pack_end(m_box, m_label);
evas_object_show(m_label);
}
- m_entry = elm_entry_add(m_box);
+ m_entry_layout = elm_layout_add(m_box);
+ elm_layout_theme_set(m_entry_layout, "layout", "editfield", "singleline");
+ evas_object_size_hint_weight_set(m_entry_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_entry_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ m_entry = elm_entry_add(m_entry_layout);
tools::EflTools::setExpandHints(m_entry);
+ m_limit = tools::EflTools::setEntryLimit(m_entry);
elm_entry_single_line_set(m_entry, EINA_TRUE);
elm_entry_scrollable_set(m_entry, EINA_TRUE);
- elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
- elm_box_pack_end(m_box, m_entry);
-
- m_icon = elm_icon_add(m_entry);
- elm_icon_standard_set(m_icon, "close");
- evas_object_size_hint_min_set(
- m_icon,
- ELM_SCALE_SIZE(40),
- ELM_SCALE_SIZE(40));
- evas_object_size_hint_max_set(
- m_icon,
- ELM_SCALE_SIZE(40),
- ELM_SCALE_SIZE(40));
- elm_object_part_content_set(m_entry, "end", m_icon);
-
- elm_object_part_text_set(m_entry, "elm.text", elm_entry_utf8_to_markup(m_input.c_str()));
- elm_object_part_text_set(m_entry, "elm.guide", elm_entry_utf8_to_markup(m_tip.c_str()));
+ elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_URL);
+ elm_object_part_content_set(m_entry_layout, "elm.swallow.content", m_entry);
+
+ Evas_Object* m_icon = elm_button_add(m_entry_layout);
+ elm_object_style_set(m_icon, "editfield_clear");
+ elm_object_focus_allow_set(m_icon, EINA_FALSE);
+ elm_object_part_content_set(m_entry_layout, "elm.swallow.button", m_icon);
+
+ elm_box_pack_end(m_box, m_entry_layout);
+
+ elm_object_translatable_part_text_set(m_entry, "elm.text", elm_entry_utf8_to_markup(m_input.c_str()));
+ elm_object_translatable_part_text_set(m_entry, "elm.guide", elm_entry_utf8_to_markup(m_tip.c_str()));
m_button_left = elm_button_add(m_popup);
tools::EflTools::setExpandHints(m_button_left);
- elm_object_text_set(m_button_left, m_cancel_button_text.c_str());
+ elm_object_translatable_text_set(m_button_left, m_cancel_button_text.c_str());
elm_object_part_content_set(m_popup, "button1", m_button_left);
m_button_right = elm_button_add(m_popup);
tools::EflTools::setExpandHints(m_button_right);
- elm_object_text_set(m_button_right, m_ok_button_text.c_str());
+ elm_object_translatable_text_set(m_button_right, m_ok_button_text.c_str());
elm_object_part_content_set(m_popup, "button2", m_button_right);
evas_object_smart_callback_add(m_entry, "changed,user", _entry_changed, this);
evas_object_smart_callback_add(m_button_right, "clicked", _right_button_clicked, this);
evas_object_show(m_box);
+ evas_object_show(m_entry_layout);
evas_object_show(m_icon);
evas_object_show(m_entry);
evas_object_show(m_button_left);
elm_entry_markup_to_utf8(
elm_object_part_text_get(inputPopup->m_entry, "elm.text"));
- elm_object_disabled_set(
- inputPopup->m_button_right,
+ elm_object_disabled_set(inputPopup->m_button_right,
+ text.find_first_not_of(" ") == std::string::npos ||
std::find(
inputPopup->m_bad_words.begin(),
inputPopup->m_bad_words.end(),
text) != inputPopup->m_bad_words.end());
+
+ if (elm_entry_is_empty(inputPopup->m_entry))
+ elm_object_signal_emit(inputPopup->m_entry_layout, "elm,action,hide,button", "");
+ else
+ elm_object_signal_emit(inputPopup->m_entry_layout, "elm,action,show,button", "");
} else
BROWSER_LOGD("data is null ");
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
auto inputPopup = static_cast<InputPopup*>(data);
- elm_object_part_text_set(inputPopup->m_entry, "elm.text", "");
+ elm_object_translatable_part_text_set(inputPopup->m_entry, "elm.text", "");
elm_object_disabled_set(inputPopup->m_button_right, EINA_TRUE);
+ elm_object_signal_emit(inputPopup->m_entry_layout, "elm,action,hide,button", "");
} else
BROWSER_LOGD("data is null ");
}
BROWSER_LOGD("data is null ");
}
+void InputPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+ auto self = static_cast<InputPopup*>(data);
+ self->dismiss();
+}
+
}
}
{
public:
+ InputPopup(const InputPopup&) = delete;
+ InputPopup& operator=(const InputPopup&) = delete;
+
static InputPopup* createPopup(Evas_Object *parent);
static InputPopup* createPopup(
Evas_Object *parent,
#endif
void setContent(Evas_Object *content);
- void setInput(const std::string &input);
void setTitle(const std::string &title);
void setMessage(const std::string &message);
void setTip(const std::string& tip);
~InputPopup();
void createLayout();
- std::string m_edjFilePath;
static void _right_button_clicked(void *data, Evas_Object *btn, void*);
static void _left_button_clicked(void *data, Evas_Object *btn, void*);
static void _entry_changed(void * data, Evas_Object *, void*);
static void _input_cancel_clicked(void * data, Evas_Object *, void *);
+ static void _dismiss_cb(void* data, Evas_Object* obj, void*);
Evas_Object *m_parent;
Evas_Object *m_popup;
Evas_Object *m_icon;
Evas_Object *m_button_left;
Evas_Object *m_button_right;
+ Evas_Object *m_entry_layout;
Evas_Object *m_entry;
Evas_Object *m_box;
Evas_Object *m_label;
+
+ Elm_Entry_Filter_Limit_Size *m_limit;
+
std::string m_input;
std::string m_title;
std::string m_message;
namespace base_ui {
NotificationPopup::NotificationPopup()
- : m_parent(nullptr)
+ : edjFilePath(std::string(EDJE_DIR) + std::string("SimpleUI/NotificationPopup.edj"))
+ , m_parent(nullptr)
, m_layout(nullptr)
, m_progress(nullptr)
, m_timer(nullptr)
{
- edjFilePath = EDJE_DIR;
- edjFilePath.append("SimpleUI/NotificationPopup.edj");
elm_theme_extension_add(nullptr, edjFilePath.c_str());
}
#include "ProgressiveWebApp.h"
#include "BrowserLogger.h"
+#include <curl/curl.h>
namespace tizen_browser {
namespace base_ui {
ProgressiveWebApp::ProgressiveWebApp()
- : m_pwaInfoStruct()
+ : m_active(false)
+ , m_pwaInfoStruct()
, m_uriPartsMap()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
void ProgressiveWebApp::preparePWAParameters(const std::string &uri)
{
- parse_uri(uri);
+ CURL* curl = curl_easy_init();
+ char* text = curl_easy_unescape(curl, uri.c_str(), uri.length(), nullptr);
+ if (text) {
+ parse_uri(std::string(text));
+ curl_free(text);
+ }
+ curl_easy_cleanup(curl);
fillPWAstruct(m_uriPartsMap);
}
prevpos = pos;
pos = uri.find("pwa_", pos+1);
std::string tmp = uri.substr(prevpos, pos-prevpos-1);
- std::string::size_type delimiter = tmp.find(":");
+ std::string::size_type delimiter = tmp.find("=");
std::string first = tmp.substr(0, delimiter);
std::string second = tmp.substr(delimiter+1, tmp.length());
m_uriPartsMap[first] = second;
it = pwaParametersMap.find("pwa_shortName");
if (it != pwaParametersMap.end())
m_pwaInfoStruct.shortName = it->second;
+ it = pwaParametersMap.find("pwa_icon_src");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.icon = it->second;
it = pwaParametersMap.find("pwa_orientation");
if (it != pwaParametersMap.end())
m_pwaInfoStruct.orientation = std::stoi(it->second);
m_pwaInfoStruct.displayMode = std::stoi(it->second);
it = pwaParametersMap.find("pwa_themeColor");
if (it != pwaParametersMap.end())
- m_pwaInfoStruct.themeColor = std::stol(it->second);
+ m_pwaInfoStruct.themeColor = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_theme_r");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.themeR = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_theme_g");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.themeG = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_theme_b");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.themeB = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_theme_a");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.themeA = std::stoi(it->second);
it = pwaParametersMap.find("pwa_backgroundColor");
if (it != pwaParametersMap.end())
- m_pwaInfoStruct.backgroundColor = std::stol(it->second);
+ m_pwaInfoStruct.backgroundColor = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_bg_r");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.backgroundR = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_bg_g");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.backgroundG = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_bg_b");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.backgroundB = std::stoi(it->second);
+ it = pwaParametersMap.find("pwa_bg_a");
+ if (it != pwaParametersMap.end())
+ m_pwaInfoStruct.backgroundA = std::stoi(it->second);
+}
+
+std::string ProgressiveWebApp::preparePWA(const std::string& url)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::string startUrl;
+ std::string prefix("multi-instance-shortcut://tizen.org/shortcut/multi-instance?");
+ if (!url.compare(0, prefix.size(), prefix)) {
+ preparePWAParameters(url);
+ startUrl = m_pwaInfoStruct.uri;
+ if (startUrl.empty())
+ return startUrl;
+ m_active = true;
+ BROWSER_LOGD("[%s:%d] PWA is Active", __PRETTY_FUNCTION__, __LINE__);
+ }
+ return startUrl;
}
-} // namespace tizen_browser
} // namespace base_ui
+} // namespace tizen_browser
std::string uri;
std::string name;
std::string shortName;
+ std::string icon;
int orientation; // needs to portrait-primary, portrait-secondary, landscape-primary, landscape-secondary.
int displayMode; // needs to fullscreen, standalone, minimal-ui, browser, and so on.
- long themeColor;
- long backgroundColor;
+ int themeColor;
+ int themeR;
+ int themeG;
+ int themeB;
+ int themeA;
+ int backgroundColor;
+ int backgroundR;
+ int backgroundG;
+ int backgroundB;
+ int backgroundA;
};
class ProgressiveWebApp
ProgressiveWebApp();
~ProgressiveWebApp();
void preparePWAParameters(const std::string& uri);
- pwaInfo getPWAinfo() {return m_pwaInfoStruct;}
+ pwaInfo getPWAinfo() const {return m_pwaInfoStruct;}
+ bool isActive() const { return m_active; }
+ std::string preparePWA(const std::string& url);
private:
void parse_uri(const std::string& uri);
void fillPWAstruct(const std::map<std::string, std::string> &pwaParametersMap);
+ bool m_active;
pwaInfo m_pwaInfoStruct;
std::map<std::string, std::string> m_uriPartsMap;
};
-} // namespace tizen_browser
} // namespace base_ui
+} // namespace tizen_browser
#endif // PROGRESSIVEWEBAPP_H
std::map<RadioButtons, std::string> RadioPopup::createTranslations()
{
std::map<RadioButtons, std::string> m;
- m[RadioButtons::GOOGLE] = Translations::Google;
- m[RadioButtons::YAHOO] = Translations::Yahoo;
- m[RadioButtons::BING] = Translations::Bing;
+ m[RadioButtons::GOOGLE] = Translations::instance().Google;
+ m[RadioButtons::YAHOO] = Translations::instance().Yahoo;
+ m[RadioButtons::BING] = Translations::instance().Bing;
// TODO Translations
- m[RadioButtons::DEVICE] = Translations::Device;
- m[RadioButtons::SD_CARD] = Translations::SDCard;
+ m[RadioButtons::DEVICE] = Translations::instance().Device;
+ m[RadioButtons::SD_CARD] = Translations::instance().SDCard;
return m;
}
RadioButtons RadioPopup::translateButtonState(const std::string& name)
{
- if (!name.compare(Translations::Google))
+ if (!name.compare(Translations::instance().Google))
return RadioButtons::GOOGLE;
- else if(!name.compare(Translations::Yahoo))
+ else if(!name.compare(Translations::instance().Yahoo))
return RadioButtons::YAHOO;
- else if(!name.compare(Translations::Bing))
+ else if(!name.compare(Translations::instance().Bing))
return RadioButtons::BING;
- else if(!name.compare(Translations::Device))
+ else if(!name.compare(Translations::instance().Device))
return RadioButtons::DEVICE;
- else if(!name.compare(Translations::SDCard))
+ else if(!name.compare(Translations::instance().SDCard))
return RadioButtons::SD_CARD;
else
return RadioButtons::NONE;
m_popup = elm_popup_add(m_parent);
elm_popup_align_set(m_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
+ evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
m_box = elm_box_add(m_popup);
elm_object_focus_set(m_box, EINA_FALSE);
evas_object_size_hint_weight_set(m_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
self->dismiss();
}
+void RadioPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+ auto self = static_cast<RadioPopup*>(data);
+ self->dismiss();
+}
+
void RadioPopup::setTitle(const std::string& title)
{
m_title = title;
~RadioPopup();
private:
- RadioPopup(Evas_Object* parent);
+ explicit RadioPopup(Evas_Object* parent);
static void _response_cb(void* data, Evas_Object* obj, void* event_info);
+ static void _dismiss_cb(void* data, Evas_Object* obj, void*);
Evas_Object* addRadioToGenlist(const RadioButtons& button, Evas_Object* obj);
static std::map<RadioButtons, std::string> s_buttonsTranslations;
+++ /dev/null
-#include "SimplePopup.h"
-#include "ServiceManager.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-SimplePopup* SimplePopup::createPopup(Evas_Object* parent)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- SimplePopup *raw_popup = new SimplePopup(parent);
- return raw_popup;
-}
-
-SimplePopup* SimplePopup::createPopup(Evas_Object* parent, const std::string &title, const std::string &message)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- SimplePopup *raw_popup = new SimplePopup(parent, title, message);
- return raw_popup;
-}
-
-SimplePopup::~SimplePopup()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- for (std::map<Evas_Object*, PopupButtons>::iterator it = addedButtons.begin(); it != addedButtons.end(); ++it) {
- evas_object_smart_callback_del(it->first, "clicked", _response_cb);
- }
- evas_object_del(content);
- evas_object_del(popup);
- buttonClicked.disconnect_all_slots();
- popupDismissed.disconnect_all_slots();
- popupShown.disconnect_all_slots();
-}
-
-SimplePopup::SimplePopup(Evas_Object* parent) : m_parent(parent), popup(nullptr), content(nullptr)
-{ }
-
-SimplePopup::SimplePopup(Evas_Object* parent, const std::string &title, const std::string &message)
- : m_parent(parent)
- , popup(nullptr)
- , content(nullptr)
- , title(title)
- , message(message)
-{ }
-
-void SimplePopup::show()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- if (!popup) {
- popup = elm_popup_add(m_parent);
- }
- evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- if (content != nullptr)
- elm_object_content_set(popup, content);
- else
- elm_object_text_set(popup, message.c_str());
-
- elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_WORD);
- elm_object_part_text_set(popup, "title,text", title.c_str());
-
- int buttonsCounter = 1;
- for(std::list<PopupButtons>::iterator it = buttons.begin(); it != buttons.end(); ++it)
- {
- Evas_Object *btn1 = elm_button_add(popup);
- elm_object_text_set(btn1, buttonsTranslations[*it].c_str());
- std::string buttonName = "button";
- buttonName.append(std::to_string(buttonsCounter));
- elm_object_part_content_set(popup, buttonName.c_str(), btn1);
- addedButtons[btn1] = *it;
- evas_object_smart_callback_add(btn1, "clicked", _response_cb, this);
- ++buttonsCounter;
- }
-
- evas_object_show(popup);
- popupShown(this);
-}
-
-void SimplePopup::dismiss()
-{
- popupDismissed(this);
-}
-
-void SimplePopup::onBackPressed()
-{
- dismiss();
-}
-
-void SimplePopup::_response_cb(void *data, Evas_Object *obj, void */*event_info*/)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- SimplePopup *self = static_cast<SimplePopup*>(data);
- self->buttonClicked(self->addedButtons[obj], self->popupData);
- self->dismiss();
-}
-
-void SimplePopup::setTitle(const std::string &title)
-{
- this->title = title;
-}
-
-void SimplePopup::setMessage(const std::string &message)
-{
- this->message = message;
-}
-
-void SimplePopup::setContent(Evas_Object* content)
-{
- this->content = content;
-}
-
-void SimplePopup::setData(std::shared_ptr< PopupData > popupData)
-{
- this->popupData = popupData;
-}
-
-void SimplePopup::addButton(PopupButtons buttonId)
-{
- buttons.push_back(buttonId);
-}
-
-} // base_ui
-} // tizen_browser
+++ /dev/null
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __SIMPLE_POPUP_H__
-#define __SIMPLE_POPUP_H__ 1
-
-#include <Evas.h>
-#include <Elementary.h>
-#include <string>
-#include <list>
-#include <memory>
-
-#include "AbstractPopup.h"
-#include "PopupButtons.h"
-#include "WebConfirmation.h"
-#include "DownloadControl/DownloadControl.h"
-
-namespace tizen_browser
-{
-namespace base_ui
-{
-
-struct PopupData {
- virtual ~PopupData() {};
-};
-
-struct CertificatePopupData : public PopupData {
- basic_webengine::CertificateConfirmationPtr cert;
-};
-
-struct EntryPopupData : public PopupData {
- std::string text;
- Evas_Object * entry;
-};
-
-class SimplePopup : public interfaces::AbstractPopup
-{
-public:
- static SimplePopup* createPopup(Evas_Object* parent);
- static SimplePopup* createPopup(Evas_Object* parent, const std::string &title, const std::string &message);
-
- void show();
- void dismiss();
- void onBackPressed();
-#if PROFILE_MOBILE
- void orientationChanged() {};
-#endif
-
- void setTitle(const std::string &title);
- void setMessage(const std::string &message);
- void setContent(Evas_Object *content);
- void setData(std::shared_ptr<PopupData> popupData);
- void addButton(PopupButtons buttonId);
-
- boost::signals2::signal<void (PopupButtons, std::shared_ptr<PopupData>)> buttonClicked;
-
- ~SimplePopup();
-
-private:
- SimplePopup(Evas_Object* parent);
- SimplePopup(Evas_Object* parent, const std::string &title, const std::string &message);
-
- Evas_Object *m_parent;
- Evas_Object *popup;
- Evas_Object *content;
- std::string title;
- std::string message;
- std::list<PopupButtons> buttons;
- static void _response_cb(void *data, Evas_Object *obj, void *event_info);
- std::map<Evas_Object *, PopupButtons> addedButtons;
- std::shared_ptr<PopupData> popupData;
-};
-
-}
-
-}
-
-#endif //__SIMPLE_POPUP_H__
#include <Ecore.h>
#include <Ecore_Wayland.h>
#include <Edje.h>
-#include <Evas.h>
#include <app.h>
-#include <thread>
-#include <future>
-#include <functional>
#include <appcore-common.h>
+#include <cassert>
+#include <push-service.h>
+#include <app_context.h>
+#include <app_control_internal.h>
+#include <app_manager.h>
+#include <app_manager_extension.h>
+#include <notification.h>
+#include <notification_internal.h>
+
+#include "WebPageUI.h"
+#include "WebPageMin.h"
+#include "AbstractWebEngine.h"
+#include "TabOrigin.h"
+#include "HistoryUI.h"
+#include "FindOnPageUI.h"
+#include "SettingsUI.h"
+#include "SettingsMain.h"
+#include "SettingsHomePage.h"
+#include "SettingsManager.h"
+#include "TextPopup.h"
+#include "QuickAccess.h"
+#include "TabUI.h"
+#include "TabId.h"
+#include "HistoryService.h"
+#include "BookmarkFlowUI.h"
+#include "BookmarkManagerUI.h"
+#include "BookmarkService.h"
+#include "PlatformInputManager.h"
+#include "StorageService.h"
+#include "CertificateContents.h"
+#include "ProgressiveWebApp.h"
+#include "Action.h"
+#include "InputPopup.h"
+#include "ContentPopup.h"
+#include "WebConfirmation.h"
+#include "ViewManager.h"
+#include "MenuButton.h"
+#include "NaviframeWrapper.h"
+#include "SplashScreen.h"
#include "Config.h"
#include "app_i18n.h"
#include "TabService.h"
#include "BrowserLogger.h"
#include "ServiceManager.h"
-#include "AbstractWebEngine.h"
-#include "TabId.h"
#include "BrowserImage.h"
#include "SimpleUI.h"
#include "WebPageUIStatesManager.h"
#include "HistoryItem.h"
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"
-#include "UrlHistoryList/UrlHistoryList.h"
#include "NotificationPopup.h"
-#include "ContentPopup_mob.h"
#include "RadioPopup.h"
#include "Tools/GeneralTools.h"
#include "Tools/SnapshotType.h"
#include "SettingsPrettySignalConnector.h"
#include "net_connection.h"
+#include "DownloadControl/DownloadControl.h"
namespace tizen_browser{
namespace base_ui{
+using namespace config;
+
EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui")
const std::string HomePageURL = "about:home";
-const std::string ResetBrowserPopupMsg = "Do you really want to reset Browser?" \
- " If you press Reset, delete all data" \
- " and return to initial setting.";
const int SCALE_FACTOR = 720;
+const std::string SimpleUI::TAB_LIMIT_DECISION = "tab_limit_decision";
SimpleUI::SimpleUI()
: AbstractMainWindow()
, m_tabUI()
, m_initialised(false)
, m_tabLimit(0)
- , m_favoritesLimit(0)
+ , m_qaLimit(0)
, m_wvIMEStatus(false)
-#if PWA
+ , m_main_window(nullptr)
+ , m_splash_screen()
, m_pwa()
- , m_alreadyOpenedPWA(false)
-#endif
, m_manualRotation(false)
, m_current_angle(0)
, m_temp_angle(0)
+ , m_alreadyOpenedExecURL(false)
+ , m_languageChanged(false)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
elm_init(0, nullptr);
- main_window = elm_win_util_standard_add("browserApp", "browserApp");
+ m_main_window = elm_win_util_standard_add("browserApp", "browserApp");
int width;
- elm_win_screen_size_get(main_window, nullptr, nullptr, &width, nullptr);
+ elm_win_screen_size_get(m_main_window, nullptr, nullptr, &width, nullptr);
double config_scale_value = (double)(width)/SCALE_FACTOR;
- config::Config::getInstance().set(
+ Config::getInstance().set(
"scale", static_cast<double>(elm_config_scale_get()/config_scale_value));
- m_tabLimit = boost::any_cast<int>(config::Config::getInstance().get("TAB_LIMIT"));
- m_favoritesLimit = boost::any_cast<int>(config::Config::getInstance().get("FAVORITES_LIMIT"));
+ m_tabLimit = boost::any_cast<int>(Config::getInstance().get("TAB_LIMIT"));
+ m_qaLimit = boost::any_cast<int>(Config::getInstance().get("QUICKACCESS_LIMIT"));
- elm_win_conformant_set(main_window, EINA_TRUE);
- if (main_window == nullptr)
+ elm_win_conformant_set(m_main_window, EINA_TRUE);
+ if (m_main_window == nullptr)
BROWSER_LOGE("Failed to create main window");
- setMainWindow(main_window);
- m_viewManager.init(main_window);
+ setMainWindow(m_main_window);
+ m_viewManager.init(m_main_window);
- elm_win_resize_object_add(main_window, m_viewManager.getConformant());
- evas_object_show(main_window);
+ elm_win_resize_object_add(m_main_window, m_viewManager.getConformant());
+ evas_object_show(m_main_window);
- if (elm_win_wm_rotation_supported_get(main_window)) {
+ if (elm_win_wm_rotation_supported_get(m_main_window)) {
rotationType(rotationLock::noLock);
- evas_object_smart_callback_add(main_window, "wm,rotation,changed", __orientation_changed, this);
+ evas_object_smart_callback_add(m_main_window, "wm,rotation,changed", __orientation_changed, this);
enableManualRotation(false);
} else
BROWSER_LOGW("[%s:%d] Device does not support rotation.", __PRETTY_FUNCTION__, __LINE__);
// determine if keyboard has been shown. I think it is possible to unify it with below callbacks.
evas_object_smart_callback_add(m_viewManager.getConformant(), "virtualkeypad,state,on", onUrlIMEOpened, this);
evas_object_smart_callback_add(m_viewManager.getConformant(), "virtualkeypad,state,off",onUrlIMEClosed, this);
-}
-
-SimpleUI::~SimpleUI() {
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- evas_object_del(m_window.get());
-}
-void SimpleUI::suspend()
-{
- m_webEngine->suspend();
+ m_splash_screen.init(m_main_window);
+ m_splash_screen.isLandscape.connect([this]{ return isLandscape(); });
+ m_splash_screen.updateManualRotation.connect(
+ [this]{ enableManualRotation(isManualRotation(m_viewManager.topOfStack())); });
}
void SimpleUI::resume()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_functionViewPrepare();
+ if (!m_pwa.isActive() && m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
+ m_splash_screen.hide();
+ if (m_pwa.isActive())
+ m_webEngine->setFocus();
#if DUMMY_BUTTON
- m_webPageUI->createDummyButton();
+ else
+ m_webPageUI->createDummyButton();
#endif
- m_webEngine->resume();
+ if (m_pwa.isActive() ||
+ m_webPageUI->stateEquals(WPUState::MAIN_INCOGNITO_PAGE) ||
+ m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE))
+ m_webEngine->resume();
+ if (m_languageChanged) {
+ m_languageChanged = false;
+ m_webEngine->languageChanged();
+ }
if (m_findOnPageUI && m_findOnPageUI->isVisible())
m_findOnPageUI->show_ime();
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
-void SimpleUI::destroyUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_webEngine->destroyTabs();
-}
-
-std::string SimpleUI::edjePath(const std::string &file)
-{
- return std::string(EDJE_DIR) + file;
-}
-
-std::shared_ptr<services::HistoryItemVector> SimpleUI::getMostVisitedItems()
-{
- return m_historyService->getMostVisitedHistoryItems();
-}
-
-void SimpleUI::setMostVisitedFrequencyValue(
- std::shared_ptr<services::HistoryItem> historyItem, int visitFrequency)
-{
- m_historyService->setMostVisitedFrequency(historyItem->getId(), visitFrequency);
-}
-
-std::shared_ptr<services::HistoryItemVector> SimpleUI::getHistory()
-{
- return m_historyService->getHistoryToday();
-}
-
void SimpleUI::prepareServices()
{
loadUIServices();
loadModelServices();
auto futureModelSig =
- std::async(std::launch::async, [this](){connectModelSignals();});
+ std::async(std::launch::async, [this]{ connectModelSignals(); });
auto futureUISig
- = std::async(std::launch::async, [this](){connectUISignals();});
+ = std::async(std::launch::async, [this]{ connectUISignals(); });
futureModelSig.get();
futureUISig.get();
initUIServices();
initModelServices();
}
-#if PWA
-std::string SimpleUI::preparePWA(const std::string& url)
-{
- std::string startUrl;
- if (!strncmp(url.c_str(), "browser_shortcut::", strlen("browser_shortcut::"))) {
- BROWSER_LOGD("Progressive web app");
- m_pwa.preparePWAParameters(url);
- startUrl = m_pwa.getPWAinfo().uri;
- if (startUrl.empty())
- return std::string();
- BROWSER_LOGD("Display mode: %d", m_pwa.getPWAinfo().displayMode);
- m_webPageUI->setDisplayMode(
- static_cast<WebPageUI::WebDisplayMode>(
- m_pwa.getPWAinfo().displayMode));
- if (m_pwa.getPWAinfo().orientation == WebPageUI::WebScreenOrientationLockPortrait)
- rotationType(rotationLock::portrait);
- else if (m_pwa.getPWAinfo().orientation == WebPageUI::WebScreenOrientationLockLandscape)
- rotationType(rotationLock::landscape);
- return startUrl;
- }
- return std::string();
+void SimpleUI::preparePWAServices()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ m_webPageMin =
+ std::dynamic_pointer_cast<base_ui::WebPageMin, core::AbstractService>(
+ core::ServiceManager::getInstance().getService("org.tizen.browser.webpagemin", "libWebPageMin.so"));
+
+ m_webEngine =
+ std::dynamic_pointer_cast
+ <basic_webengine::AbstractWebEngine, core::AbstractService>(
+ core::ServiceManager::getInstance().getService("org.tizen.browser.webenginemin", "libWebEngineMin.so"));
+
+ m_platformInputManager =
+ std::dynamic_pointer_cast
+ <services::PlatformInputManager, core::AbstractService>(
+ core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager", "libPlatformInputManager.so"));
+
+ m_storageService = std::dynamic_pointer_cast
+ <services::StorageService, core::AbstractService>(
+ core::ServiceManager::getInstance().getService("org.tizen.browser.storageservice", "libStorageService.so"));
+
+ connectPWASignals();
+
+ m_platformInputManager->init(m_window.get());
+ m_webPageMin->init(m_viewManager.getContent());
+ m_webEngine->init(m_webPageMin->getContent());
}
-#endif
-int SimpleUI::exec(const std::string& _url, const std::string& _caller, const std::string& _operation)
+int SimpleUI::exec(const std::string& url, const std::string& caller, const std::string& operation)
{
BROWSER_LOGD(
- "[%s] _url=%s, _caller=%s, _operation=%s, initialised=%d",
+ "[%s] url=%s, caller=%s, operation=%s, initialised=%d",
__func__,
- _url.c_str(),
- _caller.c_str(),
- _operation.c_str(),
+ url.c_str(),
+ caller.c_str(),
+ operation.c_str(),
m_initialised);
- std::string url = _url;
- std::string operation = _operation;
- m_caller = _caller;
+ std::string pwaUrl = m_pwa.preparePWA(url);
+
+ if (m_pwa.isActive()) {
+ if (m_pwa.getPWAinfo().orientation == WebPageUI::WebScreenOrientationLockPortrait)
+ rotationType(rotationLock::portrait);
+ else if (m_pwa.getPWAinfo().orientation == WebPageUI::WebScreenOrientationLockLandscape)
+ rotationType(rotationLock::landscape);
+ }
+ if (!m_initialised)
+ m_splash_screen.show(m_pwa);
m_alreadyOpenedExecURL = false;
- m_functionViewPrepare = [url, operation, this]() mutable {
+ m_functionViewPrepare = [=]() mutable {
if (!m_initialised) {
- if (m_window.get()) {
- prepareServices();
+ if (m_pwa.isActive()) { // Progressive web app
+ preparePWAServices();
+ pushViewToStack(m_webPageMin);
+ m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
+ } else {
+ if (m_window.get()) {
+ prepareServices();
- //Push first view to stack.
- pushViewToStack(m_webPageUI);
+ //Push first view to stack.
+ pushViewToStack(m_webPageUI);
- // Register H/W back key callback
- m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
- }
+ // Register H/W back key callback
+ m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
+ }
- if (url.empty()) {
BROWSER_LOGD("[%s]: restore last session", __func__);
switchViewToQuickAccess();
restoreLastSession();
}
m_initialised = true;
}
- std::string pwaUrl = std::string();
-#if PWA
- // Progressive web app
- pwaUrl = preparePWA(url);
-
- if ((!pwaUrl.empty() && m_webEngine->getState() != basic_webengine::State::SECRET) ||
- (pwaUrl.empty() && m_webEngine->getState() == basic_webengine::State::SECRET))
- changeEngineState();
-
- m_webPageUI->updateEngineStateUI();
-#endif
if (!pwaUrl.empty() || (!url.empty() && !m_alreadyOpenedExecURL)) {
- BROWSER_LOGD("[%s]: open new tab", __func__);
std::string newUrl = url;
- if (!operation.compare(APP_CONTROL_OPERATION_SEARCH)) {
+ if (!operation.compare(APP_CONTROL_OPERATION_SEARCH) && !m_pwa.isActive()) {
newUrl = m_webPageUI->getURIEntry().rewriteURI(url);
popStackTo(m_webPageUI);
}
- auto taburl = pwaUrl.empty() ? newUrl : pwaUrl;
-#if PWA
- // Allow for only one instance of PWA
- if (m_alreadyOpenedPWA)
- m_webEngine->closeTab();
- if (!pwaUrl.empty())
- popStackTo(m_webPageUI);
- m_alreadyOpenedPWA = !pwaUrl.empty();
-#endif
-
- openNewTab(taburl);
+ if (m_splash_screen.isVisible()) {
+ auto taburl = pwaUrl.empty() ? newUrl : pwaUrl;
+ openNewTab(taburl);
+ }
m_alreadyOpenedExecURL = true;
}
};
+
+ if (!operation.compare(APP_CONTROL_OPERATION_VIEW) ||
+ !operation.compare("libpush.operation.handle"))
+ resume();
BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str());
return 0;
}
-#if PWA
void SimpleUI::countCheckUrl()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- int id, ret = 0;
- id = m_historyService->getHistoryId(m_webEngine->getURI());
+ bool chk = m_storageService->getPWAStorage().getPWACheck(m_webEngine->getURI());
- if (id)
- ret = m_historyService->getHistoryCnt(id);
+ if (!chk) {
+ int ret = m_historyService->getHistoryCnt(
+ m_historyService->getHistoryId(m_webEngine->getURI()));
- if (ret == CONNECT_COUNT)
- pwaPopupRequest();
- else
- BROWSER_LOGD("[%s:%d] url count : %d", __PRETTY_FUNCTION__, __LINE__, ret);
-}
-#endif
-
-void SimpleUI::faviconChanged(tools::BrowserImagePtr favicon)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (!m_webEngine->isLoading())
- m_historyService->updateHistoryItemFavicon(m_webEngine->getURI(), favicon);
+ if (ret >= CONNECT_COUNT)
+ pwaPopupRequest();
+ else
+ BROWSER_LOGD("[%s:%d] url count : %d", __PRETTY_FUNCTION__, __LINE__, ret);
+ }
}
void SimpleUI::restoreLastSession()
m_webPageUI =
std::dynamic_pointer_cast<base_ui::WebPageUI, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.webpageui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.webpageui", "libWebPageUI.so"));
m_quickAccess =
std::dynamic_pointer_cast<base_ui::QuickAccess, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.quickaccess"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.quickaccess", "libQuickAccess.so"));
m_historyUI =
std::dynamic_pointer_cast<base_ui::HistoryUI, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.historyui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.historyui", "libHistoryUI.so"));
m_tabUI =
std::dynamic_pointer_cast<base_ui::TabUI, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.tabui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.tabui", "libTabUI.so"));
auto futureSettings(std::async(std::launch::async, [this](){
m_settingsManager =
std::dynamic_pointer_cast<SettingsManager, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui", "libSettingsUI.so"));
}));
auto futureBookmarkFlow(std::async(std::launch::async, [this](){
m_bookmarkFlowUI =
std::dynamic_pointer_cast<base_ui::BookmarkFlowUI, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkflowui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkflowui", "libBookmarkFlowUI.so"));
}));
auto futureFindOnPage(std::async(std::launch::async, [this](){
m_findOnPageUI =
std::dynamic_pointer_cast<base_ui::FindOnPageUI, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.findonpageui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.findonpageui", "libFindOnPageUI.so"));
}));
auto futureBookmarksMan(std::async(std::launch::async, [this](){
m_bookmarkManagerUI =
std::dynamic_pointer_cast<base_ui::BookmarkManagerUI, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui", "libBookmarkManagerUI.so"));
}));
futureSettings.get();
futureBookmarkFlow.get();
m_webEngine =
std::dynamic_pointer_cast
<basic_webengine::AbstractWebEngine, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice", "libWebEngineService.so"));
m_historyService =
std::dynamic_pointer_cast
<services::HistoryService, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice", "libHistoryService.so"));
m_platformInputManager =
std::dynamic_pointer_cast
<services::PlatformInputManager, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager", "libPlatformInputManager.so"));
- auto futureStorage(std::async(std::launch::async, [this](){
+ auto futureStorage(std::async(std::launch::async, [this]{
m_storageService = std::dynamic_pointer_cast
<services::StorageService, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.storageservice"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.storageservice", "libStorageService.so"));
}));
- auto futureTab(std::async(std::launch::async, [this](){
+ auto futureTab(std::async(std::launch::async, [this]{
m_tabService = std::dynamic_pointer_cast<
services::TabService, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.tabservice"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.tabservice", "libTabService.so"));
}));
- auto futureFavourite(std::async(std::launch::async, [this](){
+ auto futureFavourite(std::async(std::launch::async, [this]{
m_favoriteService = std::dynamic_pointer_cast
- <interfaces::AbstractFavoriteService, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.favoriteservice"));
+ <services::BookmarkService, core::AbstractService>(
+ core::ServiceManager::getInstance().getService("org.tizen.browser.favoriteservice", "libBookmarkService.so"));
}));
- auto futureCertificates(std::async(std::launch::async, [this](){
+ auto futureCertificates(std::async(std::launch::async, [this]{
m_certificateContents = std::dynamic_pointer_cast
<services::CertificateContents, core::AbstractService>(
- core::ServiceManager::getInstance().getService("org.tizen.browser.certificateservice"));
+ core::ServiceManager::getInstance().getService("org.tizen.browser.certificateservice", "libCertificateService.so"));
}));
futureStorage.get();
futureTab.get();
void SimpleUI::connectWebPageSignals()
{
- M_ASSERT(m_webPageUI.get());
- m_webPageUI->getURIEntry().uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1));
- m_webPageUI->backPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
- m_webPageUI->backPage.connect(boost::bind(&basic_webengine::AbstractWebEngine::back, m_webEngine.get()));
- m_webPageUI->showTabUI.connect(boost::bind(&SimpleUI::showTabUI, this));
- m_webPageUI->showBookmarksUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
- m_favoriteService->getRoot(), BookmarkManagerState::Default));
- m_webPageUI->showHomePage.connect(boost::bind(&SimpleUI::showHomePage, this));
- m_webPageUI->forwardPage.connect(boost::bind(&basic_webengine::AbstractWebEngine::forward, m_webEngine.get()));
- m_webPageUI->showQuickAccess.connect(boost::bind(&SimpleUI::showQuickAccess, this));
- m_webPageUI->hideQuickAccess.connect(boost::bind(&QuickAccess::hideUI, m_quickAccess));
- m_webPageUI->getQuickAccessEditUI()->requestQuickAccessGengrid.connect(
- boost::bind(&QuickAccess::getQuickAccessGengrid, m_quickAccess.get()));
- m_webPageUI->getQuickAccessEditUI()->requestMostVisitedGengrid.connect(
- boost::bind(&QuickAccess::getMostVisitedGengrid, m_quickAccess.get()));
+ assert(m_webPageUI.get());
+ m_webPageUI->getURIEntry().uriChanged.connect(
+ [this](const auto& url) { this->filterURL(url); });
+ m_webPageUI->backPage.connect(
+ [this]{ this->switchViewToWebPage(); });
+ m_webPageUI->backPage.connect(
+ [this]{ m_webEngine->back(); });
+ m_webPageUI->showTabUI.connect(
+ [this]{ this->showTabUI(); });
+ m_webPageUI->showHomePage.connect(
+ [this]{ this->showHomePage(); });
+ m_webPageUI->forwardPage.connect(
+ [this]{ m_webEngine->forward(); });
+ m_webPageUI->showQuickAccess.connect(
+ [this]{ m_quickAccess->showUI(); });
+ m_webPageUI->hideQuickAccess.connect(
+ [this]{ m_quickAccess->hideUI(); });
+ m_webPageUI->getQuickAccessEditUI()->requestQuickAccessEditLayout.connect(
+ [this]{ return m_quickAccess->getQuickAccessEditLayout(); });
+ m_webPageUI->getQuickAccessEditUI()->requestMostVisitedEditLayout.connect(
+ [this]{ return m_quickAccess->getMostVisitedEditLayout(); });
m_webPageUI->getQuickAccessEditUI()->requestQuickAccessState.connect(
- boost::bind(&QuickAccess::getQuickAccessState, m_quickAccess.get()));
+ [this]{ return m_quickAccess->getQuickAccessState(); });
m_webPageUI->getQuickAccessEditUI()->editingFinished.connect(
- boost::bind(&QuickAccess::editingFinished, m_quickAccess.get()));
- m_webPageUI->getQuickAccessEditUI()->editingFinished.connect(
- boost::bind(&WebPageUI::editingFinished, m_webPageUI.get()));
+ [this]{ m_quickAccess->editingFinished(); m_webPageUI->editingFinished(); });
m_webPageUI->getQuickAccessEditUI()->deleteSelectedMostVisitedItems.connect(
- boost::bind(&QuickAccess::deleteSelectedMostVisitedItems, m_quickAccess.get()));
+ [this]{ m_quickAccess->deleteSelectedMostVisitedItems(); });
+ m_webPageUI->getQuickAccessEditUI()->reorderQuickAccessItems.connect(
+ [this]{ m_quickAccess->reorderQuickAccessItems(); });
m_webPageUI->getQuickAccessEditUI()->closeUI.connect(
- boost::bind(&SimpleUI::popTheStack, this));
- m_webPageUI->focusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::setFocus, m_webEngine.get()));
- m_webPageUI->unfocusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::clearFocus, m_webEngine.get()));
- m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
- m_favoriteService->getRoot(), BookmarkManagerState::Default));
- m_webPageUI->updateManualRotation.connect([this](){enableManualRotation(isManualRotation(m_viewManager.topOfStack()));});
- m_webPageUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
- m_webPageUI->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this));
- m_webPageUI->isQuickAccess.connect(boost::bind(&SimpleUI::checkQuickAccess, this));
- m_webPageUI->deleteBookmark.connect(boost::bind(&SimpleUI::deleteBookmark, this));
- m_webPageUI->showBookmarkFlowUI.connect(boost::bind(&SimpleUI::showBookmarkFlowUI, this));
- m_webPageUI->showFindOnPageUI.connect(boost::bind(&SimpleUI::showFindOnPageUI, this, std::string()));
- m_webPageUI->isFindOnPageVisible.connect(boost::bind(&FindOnPageUI::isVisible, m_findOnPageUI.get()));
- m_webPageUI->showSettingsUI.connect(boost::bind(&SettingsManager::showSettingsBaseUI, m_settingsManager.get()));
- m_webPageUI->addNewTab.connect(boost::bind(&SimpleUI::newTabClicked, this));
- m_webPageUI->getURIEntry().mobileEntryFocused.connect(boost::bind(&WebPageUI::mobileEntryFocused, m_webPageUI));
- m_webPageUI->getURIEntry().mobileEntryUnfocused.connect(boost::bind(&WebPageUI::mobileEntryUnfocused, m_webPageUI));
- m_webPageUI->qaOrientationChanged.connect(boost::bind(&QuickAccess::orientationChanged, m_quickAccess));
- m_webPageUI->getURIEntry().secureIconClicked.connect(boost::bind(&SimpleUI::showCertificatePopup, this));
- m_webPageUI->getURIEntry().isValidCert.connect(boost::bind(&services::CertificateContents::isValidCertificate, m_certificateContents, _1));
+ [this]{ this->popTheStack(); });
+ m_webPageUI->focusWebView.connect(
+ [this]{ m_webEngine->setFocus(); });
+ m_webPageUI->unfocusWebView.connect(
+ [this]{ m_webEngine->clearFocus(); });
+ m_webPageUI->showBookmarksUI.connect(
+ [this]{ showBookmarkManagerUI(m_favoriteService->getRoot(), BookmarkManagerState::Default); });
+ m_webPageUI->updateManualRotation.connect(
+ [this]{ enableManualRotation(isManualRotation(m_viewManager.topOfStack())); });
+ m_webPageUI->getWindow.connect(
+ [this]{ return this->getMainWindow(); });
+ m_webPageUI->isBookmark.connect(
+ [this]{ return this->checkBookmark(); });
+ m_webPageUI->isQuickAccess.connect(
+ [this]{ return m_storageService->getQuickAccessStorage().quickAccessItemExist(m_webEngine->getURI()); });
+ m_webPageUI->getMostVisitedCount.connect(
+ [this]{ return m_quickAccess->getMostVisitedItemsCount(); });
+ m_webPageUI->deleteBookmark.connect(
+ [this]{ this->deleteBookmark(); });
+ m_webPageUI->showBookmarkFlowUI.connect(
+ [this]{ this->showBookmarkFlowUI(); });
+ m_webPageUI->showFindOnPageUI.connect(
+ [this]{ this->showFindOnPageUI(std::string()); });
+ m_webPageUI->isFindOnPageVisible.connect(
+ [this]{ return m_findOnPageUI->isVisible(); });
+ m_webPageUI->showSettingsUI.connect(
+ [this]{ m_settingsManager->showSettingsBaseUI(); });
+ m_webPageUI->addNewTab.connect(
+ [this]{ this->newTabClicked(); });
+ m_webPageUI->getURIEntry().mobileEntryFocused.connect(
+ [this]{ m_webPageUI->mobileEntryFocused(); });
+ m_webPageUI->getURIEntry().mobileEntryUnfocused.connect(
+ [this]{ m_webPageUI->mobileEntryUnfocused(); });
+ m_webPageUI->qaOrientationChanged.connect(
+ [this]{ m_quickAccess->orientationChanged(); });
+ m_webPageUI->getURIEntry().secureIconClicked.connect(
+ [this]{ this->showCertificatePopup(); });
+ m_webPageUI->getURIEntry().isValidCert.connect(
+ [this](const auto& url){ return m_certificateContents->isValidCertificate(url); });
m_webPageUI->getURIEntry().reloadPage.connect(
- boost::bind(&basic_webengine::AbstractWebEngine::reload, m_webEngine.get()));
+ [this]{ m_webEngine->reload(); });
m_webPageUI->getURIEntry().stopLoadingPage.connect(
- boost::bind(&basic_webengine::AbstractWebEngine::stopLoading, m_webEngine.get()));
- m_webPageUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
- m_webPageUI->switchToMobileMode.connect(boost::bind(&SimpleUI::switchToMobileMode, this));
- m_webPageUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, this));
- m_webPageUI->quickAccessEdit.connect(boost::bind(&SimpleUI::editQuickAccess, this));
- m_webPageUI->deleteMostVisited.connect(boost::bind(&SimpleUI::deleteMostVisited, this));
- m_webPageUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, _2));
- m_webPageUI->getTitle.connect(boost::bind(&basic_webengine::AbstractWebEngine::getTitle, m_webEngine.get()));
- m_webPageUI->getEngineState.connect(boost::bind(&basic_webengine::AbstractWebEngine::getState, m_webEngine.get()));
- m_webPageUI->requestCurrentPageForWebPageUI.connect(boost::bind(&SimpleUI::requestSettingsCurrentPage, this));
-#if PWA
- m_webPageUI->pwaRequestManifest.connect(boost::bind(&basic_webengine::AbstractWebEngine::requestManifest, m_webEngine.get()));
- m_webPageUI->getCountCheckSignal.connect(boost::bind(&SimpleUI::countCheckUrl, this));
-#endif
- m_webPageUI->isMostVisited.connect(boost::bind(&QuickAccess::isMostVisitedActive, m_quickAccess.get()));
+ [this]{ m_webEngine->stopLoading(); });
+ m_webPageUI->getURIEntry().createSearchQuery.connect(
+ [this](const std::string& s){ return this->createSearchQuery(s); });
+ m_webPageUI->isLandscape.connect(
+ [this]{ return this->isLandscape(); });
+ m_webPageUI->switchToMobileMode.connect(
+ [this]{ this->switchToMobileMode(); });
+ m_webPageUI->switchToDesktopMode.connect(
+ [this]{ this->switchToDesktopMode(); });
+ m_webPageUI->quickAccessEdit.connect(
+ [this]{ this->editQuickAccess(); });
+ m_webPageUI->deleteMostVisited.connect(
+ [this]{ this->deleteMostVisited(); });
+ m_webPageUI->addToQuickAccess.connect(
+ [this](const auto& url, const auto& title){ this->addQuickAccessItem(url, title); });
+ m_webPageUI->getTitle.connect(
+ [this]{ return m_webEngine->getTitle(); });
+ m_webPageUI->getEngineState.connect(
+ [this]{ return m_webEngine->getState(); });
+ m_webPageUI->requestCurrentPageForWebPageUI.connect(
+ [this]{ return requestSettingsCurrentPage(); });
+ m_webPageUI->pwaRequestManifest.connect(
+ [this]{ m_webEngine->setPWAData(); });
+ m_webPageUI->getCountCheckSignal.connect(
+ [this]{ return this->countCheckUrl(); });
+ m_webPageUI->isMostVisited.connect(
+ [this]{ return m_quickAccess->isMostVisitedActive(); });
+ m_webPageUI->setBarsShown.connect(
+ [this](bool value){ this->m_webEngine->setBarsShown(value); });
}
void SimpleUI::connectQuickAccessSignals()
{
- M_ASSERT(m_quickAccess.get());
- m_quickAccess->openURLquickaccess.connect(boost::bind(&SimpleUI::openURLquickaccess, this, _1, _2));
- m_quickAccess->openURLhistory.connect(boost::bind(&SimpleUI::openURLhistory, this, _1, _2));
- m_quickAccess->getMostVisitedItems.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
- m_quickAccess->getQuickAccessItems.connect(boost::bind(&SimpleUI::onQuickAccessClicked, this));
- m_quickAccess->switchViewToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
- m_quickAccess->addQuickAccessClicked.connect(boost::bind(&SimpleUI::onNewQuickAccessClicked, this));
- m_quickAccess->deleteQuickAccessItem.connect(boost::bind(&SimpleUI::onQuickAccessDeleted, this, _1));
+ assert(m_quickAccess.get());
+ m_quickAccess->openURLquickaccess.connect(
+ [this](const auto& item){ this->openURL(item->getUrl(), item->getTitle(), m_webEngine->isDesktopMode()); });
+ m_quickAccess->openURLhistory.connect(
+ [this](const auto& item){ this->openURL(item->getUrl(), item->getTitle(), m_webEngine->isDesktopMode()); });
+ m_quickAccess->getMostVisitedItems.connect(
+ [this]{ m_quickAccess->setMostVisitedItems(m_historyService->getMostVisitedHistoryItems()); });
+ m_quickAccess->getQuickAccessItems.connect(
+ [this]{ m_quickAccess->setQuickAccessItems(m_storageService->getQuickAccessStorage().getQuickAccessList()); });
+ m_quickAccess->switchViewToWebPage.connect(
+ [this]{ return this->switchViewToWebPage(); });
+ m_quickAccess->addQuickAccessClicked.connect(
+ [this]{ return this->onNewQuickAccessClicked(); });
+ m_quickAccess->deleteQuickAccessItem.connect(
+ [this](const auto& item){ m_storageService->getQuickAccessStorage().deleteQuickAccessItem(item->getId()); });
+ m_quickAccess->reorderQuickAccessItem.connect(
+ [this](const auto& item, const auto& order){ m_storageService->getQuickAccessStorage().updateItemOrder(item->getId(), order); });
m_quickAccess->removeMostVisitedItem.connect(
- boost::bind(&SimpleUI::setMostVisitedFrequencyValue, this, _1, _2));
+ [this](const auto& item, const auto& freq){ m_historyService->setMostVisitedFrequency(item->getId(), freq); });
m_quickAccess->sendSelectedMVItemsCount.connect(
- boost::bind(&WebPageUI::setMostVisitedSelectedItemsCountInEditMode, m_webPageUI.get(), _1));
- m_quickAccess->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
+ [this](const auto& count){ m_webPageUI->setMostVisitedSelectedItemsCountInEditMode(count); });
+ m_quickAccess->isLandscape.connect(
+ [this]{ return this->isLandscape(); });
}
void SimpleUI::connectTabsSignals()
{
- M_ASSERT(m_tabUI.get());
- m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
- m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this));
- m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
- m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
- m_tabUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
- m_tabUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
- m_tabUI->changeEngineState.connect(boost::bind(&SimpleUI::changeEngineState, this));
- m_tabUI->refetchTabUIData.connect(boost::bind(&SimpleUI::refetchTabUIData, this));
- m_tabUI->checkIfParamExistsInDB.connect(boost::bind(&storage::SettingsStorage::isDBParamPresent,
- &m_storageService->getSettingsStorage(), _1));
- m_tabUI->setDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsBool,
- &m_storageService->getSettingsStorage(), _1, _2));
- m_tabUI->setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString,
- &m_storageService->getSettingsStorage(), _1, _2));
- m_tabUI->getDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsBool,
- &m_storageService->getSettingsStorage(), _1, false));
- m_tabUI->getDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsText,
- &m_storageService->getSettingsStorage(), _1, ""));
- m_tabUI->showPasswordUI.connect(boost::bind(&SimpleUI::showPasswordUI, this));
- m_tabUI->showNoPasswordWarning.connect(boost::bind(&SimpleUI::onFirstSecretMode, this));
- m_tabUI->getPasswordUI()->closeUI.connect(boost::bind(&SimpleUI::popTheStack, this));
- m_tabUI->getPasswordUI()->setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString,
- &m_storageService->getSettingsStorage(), _1, _2));
- m_tabUI->getPasswordUI()->setDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsBool,
- &m_storageService->getSettingsStorage(), _1, _2));
- m_tabUI->getPasswordUI()->getDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsText,
- &m_storageService->getSettingsStorage(), _1, ""));
- m_tabUI->getPasswordUI()->getDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsBool,
- &m_storageService->getSettingsStorage(), _1, false));
- m_tabUI->getPasswordUI()->changeEngineState.connect(boost::bind(&SimpleUI::changeEngineState, this));
+ assert(m_tabUI.get());
+ m_tabUI->closeTabUIClicked.connect(
+ [this]{ this->popTheStack(); });
+ m_tabUI->newTabClicked.connect(
+ [this]{ this->newTabClicked(); });
+ m_tabUI->tabClicked.connect(
+ [this](const auto& id){ this->tabClicked(id); });
+ m_tabUI->closeTabsClicked.connect(
+ [this](const auto& tabId){ m_webEngine->closeTab(tabId); });
+ m_tabUI->getWindow.connect(
+ [this]{ return this->getMainWindow(); });
+ m_tabUI->isLandscape.connect(
+ [this]{ return this->isLandscape(); });
+ m_tabUI->changeEngineState.connect(
+ [this]{ this->changeEngineState(); });
+ m_tabUI->refetchTabUIData.connect(
+ [this]{ this->refetchTabUIData(); });
+ m_tabUI->checkIfParamExistsInDB.connect(
+ [this](const auto& key){ return m_storageService->getSettingsStorage().isDBParamPresent(key); });
+ m_tabUI->setDBBoolParamValue.connect(
+ [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsBool(key, value); });
+ m_tabUI->setDBStringParamValue.connect(
+ [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsString(key, value); });
+ m_tabUI->getDBBoolParamValue.connect(
+ [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsBool(key, false); });
+ m_tabUI->getDBStringParamValue.connect(
+ [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsText(key, ""); });
+ m_tabUI->showPasswordUI.connect(
+ [this]{ pushViewToStack(m_tabUI->getPasswordUI()); });
+ m_tabUI->showNoPasswordWarning.connect(
+ [this]{ this->onFirstSecretMode(); });
+ m_tabUI->getPasswordUI()->closeUI.connect(
+ [this]{ this->popTheStack(); });
+ m_tabUI->getPasswordUI()->setDBStringParamValue.connect(
+ [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsString(key, value); });
+ m_tabUI->getPasswordUI()->setDBBoolParamValue.connect(
+ [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsBool(key, value); });
+ m_tabUI->getPasswordUI()->getDBStringParamValue.connect(
+ [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsText(key, ""); });
+ m_tabUI->getPasswordUI()->getDBBoolParamValue.connect(
+ [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsBool(key, false); });
+ m_tabUI->getPasswordUI()->changeEngineState.connect(
+ [this]{ this->changeEngineState(); });
}
void SimpleUI::connectHistorySignals()
{
- M_ASSERT(m_historyUI.get());
- m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryAllClicked, this));
- m_historyUI->signalDeleteHistoryItems.connect(boost::bind(&SimpleUI::onDeleteHistoryItems, this, _1));
- m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
- m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::openURL, this, _1, _2, false));
- m_historyUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
+ assert(m_historyUI.get());
+ m_historyUI->clearHistoryClicked.connect(
+ [this]{ this->onClearHistoryAllClicked(); });
+ m_historyUI->signalDeleteHistoryItems.connect(
+ [this](const auto& id){ m_historyService->deleteHistoryItem(id); });
+ m_historyUI->closeHistoryUIClicked.connect(
+ [this]{ this->popTheStack(); });
+ m_historyUI->signalHistoryItemClicked.connect(
+ [this](const auto& url, const auto& title){ this->openURL(url, title, false); });
+ m_historyUI->getWindow.connect(
+ [this]{ return this->getMainWindow(); });
}
void SimpleUI::connectBookmarkFlowSignals()
{
- M_ASSERT(m_bookmarkFlowUI.get());
- m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
- m_bookmarkFlowUI->saveBookmark.connect(boost::bind(&SimpleUI::addBookmark, this, _1));
- m_bookmarkFlowUI->editBookmark.connect(boost::bind(&SimpleUI::editBookmark, this, _1));
- m_bookmarkFlowUI->showSelectFolderUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
- _1, BookmarkManagerState::SelectFolder));
- m_bookmarkFlowUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, _2));
+ assert(m_bookmarkFlowUI.get());
+ m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(
+ [this]{ this->popTheStack(); });
+ m_bookmarkFlowUI->saveBookmark.connect(
+ [this](const auto& bookmark_update){ this->addBookmark(bookmark_update); });
+ m_bookmarkFlowUI->editBookmark.connect(
+ [this](const auto& bookmark_update){ this->editBookmark(bookmark_update); });
+ m_bookmarkFlowUI->showSelectFolderUI.connect(
+ [this](const auto& parent){ this->showBookmarkManagerUI(parent, BookmarkManagerState::SelectFolder); });
+ m_bookmarkFlowUI->addToQuickAccess.connect(
+ [this](const auto& url, const auto& title){ this->addQuickAccessItem(url, title); });
}
void SimpleUI::connectBookmarkManagerSignals()
{
- M_ASSERT(m_bookmarkManagerUI.get());
- m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
- m_bookmarkManagerUI->folderSelected.connect(boost::bind(&BookmarkFlowUI::setFolder, m_bookmarkFlowUI.get(), _1));
- m_bookmarkManagerUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
- m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
- m_bookmarkManagerUI->bookmarkItemEdit.connect(boost::bind(&SimpleUI::onBookmarkEdit, this, _1));
- m_bookmarkManagerUI->bookmarkItemOrderEdited.connect(boost::bind(&SimpleUI::onBookmarkOrderEdited, this, _1));
- m_bookmarkManagerUI->bookmarkItemDeleted.connect(boost::bind(&SimpleUI::onBookmarkDeleted, this, _1));
- m_bookmarkManagerUI->newFolderItemClicked.connect(boost::bind(&SimpleUI::onNewFolderClicked, this, _1));
- m_bookmarkManagerUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
- m_bookmarkManagerUI->getHistoryGenlistContent.connect(boost::bind(&SimpleUI::showHistoryUI, this, _1, _2, _3));
- m_bookmarkManagerUI->removeSelectedItemsFromHistory.connect(boost::bind(&HistoryUI::removeSelectedHistoryItems, m_historyUI.get()));
- m_bookmarkManagerUI->isEngineSecretMode.connect(boost::bind(&basic_webengine::AbstractWebEngine::isSecretMode, m_webEngine.get()));
+ assert(m_bookmarkManagerUI.get());
+ m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(
+ [this]{ this->popTheStack(); });
+ m_bookmarkManagerUI->folderSelected.connect(
+ [this](const auto& item){ m_bookmarkFlowUI->setFolder(item); });
+ m_bookmarkManagerUI->getWindow.connect(
+ [this]{ return this->getMainWindow(); });
+ m_bookmarkManagerUI->bookmarkItemClicked.connect(
+ [this](const auto& item){ this->onBookmarkClicked(item); });
+ m_bookmarkManagerUI->bookmarkItemEdit.connect(
+ [this](const auto& item){ this->onBookmarkEdit(item); });
+ m_bookmarkManagerUI->bookmarkItemOrderEdited.connect(
+ [this](const auto& item){ m_favoriteService->editBookmark(item->getId(), "", "", -1, item->getOrder()); });
+ m_bookmarkManagerUI->bookmarkItemDeleted.connect(
+ [this](const auto& item) { m_favoriteService->deleteBookmark(item->getId()); });
+ m_bookmarkManagerUI->newFolderItemClicked.connect(
+ [this](const auto& id){ this->onNewFolderClicked(id); });
+ m_bookmarkManagerUI->isLandscape.connect(
+ [this]{ return this->isLandscape(); });
+ m_bookmarkManagerUI->getHistoryGenlistContent.connect(
+ [this](const auto& parent, const auto& navi, const auto& remove){ return this->showHistoryUI(parent, navi, remove); });
+ m_bookmarkManagerUI->removeSelectedItemsFromHistory.connect(
+ [this]{ m_historyUI->removeSelectedHistoryItems(); });
+ m_bookmarkManagerUI->isEngineSecretMode.connect(
+ [this]{ return m_webEngine->isSecretMode(); });
}
void SimpleUI::connectFindOnPageSignals()
{
- M_ASSERT(m_findOnPageUI.get());
- m_findOnPageUI->closeFindOnPageUIClicked.connect(boost::bind(&SimpleUI::closeFindOnPageUI, this));
- m_findOnPageUI->startFindingWord.connect(boost::bind(&SimpleUI::findWord, this, _1));
+ assert(m_findOnPageUI.get());
+ m_findOnPageUI->closeFindOnPageUIClicked.connect(
+ [this] {
+ this->closeFindOnPageUI();
+ });
+ m_findOnPageUI->startFindingWord.connect(
+ [this](const auto& fdata){ m_webEngine->findWord(fdata.input_str, fdata.forward, fdata.func, fdata.data); });
}
void SimpleUI::connectSettingsSignals()
{
- M_ASSERT(m_settingsManager.get());
+ assert(m_settingsManager.get());
// SETTINGS OVERALL
m_settingsManager->connectOpenSignals();
SPSC.closeSettingsUIClicked.connect(
- boost::bind(&SimpleUI::popTheStack, this));
+ [this]{ this->popTheStack(); });
SPSC.showSettings.connect(
- boost::bind(&SimpleUI::showSettings, this,_1));
+ [this](const auto& settings){ this->showSettings(settings); });
SPSC.getWebEngineSettingsParam.connect(
- boost::bind(
- &basic_webengine::AbstractWebEngine::getSettingsParam,
- m_webEngine.get(),
- _1));
+ [this](const auto& key){ return m_webEngine->getSettingsParam(key); });
SPSC.getWebEngineSettingsParamString.connect(
- boost::bind(
- &storage::SettingsStorage::getParamString,
- &m_storageService->getSettingsStorage(),
- _1));
-
+ [this](const auto& key){ return m_storageService->getSettingsStorage().getParamString(key); });
SPSC.setWebEngineSettingsParam.connect(
- boost::bind(
- &basic_webengine::AbstractWebEngine::setSettingsParam,
- m_webEngine.get(),
- _1,
- _2));
+ [this](const auto& key, const auto& value){ m_webEngine->setSettingsParam(key, value); });
SPSC.setWebEngineSettingsParam.connect(
- boost::bind(&storage::SettingsStorage::setParam,
- &m_storageService->getSettingsStorage(),
- _1,
- _2));
+ [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setParam(key, value); });
SPSC.setWebEngineSettingsParamString.connect(
- boost::bind(
- &storage::SettingsStorage::setParamString,
- &m_storageService->getSettingsStorage(),
- _1,
- _2));
-
+ [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setParamString(key, value); });
SPSC.isLandscape.connect(
- boost::bind(&SimpleUI::isLandscape, this));
+ [this]{ return this->isLandscape(); });
SPSC.settingsBaseShowRadioPopup.connect(
- boost::bind(&SimpleUI::onDefSearchEngineClicked, this));
+ [this]{ this->onDefSearchEngineClicked(); });
SPSC.settingsSaveContentToRadioPopup.connect(
- boost::bind(&SimpleUI::onSaveContentToClicked, this));
+ [this]{ this->onSaveContentToClicked(); });
- // SETTINGS HOME PAGE SIGNALS
m_settingsManager->init(m_viewManager.getContent());
SPSC.requestCurrentPage.connect(
- boost::bind(&SimpleUI::requestSettingsCurrentPage, this));
+ [this]{ return requestSettingsCurrentPage(); });
SPSC.showTextPopup.connect(
- boost::bind(&SimpleUI::selectSettingsOtherPageChange, this));
+ [this]{ this->selectSettingsOtherPageChange(); });
- // SETTINGS DELETE DATA
SPSC.deleteSelectedDataClicked.connect(
- boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1));
-
+ [this](const auto& opt){ this->settingsDeleteSelectedData(opt); });
SPSC.userAgentItemClicked.connect(
- boost::bind(&SimpleUI::settingsOverrideUseragent, this,_1));
+ [this](const auto& ua){ this->settingsOverrideUseragent(ua); });
}
void SimpleUI::connectWebEngineSignals()
{
- m_webEngine->minimizeBrowser.connect(boost::bind(&SimpleUI::minimizeBrowser, this));
- m_webEngine->uriChanged.connect(boost::bind(&URIEntry::changeUri, &m_webPageUI->getURIEntry(), _1));
- m_webEngine->downloadStarted.connect(boost::bind(&SimpleUI::downloadStarted, this, _1));
- m_webEngine->backwardEnableChanged.connect(boost::bind(&WebPageUI::setBackButtonEnabled, m_webPageUI.get(), _1));
- m_webEngine->forwardEnableChanged.connect(boost::bind(&WebPageUI::setForwardButtonEnabled, m_webPageUI.get(), _1));
- m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this));
- m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1));
- m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this));
- m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadFinished, this));
- m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this));
- m_webEngine->checkIfCreate.connect(boost::bind(&SimpleUI::checkIfCreate, this));
- m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::engineTabClosed,this,_1));
- m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1));
- m_webEngine->switchToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
- m_webEngine->favIconChanged.connect(boost::bind(&SimpleUI::faviconChanged, this, _1));
- m_webEngine->windowCreated.connect(boost::bind(&SimpleUI::windowCreated, this));
- m_webEngine->createTabId.connect(boost::bind(&SimpleUI::onCreateTabId, this));
- m_webEngine->snapshotCaptured.connect(boost::bind(&SimpleUI::onSnapshotCaptured, this, _1, _2));
- m_webEngine->redirectedWebPage.connect(boost::bind(&SimpleUI::redirectedWebPage, this, _1, _2));
- m_webEngine->rotatePrepared.connect(boost::bind(&SimpleUI::rotatePrepared, this));
- m_webEngine->switchToQuickAccess.connect(boost::bind(&SimpleUI::switchViewToQuickAccess, this));
- m_webEngine->setCertificatePem.connect(boost::bind(&services::CertificateContents::saveCertificateInfo, m_certificateContents, _1, _2));
- m_webEngine->setWrongCertificatePem.connect(boost::bind(&services::CertificateContents::saveWrongCertificateInfo, m_certificateContents, _1, _2));
- m_webEngine->fullscreenModeSet.connect(boost::bind(&WebPageUI::fullscreenModeSet, m_webPageUI.get(), _1));
- m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1));
- m_webEngine->getRotation.connect(boost::bind(&SimpleUI::getRotation, this));
- m_webEngine->openFindOnPage.connect(boost::bind(&SimpleUI::showFindOnPageUI, this, _1));
- m_webEngine->closeFindOnPage.connect(boost::bind(&SimpleUI::closeFindOnPageUI, this));
- m_webEngine->unsecureConnection.connect(boost::bind(&SimpleUI::showUnsecureConnectionPopup, this));
- m_webEngine->registerHWKeyCallback.connect(boost::bind(&SimpleUI::registerHWKeyCallback, this));
- m_webEngine->unregisterHWKeyCallback.connect(boost::bind(&SimpleUI::unregisterHWKeyCallback, this));
-}
-
-void SimpleUI::connectHistoryServiceSignals()
-{
- m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1));
+ m_webEngine->minimizeBrowser.connect(
+ [this]{ this->minimizeBrowser(); });
+ m_webEngine->uriChanged.connect(
+ [this](const auto& url){ m_webPageUI->getURIEntry().changeUri(url); });
+ m_webEngine->downloadStarted.connect(
+ [this](const auto& status){ this->downloadStarted(status); });
+ m_webEngine->backwardEnableChanged.connect(
+ [this](const auto& enabled){ m_webPageUI->setBackButtonEnabled(enabled); });
+ m_webEngine->forwardEnableChanged.connect(
+ [this](const auto& enabled){ m_webPageUI->setForwardButtonEnabled(enabled); });
+ m_webEngine->loadStarted.connect(
+ [this]{ this->loadStarted(); });
+ m_webEngine->loadProgress.connect(
+ [this](const auto& progress){ m_webPageUI->progressChanged(progress); });
+#if DUMMY_BUTTON
+ m_webEngine->focusWebView.connect(
+ [this]{ this->m_webPageUI->setDummyButtonFocus(); });
+#endif
+ m_webEngine->loadFinished.connect(
+ [this]{ this->loadFinished(); });
+ m_webEngine->loadStop.connect(
+ [this]{ this->loadFinished(); });
+ m_webEngine->tabCreated.connect(
+ [this]{ m_webPageUI->setTabsNumber(m_webEngine->tabsCount()); });
+ m_webEngine->checkIfCreate.connect(
+ [this]{ return this->checkIfCreate(); });
+ m_webEngine->tabClosed.connect(
+ [this](const auto& id){ this->engineTabClosed(id); });
+ m_webEngine->IMEStateChanged.connect(
+ [this](const auto& status){ this->setwvIMEStatus(status); });
+ m_webEngine->switchToWebPage.connect(
+ [this]{ this->switchViewToWebPage(); });
+ m_webEngine->favIconChanged.connect(
+ [this](const auto& icon){
+ if (!m_webEngine->isLoading())
+ m_historyService->updateHistoryItemFavicon(m_webEngine->getURI(), icon);
+ });
+ m_webEngine->windowCreated.connect(
+ [this]{ switchViewToWebPage(); });
+ m_webEngine->createTabId.connect(
+ [this]{ m_webEngine->onTabIdCreated(m_tabService->createTabId()); });
+ m_webEngine->snapshotCaptured.connect(
+ [this](const auto& snap, const auto& type){ this->onSnapshotCaptured(snap, type); });
+ m_webEngine->rotatePrepared.connect(
+ [this]{ this->rotatePrepared(); });
+ m_webEngine->switchToQuickAccess.connect(
+ [this]{ this->switchViewToQuickAccess(); });
+ m_webEngine->setCertificatePem.connect(
+ [this](const auto& host, const auto& pem){ m_certificateContents->saveCertificateInfo(host, pem); });
+ m_webEngine->setWrongCertificatePem.connect(
+ [this](const auto& host, const auto& pem){ m_certificateContents->saveWrongCertificateInfo(host, pem); });
+ m_webEngine->fullscreenModeSet.connect(
+ [this](const auto& state){ m_webPageUI->fullscreenModeSet(state); });
+ m_webEngine->confirmationRequest.connect(
+ [this](const auto& conf){ this->handleConfirmationRequest(conf); });
+ m_webEngine->getRotation.connect(
+ [this]{ return this->getRotation(); });
+ m_webEngine->openFindOnPage.connect(
+ [this](const auto& str){ this->showFindOnPageUI(str); });
+ m_webEngine->closeFindOnPage.connect(
+ [this]{ this->closeFindOnPageUI(); });
+ m_webEngine->unsecureConnection.connect(
+ [this]{ this->showUnsecureConnectionPopup(); });
+ m_webEngine->registerHWKeyCallback.connect(
+ [this]{ m_platformInputManager->registerHWKeyCallback(m_webEngine->getLayout()); });
+ m_webEngine->unregisterHWKeyCallback.connect(
+ [this]{ m_platformInputManager->unregisterHWKeyCallback(m_webEngine->getLayout()); });
+ m_webEngine->urlbarOffsetSet.connect(
+ [this](const auto& offset){ m_webPageUI->urlbarOffsetSet(offset); });
+ m_webEngine->bottombarOffsetSet.connect(
+ [this](const auto& offset){ m_webPageUI->bottombarOffsetSet(offset); });
+ m_webEngine->createSearchQuery.connect(
+ [this](const std::string& s){ return this->createSearchQuery(s); });
+ m_webEngine->changeUIColor.connect(
+ [this](int r, int g, int b, int a){
+ m_webPageUI->changeUIColor(r,g,b,a);
+ });
+ m_webEngine->installPWA.connect(
+ [this](const std::string& s, const std::string& p, const std::string& sn) {
+ return m_storageService->getPWAStorage().installPWAItem(s, p, sn);
+ });
+ m_webEngine->storePWAShortcut.connect(
+ [this](const unsigned& id, const std::string& shortcut){
+ return m_storageService->getPWAStorage().storePWAShortcut(id, shortcut);
+ });
+ m_webEngine->pushSignal.connect(
+ [this](const char *sender_id, const char* push_data) { return this->handlePushSignal(sender_id, push_data); }
+ );
+ m_webEngine->storePermission.connect(
+ [this](const std::string& origin, const bool& state) {
+ return m_storageService->getPWAStorage().addPermission(origin, state); }
+ );
+ m_webEngine->getPermissionId.connect(
+ [this](const std::string& origin) {
+ return m_storageService->getPWAStorage().getPermissionId(origin); }
+ );
+ m_webEngine->updatePermissionState.connect(
+ [this](const int& id, const bool& state) {
+ return m_storageService->getPWAStorage().updatePermissionState(id, state); }
+ );
+ m_webEngine->getPermissionsMap.connect(
+ [this]{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ return m_storageService->getPWAStorage().getPermissionsMap();
+ });
+}
+
+std::string SimpleUI::handlePushSignal(const char *sender_id, const char* data)
+{
+ BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, sender_id);
+ int id = m_storageService->getPWAStorage().getPWAIdFromPushId(sender_id);
+ if (id) {
+ app_context_h context = nullptr;
+ app_state_e state ;
+ std::string appId = "org.tizen.browser";
+ std::string shortName = m_storageService->getPWAStorage().getPWAShortName(id);
+ std::string result = shortName + std::to_string(id);
+ bool isInactive =
+ (app_manager_get_app_context_by_instance_id(
+ appId.c_str(), result.c_str(), &context) == APP_MANAGER_ERROR_NO_SUCH_APP);
+ if(context) {
+ app_context_get_app_state( context, &state);
+ BROWSER_LOGD("[%s:%d] instance-id=%s , isInactive=%d, state=%d", __PRETTY_FUNCTION__, __LINE__, result.c_str(),isInactive,state);
+
+ if (state==APP_STATE_FOREGROUND) {
+ BROWSER_LOGD("[%s:%d] instance id active %s", __PRETTY_FUNCTION__, __LINE__, result.c_str());
+ return std::string(data);
+ } else {
+ BROWSER_LOGD("[%s:%d] instance id inactive %s", __PRETTY_FUNCTION__, __LINE__, result.c_str());
+ createPWANotification(id, data);
+ }
+ }
+ else{
+ BROWSER_LOGD("[%s:%d] instance id inactive %s", __PRETTY_FUNCTION__, __LINE__, result.c_str());
+ createPWANotification(id, data);
+ }
+ }
+ else {
+ BROWSER_LOGD("no instance id");
+ return std::string(data);
+ }
+ return std::string();
+}
+
+void SimpleUI::createPWANotification(const unsigned& id, const std::string& body)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ auto shortcut = m_storageService->getPWAStorage().getPWAShortcut(id);
+ auto title = m_storageService->getPWAStorage().getPWAName(id);
+
+ notification_h noti_h = nullptr;
+ int ret = NOTIFICATION_ERROR_NONE;
+ noti_h = notification_create(NOTIFICATION_TYPE_NOTI);
+
+ ret = notification_set_text(
+ noti_h,
+ NOTIFICATION_TEXT_TYPE_TITLE,
+ title.c_str(),
+ nullptr,
+ NOTIFICATION_VARIABLE_TYPE_NONE);
+
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ BROWSER_LOGD("[%s]: PWANotification >> Title Error", __func__);
+ notification_free(noti_h);
+ return;
+ }
+
+ ret = notification_set_text(
+ noti_h,
+ NOTIFICATION_TEXT_TYPE_CONTENT,
+ body.c_str(),
+ nullptr,
+ NOTIFICATION_VARIABLE_TYPE_NONE);
+
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ BROWSER_LOGD("[%s]: PWANotification >> Contents Error", __func__);
+ notification_free(noti_h);
+ return ;
+ }
+
+ ret = notification_set_display_applist(
+ noti_h,
+ NOTIFICATION_DISPLAY_APP_TICKER | NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY);
+
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ BROWSER_LOGD("[%s]: PWANotification >> Display Error", __func__);
+ notification_free(noti_h);
+ return;
+ }
+
+ app_control_h app_control = nullptr;
+ if (app_control_create(&app_control) != APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("Fail to create app_control");
+ notification_free(noti_h);
+ return;
+ }
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) != APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("Fail to set app_control operation");
+ app_control_destroy(app_control);
+ notification_free(noti_h);
+ return;
+ }
+
+ if (app_control_set_app_id(app_control, "org.tizen.browser") != APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("Fail to app_control_set_app_id");
+ app_control_destroy(app_control);
+ notification_free(noti_h);
+ return;
+ }
+
+ if (app_control_set_uri(app_control, shortcut.c_str()) != APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("Fail to app_control_set_uri");
+ app_control_destroy(app_control);
+ notification_free(noti_h);
+ return;
+ }
+
+ if (app_control_add_extra_data(app_control, "push_data", body.c_str()) != APP_CONTROL_ERROR_NONE) {
+ BROWSER_LOGD("Fail to app_control_set_extra_data");
+ app_control_destroy(app_control);
+ notification_free(noti_h);
+ return;
+ }
+
+ int err = notification_set_launch_option(noti_h, NOTIFICATION_LAUNCH_OPTION_APP_CONTROL, (void*)app_control);
+
+ BROWSER_LOGD("notification_set_launch_option >> NOTIFICATION_LAUNCH_OPTION_APP_CONTROL");
+ if (err != NOTIFICATION_ERROR_NONE) {
+ BROWSER_LOGD("notification_set_execute_option is failed with err[%d]", err);
+ app_control_destroy(app_control);
+ notification_free(noti_h);
+ return;
+ }
+
+ int platform_key = NOTIFICATION_PRIV_ID_NONE;
+ ret = notification_insert(noti_h, &platform_key);
+
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ BROWSER_LOGD("[%s]: PWANotification >> Display Error", __func__);
+ app_control_destroy(app_control);
+ notification_free(noti_h);
+ return;
+ }
}
void SimpleUI::connectTabServiceSignals()
{
- m_tabService->generateThumb.connect(boost::bind(&SimpleUI::onGenerateThumb, this, _1));
- m_tabService->generateFavicon.connect(boost::bind(&SimpleUI::onGenerateFavicon, this, _1));
+ m_tabService->generateThumb.connect(
+ [this](const auto& id){ this->onGenerateThumb(id); });
+ m_tabService->generateFavicon.connect(
+ [this](const auto& id){ m_tabService->updateTabItemFavicon(id, m_webEngine->getFavicon()); });
}
void SimpleUI::connectPlatformInputSignals()
{
- m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
- m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this));
- m_platformInputManager->menuButtonPressed.connect(boost::bind(&SimpleUI::onMenuButtonPressed, this));
- m_platformInputManager->XF86BackPressed.connect(boost::bind(&SimpleUI::onXF86BackPressed, this));
+ m_platformInputManager->returnPressed.connect(elm_exit);
+ m_platformInputManager->backPressed.connect(
+ [this]{ this->onBackPressed(); });
+ m_platformInputManager->menuButtonPressed.connect(
+ [this]{ this->onMenuButtonPressed(); });
+ m_platformInputManager->XF86BackPressed.connect(
+ [this]{ this->onXF86BackPressed(); });
+ m_platformInputManager->XF86MenuPressed.connect(
+ [this]{ this->onXF86MenuPressed(); });
}
void SimpleUI::connectCertificateSignals()
{
- m_certificateContents->getHostCertList.connect(boost::bind(&storage::CertificateStorage::getHostCertList, &m_storageService->getCertificateStorage()));
- m_certificateContents->addOrUpdateCertificateEntry.connect(boost::bind(&storage::CertificateStorage::addOrUpdateCertificateEntry, &m_storageService->getCertificateStorage(), _1, _2, _3));
+ m_certificateContents->getHostCertList.connect(
+ [this]{ return m_storageService->getCertificateStorage().getHostCertList(); });
+ m_certificateContents->addOrUpdateCertificateEntry.connect(
+ [this](const auto& pem, const auto& host, const auto& allow){
+ m_storageService->getCertificateStorage().addOrUpdateCertificateEntry(pem, host, allow);
+ });
}
void SimpleUI::connectStorageSignals()
{
- m_storageService->getSettingsStorage().setWebEngineSettingsParam.connect(boost::bind(&basic_webengine::AbstractWebEngine::setSettingsParam, m_webEngine.get(), _1, _2));
+ m_storageService->getSettingsStorage().setWebEngineSettingsParam.connect(
+ [this](const auto& param, const auto& value){ m_webEngine->setSettingsParam(param, value); });
}
void SimpleUI::connectUISignals()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_viewManager.isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
+ m_viewManager.isLandscape.connect(
+ [this]{ return this->isLandscape(); });
connectWebPageSignals();
connectQuickAccessSignals();
connectTabsSignals();
connectBookmarkManagerSignals();
}
+void SimpleUI::connectPWASignals()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ connectStorageSignals();
+
+ m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onPWABackPressed, this));
+
+ m_webEngine->loadFinished.connect([this]{ this->m_splash_screen.hide(); });
+ m_webEngine->rotatePrepared.connect([this]{ this->rotatePrepared(); });
+ m_webEngine->getPWAInstanceIDSignal.connect(
+ [this] { return m_pushPwaData.getInstanceId(); });
+ m_webEngine->getPWADataSignal.connect(
+ [this] { return m_pushPwaData.getData(); });
+ m_webEngine->pushSignal.connect(
+ [this](const char *sender_id, const char* push_data) {
+ return this->handlePushSignal(sender_id, push_data);
+ });
+ m_webEngine->storePermission.connect(
+ [this](const std::string& origin, const bool& state) {
+ return m_storageService->getPWAStorage().addPermission(origin, state);
+ });
+ m_webEngine->getPermissionId.connect(
+ [this](const std::string& origin) {
+ return m_storageService->getPWAStorage().getPermissionId(origin);
+ });
+ m_webEngine->updatePermissionState.connect(
+ [this](const int& id, const bool& state) {
+ return m_storageService->getPWAStorage().updatePermissionState(id, state);
+ });
+ m_webEngine->windowCreated.connect( [this]{ switchViewToWebPage(); });
+ m_webEngine->getPermissionsMap.connect(
+ [this]{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ return m_storageService->getPWAStorage().getPermissionsMap();
+ });
+}
+
void SimpleUI::connectModelSignals()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto viewManager(m_viewManager.getContent());
- M_ASSERT(m_webPageUI.get());
+ assert(m_webPageUI.get());
m_webPageUI->init(viewManager);
auto webPageUI(m_webPageUI->getContent());
- M_ASSERT(m_quickAccess.get());
+ assert(m_quickAccess.get());
m_quickAccess->init(webPageUI);
- M_ASSERT(m_tabUI.get());
+ assert(m_tabUI.get());
m_tabUI->init(viewManager);
- M_ASSERT(m_historyUI.get());
+ assert(m_historyUI.get());
m_historyUI->init(viewManager);
- M_ASSERT(m_bookmarkFlowUI.get());
+ assert(m_bookmarkFlowUI.get());
m_bookmarkFlowUI->init(viewManager);
- M_ASSERT(m_findOnPageUI.get());
+ assert(m_findOnPageUI.get());
m_findOnPageUI->init(webPageUI);
- M_ASSERT(m_bookmarkManagerUI.get());
+ assert(m_bookmarkManagerUI.get());
m_bookmarkManagerUI->init(viewManager);
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_webEngine.get());
- M_ASSERT(m_webPageUI.get());
+ assert(m_webEngine.get());
+ assert(m_webPageUI.get());
m_webEngine->init(m_webPageUI->getContent());
- M_ASSERT(m_storageService->getSettingsStorage());
+ assert(m_storageService->getSettingsStorage().get());
m_storageService->getSettingsStorage().initWebEngineSettingsFromDB();
- M_ASSERT(m_platformInputManager);
+ assert(m_platformInputManager.get());
m_platformInputManager->init(m_window.get());
- M_ASSERT(m_certificateContents.get());
+ assert(m_certificateContents.get());
m_certificateContents->init();
}
BROWSER_LOGW("[%s] appcore_flush_memory error!", __PRETTY_FUNCTION__);
}
-void SimpleUI::registerHWKeyCallback()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_platformInputManager->registerHWKeyCallback(m_webEngine->getLayout());
-}
-
-void SimpleUI::unregisterHWKeyCallback()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_platformInputManager->unregisterHWKeyCallback(m_webEngine->getLayout());
-}
-
void SimpleUI::switchViewToWebPage()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (m_webEngine->isSuspended())
m_webEngine->resume();
- m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
+ if (!m_pwa.isActive())
+ m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(),
+ m_webEngine->getURI(),
+ m_webEngine->isLoading());
+ else
+ m_webPageMin->setMainContent(m_webEngine->getLayout());
}
void SimpleUI::switchToTab(const basic_webengine::TabId& tabId)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_webEngine->switchToTab(tabId);
- m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
-}
-
-void SimpleUI::showQuickAccess()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_quickAccess->showUI();
+ if (!m_pwa.isActive())
+ m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(),
+ m_webEngine->getURI(),
+ m_webEngine->isLoading());
+ else
+ m_webPageMin->setMainContent(m_webEngine->getLayout());
}
void SimpleUI::switchViewToQuickAccess()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
+ m_webPageUI->changeUIColor();
m_webEngine->suspend();
popStackTo(m_webPageUI);
}
switchToTab(tab);
}
-void SimpleUI::closeTab()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto tabId = m_webEngine->currentTabId();
- closeTab(tabId);
-}
-
void SimpleUI::closeTab(const basic_webengine::TabId& id)
{
BROWSER_LOGD("[%s:%d] id: %d", __PRETTY_FUNCTION__, __LINE__, id.get());
}
}
-bool SimpleUI::checkQuickAccess()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- return m_storageService->getQuickAccessStorage().quickAccessItemExist(m_webEngine->getURI());
-}
-
-void SimpleUI::openURLhistory(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
-{
- openURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
-}
-
-void SimpleUI::openURLquickaccess(services::SharedQuickAccessItem quickaccessItem, bool desktopMode)
-{
- openURL(quickaccessItem->getUrl(), quickaccessItem->getTitle(), desktopMode);
-}
-
void SimpleUI::openURL(const std::string& url)
{
- // TODO: desktop mode should be checked in WebView or QuickAcces
- // (depends on which view is active)
- openURL(url, "", m_quickAccess->isDesktopMode());
+ if (m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE) || m_webPageUI->stateEquals(WPUState::MAIN_INCOGNITO_PAGE))
+ openURL(url, "", m_webEngine->isDesktopMode());
+ else
+ openURL(url, "", false);
}
void SimpleUI::openURL(const std::string& url, const std::string& title, bool desktopMode)
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (m_webPageUI) {
popStackTo(m_webPageUI);
- if (tabsCount() == 0 || m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
+ if (tabsCount() == 0 ||
+ (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS) && m_webPageUI->shouldOpenNewTab())) {
openNewTab(url, title, boost::none, desktopMode, basic_webengine::TabOrigin::QUICKACCESS);
- else {
+ } else {
+ if (m_webEngine->isSuspended())
+ m_webEngine->resume();
m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), url, false);
m_webEngine->setURI(url);
m_webPageUI->getURIEntry().clearFocus();
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_historyService->clearAllHistory();
-}
-
-void SimpleUI::onDeleteHistoryItems(int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_historyService->deleteHistoryItem(id);
-}
-
-void SimpleUI::onMostVisitedClicked()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_quickAccess->setMostVisitedItems(getMostVisitedItems());
-}
-
-void SimpleUI::onQuickAccessClicked()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_quickAccess->setQuickAccessItems(m_storageService->getQuickAccessStorage().getQuickAccessList());
+ m_storageService->getPWAStorage().deletePWAItems();
}
void SimpleUI::onBookmarkClicked(services::SharedBookmarkItem bookmarkItem)
InputPopup *inputPopup =
InputPopup::createPopup(
m_viewManager.getContent(),
- "Edit Folder name",
- "Edit folder name?",
+ "IDS_BR_OPT_RENAME_FOLDER",
+ "",
bookmarkItem->getTitle(),
- _("IDS_BR_SK_DONE"),
- _("IDS_BR_SK_CANCEL_ABB"));
+ "IDS_BR_OPT_RENAME",
+ "IDS_BR_SK_CANCEL_ABB");
services::SharedBookmarkItemList badWords =
m_favoriteService->getFolders(bookmarkItem->getParent());
for (auto it = badWords.begin(); it != badWords.end(); ++it)
inputPopup->addBadWord((*it)->getTitle());
- inputPopup->button_clicked.connect(boost::bind(&SimpleUI::onEditFolderPopupClicked, this, _1, bookmarkItem));
- inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ inputPopup->button_clicked.connect(
+ [=](const auto& name) mutable { this->onEditFolderPopupClicked(name, bookmarkItem); });
+ inputPopup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ inputPopup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
inputPopup->show();
} else {
m_bookmarkFlowUI->setURL(bookmarkItem->getAddress());
}
}
-void SimpleUI::onBookmarkOrderEdited(services::SharedBookmarkItem bookmarkItem)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_favoriteService->editBookmark(bookmarkItem->getId(), "", "", -1, bookmarkItem->getOrder());
-}
-
-void SimpleUI::onBookmarkDeleted(services::SharedBookmarkItem bookmarkItem)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_favoriteService->deleteBookmark(bookmarkItem->getId());
-}
-
void SimpleUI::onNewFolderClicked(int parent)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
services::SharedBookmarkItemList badWords = m_favoriteService->getFolders(parent);
for (auto it = badWords.begin(); it != badWords.end(); ++it)
inputPopup->addBadWord((*it)->getTitle());
- inputPopup->button_clicked.connect(boost::bind(&SimpleUI::onNewFolderPopupClick, this, _1, parent));
- inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ inputPopup->button_clicked.connect(
+ [=](const auto& name) mutable { this->onNewFolderPopupClick(name, parent); });
+ inputPopup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ inputPopup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
inputPopup->show();
}
_("IDS_BR_SK_CANCEL_ABB"));
// TODO Add missing translations
inputPopup->setTip(_("Enter web address"));
- inputPopup->button_clicked.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, ""));
- inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ inputPopup->button_clicked.connect(
+ [this](const auto& url){ this->addQuickAccessItem(url, ""); });
+ inputPopup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ inputPopup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
inputPopup->show();
}
-void SimpleUI::addQuickAccessItem(const string &urlArg, const string &titleArg)
+void SimpleUI::addQuickAccessItem(const std::string &urlArg, const std::string &titleArg)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_storageService->getQuickAccessStorage().getQuickAccessCount() < m_qaLimit) {
- bool showQA = false;
- std::string url = urlArg;
- std::string title = titleArg;
+ bool refreshQAGengrid = false;
+ std::string url = urlArg;
+ std::string title = titleArg;
+ unsigned addedItemID;
- if(!tools::checkIfProtocolExist(url))
- url = std::string(tools::PROTOCOL_HTTP) + url;
+ if (!tools::checkIfProtocolExist(url))
+ url = std::string(tools::PROTOCOL_HTTP) + url;
- if (titleArg.empty()) {
- title = urlArg;
- showQA = true;
- }
+ if (!m_storageService->getQuickAccessStorage().quickAccessItemExist(url)) {
+
+ if (titleArg.empty()) {
+ title = urlArg;
+ refreshQAGengrid = true;
+ }
+
+ if (!title.compare(0, tools::PROTOCOL_HTTP.length(), tools::PROTOCOL_HTTP))
+ title = title.substr(tools::PROTOCOL_HTTP.length(), std::string::npos);
+ else if (!title.compare(0, tools::PROTOCOL_HTTPS.length(), tools::PROTOCOL_HTTPS))
+ title = title.substr(tools::PROTOCOL_HTTPS.length(), std::string::npos);
+ else if (!title.compare(0, tools::PROTOCOL_FTP.length(), tools::PROTOCOL_FTP))
+ title = title.substr(tools::PROTOCOL_FTP.length(), std::string::npos);
+
+ //TODO: add support for reorder and color
+ if (m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE)) {
+ tools::BrowserImagePtr favicon = m_webEngine->getFavicon();
+ if (favicon) {
+ addedItemID = m_storageService->getQuickAccessStorage().addQuickAccessItem(
+ url, title, 0, 0, true, favicon, favicon->getWidth(), favicon->getHeight());
+ } else {
+ addedItemID = m_storageService->getQuickAccessStorage().addQuickAccessItem(
+ url, title, 0, 0, false, nullptr, 0, 0);
+ }
+ } else {
+ addedItemID = m_storageService->getQuickAccessStorage().addQuickAccessItem(
+ url, title, 0, 0, false, nullptr, 0, 0);
+ }
+
+ if (refreshQAGengrid)
+ m_quickAccess->addQuickAccessItemBeforeADDButton(
+ m_storageService->getQuickAccessStorage().getQuickAccessItem(addedItemID));
+
+ tools::EflTools::createToastPopup(_("IDS_BR_TPOP_WEBPAGE_ADDED_TO_QUICK_ACCESS_LIST"));
- if (!title.compare(0, tools::PROTOCOL_HTTP.length(), tools::PROTOCOL_HTTP))
- title = title.substr(tools::PROTOCOL_HTTP.length(), std::string::npos);
- else if (!title.compare(0, tools::PROTOCOL_HTTPS.length(), tools::PROTOCOL_HTTPS))
- title = title.substr(tools::PROTOCOL_HTTPS.length(), std::string::npos);
- else if (!title.compare(0, tools::PROTOCOL_FTP.length(), tools::PROTOCOL_FTP))
- title = title.substr(tools::PROTOCOL_FTP.length(), std::string::npos);
-
- //TODO: add support for reorder and color
- if (m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE)) {
- tools::BrowserImagePtr favicon = m_webEngine->getFavicon();
- if (favicon) {
- m_storageService->getQuickAccessStorage().addQuickAccessItem(
- url, title, 0, 0, true, favicon, favicon->getWidth(), favicon->getHeight());
} else {
- m_storageService->getQuickAccessStorage().addQuickAccessItem(
- url, title, 0, 0, false, nullptr, 0, 0);
+ BROWSER_LOGI("[%s:%d] Quick access item already exist!", __PRETTY_FUNCTION__, __LINE__);
}
+
} else {
- m_storageService->getQuickAccessStorage().addQuickAccessItem(
- url, title, 0, 0, false, nullptr, 0, 0);
+ TextPopup *popup = TextPopup::createPopup(m_viewManager.getContent());
+ popup->addButton(OK);
+ popup->setTitle("Couldn't add shortcut"); //TODO: missing translation
+ popup->setMessage("The maximum number of Quick access shortcuts has been reached. "
+ "Delete some shortcuts and try again."); //TODO: Missing translation
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
+ popup->show();
}
-
- if (showQA)
- showQuickAccess();
-
- //TODO: display toast message
-}
-
-void SimpleUI::onQuickAccessDeleted(services::SharedQuickAccessItem quickaccessItem)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_storageService->getQuickAccessStorage().deleteQuickAccessItem(quickaccessItem->getId());
}
void SimpleUI::editQuickAccess()
pushViewToStack(m_webPageUI->getQuickAccessEditUI());
}
-void SimpleUI::onDeleteFolderClicked(const std::string& folder_name)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
- popup->addButton(DELETE);
- popup->addButton(CANCEL);
- popup->setTitle(_("IDS_BR_SK_DELETE"));
- popup->setMessage("<b>Delete '" + folder_name + "'?</b><br>If you delete this Folder, All Bookmarks in the folder will also be deleted.");
- popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteFolderPopupClicked, this, _1));
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
- m_folder_name = folder_name;
- popup->show();
-}
-
-void SimpleUI::onRemoveFoldersClicked(services::SharedBookmarkItemList items)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- for (auto it = items.begin(); it != items.end(); ++it) {
- m_storageService->getFoldersStorage().removeNumberInFolder((*it)->getParent());
- m_favoriteService->deleteBookmark((*it)->getAddress());
- }
- items.clear();
-}
-
void SimpleUI::onEditFolderPopupClicked(const std::string& newName, services::SharedBookmarkItem item)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
services::SharedBookmarkItem parentItem = m_favoriteService->getBookmarkItem(item->getParent());
if (m_viewManager.topOfStack() == m_bookmarkManagerUI)
m_bookmarkManagerUI->addBookmarkItems(nullptr, m_favoriteService->getAllBookmarkItems(parentItem->getId()));
+
+ tools::EflTools::createToastPopup(_("IDS_BR_TPOP_FOLDER_RENAMED"));
}
-void SimpleUI::onDeleteFolderPopupClicked(PopupButtons button)
+void SimpleUI::hideBottomBar(const bool& state)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (button == DELETE && m_storageService->getFoldersStorage().ifFolderExists(m_folder_name)) {
- unsigned int id = m_storageService->getFoldersStorage().getFolderId(m_folder_name);
- onRemoveFoldersClicked(m_favoriteService->getBookmarks(id));
- m_storageService->getFoldersStorage().deleteFolder(id);
- }
+ if (m_pwa.isActive())
+ return;
+
+ if (m_webEngine->getLayout() && !m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
+ m_webEngine->setIMEState(state);
+ else
+ m_webPageUI->bottombarOffsetSet(
+ -boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::URL_BAR_HEIGHT)) * (state ? 2 : 1));
}
void SimpleUI::onUrlIMEOpened(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- SimpleUI* self = reinterpret_cast<SimpleUI*>(data);
- self->m_webPageUI->showBottomBar(false);
+ SimpleUI* self = static_cast<SimpleUI*>(data);
self->setwvIMEStatus(true);
+ self->hideBottomBar(true);
}
void SimpleUI::onUrlIMEClosed(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- SimpleUI* self = reinterpret_cast<SimpleUI*>(data);
- self->m_webPageUI->showBottomBar(true);
+ SimpleUI* self = static_cast<SimpleUI*>(data);
self->setwvIMEStatus(false);
+ self->hideBottomBar(false);
}
void SimpleUI::onSnapshotCaptured(std::shared_ptr<tools::BrowserImage> snapshot, tools::SnapshotType snapshot_type)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
const int THUMB_WIDTH = boost::any_cast<int>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH));
+ Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH));
const int THUMB_HEIGHT = boost::any_cast<int>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT));
+ Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT));
tools::BrowserImagePtr snapshotImage = m_webEngine->getSnapshotData(tabId, THUMB_WIDTH, THUMB_HEIGHT, false, tools::SnapshotType::SYNC);
m_tabService->updateTabItemSnapshot(tabId, snapshotImage);
}
-void SimpleUI::onGenerateFavicon(basic_webengine::TabId tabId)
+void SimpleUI::onXF86MenuPressed()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- m_tabService->updateTabItemFavicon(tabId, m_webEngine->getFavicon());
-}
-
-void SimpleUI::onCreateTabId()
-{
- int id = m_tabService->createTabId();
- m_webEngine->onTabIdCreated(id);
-}
-
-void SimpleUI::onHistoryRemoved(const std::string& uri)
-{
- BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
-}
-
-void SimpleUI::onReturnPressed(MenuButton *m)
-{
- BROWSER_LOGD("[%s]", __func__);
- m_platformInputManager->returnPressed.disconnect_all_slots();
- m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
- m->hidePopup();
-}
-
-void SimpleUI::setwvIMEStatus(bool status)
-{
- BROWSER_LOGD("[%s]", __func__);
- m_wvIMEStatus = status;
+ if (m_viewManager.topOfStack() == m_webPageUI)
+ m_webPageUI->returnFocusAfterHideContextMenu();
}
void SimpleUI::onXF86BackPressed()
m_webPageUI->getQuickAccessEditUI()->backPressed();
} else if (m_viewManager.topOfStack() == nullptr) {
switchViewToQuickAccess();
+ m_webPageUI->setShouldOpenNewTab(true);
} else if ((m_viewManager.topOfStack() == m_webPageUI)) {
if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
if (m_quickAccess->canBeBacked(m_webEngine->tabsCount())) {
}
} else {
m_webEngine->backButtonClicked();
+ m_webPageUI->setShouldOpenNewTab(true);
}
} else {
popTheStack();
}
+#if DUMMY_BUTTON
+ if (m_viewManager.topOfStack() == m_webPageUI && m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE))
+ m_webPageUI->setDummyButtonFocus();
+#endif
}
-void SimpleUI::showPopup(interfaces::AbstractPopup* popup)
+void SimpleUI::onPWABackPressed()
{
- BROWSER_LOGD("[%s]", __func__);
- m_popupVector.push_back(popup);
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ if (m_wvIMEStatus) { // if IME opened
+ return;
+ } else if (m_webEngine->isBackEnabled()) {
+ m_webEngine->backButtonClicked();
+ } else {
+ minimizeBrowser();
+ }
}
void SimpleUI::dismissPopup(interfaces::AbstractPopup* popup)
void SimpleUI::onMenuButtonPressed()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!m_popupVector.empty()) // do not show contex menu when popup is opened
+ return;
+ if (m_viewManager.topOfStack() == m_webPageUI &&
+ m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE) &&
+ m_webEngine->isFullScreenMode())
+ return;
+
+ if (m_findOnPageUI->isVisible()) {
+ closeFindOnPageUI();
+ }
auto view = dynamic_cast<interfaces::AbstractContextMenu*>(m_viewManager.topOfStack().get());
if (view)
view->showContextMenu();
bool SimpleUI::isManualRotation(const sAUI& view)
{
- WebPageUI *webPageUI = dynamic_cast<WebPageUI*>(view.get());
- return (webPageUI && webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE));
+ if (m_splash_screen.isVisible())
+ return false;
+ if (m_pwa.isActive()) {
+ return dynamic_cast<WebPageMin*>(view.get());
+ } else {
+ WebPageUI *webPageUI = dynamic_cast<WebPageUI*>(view.get());
+ return (webPageUI && webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE));
+ }
}
void SimpleUI::enableManualRotation(bool enable)
{
m_manualRotation = enable;
BROWSER_LOGD("[%s:%d]: %d", __PRETTY_FUNCTION__, __LINE__, m_manualRotation);
- elm_win_wm_rotation_manual_rotation_done_set(main_window,
+ elm_win_wm_rotation_manual_rotation_done_set(m_main_window,
m_manualRotation ? EINA_TRUE : EINA_FALSE);
}
void SimpleUI::rotatePrepared()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_manualRotation && elm_win_wm_rotation_manual_rotation_done_get(main_window)) {
- elm_win_wm_rotation_manual_rotation_done(main_window);
- m_webPageUI->orientationChanged();
+ if (m_manualRotation && elm_win_wm_rotation_manual_rotation_done_get(m_main_window)) {
+ elm_win_wm_rotation_manual_rotation_done(m_main_window);
+ if (m_webPageUI)
+ m_webPageUI->orientationChanged();
}
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_current_angle = m_temp_angle;
- m_webEngine->orientationChanged();
+ if (m_webEngine)
+ m_webEngine->orientationChanged();
if (!m_manualRotation) {
if (m_bookmarkFlowUI)
m_bookmarkFlowUI->orientationChanged();
void SimpleUI::__orientation_changed(void* data, Evas_Object*, void*)
{
SimpleUI* simpleUI = static_cast<SimpleUI*>(data);
- int event_angle = elm_win_rotation_get(simpleUI->main_window);
+ int event_angle = elm_win_rotation_get(simpleUI->m_main_window);
+
if (simpleUI->m_current_angle != event_angle) {
simpleUI->m_temp_angle = event_angle;
BROWSER_LOGD("[%s:%d] previous angle: [%d] event angle: [%d]", __PRETTY_FUNCTION__, __LINE__,
- simpleUI->m_current_angle, simpleUI->m_temp_angle);
+ simpleUI->m_current_angle, simpleUI->m_temp_angle);
+ if (simpleUI->m_splash_screen.isVisible()) {
+ simpleUI->m_splash_screen.hide();
+ simpleUI->m_splash_screen.show(simpleUI->m_pwa);
+ }
simpleUI->onRotation();
}
}
-bool SimpleUI::isLandscape()
-{
- return elm_win_rotation_get(main_window) % 180;
-}
-
-int SimpleUI::getRotation()
-{
- return elm_win_rotation_get(main_window);
-}
-
void SimpleUI::rotationType(rotationLock lock)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
switch (lock) {
case rotationLock::portrait: {
const int rots[] = {0};
- elm_win_wm_rotation_available_rotations_set(main_window, rots, sizeof(rots)/sizeof(int));
+ elm_win_wm_rotation_available_rotations_set(m_main_window, rots, sizeof(rots)/sizeof(int));
break;
}
case rotationLock::landscape: {
const int rots[] = {90};
- elm_win_wm_rotation_available_rotations_set(main_window, rots, sizeof(rots)/sizeof(int));
+ elm_win_wm_rotation_available_rotations_set(m_main_window, rots, sizeof(rots)/sizeof(int));
break;
}
case rotationLock::noLock: {
const int rots[] = {0, 90, 180, 270};
- elm_win_wm_rotation_available_rotations_set(main_window, rots, sizeof(rots)/sizeof(int));
+ elm_win_wm_rotation_available_rotations_set(m_main_window, rots, sizeof(rots)/sizeof(int));
break;
}
default:
}
}
-Evas_Object* SimpleUI::getMainWindow()
-{
- return main_window;
-}
-
void SimpleUI::downloadStarted(int status)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
popup->show(_("IDS_BR_HEADER_UNABLE_TO_DOWNLOAD_ABB"), false);
break;
case DOWNLOAD_STARTING_DOWNLOAD:
- connection_type_e connection_type;
- connection_h handle;
-
- if (connection_create(&handle) < 0) {
- BROWSER_LOGD("Fail to create network handle");
- }
- if (connection_get_type(handle, &connection_type) < 0) {
- BROWSER_LOGD("Fail to get download type");
- if (connection_destroy(handle) < 0) {
- BROWSER_LOGD("Fail to get download type");
- }
- }
-
- if (connection_type == CONNECTION_TYPE_BT){
+ connection_type_e connection_type;
+ connection_h handle;
+
+ if (connection_create(&handle) < 0) {
+ BROWSER_LOGD("Fail to create network handle");
+ }
+ if (connection_get_type(handle, &connection_type) < 0) {
+ BROWSER_LOGD("Fail to get download type");
+ if (connection_destroy(handle) < 0) {
+ BROWSER_LOGD("Fail to get download type");
+ }
+ }
+
+ if (connection_type == CONNECTION_TYPE_BT){
popup->show(_("IDS_BR_POP_STARTING_DOWNLOAD_ING"), _("Unable to use tethering."), false);
- }
- else{
- popup->show(_("IDS_BR_POP_STARTING_DOWNLOAD_ING"), false);
- }
-
- if (connection_destroy(handle) < 0) {
- BROWSER_LOGD("Fail to destroy network handle");
- }
+ }
+ else{
+ popup->show(_("IDS_BR_POP_STARTING_DOWNLOAD_ING"), false);
+ }
+
+ if (connection_destroy(handle) < 0) {
+ BROWSER_LOGD("Fail to destroy network handle");
+ }
break;
case DOWNLOAD_SAVEDPAGES:
popup->show(_("IDS_BR_OPT_SAVEDPAGES"), false);
m_webPageUI->loadStarted();
if (m_findOnPageUI->isVisible())
closeFindOnPageUI();
-}
-
-void SimpleUI::progressChanged(double progress)
-{
- m_webPageUI->progressChanged(progress);
+ if (!m_pwa.isActive())
+ m_splash_screen.hide();
}
void SimpleUI::loadFinished()
m_webPageUI->getURIEntry().clearFocus();
}
-void SimpleUI::onURLEntryEditedByUser(const std::shared_ptr<std::string> editedUrlPtr)
-{
- string editedUrl(*editedUrlPtr);
- int historyItemsVisibleMax =
- m_webPageUI->getUrlHistoryList()->getItemsNumberMax();
- int minKeywordLength =
- m_webPageUI->getUrlHistoryList()->getKeywordLengthMin();
- std::shared_ptr<services::HistoryItemVector> result =
- m_historyService->getHistoryItemsByKeywordsString(editedUrl,
- historyItemsVisibleMax, minKeywordLength, true);
- m_webPageUI->getUrlHistoryList()->onURLEntryEditedByUser(editedUrl, result);
-}
-
-void SimpleUI::scrollView(const int& dx, const int& dy)
-{
- m_webEngine->scrollView(dx, dy);
-}
-
void SimpleUI::showFindOnPageUI(const std::string& str)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_findOnPageUI);
+ assert(m_findOnPageUI.get());
m_findOnPageUI->show();
- if (!str.empty())
- m_findOnPageUI->set_text(str.c_str());
-}
-
-void SimpleUI::findWord(const struct FindData& fdata)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_webEngine->findWord(fdata.input_str, fdata.forward, fdata.func, fdata.data);
+ m_findOnPageUI->set_text(str.c_str());
}
void SimpleUI::closeFindOnPageUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_findOnPageUI);
+ assert(m_findOnPageUI.get());
+ assert(m_webEngine.get());
if (m_findOnPageUI)
m_findOnPageUI->hideUI();
+ m_webEngine->setBarsShown(true);
}
void SimpleUI::showTabUI()
void SimpleUI::newTabClicked()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (!checkIfCreate())
- return;
showHomePage();
+ m_webPageUI->setShouldOpenNewTab(true);
}
void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
popStackTo(m_webPageUI);
}
-void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_webEngine->closeTab(tabId);
-}
-
-int SimpleUI::tabsCount()
-{
- return m_webEngine->tabsCount();
-}
-
-#if PWA
void SimpleUI::pwaPopupRequest()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
popup->addButton(OK);
popup->addButton(CANCEL);
- popup->buttonClicked.connect(boost::bind(&SimpleUI::pwaPopupButtonClicked, this, _1));
+ popup->addButton(NEVER);
+ popup->buttonClicked.connect(
+ [this](const auto& button){ this->pwaPopupButtonClicked(button); });
popup->setTitle(m_webEngine->getTitle());
popup->setMessage(_("IDS_BR_OPT_ADD_TO_HOME_SCREEN_ABB"));
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
void SimpleUI::pwaPopupButtonClicked(const PopupButtons& button)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto uri = m_webEngine->getURI();
+
switch (button) {
case OK:
- BROWSER_LOGD("[%s:%d] pwaPopup create !", __PRETTY_FUNCTION__, __LINE__);
- m_webEngine->requestManifest();
+ BROWSER_LOGD("[%s:%d] pwaPopup OK !", __PRETTY_FUNCTION__, __LINE__);
+ m_webEngine->setPWAData();
+ m_storageService->getPWAStorage().addPWAItem(uri, 1, 0);
break;
case CANCEL:
- BROWSER_LOGD("[%s:%d] pwaPopup deny !", __PRETTY_FUNCTION__, __LINE__);
+ BROWSER_LOGD("[%s:%d] pwaPopup DENY !", __PRETTY_FUNCTION__, __LINE__);
+ m_storageService->getPWAStorage().addPWAItem(uri, 0, 0);
+ break;
+ case NEVER:
+ BROWSER_LOGD("[%s:%d] pwaPopup NEVER !", __PRETTY_FUNCTION__, __LINE__);
+ m_storageService->getPWAStorage().addPWAItem(uri, 0, 1);
break;
default:
BROWSER_LOGW("[%s:%d] Unknown button type!", __PRETTY_FUNCTION__, __LINE__);
}
}
-#endif
void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation)
{
popup->addButton(CONTINUE);
auto popupData = std::make_shared<CertificatePopupData>();
popupData->cert = cert;
- popup->buttonClicked.connect(boost::bind(&SimpleUI::certPopupButtonClicked, this, _1, popupData));
+ popup->buttonClicked.connect(
+ [=](const auto& button) mutable {
+ this->certPopupButtonClicked(button, popupData);
+ });
popup->setTitle(_("IDS_BR_HEADER_SITE_NOT_TRUSTED_ABB"));
popup->setMessage(_("IDS_BR_BODY_SECURITY_CERTIFICATE_PROBLEM_MSG"));
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
}
popup->addButton(OK);
popup->setTitle("Unsecure connection!");
popup->setMessage("The page which you're trying to open cannot be displayed, unsecure connection detected.");
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto popup = ContentPopup::createPopup(m_viewManager.getContent());
- popup->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
+ popup->isLandscape.connect(
+ [this]{ return this->isLandscape(); });
m_certificateContents->initUI(popup->getMainLayout());
m_certificateContents->setCurrentTabCertData(host, pem, type);
popup->setContent(m_certificateContents->getContent());
popup->addButton(OK);
popup->setTitle(_("IDS_BR_HEADER_SECURITY_CERTIFICATE"));
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto popup = RadioPopup::createPopup(m_viewManager.getContent());
- popup->setTitle(_(Translations::SettingsDefaultSearchEngineTitle.c_str()));
+ popup->setTitle(_(Translations::instance().SettingsDefaultSearchEngineTitle.c_str()));
popup->addRadio(RadioButtons::GOOGLE);
popup->addRadio(RadioButtons::YAHOO);
popup->addRadio(RadioButtons::BING);
- auto stateString = []() -> std::string {
+ auto stateString = [] {
auto sig =
SPSC.getWebEngineSettingsParamString(
basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
return (sig && !sig->empty()) ?
*sig :
- Translations::Google;
+ Translations::instance().Google;
}();
auto state = RadioPopup::translateButtonState(stateString);
popup->setState(state);
static_cast<int>(button));
dismissPopup(popup);
});
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+ popup->popupShown.connect([this](const auto& popup){ this->showPopup(popup); });
popup->popupDismissed.connect(
- boost::bind(&SimpleUI::dismissPopup, this, _1));
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
auto popup = RadioPopup::createPopup(m_viewManager.getContent());
SPSC.settingsSaveContentRadioPopupPtr(popup);
- popup->setTitle(_(Translations::SettingsAdvancedSaveContentTitle.c_str()));
+ popup->setTitle(_(Translations::instance().SettingsAdvancedSaveContentTitle.c_str()));
popup->addRadio(RadioButtons::DEVICE);
popup->addRadio(RadioButtons::SD_CARD);
auto stateString = []() -> std::string {
basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION);
return (sig && !sig->empty()) ?
*sig :
- Translations::Device;
+ Translations::instance().Device;
}();
auto state = RadioPopup::translateButtonState(stateString);
popup->setState(state);
dismissPopup(popup);
SPSC.settingsSaveContentRadioPopupPtr(nullptr);
});
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+ popup->popupShown.connect([this](const auto& popup){ this->showPopup(popup); });
popup->popupDismissed.connect(
- boost::bind(&SimpleUI::dismissPopup, this, _1));
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
-std::string SimpleUI::requestSettingsCurrentPage()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- return m_webEngine->getURI();
-}
-
void SimpleUI::selectSettingsOtherPageChange()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_settingsUI->updateButtonMap();
}
});
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+ popup->popupShown.connect([this](const auto& popup){ this->showPopup(popup); });
popup->popupDismissed.connect(
[this](interfaces::AbstractPopup* popup){
dismissPopup(popup);
m_webEngine->switchToMobileMode();
popStackTo(m_webPageUI);
m_webEngine->reload();
- } else {
- m_quickAccess->setDesktopMode(false);
}
}
if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
m_webEngine->switchToDesktopMode();
m_webEngine->reload();
- } else {
- m_quickAccess->setDesktopMode(true);
}
}
bool state = m_favoriteService->bookmarkExists(uri);
m_bookmarkFlowUI->setState(state);
+ m_bookmarkFlowUI->setQaState(quickAccessExist(uri));
if (state) {
tizen_browser::services::BookmarkItem bookmarkItem;
void SimpleUI::showHomePage()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto stateString = []() -> std::string {
- auto sig =
- SettingsPrettySignalConnector::Instance().
- getWebEngineSettingsParamString(
- basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
- return (sig && !sig->empty()) ?
- *sig :
- SettingsHomePage::DEF_HOME_PAGE;
- }();
- auto it = stateString.find(Translations::CurrentPage);
- if (!stateString.compare(SettingsHomePage::QUICK_PAGE)) {
+
+ auto sig =
+ SettingsPrettySignalConnector::Instance().
+ getWebEngineSettingsParamString(
+ basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
+ auto stateString = (sig && !sig->empty()) ?
+ *sig :
+ SettingsHomePage::DEF_HOME_PAGE;
+
+ auto it = stateString.find(Translations::instance().CurrentPage);
+ if (!stateString.compare(Translations::instance().QuickPage.c_str())) {
switchViewToQuickAccess();
m_quickAccess->showQuickAccess();
return;
- } else if (!stateString.compare(SettingsHomePage::MOST_VISITED_PAGE)) {
+ } else if (!stateString.compare(Translations::instance().MostVisitedPage.c_str())) {
switchViewToQuickAccess();
m_quickAccess->showMostVisited();
return;
} else if (it != std::string::npos) {
- stateString.erase(it, Translations::CurrentPage.length());
+ stateString.erase(it, Translations::instance().CurrentPage.length());
}
auto url = m_webPageUI->getURIEntry().rewriteURI(stateString);
popStackTo(m_webPageUI);
openNewTab(url);
}
-void SimpleUI::redirectedWebPage(const std::string& oldUrl, const std::string& newUrl)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- BROWSER_LOGD("Redirect from %s to %s", oldUrl.c_str(), newUrl.c_str());
- m_historyService->clearURLHistory(oldUrl);
-}
-
void SimpleUI::settingsDeleteSelectedData(const std::map<int, bool>& options)
{
BROWSER_LOGD("[%s]: Deleting selected data", __func__);
- M_ASSERT(m_viewManager);
+ assert(m_viewManager.get());
bool isSelected = false;
for (auto& it : options) {
if (it.second) {
TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
popup->addButton(OK);
popup->addButton(CANCEL);
- popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteSelectedDataButton, this, _1, options));
+ popup->buttonClicked.connect(
+ [&, this](const auto& button){ this->onDeleteSelectedDataButton(button, options); });
popup->setTitle("Delete");
popup->setMessage("The selected web browsing data will be deleted.");
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
}
if (it.first == BROWSING_HISTORY && it.second) {
BROWSER_LOGD("clear history" );
m_historyService->clearAllHistory();
+ m_storageService->getPWAStorage().deletePWAItems();
} else if (it.first == CACHE && it.second) {
BROWSER_LOGD("clear cache");
m_webEngine->clearCache();
m_webEngine->clearPasswordData();
} else if (it.first == DEL_PERS_AUTO_FILL && it.second) {
BROWSER_LOGD("clear autofill forms");
- m_webEngine->clearFormData();
SPSC.autoFillCleared();
+ m_webEngine->clearFormData();
} else if (it.first == LOCATION && it.second) {
BROWSER_LOGD("clear location");
}
void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button)
{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- if (button == CLOSE_TAB) {
- BROWSER_LOGD("[%s]: CLOSE TAB", __func__);
- closeTab();
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ if (button == OK) {
+ BROWSER_LOGD("[%s:%d] Closing oldest tab and opening requested", __PRETTY_FUNCTION__, __LINE__);
+ if (m_tabUI->getPopupDecision())
+ m_storageService->getSettingsStorage().setSettingsBool(TAB_LIMIT_DECISION, true);
+ closeOldestTab();
+ switchToTab(m_webEngine->openRequestedPage());
}
+ while (m_popupVector.size() > 1)
+ m_popupVector.front()->onBackPressed();
}
-void SimpleUI::tabCreated()
+std::string SimpleUI::createSearchQuery(const std::string& text)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ const std::string searchEngine = [this] {
+ auto sig =
+ SPSC.getWebEngineSettingsParamString(
+ basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
+ return (sig && !sig->empty()) ?
+ *sig :
+ Translations::instance().Google;
+ }();
- int tabs = m_webEngine->tabsCount();
- m_webPageUI->setTabsNumber(tabs);
+ return SearchEngineTranslation::createSearchQuery(text, searchEngine);
}
bool SimpleUI::checkIfCreate()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- int tabs = m_webEngine->tabsCount();
+ if (m_webEngine->tabsCount() >= m_tabLimit) {
+ if (m_storageService->getSettingsStorage().getSettingsBool(TAB_LIMIT_DECISION, false)) {
+ closeOldestTab();
+ return true;
+ }
- if (tabs >= m_tabLimit) {
- TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
+ ContentPopup* popup = ContentPopup::createPopup(m_viewManager.getContent());
+ popup->addButton(CANCEL);
popup->addButton(OK);
- popup->buttonClicked.connect(boost::bind(&SimpleUI::tabLimitPopupButtonClicked, this, _1));
- popup->setTitle(_("Maximum tab count reached"));
- popup->setMessage("Close other tabs to open another new tab");
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->buttonClicked.connect(
+ [this](const auto& button){ this->tabLimitPopupButtonClicked(button); });
+ popup->setTitle("IDS_BR_HEADER_COULDNT_OPEN_NEW_TAB_ABB");
+ popup->setContent(m_tabUI->getPopupContent(popup->getMainLayout()));
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
return false;
- }
- else
+ } else
return true;
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_webEngine->changeState();
-#if PWA
- if (!m_alreadyOpenedPWA)
-#endif
- m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
+ m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
updateView();
-
-}
-
-void SimpleUI::windowCreated()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- switchViewToWebPage();
-}
-
-void SimpleUI::minimizeBrowser()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_win_lower(main_window);
}
void SimpleUI::engineTabClosed(const basic_webengine::TabId& id)
switchViewToWebPage();
}
-void SimpleUI::searchWebPage(std::string &text, int flags)
-{
- m_webEngine->searchOnWebsite(text, flags);
-}
-
-void SimpleUI::showPasswordUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- pushViewToStack(m_tabUI->getPasswordUI());
-}
-
void SimpleUI::onFirstSecretMode()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
popup->addButton(OK);
popup->setTitle(_("IDS_BR_HEADER_DONT_USE_PASSWORD_ABB"));
- popup->setMessage("To protect your Secret mode data, create a password. "
- "If you Use Secret mode without creating a password, you will not be able to "
- "prevent others from viewing your browser and search history, bookmarks, And saved pages.");
- popup->buttonClicked.connect(boost::bind(&TabUI::switchToSecretFirstTime, m_tabUI.get()));
- popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
- popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+ popup->setMessage(_("IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"));
+ popup->buttonClicked.connect(
+ [this](const auto&){ m_tabUI->switchToSecretFirstTime(); });
+ popup->popupShown.connect(
+ [this](const auto& popup){ this->showPopup(popup); });
+ popup->popupDismissed.connect(
+ [this](const auto& popup){ this->dismissPopup(popup); });
popup->show();
}
if (m_favoriteService) {
if (m_webEngine && !m_webEngine->getURI().empty()) {
const int THUMB_HEIGHT = boost::any_cast<int>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_HEIGHT));
+ Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_HEIGHT));
const int THUMB_WIDTH = boost::any_cast<int>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_WIDTH));
+ Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_WIDTH));
m_favoriteService->addBookmark(m_webEngine->getURI(), bookmark_update.title, std::string(),
m_webEngine->getSnapshotData(THUMB_WIDTH, THUMB_HEIGHT, tools::SnapshotType::ASYNC_BOOKMARK),
m_webEngine->getFavicon(), bookmark_update.folder_id);
ret ?
"Bookmark deletion has failed!" :
"Bookmark has been deleted successfully.");
- auto toast(tools::EflTools::createToastPopup(
- m_viewManager.getContent(),
- 3.0,
- text));
- evas_object_show(toast);
+ tools::EflTools::createToastPopup(text);
}
void SimpleUI::settingsOverrideUseragent(const std::string& userAgent)
_("IDS_BR_SK_DONE"),
_("IDS_BR_SK_CANCEL_ABB"));
inputPopup->button_clicked.connect(
- boost::bind(&SimpleUI::onOverrideUseragentButton, this, _1));
+ [this](const auto& ua){ this->onOverrideUseragentButton(ua); });
inputPopup->popupShown.connect(
- boost::bind(&SimpleUI::showPopup, this, _1));
+ [this](const auto& popup){ this->showPopup(popup); });
inputPopup->popupDismissed.connect(
- boost::bind(&SimpleUI::dismissPopup, this, _1));
+ [this](const auto& popup){ this->dismissPopup(popup); });
inputPopup->show();
}
else {
#include "AbstractContextMenu.h"
#include "AbstractMainWindow.h"
#include "AbstractService.h"
-#include "AbstractFavoriteService.h"
-#include "ServiceFactory.h"
#include "service_macros.h"
-
-// components
-#include "WebPageUI.h"
-#include "AbstractWebEngine.h"
-#include "TabOrigin.h"
-#include "HistoryUI.h"
-#include "FindOnPageUI.h"
-#include "SettingsUI.h"
-#include "SettingsMain.h"
-#include "SettingsHomePage.h"
-#include "SettingsPrivacy.h"
-#include "SettingsManager.h"
-#include "TextPopup_mob.h"
-#include "QuickAccess.h"
-#include "TabUI.h"
-#include "TabId.h"
-#include "HistoryService.h"
#include "TabServiceTypedef.h"
-#include "BookmarkFlowUI.h"
-#include "BookmarkManagerUI.h"
-#include "PlatformInputManager.h"
-#include "StorageService.h"
-#include "CertificateContents.h"
// other
-#include "Action.h"
-#include "InputPopup.h"
-#include "SimplePopup.h"
-#include "ContentPopup_mob.h"
-#include "WebConfirmation.h"
-#include "ViewManager.h"
-#include "MenuButton.h"
-#include "NaviframeWrapper.h"
-#if PWA
-#include "ProgressiveWebApp.h"
-#endif
#include <functional>
#include <future>
-#define CONNECT_COUNT 2
+const int CONNECT_COUNT = 2;
namespace tizen_browser{
+
+namespace basic_webengine {
+class AbstractWebEngine;
+class TabOrigin;
+class TabId;
+class WebConfirmation;
+}
+
+namespace services {
+class HistoryService;
+class PlatformInputManager;
+class StorageService;
+class CertificateContents;
+class BookmarkService;
+}
+
namespace base_ui{
+class WebPageUI;
+class WebPageMin;
+class HistoryUI;
+class FindOnPageUI;
+class SettingsUI;
+class SettingsManager;
+class QuickAccess;
+class TabUI;
+class BookmarkFlowUI;
+class BookmarkManagerUI;
+class Action;
+class InputPopup;
+class ContentPopup;
+class ViewManager;
+class MenuButton;
+class NaviframeWrapper;
+class ProgressiveWebApp;
+class SplashScreen;
template <>
void AbstractMainWindow<Evas_Object>::setMainWindow(Evas_Object * rawPtr)
{
public:
SimpleUI(/*Evas_Object *window*/);
- virtual ~SimpleUI();
- virtual int exec(
+ virtual ~SimpleUI() { evas_object_del(m_window.get()); };
+ int exec(
const std::string& _url,
const std::string& _caller,
const std::string& _operation) final override;
- virtual std::string getName() final override;
- void suspend();
- void resume();
- void destroyUI();
+ std::string getName() final override;
+ void suspend() final override { m_webEngine->suspend(); };
+ void resume() final override;
+ void languageChanged() final override { m_languageChanged = true; };
+ void destroyUI() final override { m_webEngine->destroyTabs(); };
enum class rotationLock {
noLock = 0,
};
private:
+ void showSplashScreen();
+ void hideSplashScreen();
// setup functions
void prepareServices();
-#if PWA
- std::string preparePWA(const std::string& url);
+ void preparePWAServices();
void countCheckUrl();
-#endif
void loadUIServices();
void connectUISignals();
+ void connectPWASignals();
void loadModelServices();
void initModelServices();
void initUIServices();
void pushViewToStack(const sAUI& view);
void popTheStack();
void popStackTo(const sAUI& view);
- void faviconChanged(tools::BrowserImagePtr favicon);
void restoreLastSession();
- Evas_Object* createWebLayout(Evas_Object* parent);
- Evas_Object* createErrorLayout(Evas_Object* parent);
-
- void forwardEnable(bool enable);
void downloadStarted(int status);
void loadFinished();
- void progressChanged(double progress);
void loadStarted();
- void setErrorButtons();
-
- void bookmarkAdded();
- void bookmarkDeleted();
-
- void showQuickAccess();
void switchViewToQuickAccess();
void switchViewToWebPage();
void updateView();
void changeEngineState();
- void windowCreated();
- void minimizeBrowser();
+ void minimizeBrowser() { elm_win_lower(m_main_window); };
void openNewTab(const std::string &uri, const std::string& title =
std::string(), const boost::optional<int> adaptorId = boost::none,
bool desktopMode = false,
void switchToTab(const tizen_browser::basic_webengine::TabId& tabId);
void newTabClicked();
void tabClicked(const tizen_browser::basic_webengine::TabId& tabId);
- void closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId);
- void tabCreated();
bool checkIfCreate();
void engineTabClosed(const basic_webengine::TabId& id);
- std::shared_ptr<services::HistoryItemVector> getHistory();
- std::shared_ptr<services::HistoryItemVector> getMostVisitedItems();
- void setMostVisitedFrequencyValue(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem,
- int visitFrequency);
-
void onBookmarkClicked(services::SharedBookmarkItem bookmarkItem);
void onNewQuickAccessClicked();
void addQuickAccessItem(const std::string &urlArg, const std::string &titleArg);
- void onQuickAccessDeleted(services::SharedQuickAccessItem quickaccessItem);
void editQuickAccess();
void deleteMostVisited();
void onBookmarkEdit(services::SharedBookmarkItem bookmarkItem);
- void onBookmarkOrderEdited(services::SharedBookmarkItem bookmarkItem);
- void onBookmarkDeleted(services::SharedBookmarkItem bookmarkItem);
void onNewFolderClicked(int parent);
void onNewFolderPopupClick(const std::string& folder_name, int parent);
- void onDeleteFolderClicked(const std::string& folder_name);
- void onRemoveFoldersClicked(services::SharedBookmarkItemList items);
void onEditFolderPopupClicked(const std::string& newName, services::SharedBookmarkItem item);
- void onDeleteFolderPopupClicked(PopupButtons button);
+ void hideBottomBar(const bool& state);
static void onUrlIMEOpened(void* data, Evas_Object*, void*);
static void onUrlIMEClosed(void* data, Evas_Object*, void*);
- void onHistoryRemoved(const std::string& uri);
- void openURLhistory(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
- void openURLquickaccess(services::SharedQuickAccessItem quickaccessItem, bool desktopMode);
- /**
- * @brief Handles 'openUrlInNewTab' signals. Uses QuickAccess to indicate
- * desktop/mobile mode.
- * TODO: desktop mode should be checked in WebView or QuickAcces (depends
- * on which view is active)
- */
void openURL(const std::string& url);
void openURL(const std::string& url, const std::string& title, bool desktopMode);
void onClearHistoryAllClicked();
- void onDeleteHistoryItems(int id);
-
- void onMostVisitedClicked();
- void onQuickAccessClicked();
/**
* @brief Handles 'generateThumb' signals.
*/
void onGenerateThumb(basic_webengine::TabId tabId);
- void onGenerateFavicon(basic_webengine::TabId tabId);
void onSnapshotCaptured(std::shared_ptr<tools::BrowserImage> snapshot, tools::SnapshotType snapshot_type);
- void onCreateTabId();
- void authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
void certPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
- void onActionTriggered(const Action& action);
void onMenuButtonPressed();
void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation);
- void setwvIMEStatus(bool status);
-#if PWA
+ void setwvIMEStatus(bool status) { m_wvIMEStatus = status; };
void pwaPopupRequest();
void pwaPopupButtonClicked(const PopupButtons& button);
-#endif
sharedAction m_showBookmarkManagerUI;
*/
void filterURL(const std::string& url);
- // on uri entry widget "changed,user" signal
- void onURLEntryEditedByUser(const std::shared_ptr<std::string> editedUrlPtr);
- // on uri entry widget "changed" signal
- void onURLEntryEdited();
-
- void onmostHistoryvisitedClicked();
- void onBookmarkvisitedClicked();
-
/**
* @brief Check if the current page exists as a bookmark.
*
bool checkBookmark();
/**
- * @brief Check if the current page exists as a quick access.
- *
+ * @brief Check if the page exists as a quick access.
+ * @return True if page exist in QuickAccess database otherwise false.
*/
- bool checkQuickAccess();
+ bool quickAccessExist(const std::string& url) const {
+ return m_storageService->getQuickAccessStorage().quickAccessItemExist(url);
+ };
/**
* @brief Adds current page to bookmarks.
/**
* @brief Remove current page from bookmarks
- *
- * @param ...
- * @return void
*/
void deleteBookmark(void);
void settingsOverrideUseragent(const std::string& userAgent);
void onOverrideUseragentButton(const std::string& newUA);
- void scrollView(const int& dx, const int& dy);
-
void showTabUI();
void refetchTabUIData();
void switchToMobileMode();
void showSettings(unsigned);
void onDefSearchEngineClicked();
void onSaveContentToClicked();
- std::string requestSettingsCurrentPage();
+ std::string requestSettingsCurrentPage() { return m_webEngine->getURI(); };
void selectSettingsOtherPageChange();
- void onEditOtherPagePopupClicked(const std::string& newName);
void showBookmarkFlowUI();
void showFindOnPageUI(const std::string& str);
void showCertificatePopup();
void showCertificatePopup(const std::string& host, const std::string& pem, services::CertificateContents::HOST_TYPE type);
void showUnsecureConnectionPopup();
- void findWord(const struct FindData& fdata);
void closeFindOnPageUI();
- void registerHWKeyCallback();
- void unregisterHWKeyCallback();
-
bool isManualRotation(const sAUI& view);
void enableManualRotation(bool enable);
void rotatePrepared();
void onRotation();
- bool isLandscape();
- int getRotation();
+ bool isLandscape() const { return elm_win_rotation_get(m_main_window) % 180; };
+ int getRotation() const { return elm_win_rotation_get(m_main_window); };
void rotationType(rotationLock lock);
void connectWebPageSignals();
void connectQuickAccessSignals();
void connectBookmarkManagerSignals();
void connectFindOnPageSignals();
void connectWebEngineSignals();
- void connectHistoryServiceSignals();
void connectTabServiceSignals();
void connectPlatformInputSignals();
void connectCertificateSignals();
void connectStorageSignals();
+ std::string handlePushSignal(const char *sender_id, const char* push_data);
+ void createPWANotification(const unsigned& id, const std::string& body);
+
static void __orientation_changed(void* data, Evas_Object*, void*);
- Evas_Object* getMainWindow();
+ Evas_Object* getMainWindow() const { return m_main_window; };
void showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> parent,
BookmarkManagerState state);
void showHomePage();
- void redirectedWebPage(const std::string& oldUrl, const std::string& newUrl);
- void showPopup(interfaces::AbstractPopup* popup);
+ void showPopup(interfaces::AbstractPopup* popup) { m_popupVector.push_back(popup); };
void dismissPopup(interfaces::AbstractPopup* popup);
- void closeTab();
+ void closeOldestTab() { closeTab(m_webEngine->oldestTabId()); };
+ void closeTab() { closeTab(m_webEngine->currentTabId()); };
void closeTab(const tizen_browser::basic_webengine::TabId& id);
void settingsDeleteSelectedData(const std::map<int, bool>& option);
- void settingsResetMostVisited();
- void settingsResetBrowser();
void onDeleteSelectedDataButton(const PopupButtons& button, const std::map<int, bool>& options);
- void onDeleteMostVisitedButton(std::shared_ptr<PopupData> popupData);
- void onResetBrowserButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
void tabLimitPopupButtonClicked(PopupButtons button);
- int tabsCount();
+ int tabsCount() const { return m_webEngine->tabsCount(); };
+ std::string createSearchQuery(const std::string& text);
- void onReturnPressed(MenuButton *m);
+ void onXF86MenuPressed();
void onXF86BackPressed();
void onBackPressed();
+ void onPWABackPressed();
- void searchWebPage(std::string &text, int flags);
- void showPasswordUI();
void onFirstSecretMode();
- std::string edjePath(const std::string &);
-
std::vector<interfaces::AbstractPopup*> m_popupVector;
-
std::shared_ptr<WebPageUI> m_webPageUI;
+ std::shared_ptr<WebPageMin> m_webPageMin;
std::shared_ptr<basic_webengine::AbstractWebEngine> m_webEngine;
- std::shared_ptr<interfaces::AbstractFavoriteService> m_favoriteService;
+ std::shared_ptr<services::BookmarkService> m_favoriteService;
std::shared_ptr<services::HistoryService> m_historyService;
services::TabServicePtr m_tabService;
-
std::shared_ptr<BookmarkFlowUI> m_bookmarkFlowUI;
std::shared_ptr<FindOnPageUI> m_findOnPageUI;
std::shared_ptr<services::CertificateContents> m_certificateContents;
std::shared_ptr<services::PlatformInputManager> m_platformInputManager;
std::shared_ptr<services::StorageService> m_storageService;
bool m_initialised;
- std::string m_caller;
int m_tabLimit;
- int m_favoritesLimit;
+ unsigned m_qaLimit;
bool m_wvIMEStatus;
std::string m_folder_name;
//helper object used to view management
ViewManager m_viewManager;
- Evas_Object *main_window;
-#if PWA
+ Evas_Object *m_main_window;
+ SplashScreen m_splash_screen;
ProgressiveWebApp m_pwa;
- bool m_alreadyOpenedPWA;
-#endif
- SharedNaviframeWrapper m_QAEditNaviframe;
- Evas_Object *m_conformant;
bool m_manualRotation;
int m_current_angle;
int m_temp_angle;
std::function<void()> m_functionViewPrepare;
- std::future<void> m_futureView;
bool m_alreadyOpenedExecURL;
+ bool m_languageChanged;
+ std::string m_last_noti_sender;
+
+ static const std::string TAB_LIMIT_DECISION;
};
}
--- /dev/null
+#include "BrowserLogger.h"
+#include "ProgressiveWebApp.h"
+#include "SplashScreen.h"
+#include "app_common.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+SplashScreen::SplashScreen()
+ : m_main_window(nullptr)
+ , m_background(nullptr)
+ , m_image(nullptr)
+ , m_label(nullptr)
+ , m_visible(false)
+{}
+
+SplashScreen::~SplashScreen()
+{
+ if (m_label)
+ evas_object_del(m_label);
+ if (m_image)
+ evas_object_del(m_image);
+ if (m_background)
+ evas_object_del(m_background);
+}
+
+void SplashScreen::show(const ProgressiveWebApp& pwa)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_visible = true;
+ int width, height;
+ auto landscape = isLandscape();
+ if (!landscape) {
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+
+ if (*landscape)
+ elm_win_screen_size_get(m_main_window, nullptr, nullptr, &height, &width);
+ else
+ elm_win_screen_size_get(m_main_window, nullptr, nullptr, &width, &height);
+
+ m_background = elm_bg_add(m_main_window);
+ evas_object_resize(m_background, width, height);
+ if (pwa.isActive() && pwa.getPWAinfo().backgroundColor > 0)
+ elm_bg_color_set(
+ m_background,
+ pwa.getPWAinfo().backgroundR,
+ pwa.getPWAinfo().backgroundG,
+ pwa.getPWAinfo().backgroundB);
+ else
+ elm_bg_color_set(m_background, 255, 255, 255);
+ evas_object_show(m_background);
+
+ m_label = elm_label_add(m_background);
+ if (pwa.isActive()) {
+ elm_object_text_set(m_label,
+ (std::string("<align=center><font=Tizen:style=Bold font_size=35>") +
+ pwa.getPWAinfo().name +
+ std::string("</font></align>")).c_str());
+ evas_object_resize(m_label, width, 60);
+ evas_object_move(m_label, 0, height * 0.75);
+ evas_object_show(m_label);
+ }
+
+ m_image = elm_image_add(m_background);
+ std::string image_path;
+ if (pwa.isActive()) {
+ evas_object_move(m_image, 0.5 * width - 128., 0.5 * height - 128.);
+ width = height = 256;
+ image_path = std::string(app_get_shared_data_path());
+ image_path += pwa.getPWAinfo().icon.substr(
+ pwa.getPWAinfo().icon.find_last_of("/"), pwa.getPWAinfo().icon.length());
+ } else {
+ image_path = std::string(ICONDIR);
+ image_path += std::string(*landscape ? "/landscape.png" : "/portrait.png");
+ }
+ elm_image_file_set(m_image, image_path.c_str(), nullptr);
+ evas_object_resize(m_image, width, height);
+ evas_object_show(m_image);
+
+ updateManualRotation();
+}
+
+void SplashScreen::hide()
+{
+ if (!m_visible)
+ return;
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_visible = false;
+ if (m_image) {
+ evas_object_del(m_image);
+ m_image = nullptr;
+ }
+ if (m_label) {
+ evas_object_del(m_label);
+ m_label = nullptr;
+ }
+ if (m_background) {
+ evas_object_del(m_background);
+ m_background = nullptr;
+ }
+ updateManualRotation();
+}
+
+}
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * NaviframeLWrapper.h
+ *
+ * Created on: Jan 12, 2017
+ * Author: m.kawonczyk@samsung.com
+ */
+
+#ifndef SPLASHSCREEN_H
+#define SPLASHSCREEN_H
+
+#include "AbstractRotatable.h"
+#include <Elementary.h>
+#include <Evas.h>
+
+namespace tizen_browser{
+namespace base_ui{
+class ProgressiveWebApp;
+
+class SplashScreen
+ : public interfaces::AbstractRotatable
+{
+public:
+ SplashScreen();
+ ~SplashScreen();
+
+ void init(Evas_Object * parent) { m_main_window = parent; }
+ bool isVisible() const { return m_visible; }
+ void hide();
+ void show(const tizen_browser::base_ui::ProgressiveWebApp &pwa);
+ void orientationChanged() override {};
+
+ boost::signals2::signal<void ()> updateManualRotation;
+private:
+ Evas_Object * m_main_window;
+ Evas_Object * m_background;
+ Evas_Object * m_image;
+ Evas_Object * m_label;
+ bool m_visible;
+};
+
+}
+}
+
+#endif // SPLASHSCREEN_H
-#include "TextPopup_mob.h"
+#include "TextPopup.h"
#include "ServiceManager.h"
#include "AbstractMainWindow.h"
#include <stdio.h>
TextPopup::TextPopup(Evas_Object* parent)
: m_parent(parent)
, m_popup(nullptr)
+ , m_edjFilePath(std::string(EDJE_DIR) + std::string("SimpleUI/TextPopup.edj"))
+ , m_defaultBackButton(NONE)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("SimpleUI/TextPopup.edj");
elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
}
, m_popup(nullptr)
, m_title(title)
, m_message(message)
+ , m_edjFilePath(std::string(EDJE_DIR) + std::string("SimpleUI/TextPopup.edj"))
+ , m_defaultBackButton(NONE)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("SimpleUI/TextPopup.edj");
elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
}
void TextPopup::show()
{
- createLayout();
+ if (!m_popup)
+ createLayout();
popupShown(this);
}
BROWSER_LOGD("data is null ");
}
+void TextPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+ auto self = static_cast<TextPopup*>(data);
+ self->dismiss();
+}
+
void TextPopup::setTitle(const std::string& title)
{
m_title = title;
elm_object_translatable_part_text_set(m_popup, "default", m_message.c_str());
elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
+ evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
for (size_t i = 0; i < m_buttons.size(); ++i) {
auto buttonString = std::string("button") + std::to_string(i+1);
auto btn = elm_button_add(m_popup);
tools::EflTools::setExpandHints(btn);
- elm_object_text_set(btn, _(buttonsTranslations[m_buttons[i].m_type].c_str()));
+ elm_object_translatable_text_set(btn, buttonsTranslations[m_buttons[i].m_type].c_str());
evas_object_smart_callback_add(btn, "clicked", _response_cb, (void*) this);
elm_object_part_content_set(m_popup, buttonString.c_str(), btn);
evas_object_show(btn);
void setContent(Evas_Object* content);
void addButton(const PopupButtons& button, bool dismissOnClick = true, bool defaultBackButton = false);
void createLayout();
- boost::signals2::signal<void (PopupButtons)> buttonClicked;
+ boost::signals2::signal<void (const PopupButtons&)> buttonClicked;
~TextPopup();
private:
- TextPopup(Evas_Object* parent);
+ explicit TextPopup(Evas_Object* parent);
TextPopup(Evas_Object* parent, const std::string& title, const std::string& message);
static void _response_cb(void* data, Evas_Object* obj, void* event_info);
+ static void _dismiss_cb(void* data, Evas_Object* obj, void*);
struct Button {
Button(PopupButtons type, bool dismissOnClick)
std::string m_title;
std::string m_message;
std::string m_edjFilePath;
- PopupButtons m_defaultBackButton = NONE;
+ PopupButtons m_defaultBackButton;
};
}
+++ /dev/null
-#define DEVELOPMENT 0
-
-#define BUTTON_HEIGHT 120
-#define TITLE_HEIGHT 127
-#define TITLE_TEXT_OFFSET_X 0
-#define TITLE_TEXT_OFFSET_Y 44
-#define TITLE_TEXT_HEIGHT 45
-#define MESSAGE_OFFSET_X 44
-#define MESSAGE_OFFSET_TOP 26
-#define MESSAGE_OFFSET_BOT 52
-#define BUTTON_TEXT_OFFSET_X 50
-#define BUTTON_TEXT_OFFSET_Y 40
-#define BUTTON_TEXT_WIDTH 260
-#define BUTTON_TEXT_HEIGHT 40
-
-collections { base_scale: 2.6;
-
- group {
- name: "text_popup_layout";
- data.item: "contents" "ok_button_click cancel_button_click";
- styles {
- style {
- name: "title_text_style";
- base: "font=Tizen:style=Regular font_size=45 wrap=none color=#389ae9 align=0.5 ellipsis=1";
- }
- }
- parts {
- rect {
- name: "bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 0 0 0 102.4;
- align: 0.5 1.0;
- min: 0 0;
- max: -1 -1;
- fixed: 0 0;
- rel1.relative: 0.0 0.2;
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "title_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- align: 0 0;
- min: 0 TITLE_HEIGHT;
- max: -1 TITLE_HEIGHT;
- align: 0 0;
- rel1 {
- relative: 0 0;
- to: "bg";
- }
- rel2 {
- relative: 1 1;
- to: "bg";
- }
- }
- }
- rect {
- name: "title_text_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- min: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
- max: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 {
- relative: 0.0 0.0;
- to: "title_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "title_bg";
- }
- }
- }
- rect {
- name: "title_text_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 182 193 255; //lightpink
- align: 0.0 0.0;
- min: 0 TITLE_TEXT_HEIGHT;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 1 1;
- to: "title_text_spacer";
- }
- rel2 {
- relative: 1 1;
- to: "title_bg";
- }
- }
- }
- part {
- name: "title_text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.0 0.0;
- fixed: 0 0;
- rel1 {
- relative: 0.0 0.0;
- to: "title_text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "title_text_bg";
- }
- text {
- style: "title_text_style";
- align: 0 0;
- }
- }
- }
-
- rect {
- name: "buttons_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 0 255 255 255;
- align: 0.5 1;
- min: 0 BUTTON_HEIGHT;
- max: -1 BUTTON_HEIGHT;
- fixed: 0 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "buttons_swallow";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- fixed: 0 0;
- align: 0.0 0.0;
- visible: 1;
- rel1 {
- relative: 0.0 0.0;
- to: "buttons_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "buttons_bg";
- }
- }
- }
- rect {
- name: "popup_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- min: 0 0;
- max: -1 -1;
- fixed: 0 0;
- align: 0 0;
- rel1 {
- relative: 0 1;
- to: "title_bg";
- }
- rel2 {
- relative: 1 0;
- to: "buttons_bg";
- }
- }
- }
- rect {
- name: "text_spacer_0";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 0 0 70 255;
- min: MESSAGE_OFFSET_X 0;
- max: MESSAGE_OFFSET_X 0;
- fixed: 1 1;
- align: 0 0;
- rel1 {
- relative: 0 0;
- to: "popup_bg";
- }
- rel2 {
- relative: 1 1;
- to: "popup_bg";
- }
- }
- }
- rect {
- name: "text_spacer_1";
- scale: 1;
- description {
- state: "default" 0.0;
- color: 50 0 50 255;
- visible: DEVELOPMENT;
- min: MESSAGE_OFFSET_X MESSAGE_OFFSET_BOT;
- max: MESSAGE_OFFSET_X MESSAGE_OFFSET_BOT;
- fixed: 1 1;
- align: 1 1;
- rel1 {
- relative: 0 0;
- to: "popup_bg";
- }
- rel2 {
- relative: 1 1;
- to: "popup_bg";
- }
- }
- }
- part {
- name: "content_swallow";
- scale: 1;
- type: SWALLOW;
- description {
- state: "default" 0.0;
- visible: 1;
- min: 0 38;
- max: -1 -1;
- align: 0 0;
- rel1 {
- relative: 1 1;
- to: "text_spacer_0";
- }
- rel2 {
- relative: 0 0;
- to: "text_spacer_1";
- }
- }
- }
- }
- }
- group {
- name: "elm/button/base/text-popup-button";
- styles {
- style {
- name: "button_text_style";
- base: "font=Tizen:style=Regular font_size=40 wrap=word color=#141414 align=0.5";
- }
- style {
- name: "button_text_style_dissabled";
- base: "font=Tizen:style=Regular font_size=40 wrap=word color=#C0C0C0 align=0.5";
- }
- }
- parts {
- rect {
- name: "bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 244 244 244 255;
- min: 0 0;
- max: -1 -1;
- fixed: 0 0;
- }
- description {
- state: "pressed" 0.0;
- inherit: "default" 0.0;
- color: 224 237 251 255;
- }
- }
- rect {
- name: "divider_horizontal";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.5 0.0;
- color: 0 0 0 38.4;
- min: 0 1;
- max: -1 1;
- fixed: 0 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- rect {
- name: "divider_vertical";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0.0 0.0;
- color: 0 0 0 38.4;
- min: 1 0;
- max: 1 -1;
- fixed: 1 0;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- description {
- state: "visible" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- rect {
- name: "text_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- align: 0.0 0.0;
- color: 255 0 255 255; //magenta
- min: 0 BUTTON_TEXT_HEIGHT;
- max: -1 -1;
- rel1 {
- relative: 0 0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "elm.text";
- type: TEXTBLOCK;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "text_bg";
- }
- text {
- style: "button_text_style";
- align: 0.5 0.5;
- }
- }
- description {
- state: "dissabled" 0.0;
- inherit: "default";
- text.style: "button_text_style_dissabled";
- }
- }
- rect {
- name: "over";
- scale: 1;
- mouse_events: 1;
- repeat_events: 0;
- description {
- state: "default" 0.0;
- visible: 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- color: 0 0 0 0;
- }
- }
- }
- programs {
- program {
- name: "visible";
- source: "ui";
- signal: "visible";
- action: STATE_SET "visible" 0.0;
- target: "divider_vertical";
- }
- program {
- name: "dissabled";
- source: "ui";
- signal: "dissabled";
- action: STATE_SET "dissabled" 0.0;
- target: "elm.text";
- }
- program {
- name: "enabled";
- source: "ui";
- signal: "enabled";
- action: STATE_SET "default" 0.0;
- target: "elm.text";
- }
- program {
- name: "down";
- source: "over";
- signal: "mouse,down,*";
- action: STATE_SET "pressed" 0.0;
- target: "bg";
- }
- program {
- name: "up";
- source: "over";
- signal: "mouse,up,*";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- program {
- name: "mouse_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- emit("elm,action,click", "");
- }
- }
- }
- }
-}
+++ /dev/null
-#define CONTENT_HEIGHT 99;
-#define CONTENT_BG_HEIGHT (CONTENT_HEIGHT+294);
-#define DEBUG_RECT_OVER(over_part, r, g, b) \
- part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \
- \
-scale:1; \
- type : RECT; \
- repeat_events: 1; \
- description { \
- state: "default" 0.0; \
- visible: 1; \
- color: r g b 128; \
- rel1 { to: over_part; relative: 0 0; } \
- rel2 { to: over_part; relative: 1 1; } \
- } \
- }
-collections{
-
-#if PROFILE_MOBILE
- base_scale: 2.6;
-#else
- base_scale: 2.0;
-#endif
-
- group { name: "own_popup";
- images{
- image: "modal_dialogs_bg.png" COMP;
- image: "modal_dialogs_title_bg.png" COMP;
- }
- parts{
-part{ name: "content_bg";
- type: IMAGE;
- scale: 1;
- description{
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- color: 255 255 255 255;
- align: 0 0;
- min: 688 0;
- max: 688 1000;
- rel1 {relative: 0.0 0.0; to: "content"; offset: -79 -148;}
- rel2 {relative: 1.0 1.0; to: "content"; offset: 0 146;}
- image.normal: "modal_dialogs_bg.png";
- image.border: 18 18 15 21;
- image.border_scale: 1;
- image.middle: 1;
- fill {
- type: SCALE;
- smooth: 0;
- origin {
- relative: 0 0;
- offset: 0 0;
- }
- size {
- relative: 1 1;
- offset: 0 0;
- }
- }
- }
- }
- part{ name: "title_bg";
- type: IMAGE;
- scale: 1;
- description{
- state: "default" 0.0;
- visible: 1;
- color: 42 76 130 255;
- min: 670 84;
- max: 670 84;
- align: 0.5 0;
- rel1 {relative: 0.0 0.0; to: "content_bg"; offset: 0 0;}
- rel2 {relative: 1.0 1.0; to:"content_bg";}
- image.normal: "modal_dialogs_title_bg.png";
- image.border: 9 9 9 0 ;
- image.border_scale: 0;
- image.middle: 1;
- fill {
- type: SCALE;
- smooth: 0;
- origin {
- relative: 0 0;
- offset: 0 0;
- }
- size {
- relative: 1 1;
- offset: 0 0;
- }
- }
- }
- }
- part{ name: "title_text";
- type: TEXT;
- scale: 1;
- description{
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- rel1 {relative: 0.0 0.0; to: "title_bg"; offset: 64 0;}
- rel2 {relative: 1.0 1.0; to: "title_bg";}
- align: 0 0;
- min: 542 84;
- max: 542 84;
- text{
- text: "";
- size: 30;
- align: 0.5 0.5;
- }
- }
- }
- part{ name: "content";
- type: SWALLOW;
- scale: 1;
- description{
- state: "default" 0.0;
- visible: 1;
- rel1 {relative: 0.0 0.0;}
- rel2 {relative: 1.0 1.0;}
- fixed: 1 1;
- align: 0.5 0.5;
- min: 542 0;
- max: 542 100;
- }
- }
- part {
- name: "elm.text";
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- rel1 {relative: 0.0 0.0;}
- rel2 {relative: 1.0 1.0;}
- fixed: 1 1;
- align: 0.5 0.5;
- min: 542 0;
- max: 542 150;
- color: 0 0 0 255;
- text {
- size: 30;
- }
- }
- }
- part{
- name: "buttons";
- type: SWALLOW;
- scale: 1;
- description{
- state: "default" 0.0;
- visible: 1;
- rel1 {relative: 0.0 1.0; to: "content_bg";offset: 30 -100;}
- rel2 {relative: 1.0 1.0; to: "content_bg"; offset: -30 -100;}
- align: 0.5 0.0;
- min: 650 70;
- max: 650 70;
- }
- }
- }
- }
-
- group {
- name: "own_popup_long";
- inherit: "own_popup";
- parts {
- part{ name: "content";
- type: SWALLOW;
- scale: 1;
- description{
- state: "default" 0.0;
- visible: 1;
- rel1 {relative: 0.0 0.0;}
- rel2 {relative: 1.0 1.0;}
- fixed: 1 1;
- align: 0.5 0.5;
- min: 542 0;
- max: 542 450;
- }
- }
- }
- }
- /*****************************************************************/
- group {
- name: "elm/button/base/standard_button";
- parts {
- part {
- name: "bg";
- type: RECT;
- scale: 1;
- description { state: "default" 0.0;
- visible: 1;
- align: 0.5 0.5;
- fixed: 1 1;
- color: 225 225 225 255;
- min: 270 70;
- max: -1 70;
- }
- description { state: "focus" 0.0;
- inherit: "default" 0.0;
- color: 69 143 255 255;
- }
- description { state: "dim" 0.0;
- inherit: "default" 0.0;
- color: 225 225 225 102;
- }
- }
- part {
- name: "elm.text";
- type: TEXT;
- scale: 1;
- description { state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- align: 0.5 0.5;
- min: 250 70;
- rel1 { relative: 0.0 0.0; to: "bg"; offset: 30 0;}
- rel2 { relative: 1.0 1.0; to: "bg"; offset: -30 0;}
- color: 89 89 89 255;
- text {
- text: "dshfj";
- font: "font_name";
- size: 30;
- align: 0.5 0.5;
- min: 1 1;
- }
- }
- description { state: "focus" 0.0;
- inherit: "default" 0.0;
- color: 255 255 255 255;
- text.font: "Tizen:style=Bold";
- }
- description { state: "dim" 0.0;
- inherit: "default" 0.0;
- color: 89 89 89 102;
- }
- }
- part {
- name: "over";
- scale:1;
- mouse_events: 1;
- type: RECT;
- description {
- state: "default" 0.0;
- visible: 1;
- rel1 { relative: 0.0 0.0; to: "bg";}
- rel2 { relative: 1.0 1.0; to: "bg";}
- color: 0 0 0 0;
- }
- }
- }
- programs{
- program {
- name: "mouse_in";
- signal: "mouse,in";
- source: "over";
- action: STATE_SET "focus" 0.0;
- target: "elm.text";
- target: "bg";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"elm.text", st, 30, vl);
- if(!strcmp(st, "default")) {
- set_state(PART:"bg", "focus", 0.0);
- set_state(PART:"elm.text", "focus", 0.0);
- }
- }
- }
- program {
- name: "mouse_out";
- signal: "mouse,out";
- source: "over";
- action: STATE_SET "default" 0.0;
- target: "elm.text";
- target: "bg";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"elm.text", st, 30, vl);
- if(!strcmp(st, "focus")) {
- set_state(PART:"bg", "visible", 0.0);
- set_state(PART:"elm.text", "visible", 0.0);
- }
- }
- }
- program {
- name: "mouse_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- emit("elm,action,click", "");
- }
- }
- program {
- name: "disable";
- signal: "elm,state,disabled";
- source: "elm";
- action: STATE_SET "dim" 0.0;
- target: "elm.text";
- target: "bg";
- }
- program {
- name: "enable";
- signal: "elm,state,enabled";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.text";
- target: "bg";
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-#include "../../../core/Tools/edc/InvisibleButton.edc"
-
-#define DEVELOPMENT 0
-
-#define WIDTH 1920
-#define HEIGHT 1080
-#define POPUP_WIDTH 740
-#define POPUP_HEIGHT 388
-#define TITLE_HEIGHT 88
-#define INPUT_HEIGHT 210
-#define BUTTON_HEIGHT 90
-#define BUTTON_WIDTH 370
-#define TITLE_TEXT_OFFSET_X 40
-#define TITLE_TEXT_OFFSET_Y 46
-#define TITLE_TEXT_WIDTH 660
-#define TITLE_TEXT_HEIGHT 42
-#define BUTTON_TEXT_OFFSET_X 30
-#define BUTTON_TEXT_OFFSET_Y 0
-#define BUTTON_TEXT_WIDTH 310
-#define BUTTON_TEXT_HEIGHT 36
-#define MESSAGE_TEXT_OFFSET_X 40
-#define MESSAGE_TEXT_OFFSET_Y 24
-#define MESSAGE_TEXT_WIDTH 660
-#define MESSAGE_TEXT_HEIGHT 32
-#define INPUT_OFFSET_Y 88
-#define INPUT_AREA_HEIGHT 122
-#define INPUT_TEXT_WIDTH 488
-#define INPUT_TEXT_HEIGHT 68
-
-collections{
-
-#if PROFILE_MOBILE
- base_scale: 2.6;
-#else
- base_scale: 2.0;
-#endif
-
- group {
- name: "elm/entry/selection/browser_entry";
- parts {
- part {
- name: "bg";
- scale: 1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 255 255 255 255;
- }
- }
- }
- }
- group {
- name: "elm/entry/cursor/browser_entry";
- parts {
- part {
- name: "bg";
- scale: 1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 10 132 229 255;
- min: 3 60;
- max: 3 60;
- visible: 0;
- }
- description {
- state: "focused" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- name: "focused";
- signal: "elm,action,focus";
- source: "elm";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- }
- program {
- name: "unfocused";
- signal: "elm,action,unfocus";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- }
- }
- group {
- name: "elm/entry/base-single/popup-input-entry";
- styles {
- style {
- name: "input_text_style";
- base: "font=BreezeSans:style=Light font_size=50 wrap=none color=#333333 align=0.0 valign=0.5 ellipsis=1.0"; //68
- tag: "br" "";
- }
- style {
- name: "guide_text_style";
- base: "font=BreezeSans:style=Light font_size=50 wrap=none color=#969696 align=0.0 valign=0.5 ellipsis=1.0"; //68
- tag: "br" "";
- }
- }
- data {
- item: focus_highlight "off";
- }
- parts {
- part {
- name: "bg";
- scale: 1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 244 244 244 255;
- }
- description {
- state: "focused" 0.0;
- color: 224 237 251 255;
- }
- }
- part {
- name: "label.text.clip";
- scale: 1;
- type: RECT;
- description {
- state: "default" 0.0;
- }
- }
- part {
- name: "elm.text";
- scale: 1;
- multiline: 0;
- entry_mode: EDITABLE;
- select_mode: DEFAULT;
- cursor_mode: BEFORE;
- type: TEXTBLOCK;
- clip_to: "label.text.clip";
- source: "elm/entry/selection/browser_entry";
- source4: "elm/entry/cursor/browser_entry";
- description {
- state: "default" 0.0;
- min: 0 INPUT_TEXT_HEIGHT;
- max: -1 INPUT_TEXT_HEIGHT;
- rel1 {
- to: "bg";
- relative: 0.0 0.0;
- }
- rel2.relative: 1.0 1.0;
- align: 0.0 0.0;
- text.style: "input_text_style";
- }
- }
- part {
- name: "elm.guide";
- scale: 1;
- type: TEXTBLOCK;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- rel1 {
- to: "bg";
- relative: 0.0 0.0;
- }
- rel2.relative: 1.0 1.0;
- min: 0 INPUT_TEXT_HEIGHT;
- max: -1 INPUT_TEXT_HEIGHT;
- text {
- text: "Input folder name";
- style: "guide_text_style";
- }
- }
- description {
- state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- }
- programs {
- program {
- name: "focus";
- signal: "load";
- source: "";
- action: FOCUS_SET;
- target: "elm.text";
- }
- program {
- name: "focused";
- signal: "focused";
- source: "ui";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- }
- program {
- name: "unfocused";
- signal: "unfocused";
- source: "ui";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- program {
- name: "gdisabled";
- signal: "elm,guide,disabled";
- source: "elm";
- action: STATE_SET "hidden" 0.0;
- target: "elm.guide";
- }
- program {
- name: "genabled";
- signal: "elm,guide,enabled";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.guide";
- }
- }
- }
- group {
- name: "input-popup-layout";
- styles {
- style {
- name: "title_text_style";
- base: "font=BreezeSans:style=Light font_size=34 wrap=none color=#333333 align=0.5 valign=1.0 ellipsis=1.0";
- }
- }
- parts {
- part {
- name: "dimmed-bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 0 0 0 102;
- align: 0.0 0.0;
- min: WIDTH HEIGHT;
- max: WIDTH HEIGHT;
- fixed: 1 1;
- rel1.relative: 0.0 0.0;
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 198 113 113 255; //salmon
- align: 0.5 0.0; //TODO: 0.5 0.5
- min: POPUP_WIDTH POPUP_HEIGHT;
- max: POPUP_WIDTH POPUP_HEIGHT;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "dimmed-bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "dimmed-bg";
- }
- }
- }
- part {
- name: "title_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- align: 0.5 0.0;
- min: POPUP_WIDTH TITLE_HEIGHT;
- max: POPUP_WIDTH TITLE_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "title_text_spacer";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- min: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
- max: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
- align: 0.0 0.0;
- rel1 {
- relative: 0.0 0.0;
- to: "title_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "title_text_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 182 193 255; //lightpink
- align: 0.0 0.0;
- min: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
- max: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
- rel1 {
- relative: 1.0 1.0;
- to: "title_text_spacer";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "title_text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.0 0.0;
- min: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
- max: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "title_text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "title_text_bg";
- }
- text.style: "title_text_style";
- }
- }
- part {
- name: "input_swallow";
- type: SWALLOW;
- scale: 1;
- mouse_events: 1;
- repeat_events: 1;
- description {
- state: "default" 0.0;
- min: POPUP_WIDTH INPUT_HEIGHT;
- max: POPUP_WIDTH INPUT_HEIGHT;
- align: 0.0 0.0;
- visible: 1;
- rel1 {
- relative: 0.0 1.0;
- to: "title_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "buttons_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 0 255 255 255;
- align: 0.0 0.0;
- min: POPUP_WIDTH BUTTON_HEIGHT;
- max: POPUP_WIDTH BUTTON_HEIGHT;
- rel1 {
- relative: 0.0 1.0;
- to: "input_swallow";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "buttons_swallow";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- min: POPUP_WIDTH BUTTON_HEIGHT;
- max: POPUP_WIDTH BUTTON_HEIGHT;
- align: 0.0 0.0;
- rel1 {
- relative: 0.0 0.0;
- to: "buttons_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "buttons_bg";
- }
- }
- }
- }
- }
- group {
- name: "input-area-layout";
- styles {
- style {
- name: "message_text_normal_style";
- base: "font=Tizen:style=Regular font_size=25 wrap=none color=#686868 align=0.5 valign=1.0 ellipsis=1.0";
- }
- style {
- name: "message_text_highlight_style";
- base: "font=Tizen:style=Regular font_size=25 wrap=none color=#686868 align=0.5 valign=1.0 ellipsis=1.0";
- }
- }
- parts {
- part {
- name: "bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- align: 0.0 0.0;
- min: POPUP_WIDTH INPUT_HEIGHT;
- max: POPUP_WIDTH INPUT_HEIGHT;
- rel1.relative: 0.0 0.0;
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "input_message_spacer";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 0 0 127;
- align: 0.0 0.0;
- min: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
- max: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "input_message_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 202 225 255 255; //lightsteelblue
- align: 0.0 0.0;
- min: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
- max: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
- rel1 {
- relative: 1.0 1.0;
- to: "input_message_spacer";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "input_message_text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- state: "default";
- visible: 1;
- align: 0.0 0.0;
- min: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
- max: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "input_message_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_message_bg";
- }
- text.style: "message_text_normal_style";
- }
- description {
- state: "highlighted" 0.0;
- inherit: "default";
- text.style: "message_text_highlight_style";
- }
- }
- part {
- name: "input_area_spacer";
- type: RECT;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_OFFSET_Y;
- max: 0 INPUT_OFFSET_Y;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "input_area_bg";
- type: RECT;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: POPUP_WIDTH INPUT_AREA_HEIGHT;
- max: POPUP_WIDTH INPUT_AREA_HEIGHT;
- visible: 0;
- color: 224 237 251 255;
- rel1 {
- relative: 1.0 1.0;
- to: "input_area_spacer";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "input_text_bg";
- type: RECT;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.5 0.0;
- min: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
- max: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
- visible: DEVELOPMENT;
- color: 238 229 222 255; //seashell
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_area_bg";
- }
- }
- }
- part {
- name: "input_text_swallow";
- type: SWALLOW;
- scale: 1;
- mouse_events: 1;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
- max: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "input_text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_text_bg";
- }
- }
- }
- }
- }
- group {
- name: "elm/button/base/input-popup-button";
- styles {
- style {
- name: "button_text_style_normal";
- base: "font=BreezeSans:style=Light font_size=29 wrap=none color=#575757 align=0.5 valign=0.5 ellipsis=1.0"; //36
- }
- style {
- name: "button_text_style_focused";
- base: "font=BreezeSans:style=Light font_size=29 wrap=none color=#ffffff align=0.5 valign=0.5 ellipsis=1.0"; //36
- }
- style {
- name: "button_text_style_dissabled";
- base: "font=BreezeSans:style=Light font_size=29 wrap=none color=#ababab align=0.5 valign=0.5"; //36
- }
- }
- parts {
- part {
- name: "bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.5 0.5;
- fixed: 1 1;
- color: 246 246 246 255;
- min: BUTTON_WIDTH BUTTON_HEIGHT;
- max: BUTTON_WIDTH BUTTON_HEIGHT;
- }
- description {
- state: "focused" 0.0;
- inherit: "default" 0.0;
- color: 0 119 246 255;
- }
- }
- part {
- name: "divider_horizontal";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.5 0.0;
- color: 227 227 227 255;
- min: BUTTON_WIDTH 1;
- max: BUTTON_WIDTH 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- part {
- name: "divider_vertical";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0.0 0.0;
- color: 227 227 227 255;
- min: 1 BUTTON_HEIGHT;
- max: 1 BUTTON_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2.relative: 1.0 1.0;
- }
- description {
- state: "visible" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- part {
- name: "text_bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- align: 0.5 0.5;
- color: 255 0 255 255; //magenta
- min: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
- max: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- part {
- name: "elm.text";
- type: TEXTBLOCK;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- visible: 1;
- min: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
- max: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
- rel1 {
- relative: 0.0 0.0;
- to: "text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "text_bg";
- }
- text.style: "button_text_style_normal";
- }
- description {
- state: "dissabled" 0.0;
- inherit: "default";
- text.style: "button_text_style_dissabled";
- }
- description {
- state: "focused" 0.0;
- inherit: "default";
- text.style: "button_text_style_focused";
- }
- }
- part {
- name: "over";
- scale: 1;
- mouse_events: 1;
- repeat_events: 0;
- type: RECT;
- description {
- state: "default" 0.0;
- visible: 1;
- rel1 { relative: 0.0 0.0; to: "bg";}
- rel2 { relative: 1.0 1.0; to: "bg";}
- color: 0 0 0 0;
- }
- }
- }
- programs {
- program {
- name: "visible";
- source: "ui";
- signal: "visible";
- action: STATE_SET "visible" 0.0;
- target: "divider_vertical";
- }
- program {
- name: "dissabled";
- source: "ui";
- signal: "dissabled";
- action: STATE_SET "dissabled" 0.0;
- target: "elm.text";
- }
- program {
- name: "enabled";
- source: "ui";
- signal: "enabled";
- action: STATE_SET "default" 0.0;
- target: "elm.text";
- }
- program {
- name: "down";
- source: "over";
- signal: "mouse,down,*";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- target: "elm.text";
- }
- program {
- name: "up";
- source: "over";
- signal: "mouse,up,*";
- action: STATE_SET "default" 0.0;
- target: "bg";
- target: "elm.text";
- }
- program {
- name: "mouse_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- emit("elm,action,click", "");
- }
- }
- }
- }
-}
+++ /dev/null
-#include "../../../core/Tools/edc/InvisibleButton.edc"
-
-#define DEVELOPMENT 0
-#define WIDTH 720
-#define HEIGHT 426
-
-#define TITLE_HEIGHT 101
-#define INPUT_HEIGHT 205
-#define BUTTON_HEIGHT 120
-#define BUTTON_WIDTH 360
-#define TITLE_TEXT_OFFSET_X 100
-#define TITLE_TEXT_OFFSET_Y 44
-#define TITLE_TEXT_WIDTH 520
-#define TITLE_TEXT_HEIGHT 45
-#define BUTTON_TEXT_OFFSET_X 50
-#define BUTTON_TEXT_OFFSET_Y 40
-#define BUTTON_TEXT_WIDTH 260
-#define BUTTON_TEXT_HEIGHT 40
-#define MESSAGE_TEXT_OFFSET_X 44
-#define MESSAGE_TEXT_OFFSET_Y 30
-#define MESSAGE_TEXT_WIDTH 632
-#define MESSAGE_TEXT_HEIGHT 38
-#define INPUT_OFFSET_Y 78
-#define INPUT_AREA_HEIGHT 106
-#define INPUT_TEXT_OFFSET_X 44
-#define INPUT_TEXT_OFFSET_Y 26
-#define INPUT_TEXT_WIDTH 632
-#define INPUT_TEXT_SELECTED_WIDTH 578
-#define INPUT_TEXT_HEIGHT 40
-#define INPUT_DIVIDER_OFFSET_X 32
-#define INPUT_DIVIDER_OFFSET_Y 82
-#define INPUT_DIVIDER_HEIGHT 2
-#define INPUT_DIVIDER_WIDTH 656
-#define INPUT_CANCEL_OFFSET_X 34
-#define INPUT_CANCEL_OFFSET_Y 41
-#define CANCEL_BUTTON_WIDTH 98
-
-collections{
- base_scale: 2.6;
- group {
- name: "elm/entry/selection/browser_entry";
- parts {
- rect {
- name: "bg";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 255 255 255 255;
- }
- }
- }
- }
- group {
- name: "elm/entry/cursor/browser_entry";
- parts {
- rect {
- name: "bg";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 10 132 229 255;
- min: 3 INPUT_TEXT_HEIGHT;
- max: 3 INPUT_TEXT_HEIGHT;
- visible: 0;
- }
- description {
- state: "focused" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- name: "focused";
- signal: "elm,action,focus";
- source: "elm";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- }
- program {
- name: "unfocused";
- signal: "elm,action,unfocus";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- }
- }
- group {
- name: "elm/entry/base-single/popup-input-entry";
- styles {
- style {
- name: "input_text_style";
- base: "font=Tizen:style=Regular font_size=40 wrap=none color=#333333 align=0.0";
- tag: "br" "";
- }
- style {
- name: "guide_text_style";
- base: "font=Tizen:style=Regular font_size=40 wrap=none color=#969696 align=0.0 ellipsis=1";
- tag: "br" "";
- }
- }
- data {
- item: focus_highlight "off";
- }
- parts {
- rect {
- name: "bg";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0 0;
- min: 0 0;
- max: -1 INPUT_TEXT_HEIGHT+10;
- fixed: 0 0;
- rel1.relative: 0 0;
- rel2.relative: 1 1;
- visible: 1;
- color: 244 244 244 255;
- }
- description {
- state: "focused" 0.0;
- inherit: "default";
- color: 224 237 251 255;
- }
- }
- rect {
- name: "label.text.clip";
- scale: 1;
- description {
- state: "default" 0.0;
- }
- }
- part {
- name: "elm.text";
- scale: 1;
- multiline: 0;
- entry_mode: EDITABLE;
- select_mode: DEFAULT;
- cursor_mode: BEFORE;
- type: TEXTBLOCK;
- clip_to: "label.text.clip";
- source: "elm/entry/selection/browser_entry";
- source4: "elm/entry/cursor/browser_entry";
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_TEXT_HEIGHT+20;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- text {
- style: "input_text_style";
- align: 0 0;
- }
- }
- }
- part {
- name: "elm.guide";
- scale: 1;
- type: TEXTBLOCK;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_TEXT_HEIGHT+20;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- text {
- style: "guide_text_style";
- align: 0 0;
- text: "Input folder name";
- }
- }
- description {
- state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- }
- programs {
- program {
- name: "focus";
- signal: "load";
- source: "";
- action: FOCUS_SET;
- target: "elm.text";
- }
- program {
- name: "focused";
- signal: "focused";
- source: "ui";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- }
- program {
- name: "unfocused";
- signal: "unfocused";
- source: "ui";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- program {
- name: "gdisabled";
- signal: "elm,guide,disabled";
- source: "elm";
- action: STATE_SET "hidden" 0.0;
- target: "elm.guide";
- }
- program {
- name: "genabled";
- signal: "elm,guide,enabled";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.guide";
- }
- }
- }
- group {
- name: "input-popup-layout";
- styles {
- style {
- name: "title_text_style";
- base: "font=Tizen:style=Regular font_size=45 wrap=none color=#389ae9 align=0.5 ellipsis=1";
- }
- }
- parts {
- rect {
- name: "bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 0 0 0 102.4;
- align: 0.5 0.5;
- min: 0 0;
- max: -1 -1;
- fixed: 0 0;
- rel1.relative: 0.0 0.0;
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "popup_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0.5 1;
- fixed: 0 1;
- min: 0 HEIGHT;
- max: -1 HEIGHT;
- rel1 {
- relative: 0 0;
- to: "bg";
- }
- rel2 {
- relative: 1 1;
- to: "bg";
- }
- }
- }
- rect {
- name: "title_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- align: 0.0 0.0;
- min: 0 TITLE_HEIGHT;
- max: -1 TITLE_HEIGHT;
- fixed: 0 0;
- rel1 {
- relative: 0.0 0.0;
- to: "popup_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "popup_bg";
- }
- }
- }
- rect {
- name: "title_text_spacer_0";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- min: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
- max: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 {
- relative: 0.0 0.0;
- to: "title_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "title_bg";
- }
- }
- }
- rect {
- name: "title_text_spacer_1";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- min: TITLE_TEXT_OFFSET_X 0;
- max: TITLE_TEXT_OFFSET_X 0;
- fixed: 1 1;
- align: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "title_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "title_bg";
- }
- }
- }
- rect {
- name: "title_text_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 182 193 255; //lightpink
- align: 0.0 0.0;
- min: 0 TITLE_TEXT_HEIGHT;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 1 1;
- to: "title_text_spacer_0";
- }
- rel2 {
- relative: 0 0;
- to: "title_text_spacer_1";
- }
- }
- }
- part {
- name: "title_text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.0 0.0;
- fixed: 0 0;
- rel1 {
- relative: 0.0 0.0;
- to: "title_text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "title_text_bg";
- }
- text {
- style: "title_text_style";
- align: 0 0;
- }
- }
- }
- part {
- name: "input_swallow";
- type: SWALLOW;
- scale: 1;
- mouse_events: 1;
- repeat_events: 1;
- description {
- state: "default" 0.0;
- min: 0 INPUT_HEIGHT;
- max: -1 INPUT_HEIGHT;
- fixed: 0 1;
- align: 0.0 0.0;
- visible: 1;
- rel1 {
- relative: 0.0 1.0;
- to: "title_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "popup_bg";
- }
- }
- }
- rect {
- name: "buttons_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 0 255 255 255;
- align: 0.0 0.0;
- min: 0 BUTTON_HEIGHT;
- max: -1 BUTTON_HEIGHT;
- fixed: 0 1;
- rel1 {
- relative: 0.0 1.0;
- to: "input_swallow";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "popup_bg";
- }
- }
- }
- part {
- name: "buttons_swallow";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- fixed: 0 0;
- align: 0.0 0.0;
- rel1 {
- relative: 0.0 0.0;
- to: "buttons_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "buttons_bg";
- }
- }
- }
- }
- }
- group {
- name: "input-area-layout";
- styles {
- style {
- name: "message_text_style";
- base: "font=Tizen:style=Regular font_size=40 wrap=none color=#141414 align=0.0 ellipsis=1.0";
- }
- }
- images {
- image: "input_ic_cancel.png" COMP;
- }
- parts {
- rect {
- name: "bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 255 255 255 255;
- align: 0.0 0.0;
- min: 0 INPUT_HEIGHT;
- max: -1 INPUT_HEIGHT;
- fixed: 0 1;
- rel1.relative: 0.0 0.0;
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "input_message_spacer_0";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- align: 0.0 0.0;
- min: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
- max: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "input_message_spacer_1";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 1 1;
- min: INPUT_TEXT_OFFSET_X 0;
- max: INPUT_TEXT_OFFSET_X 0;
- fixed: 1 1;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0 0;
- to: "bg";
- }
- rel2 {
- relative: 1 0;
- to: "input_area_bg";
- }
- }
- }
- rect {
- name: "input_message_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- color: 202 225 255 255; //lightsteelblue
- align: 0.0 0.0;
- min: 0 MESSAGE_TEXT_HEIGHT;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 1 1;
- to: "input_message_spacer_0";
- }
- rel2 {
- relative: 0 0;
- to: "input_message_spacer_1";
- }
- }
- }
- part {
- name: "input_message_text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- state: "default";
- visible: 1;
- align: 0.0 0.0;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "input_message_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_message_bg";
- }
- text {
- style: "message_text_style";
- align: 0 0;
- }
- }
- }
- rect {
- name: "input_area_spacer";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_OFFSET_Y;
- max: 0 INPUT_OFFSET_Y;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "input_area_bg";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_AREA_HEIGHT;
- max: -1 INPUT_AREA_HEIGHT;
- fixed: 0 1;
- visible: 0;
- color: 224 237 251 255;
- rel1 {
- relative: 1.0 1.0;
- to: "input_area_spacer";
- }
- rel2.relative: 1.0 1.0;
- }
- description {
- state: "focused" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- rect {
- name: "input_spacer_0";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: INPUT_TEXT_OFFSET_X INPUT_TEXT_OFFSET_Y;
- max: INPUT_TEXT_OFFSET_X INPUT_TEXT_OFFSET_Y;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "input_spacer_1";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 1 1;
- min: INPUT_TEXT_OFFSET_X 0;
- max: INPUT_TEXT_OFFSET_X 0;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0 0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 1 1;
- to: "input_area_bg";
- }
- }
- }
- rect {
- name: "title_input_spacer_2";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 1 1;
- min: CANCEL_BUTTON_WIDTH 0;
- max: CANCEL_BUTTON_WIDTH 0;
- fixed: 1 1;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_area_bg";
- }
- }
- }
- rect {
- name: "input_text_bg";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_TEXT_HEIGHT;
- max: -1 -1;
- fixed: 0 0;
- visible: DEVELOPMENT;
- color: 238 229 222 255; //seashell
- rel1 {
- relative: 1 1;
- to: "input_spacer_0";
- }
- rel2 {
- relative: 0 0;
- to: "input_spacer_1";
- }
- }
- description {
- state: "show" 0.0;
- inherit: "default";
- rel2 {
- relative: 0 0;
- to: "title_input_spacer_2";
- }
- }
- }
- part {
- name: "input_text_swallow";
- type: SWALLOW;
- scale: 1;
- mouse_events: 1;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_TEXT_HEIGHT;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 0.0 0.0;
- to: "input_text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_text_bg";
- }
- }
- }
- rect {
- name: "input_cancel_spacer";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 1 1;
- min: INPUT_CANCEL_OFFSET_X INPUT_CANCEL_OFFSET_Y-10;
- max: INPUT_CANCEL_OFFSET_X INPUT_CANCEL_OFFSET_Y-10;
- fixed: 1 1;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_area_bg";
- }
- }
- }
- rect {
- name: "input_cancel_bg";
- mouse_events: 0;
- scale: 1;
- description {
- state: "default" 0.0;
- min: INPUT_TEXT_HEIGHT+10 INPUT_TEXT_HEIGHT+10;
- max: INPUT_TEXT_HEIGHT+10 INPUT_TEXT_HEIGHT+10;
- fixed: 1 1;
- visible: DEVELOPMENT;
- align: 1 1;
- color: 224 237 251 127;
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 0.0 0.0;
- to: "input_cancel_spacer";
- }
- }
- description {
- state: "focused" 0.0;
- inherit: "default";
- color: 224 237 251 255;
- visible: 1;
- }
- }
- part {
- name: "input_cancel_icon";
- type: IMAGE;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.5 0.5;
- min: INPUT_TEXT_HEIGHT INPUT_TEXT_HEIGHT;
- max: INPUT_TEXT_HEIGHT INPUT_TEXT_HEIGHT;
- fixed: 1 1;
- visible: 0;
- rel1 {
- relative: 0.0 0.0;
- to: "input_cancel_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_cancel_bg";
- }
- image {
- normal: "input_ic_cancel.png";
- border: 0 0 0 0;
- }
- }
- description {
- state: "show" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- part {
- name: "input_cancel_click";
- type: SWALLOW;
- scale: 1;
- mouse_events: 1;
- repeat_events: 0;
- description {
- state: "default" 0.0;
- align: 1 1;
- min: CANCEL_BUTTON_WIDTH INPUT_AREA_HEIGHT;
- max: CANCEL_BUTTON_WIDTH INPUT_AREA_HEIGHT;
- fixed: 1 1;
- visible: 0;
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "input_area_bg";
- }
- }
- description {
- state: "show" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- rect {
- name: "input_divider_spacer_0";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: INPUT_DIVIDER_OFFSET_X INPUT_DIVIDER_OFFSET_Y;
- max: INPUT_DIVIDER_OFFSET_X INPUT_DIVIDER_OFFSET_Y;
- fixed: 1 1;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0.0 0.0;
- to: "input_area_bg";
- }
- rel2.relative: 1.0 1.0;
- }
- }
- rect {
- name: "input_divider_spacer_1";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 1 1;
- min: INPUT_DIVIDER_OFFSET_X 0;
- max: INPUT_DIVIDER_OFFSET_X 0;
- fixed: 1 1;
- visible: DEVELOPMENT;
- color: 255 255 255 127;
- rel1 {
- relative: 0 0;
- to: "input_area_bg";
- }
- rel2 {
- relative: 1 1;
- to: "input_area_bg";
- }
- }
- }
- rect {
- name: "input_divider_bg";
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- min: 0 INPUT_DIVIDER_HEIGHT;
- max: 1 INPUT_DIVIDER_HEIGHT;
- visible: 1;
- color: 10 132 229 255;
- rel1 {
- relative: 1 1;
- to: "input_divider_spacer_0";
- }
- rel2 { relative: 0 0;
- to: "input_divider_spacer_1";
- }
- }
- }
- }
- programs {
- program {
- name: "entry_swallow_down";
- source: "input_text_swallow";
- signal: "mouse,down,*";
- action: STATE_SET "focused" 0.0;
- target: "input_area_bg";
- }
- program {
- name: "entry_swallow_up";
- source: "input_text_swallow";
- signal: "mouse,up,*";
- action: STATE_SET "default" 0.0;
- target: "input_area_bg";
- }
- program {
- name: "close_icon_show";
- signal: "close_icon_show";
- source: "ui";
- action: STATE_SET "show" 0.0;
- target: "input_text_bg";
- target: "input_cancel_icon";
- target: "input_cancel_click";
- }
- program {
- name: "close_icon_hide";
- signal: "close_icon_hide";
- source: "ui";
- action: STATE_SET "default" 0.0;
- target: "input_text_bg";
- target: "input_cancel_icon";
- target: "input_cancel_click";
- }
- program {
- name: "input_cancel_down";
- source: "input_cancel_click";
- signal: "mouse,down,*";
- action: STATE_SET "focused" 0.0;
- target: "input_cancel_bg";
- }
- program {
- name: "input_cancel_up";
- source: "input_cancel_click";
- signal: "mouse,up,*";
- action: STATE_SET "default" 0.0;
- target: "input_cancel_bg";
- }
- }
- }
- group {
- name: "elm/button/base/input-popup-button";
- styles {
- style {
- name: "button_text_style";
- base: "font=Tizen:style=Regular font_size=40 wrap=none color=#141414 align=0.5 ellipsis=1.0";
- }
- style {
- name: "button_text_style_dissabled";
- base: "font=Tizen:style=Regular font_size=40 wrap=none color=#C0C0C0 align=0.5 ellipsis=1.0";
- }
- }
- parts {
- rect {
- name: "bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- color: 244 244 244 255;
- min: 0 0;
- max: -1 -1;
- fixed: 0 0;
- }
- description {
- state: "pressed" 0.0;
- inherit: "default" 0.0;
- color: 224 237 251 255;
- }
- }
- rect {
- name: "divider_horizontal";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.5 0.0;
- color: 0 0 0 38.4;
- min: 0 1;
- max: -1 1;
- fixed: 0 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- rect {
- name: "divider_vertical";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0.0 0.0;
- color: 0 0 0 38.4;
- min: 1 0;
- max: 1 -1;
- fixed: 1 0;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- description {
- state: "visible" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- rect {
- name: "text_spacer_0";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- align: 0.0 0.0;
- color: 255 255 255 127;
- min: BUTTON_TEXT_OFFSET_X BUTTON_TEXT_OFFSET_Y;
- max: BUTTON_TEXT_OFFSET_X BUTTON_TEXT_OFFSET_Y;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- rect {
- name: "text_spacer_1";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- align: 1 1;
- color: 255 255 255 127;
- min: BUTTON_TEXT_OFFSET_X 0;
- max: BUTTON_TEXT_OFFSET_X 0;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- }
- }
- rect {
- name: "text_bg";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: DEVELOPMENT;
- align: 0.0 0.0;
- color: 255 0 255 255; //magenta
- min: 0 BUTTON_TEXT_HEIGHT;
- max: -1 -1;
- rel1 {
- relative: 1.0 1.0;
- to: "text_spacer_0";
- }
- rel2 {
- relative: 0 0;
- to: "text_spacer_1";
- }
- }
- }
- part {
- name: "elm.text";
- type: TEXTBLOCK;
- scale: 1;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 1 1;
- rel1 {
- relative: 0.0 0.0;
- to: "text_bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "text_bg";
- }
- text {
- style: "button_text_style";
- align: 0 0;
- }
- }
- description {
- state: "dissabled" 0.0;
- inherit: "default";
- text.style: "button_text_style_dissabled";
- }
- }
- rect {
- name: "over";
- scale: 1;
- mouse_events: 1;
- repeat_events: 0;
- description {
- state: "default" 0.0;
- visible: 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bg";
- }
- rel2 {
- relative: 1.0 1.0;
- to: "bg";
- }
- color: 0 0 0 0;
- }
- }
- }
- programs {
- program {
- name: "visible";
- source: "ui";
- signal: "visible";
- action: STATE_SET "visible" 0.0;
- target: "divider_vertical";
- }
- program {
- name: "dissabled";
- source: "ui";
- signal: "dissabled";
- action: STATE_SET "dissabled" 0.0;
- target: "elm.text";
- }
- program {
- name: "enabled";
- source: "ui";
- signal: "enabled";
- action: STATE_SET "default" 0.0;
- target: "elm.text";
- }
- program {
- name: "down";
- source: "over";
- signal: "mouse,down,*";
- action: STATE_SET "pressed" 0.0;
- target: "bg";
- }
- program {
- name: "up";
- source: "over";
- signal: "mouse,up,*";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- program {
- name: "mouse_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- emit("elm,action,click", "");
- }
- }
- }
- }
-}
-collections { base_scale: 2.0;
-
-#define WIDTH 1920
-#define HEIGHT 976
+collections { base_scale: 2.6;
styles {
style {
name: "notification_popup_layout";
parts {
- part { name: "bg";
+ part {
+ name: "bg";
type: RECT;
mouse_events: 1;
- description { state: "default" 0.0;
- color: 0 0 0 120;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 102;
visible: 1;
- min: WIDTH HEIGHT;
- max: WIDTH HEIGHT;
+ fixed: 0 0;
+ min: 0 0;
+ max: -1 -1;
align: 0.0 0.0;
- rel1 {relative: 0.0 0.0; offset: 0 104;}
+ rel1 {relative: 0.0 0.0;}
rel2 {relative: 1.0 1.0;}
}
}
- part { name: "popup_rect";
+ part {
+ name: "popup_rect";
type: RECT;
mouse_events: 1;
- description { state: "default" 0.0;
- color: 230 230 230 255;
- min: 600 150;
- max: 600 150;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
visible: 1;
- align: 0.5 0.5;
- rel1 {
- to: "bg";
- offset: 0 0;
- relative: 0.0 0.0;
- }
+ fixed: 0 0;
+ min: 720 150;
+ max: -1 150;
+ align: 0.5 1.0;
rel2 {
to: "bg";
relative: 1.0 1.0;
}
}
- part { name: "progress_swallow";
+ part {
+ name: "progress_swallow";
type: SWALLOW;
+ scale: 1;
description {
min: 150 150;
max: 150 150;
visible: 1;
- fixed: 1 1;
+ fixed: 0 0;
align: 0.0 0.0;
rel1 {
relative: 0.0 0.0;
- offset: 20 0;
to: "popup_rect";
}
rel2 {
}
}
- part { name: "popup_text";
+ part {
+ name: "popup_text";
type: TEXTBLOCK;
+ scale: 1;
description {
visible: 1;
min: 400 190;
max: 400 190;
- align: 1.0 0.5;
+ align: 0.5 0.5;
fixed: 1 1;
rel1 {
to: "popup_rect";
relative: 0.0 0.0;
- offset: 0 0;
}
rel2 {
to: "popup_rect";
+++ /dev/null
-collections { base_scale: 2.6;
-
- styles {
- style {
- name: "text_style";
- base: "font=Sans:style=Bold font_size=30 color=#000000 wrap=word align=0.5 ellipsis=1.0";
- }
- }
-
- group {
- name: "notification_popup_layout";
- parts {
-
- part {
- name: "bg";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- color: 0 0 0 102;
- visible: 1;
- fixed: 0 0;
- min: 0 0;
- max: -1 -1;
- align: 0.0 0.0;
- rel1 {relative: 0.0 0.0;}
- rel2 {relative: 1.0 1.0;}
- }
- }
-
- part {
- name: "popup_rect";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- color: 255 255 255 255;
- visible: 1;
- fixed: 0 0;
- min: 720 150;
- max: -1 150;
- align: 0.5 1.0;
- rel2 {
- to: "bg";
- relative: 1.0 1.0;
- }
- }
- }
-
- part {
- name: "progress_swallow";
- type: SWALLOW;
- scale: 1;
- description {
- min: 150 150;
- max: 150 150;
- visible: 1;
- fixed: 0 0;
- align: 0.0 0.0;
- rel1 {
- relative: 0.0 0.0;
- to: "popup_rect";
- }
- rel2 {
- relative: 0.0 1.0;
- to: "popup_rect";
- }
- }
- }
-
- part {
- name: "popup_text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- visible: 1;
- min: 400 190;
- max: 400 190;
- align: 0.5 0.5;
- fixed: 1 1;
- rel1 {
- to: "popup_rect";
- relative: 0.0 0.0;
- }
- rel2 {
- to: "popup_rect";
- relative: 1.0 1.0;
- }
- text {
- style: "text_style";
- }
- }
- }
-
- }
- }
-}
+++ /dev/null
-collections { base_scale: 2.0;
- group { name: "elm/label/base/tooltip";
- styles {
- style { name: "tooltip_style";
- //base: "font="SVD_Medium" font_size=22 color=#1d1d1d wrap=word text_class=bubble";
- base: "font="SVD_Medium" font_size=22 color=#1d1d1d wrap=word text_class=bubble ellipsis=1.0";
- tag: "br" "\n";
- tag: "hilight" "+ font="SVD_Medium" text_class=bubble";
- tag: "b" "+ font="SVD_Medium" text_class=bubble";
- tag: "tab" "\t";
- }
- }
- parts {
- part { name: "elm.text"; type: TEXTBLOCK; mouse_events: 0;
- scale: 1;
- description { state: "default" 0.0;
- text {
- style: "tooltip_style";
- min: 1 1;
- }
- }
- }
- }
- }
-}
-
#define INDICATOR_ROTATION_PORTRAIT 0
#define INDICATOR_ROTATION_LANDSCAPE 1
-#define LAYOUT_INDICATOR_HEIGHT_INC 42
+#define LAYOUT_INDICATOR_HEIGHT_INC 40
-collections { base_scale: 2.0;
+collections { base_scale: 2.6;
group { name: "elm/conformant/custom_conformant";
script {
StorageExceptionInitialization.cpp
DriverManager.cpp
Field.cpp
- FoldersStorage.cpp
QuickAccessStorage.cpp
CertificateStorage.cpp
SQLTransactionScope.cpp
SQLDatabase.cpp
SettingsStorage.cpp
StorageService.cpp
+ PWAStorage.cpp
)
include(Coreheaders)
return std::string();
}
-void CertificateStorage::deleteAllEntries()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format deleteCertificateString("DELETE FROM %1%;");
- deleteCertificateString % TABLE_CERTIFICATE;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_CERTIFICATE));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-
- storage::SQLQuery deleteCertificatesQuery(connection->prepare(deleteCertificateString.str()));
- deleteCertificatesQuery.exec();
- } catch( storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-}
-
}//end namespace storage
}//end namespace tizen_browser
*/
std::string getPemForURI(const std::string& uri);
- /**
- * Delete all entries in cert db.
- */
- void deleteAllEntries();
-
private:
void initDatabaseCertificate(const std::string& db_str);
bool m_isInitialized;
, sqlDouble(f.getDouble())
{
}
-/*private*/Field & Field::operator=(const Field &)
+/*private*/Field & Field::operator=(const Field & f)
{
+ this->type = f.type;
+ this->sqlInt = f.sqlInt;
+ this->sqlDouble = f.sqlDouble;
+ this->sqlText = f.sqlText;
+ this->blob = f.blob;
return *this;
}
}
Field::Field(const std::string & sqlText)
+ : type(SQLITE3_TEXT)
+ , sqlInt(0)
+ , sqlDouble(0)
+ , sqlText(sqlText)
{
- this->sqlText = sqlText;
- this->type = SQLITE3_TEXT;
}
-Field::Field(std::shared_ptr<tizen_browser::tools::Blob> blob)
+Field::Field(const std::shared_ptr<tizen_browser::tools::Blob>& blob)
+ : type(SQLITE_BLOB)
+ , sqlInt(0)
+ , sqlDouble(0)
+ , blob(blob)
{
- this->blob = blob;
- this->type = SQLITE_BLOB;
}
Field::~Field()
explicit Field(int sqlInt);
explicit Field(double sqlDouble);
explicit Field(const std::string & sqlText);
- explicit Field(std::shared_ptr<tizen_browser::tools::Blob> blob);
+ explicit Field(const std::shared_ptr<tizen_browser::tools::Blob>& blob);
~Field();
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-
-/*
- * FoldersStorage.cpp
- *
- * Created on: Dec 14, 2015
- * Author: m.kawonczyk@samsung.com
- */
-
-#include <boost/format.hpp>
-#include <BrowserAssert.h>
-#include <string>
-#include "Config.h"
-#include "FoldersStorage.h"
-#include "Field.h"
-#include "SQLTransactionScope.h"
-#include "DBTools.h"
-#include "SQLDatabase.h"
-#include "SQLDatabaseImpl.h"
-#include "DriverManager.h"
-#include "StorageException.h"
-#include "StorageExceptionInitialization.h"
-
-namespace {
- const std::string TABLE_FOLDER = "FOLDER_TABLE";
- const std::string COL_FOLDER_ID = "folder_id";
- const std::string COL_FOLDER_NAME = "name";
- const std::string COL_FOLDER_NUMBER = "number";
- const std::string CONSTRAINT_TABLE_PK = TABLE_FOLDER + "_PK";
- const std::string DDL_CREATE_TABLE_FOLDER
- = " CREATE TABLE " + TABLE_FOLDER
- + " ( " + COL_FOLDER_ID + " INTEGER, "
- + " " + COL_FOLDER_NAME + " TEXT,"
- + " " + COL_FOLDER_NUMBER + " INTEGER,"
- + " CONSTRAINT " + CONSTRAINT_TABLE_PK
- + " PRIMARY KEY ( " + COL_FOLDER_ID + " ) "
- + " ON CONFLICT REPLACE "
- + " ); ";
-
-}
-
-namespace tizen_browser {
-namespace storage {
-
-FoldersStorage::FoldersStorage()
- : m_isInitialized(false)
- , m_dbFoldersInitialised(false)
-{
- init();
-}
-
-FoldersStorage::~FoldersStorage()
-{
-}
-
-
-void FoldersStorage::init()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if(m_isInitialized)
- return;
-
- std::string resourceDbDir(boost::any_cast < std::string > (tizen_browser::config::Config::getInstance().get("resourcedb/dir")));
- std::string sessionDb(boost::any_cast < std::string > (tizen_browser::config::Config::getInstance().get("DB_FOLDERS")));
-
- DB_FOLDERS = resourceDbDir + sessionDb;
-
- BROWSER_LOGD("[%s:%d] DB_FOLDERS=%s", __PRETTY_FUNCTION__, __LINE__, DB_FOLDERS.c_str());
-
- try {
- initDatabaseFolders(DB_FOLDERS);
- } catch (storage::StorageExceptionInitialization & e) {
- BROWSER_LOGE("[%s:%d] Cannot initialize database %s!", __PRETTY_FUNCTION__, __LINE__, DB_FOLDERS.c_str());
- }
-
- m_isInitialized = true;
-}
-
-void FoldersStorage::initDatabaseFolders(const std::string& db_str)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- if (!m_dbFoldersInitialised) {
- try {
- dbtools::checkAndCreateTable(db_str, TABLE_FOLDER, DDL_CREATE_TABLE_FOLDER);
- const std::string all = "All";
- if (ifFolderExists(all))
- AllFolder = getFolderId(all);
- else
- AllFolder = addFolder(all);
-
-#if PROFILE_MOBILE
- const std::string special = "Mobile"; //TODO: missing translation
-#else
- const std::string special = "Bookmark Bar"; //TODO: missing translation
-#endif
- if (ifFolderExists(special))
- SpecialFolder = getFolderId(special);
- else
- SpecialFolder = addFolder(special);
- } catch (storage::StorageException & e) {
- throw storage::StorageExceptionInitialization(e.getMessage(),
- e.getErrorCode());
- }
-
- m_dbFoldersInitialised = true;
- }
-
- M_ASSERT(m_dbFoldersInitialised);
-}
-
-services::SharedBookmarkFolder FoldersStorage::getFolder(unsigned int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- std::string name = getFolderName(id);
- unsigned int count = getFolderNumber(id);
- services::SharedBookmarkFolder folder;
- if (name != "")
- folder = std::make_shared<services::BookmarkFolder>(id, name, count);
- return folder;
-}
-
-services::SharedBookmarkFolderList FoldersStorage::getFolders()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- services::SharedBookmarkFolderList folders;
- int foldersCount = getFoldersCount();
- if (foldersCount != 0) {
- boost::format getFoldersString("SELECT %1%, %2%, %3% FROM %4% ;");
- getFoldersString % COL_FOLDER_ID % COL_FOLDER_NAME % COL_FOLDER_NUMBER % TABLE_FOLDER;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- storage::SQLQuery getFoldersQuery(connection->prepare(getFoldersString.str()));
- getFoldersQuery.exec();
- for (int i = 0; i < foldersCount; ++i) {
- services::SharedBookmarkFolder bookmark = std::make_shared<services::BookmarkFolder>(
- getFoldersQuery.getInt(0), getFoldersQuery.getString(1), getFoldersQuery.getInt(2));
- folders.push_back(bookmark);
- getFoldersQuery.next();
- }
- } catch (storage::StorageException& e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- }
- return folders;
-}
-
-unsigned int FoldersStorage::getFoldersCount()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format getCountString("SELECT COUNT (*) FROM %1% ;");
- getCountString % TABLE_FOLDER;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- storage::SQLQuery getCountQuery(connection->prepare(getCountString.str()));
- getCountQuery.exec();
- return getCountQuery.getInt(0);
- } catch (storage::StorageException& e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- return 0;
-}
-
-unsigned int FoldersStorage::addFolder(const std::string& name)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format addFolderQueryString("INSERT OR REPLACE INTO %1% ( %2% ) VALUES ( ? );");
- addFolderQueryString % TABLE_FOLDER % COL_FOLDER_NAME;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> db = scope.database();
- storage::SQLQuery addFolderQuery(db->prepare(addFolderQueryString.str()));
- addFolderQuery.bindText(1, name);
- addFolderQuery.exec();
- return db->lastInsertId();
- } catch (storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- return 0;
-}
-
-void FoldersStorage::updateFolderName(unsigned int id, const std::string& newName)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (id == AllFolder)
- return;
- boost::format updateFolderNameString("UPDATE %1% SET %2% = ? WHERE %3% = ?" );
- updateFolderNameString % TABLE_FOLDER % COL_FOLDER_NAME % COL_FOLDER_ID;
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- try {
- storage::SQLQuery updateFolderNameQuery(connection->prepare(updateFolderNameString.str()));
- updateFolderNameQuery.bindText(1, newName);
- updateFolderNameQuery.bindInt(2, id);
- updateFolderNameQuery.exec();
- } catch (storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-}
-
-void FoldersStorage::addNumberInFolder(unsigned int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (id != AllFolder)
- addNumberInFolder(AllFolder);
- boost::format updateFolderNameString("UPDATE %1% SET %2% = ? WHERE %3% = ?" );
- updateFolderNameString % TABLE_FOLDER % COL_FOLDER_NUMBER % COL_FOLDER_ID;
- int count = getFolderNumber(id);
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- try {
- storage::SQLQuery updateFolderNameQuery(connection->prepare(updateFolderNameString.str()));
- updateFolderNameQuery.bindInt(1, count+1);
- updateFolderNameQuery.bindInt(2, id);
- updateFolderNameQuery.exec();
- } catch (storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-}
-
-void FoldersStorage::removeNumberInFolder(unsigned int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (id != AllFolder)
- removeNumberInFolder(AllFolder);
- boost::format updateFolderNameString("UPDATE %1% SET %2% = ? WHERE %3% = ?" );
- updateFolderNameString % TABLE_FOLDER % COL_FOLDER_NUMBER % COL_FOLDER_ID;
- int count = getFolderNumber(id);
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- try {
- storage::SQLQuery updateFolderNameQuery(connection->prepare(updateFolderNameString.str()));
- updateFolderNameQuery.bindInt(1, count-1);
- updateFolderNameQuery.bindInt(2, id);
- updateFolderNameQuery.exec();
- } catch (storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-}
-
-void FoldersStorage::deleteAllFolders()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format deleteFoldersString("DELETE FROM %1% WHERE %2% != ? AND %3% != ? ;");
- deleteFoldersString % TABLE_FOLDER % COL_FOLDER_ID % COL_FOLDER_ID;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-
- storage::SQLQuery deleteFoldersQuery(connection->prepare(deleteFoldersString.str()));
- deleteFoldersQuery.bindInt(1, AllFolder);
- deleteFoldersQuery.bindInt(2, SpecialFolder);
- deleteFoldersQuery.exec();
- } catch( storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-
- boost::format updateFoldersCountString("UPDATE %1% SET %2% = ? WHERE %3% = ? OR %4% = ?");
- updateFoldersCountString % TABLE_FOLDER % COL_FOLDER_NUMBER % COL_FOLDER_ID % COL_FOLDER_ID;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-
- storage::SQLQuery updateFoldersCountQuery(connection->prepare(updateFoldersCountString.str()));
- updateFoldersCountQuery.bindInt(1, 0);
- updateFoldersCountQuery.bindInt(2, AllFolder);
- updateFoldersCountQuery.bindInt(3, SpecialFolder);
- updateFoldersCountQuery.exec();
- } catch( storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-}
-
-void FoldersStorage::deleteFolder(unsigned int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (id == AllFolder || id == SpecialFolder)
- return;
- boost::format deleteFolderString("DELETE FROM %1% WHERE %2% = ?;");
- deleteFolderString % TABLE_FOLDER % COL_FOLDER_ID;
-
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- try {
- storage::SQLQuery deleteFolderQurey(connection->prepare(deleteFolderString.str()));
- deleteFolderQurey.bindInt(1, id);
- deleteFolderQurey.exec();
- } catch (storage::StorageException &e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
-}
-
-bool FoldersStorage::ifFolderExists(const std::string& name)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format getCountString("SELECT COUNT (*) FROM %1% WHERE %2% = ?;");
- getCountString % TABLE_FOLDER % COL_FOLDER_NAME;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- storage::SQLQuery getCountQuery(connection->prepare(getCountString.str()));
- getCountQuery.bindText(1, name);
- getCountQuery.exec();
- int number = getCountQuery.getInt(0);
- return number != 0;
- } catch (storage::StorageException& e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- return true;
-}
-
-unsigned int FoldersStorage::getFolderId(const std::string& name)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format getIdString("SELECT %1% FROM %2% WHERE %3% = ?;");
- getIdString % COL_FOLDER_ID % TABLE_FOLDER % COL_FOLDER_NAME;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- storage::SQLQuery getIdQuery(connection->prepare(getIdString.str()));
- getIdQuery.bindText(1, name);
- getIdQuery.exec();
- return getIdQuery.getInt(0);
- } catch (storage::StorageException& e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- return 0;
-}
-
-std::string FoldersStorage::getFolderName(unsigned int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format getNameString("SELECT %1% FROM %2% WHERE %3% = ?;");
- getNameString % COL_FOLDER_NAME % TABLE_FOLDER % COL_FOLDER_ID;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- storage::SQLQuery getNameQuery(connection->prepare(getNameString.str()));
- getNameQuery.bindInt(1, id);
- getNameQuery.exec();
-
- return getNameQuery.getString(0);
- } catch (storage::StorageException& e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- return std::string();
-}
-
-unsigned int FoldersStorage::getFolderNumber(unsigned int id)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::format getNameString("SELECT %1% FROM %2% WHERE %3% = ?;");
- getNameString % COL_FOLDER_NUMBER % TABLE_FOLDER % COL_FOLDER_ID;
- try {
- storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
- std::shared_ptr<storage::SQLDatabase> connection = scope.database();
- storage::SQLQuery getNameQuery(connection->prepare(getNameString.str()));
- getNameQuery.bindInt(1, id);
- getNameQuery.exec();
-
- return getNameQuery.getInt(0);
- } catch (storage::StorageException& e) {
- BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
- }
- return 0;
-}
-
-}//end namespace storage
-}//end namespace tizen_browser
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-
-/*
- * FoldersStorage.h
- *
- * Created on: Dec 14, 2015
- * Author: m.kawonczyk@samsung.com
- */
-
-
-#ifndef FOLDERSSTORAGE_H
-#define FOLDERSSTORAGE_H
-
-#include <memory>
-#include <boost/signals2/signal.hpp>
-
-#include "SQLDatabase.h"
-#include "WebEngineSettings.h"
-#include "BookmarkFolder.h"
-#include "app_i18n.h"
-
-namespace tizen_browser {
-namespace storage {
-
-
-class FoldersStorage
-{
-public:
- /**
- * Singleton, protect against being created in wrong place.
- */
- FoldersStorage();
-
- /**
- * Initialise FoldersStorage.
- *
- * Checks if all needed tables are created and if not creates them.
- *
- * Returns true if there is no error.
- */
- void init();
-
- unsigned int AllFolder;
- unsigned int SpecialFolder;
-
- ~FoldersStorage();
-
- /**
- * Returns created custom folder.
- */
- services::SharedBookmarkFolder getFolder(unsigned int id);
-
- /**
- * Returns all created custom folders.
- */
- services::SharedBookmarkFolderList getFolders();
-
- /**
- * Returns all created custom folders.
- */
- unsigned int getFoldersCount();
-
- /**
- * Adds folder with a specified name.
- * Returns created folder id.
- */
- unsigned int addFolder(const std::string& name);
-
- /**
- * Updates folder with a specified name.
- */
- void updateFolderName(unsigned int id, const std::string& newName);
-
- /**
- * Add additional bookmark to a folder.
- */
- void addNumberInFolder(unsigned int id);
-
- /**
- * Remove additional bookmark to a folder.
- */
- void removeNumberInFolder(unsigned int id);
-
- /**
- * Delete all folders.
- */
- void deleteAllFolders();
-
- /**
- * Delete folder with a specified id.
- */
- void deleteFolder(unsigned int id);
-
- /**
- * Answers if folder of a specified name exists.
- */
- bool ifFolderExists(const std::string& name);
- /**
- * Get id of a folder.
- */
- unsigned int getFolderId(const std::string &name);
-
- /**
- * Get name of a folder.
- */
- std::string getFolderName(unsigned int id);
-
- /**
- * Get number of bookmarks in a folder.
- */
- unsigned int getFolderNumber(unsigned int id);
-
-private:
- void initDatabaseFolders(const std::string& db_str);
- bool m_isInitialized;
- bool m_dbFoldersInitialised;
-
- std::string DB_FOLDERS;
-};
-
-}//end namespace storage
-}//end namespace tizen_browser
-
-#endif // FOLDERSSTORAGE_H
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <BrowserAssert.h>
+#include <boost/any.hpp>
+#include <boost/format.hpp>
+#include "EflTools.h"
+
+#include "Field.h"
+#include "BrowserLogger.h"
+#include "DriverManager.h"
+#include "DBTools.h"
+#include "Config.h"
+#include "StorageExceptionInitialization.h"
+#include "SQLTransactionScope.h"
+
+#include "PWAStorage.h"
+
+namespace {
+// ------ Database PWA ------
+const std::string TABLE_PWA = "PWA";
+const std::string COL_ID = "ID";
+const std::string COL_URL = "URL";
+const std::string COL_EXIST = "EXIST";
+const std::string COL_NEVER = "NEVER";
+
+const std::string CREATE_TABLE_PWA
+ = "CREATE TABLE " + TABLE_PWA
+ + " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ + COL_URL + " TEXT UNIQUE, "
+ + COL_EXIST + " INTEGER, "
+ + COL_NEVER + " INTEGER "
+ + " );";
+
+const std::string TABLE_INSTALLED_PWA = "INSTALLED";
+const std::string COL_NAME = "NAME";
+const std::string COL_SHORTNAME = "SHORTNAME";
+const std::string COL_PUSH_ID = "PUSH_ID";
+const std::string COL_SHORTCUT = "PWA_SHORTCUT";
+
+const std::string CREATE_TABLE_INSTALLED_PWA
+ = "CREATE TABLE " + TABLE_INSTALLED_PWA
+ + " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ + COL_PUSH_ID + " TEXT, "
+ + COL_NAME + " TEXT, "
+ + COL_SHORTNAME + " TEXT, "
+ + COL_SHORTCUT + " TEXT "
+ + " );";
+
+const std::string TABLE_PERMISSION = "PERMISSION";
+const std::string COL_ORIGIN = "ORIGIN";
+const std::string COL_PERM_STATE = "PERM_STATE";
+
+const std::string CREATE_TABLE_PERMISSION
+ = "CREATE TABLE " + TABLE_PERMISSION
+ + " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ + COL_ORIGIN + " TEXT, "
+ + COL_PERM_STATE + " INTEGER "
+ + " );";
+
+// ------ (end) Database PWA ------
+}
+
+namespace tizen_browser {
+namespace storage {
+
+PWAStorage::PWAStorage()
+ : m_isInitialized(false)
+ , m_dbPWAInitialized(false)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ init();
+}
+
+void PWAStorage::init()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_isInitialized)
+ return;
+
+ std::string resourceDbDir(boost::any_cast<std::string>(config::Config::getInstance().get("resourcedb/dir")));
+ std::string pwaDb(boost::any_cast<std::string>(config::Config::getInstance().get("DB_PWA")));
+ DB_PWA = resourceDbDir + pwaDb;
+ BROWSER_LOGD("[%s:%d] DB_PWA=%s", __PRETTY_FUNCTION__, __LINE__, DB_PWA.c_str());
+ try {
+ initDatabasePWA(DB_PWA);
+ } catch (StorageExceptionInitialization & e) {
+ BROWSER_LOGE("[%s:%d] Cannot initialize database %s!", __PRETTY_FUNCTION__, __LINE__, DB_PWA.c_str());
+ }
+ m_isInitialized = true;
+}
+
+void PWAStorage::addPWAItem(const std::string & url, const int & exist, const int & never)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format addPWAItemQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%, %4%) VALUES (?, ?, ?);");
+ addPWAItemQueryString % TABLE_PWA % COL_URL % COL_EXIST % COL_NEVER;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery addPWAItemQuery(db->prepare(addPWAItemQueryString.str()));
+ addPWAItemQuery.bindText(1, url);
+ addPWAItemQuery.bindInt(2, exist);
+ addPWAItemQuery.bindInt(3, never);
+ addPWAItemQuery.exec();
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+}
+
+unsigned PWAStorage::installPWAItem(const std::string & name, const std::string & push_id, const std::string & shortName)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format installPWAItemQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%, %4%) VALUES (?, ?, ?);");
+
+ installPWAItemQueryString % TABLE_INSTALLED_PWA % COL_PUSH_ID % COL_NAME % COL_SHORTNAME;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery addPWAItemQuery(db->prepare(installPWAItemQueryString.str()));
+ addPWAItemQuery.bindText(1, push_id);
+ addPWAItemQuery.bindText(2, name);
+ addPWAItemQuery.bindText(3, shortName);
+ addPWAItemQuery.exec();
+
+ return static_cast<unsigned>(db->lastInsertId());
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+unsigned PWAStorage::addPermission(const std::string& origin, const bool& state)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format addPermissionQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%) VALUES (?, ?);");
+
+ addPermissionQueryString % TABLE_PERMISSION % COL_ORIGIN % COL_PERM_STATE;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery addPermissionQuery(db->prepare(addPermissionQueryString.str()));
+ addPermissionQuery.bindText(1, origin);
+ addPermissionQuery.bindInt(2, state);
+ addPermissionQuery.exec();
+
+ return static_cast<unsigned>(db->lastInsertId());
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+unsigned PWAStorage::getPermissionState(const std::string& url)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getPermissionStateString(
+ "SELECT " + COL_PERM_STATE +" FROM " + TABLE_PERMISSION + " WHERE " + COL_ORIGIN + "='" + url + "';");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getPermStateQuery(db->prepare(getPermissionStateString.str()));
+ getPermStateQuery.exec();
+ return getPermStateQuery.getInt(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+unsigned PWAStorage::getPermissionId(const std::string& url)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getPermissionIdString("SELECT " + COL_ID + " FROM " + TABLE_PERMISSION + " WHERE " + COL_ORIGIN + "='" + url + "';");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getPermissionIdQuery(db->prepare(getPermissionIdString.str()));
+ getPermissionIdQuery.exec();
+ return getPermissionIdQuery.getInt(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+unsigned PWAStorage::getPermissionCount()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getCountString("SELECT COUNT (*) FROM " + TABLE_PERMISSION + " ;");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getCountQuery(db->prepare(getCountString.str()));
+ getCountQuery.exec();
+ unsigned count = getCountQuery.getInt(0);
+ BROWSER_LOGD("[%s:%d] count = %d", __PRETTY_FUNCTION__, __LINE__, count);
+ return count;
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+bool PWAStorage::updatePermissionState(const int& id, const bool& state)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format updatePermissionStateString("UPDATE %1% SET %2%=(?) WHERE %3%=(?);");
+ updatePermissionStateString % TABLE_PERMISSION % COL_PERM_STATE % COL_ID;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery updateQuery(db->prepare(updatePermissionStateString.str()));
+ updateQuery.bindInt(1, state);
+ updateQuery.bindInt(2, id);
+ updateQuery.exec();
+ return true;
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return false;
+}
+
+std::map<std::string, bool> PWAStorage::getPermissionsMap()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ std::map<std::string, bool> permList;
+
+ int count = getPermissionCount();
+ if (count > 0) {
+ boost::format getListString("SELECT %2%, %3% FROM %1%");
+ getListString % TABLE_PERMISSION % COL_ORIGIN % COL_PERM_STATE;
+
+ try {
+ storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<storage::SQLDatabase> db = scope.database();
+ storage::SQLQuery getListQuery(db->prepare(getListString.str()));
+ getListQuery.exec();
+
+ for (int i = 0; i < count; ++i) {
+ auto origin = getListQuery.getString(0);
+ auto state = getListQuery.getInt(1);
+ BROWSER_LOGD("[%s:%d] insert to permList origin %s value %d", __PRETTY_FUNCTION__, __LINE__, origin.c_str(), state);
+ permList.insert({origin.c_str(), state});
+ getListQuery.next();
+ }
+ } catch (storage::StorageException& e){
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ }
+ BROWSER_LOGD("[%s:%d] permList size: %d", __PRETTY_FUNCTION__, __LINE__, permList.size());
+ return permList;
+}
+
+void PWAStorage::storePWAShortcut(const unsigned& id, const std::string& shortcut)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format storePWAShortcutString("UPDATE %1% SET %2%=(?) WHERE %3%=(?);");
+ storePWAShortcutString % TABLE_INSTALLED_PWA % COL_SHORTCUT % COL_ID;
+
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery addPWAItemQuery(db->prepare(storePWAShortcutString.str()));
+ addPWAItemQuery.bindText(1, shortcut);
+ addPWAItemQuery.bindInt(2, id);
+ addPWAItemQuery.exec();
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+}
+
+std::string PWAStorage::getPWAShortcut(const unsigned& id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getShortcutString(
+ "SELECT " + COL_SHORTCUT +" FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_ID + "=" + std::to_string(id) + ";");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getIdQuery(db->prepare(getShortcutString.str()));
+ getIdQuery.exec();
+ return getIdQuery.getString(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return std::string();
+}
+
+std::string PWAStorage::getPWAName(const unsigned& id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getNameString(
+ "SELECT " + COL_NAME +" FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_ID + "=" + std::to_string(id) + ";");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getIdQuery(db->prepare(getNameString.str()));
+ getIdQuery.exec();
+ return getIdQuery.getString(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return std::string();
+}
+
+std::string PWAStorage::getPWAShortName(const unsigned& id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getShortNameString(
+ "SELECT " + COL_SHORTNAME +" FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_ID + "=" + std::to_string(id) + ";");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getIdQuery(db->prepare(getShortNameString.str()));
+ getIdQuery.exec();
+ BROWSER_LOGD("[%s:%d][ldh.test] shortName : %s", __PRETTY_FUNCTION__, __LINE__, (getIdQuery.getString(0)).c_str());
+ return getIdQuery.getString(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return std::string();
+}
+
+void PWAStorage::deletePWAItems()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format deletePWAItemQueryString("DELETE FROM %1% ;");
+ deletePWAItemQueryString % TABLE_PWA;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery deletePWAItemQuery(db->prepare(deletePWAItemQueryString.str()));
+ deletePWAItemQuery.exec();
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+}
+
+int PWAStorage::getPWAIdFromPushId(const std::string& pushId)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getIdString("SELECT ID FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_PUSH_ID + "='" + pushId + "';");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getIdQuery(db->prepare(getIdString.str()));
+ getIdQuery.exec();
+ return getIdQuery.getInt(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+std::string PWAStorage::getUrlFromId(const int& id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getUrlString("SELECT URL FROM " + TABLE_PWA + " WHERE " + COL_ID + "='" + std::to_string(id) + "';");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getUrlQuery(db->prepare(getUrlString.str()));
+ getUrlQuery.exec();
+ return getUrlQuery.getString(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return std::string();
+}
+
+unsigned int PWAStorage::getPWACount()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format getCountString("SELECT COUNT (*) FROM " + TABLE_PWA + " ;");
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getCountQuery(db->prepare(getCountString.str()));
+ getCountQuery.exec();
+ return getCountQuery.getInt(0);
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return 0;
+}
+
+int PWAStorage::getPWACheck(const std::string & url)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ int pwaCount = getPWACount();
+
+ if (pwaCount) {
+ boost::format getPWAListString("SELECT %1%, %2%, %3% FROM %4% ;");
+ getPWAListString % COL_URL % COL_EXIST % COL_NEVER % TABLE_PWA;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getPWAListQuery(db->prepare(getPWAListString.str()));
+ getPWAListQuery.exec();
+
+ for (int i = 0; i < pwaCount; ++i) {
+ if (!strcmp(url.c_str(), getPWAListQuery.getString(0).c_str())) {
+ if (getPWAListQuery.getInt(2))
+ return getPWAListQuery.getInt(2);
+ else
+ return getPWAListQuery.getInt(1);
+ }
+ getPWAListQuery.next();
+ }
+ } catch (const StorageException& e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ }
+ BROWSER_LOGD("[%s:%d] pwaCount is 0 or string not equal !", __PRETTY_FUNCTION__, __LINE__);
+ return 0;
+}
+
+void PWAStorage::initDatabasePWA(const std::string &db_str)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!m_dbPWAInitialized) {
+ try {
+ dbtools::checkAndCreateTable(db_str, TABLE_PWA, CREATE_TABLE_PWA);
+ dbtools::checkAndCreateTable(db_str, TABLE_INSTALLED_PWA, CREATE_TABLE_INSTALLED_PWA);
+ dbtools::checkAndCreateTable(db_str, TABLE_PERMISSION, CREATE_TABLE_PERMISSION);
+ } catch (const StorageException& e) {
+ throw StorageExceptionInitialization(e.getMessage(), e.getErrorCode());
+ }
+ m_dbPWAInitialized = true;
+ }
+}
+
+}//end namespace storage
+}//end namespace tizen_browser
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef PWASTORAGE_H
+#define PWASTORAGE_H
+
+#include "SQLDatabase.h"
+#include <map>
+
+namespace tizen_browser {
+namespace storage {
+
+class PWAStorage
+{
+public:
+
+ PWAStorage();
+ void init();
+ void addPWAItem(const std::string & url, const int & exist, const int & never);
+ unsigned installPWAItem(const std::string & name, const std::string & push_id, const std::string & shortName);
+ void deletePWAItems();
+ unsigned int getPWACount();
+ int getPWAIdFromPushId(const std::string& pushId);
+ std::string getUrlFromId(const int& id);
+ int getPWACheck(const std::string & url);
+ unsigned addPermission(const std::string& origin, const bool& state);
+ unsigned getPermissionState(const std::string& url);
+ unsigned getPermissionId(const std::string& url);
+ unsigned getPermissionCount();
+ bool updatePermissionState(const int& id, const bool& state);
+ std::map<std::string, bool> getPermissionsMap();
+ void storePWAShortcut(const unsigned& id, const std::string& shortcut);
+ std::string getPWAShortcut(const unsigned& id);
+ std::string getPWAName(const unsigned& id);
+ std::string getPWAShortName(const unsigned& id);
+
+private:
+
+ void initDatabasePWA(const std::string & db_str);
+ bool m_isInitialized;
+ bool m_dbPWAInitialized;
+ std::string DB_PWA;
+};
+
+}//end namespace storage
+}//end namespace tizen_browser
+
+#endif // PWASTORAGE_H
m_isInitialized = true;
}
-void QuickAccessStorage::addQuickAccessItem(
+unsigned QuickAccessStorage::addQuickAccessItem(
const std::string &url,
const std::string &title,
int color,
addQuickAccessItemQuery.bindInt(7, width);
addQuickAccessItemQuery.bindInt(8, height);
addQuickAccessItemQuery.exec();
- } catch (storage::StorageException &e) {
+
+ return static_cast<unsigned>(db->lastInsertId());
+ } catch (const storage::StorageException &e) {
BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
}
+ return 0;
}
-void QuickAccessStorage::deleteQuickAccessItem(unsigned int id)
+void QuickAccessStorage::deleteQuickAccessItem(const unsigned &id)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
boost::format deleteQuickAccessItemQueryString("DELETE FROM %1% WHERE %2% = ?;");
}
}
+void QuickAccessStorage::updateItemOrder(const unsigned &id, const unsigned &order)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::format updateOrderQuickAccessItemQueryString("UPDATE %1% SET %2% = ? WHERE %3% = ?;");
+ updateOrderQuickAccessItemQueryString % TABLE_QUICKACCESS % COL_ORDER % COL_ID;
+ try {
+ storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+ std::shared_ptr<storage::SQLDatabase> db = scope.database();
+ storage::SQLQuery updateOrderQuickAccessItemQuery(db->prepare(updateOrderQuickAccessItemQueryString.str()));
+ updateOrderQuickAccessItemQuery.bindInt(1, order);
+ updateOrderQuickAccessItemQuery.bindInt(2, id);
+ updateOrderQuickAccessItemQuery.exec();
+ } catch (storage::StorageException &e) {
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+}
+
unsigned int QuickAccessStorage::getQuickAccessCount()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return false;
}
+services::SharedQuickAccessItem QuickAccessStorage::getQuickAccessItem(const unsigned& id)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ services::SharedQuickAccessItem QAItem;
+ boost::format getQuickAccessItemString("SELECT %1%, %2%, %3%, %4%, %5%, %6%, %7%, %8% FROM %9% WHERE %10% = ?;");
+ getQuickAccessItemString % COL_URL % COL_TITLE % COL_COLOR % COL_ORDER % COL_HAS_FAVICON %
+ COL_FAVICON % COL_WIDTH % COL_HEIGHT % TABLE_QUICKACCESS % COL_ID;
+ try {
+ SQLTransactionScope scope(DriverManager::getDatabase(DB_QUICKACCESS));
+ std::shared_ptr<SQLDatabase> db = scope.database();
+ SQLQuery getQuickAccesItemQuery(db->prepare(getQuickAccessItemString.str()));
+ getQuickAccesItemQuery.bindInt(1, static_cast<int>(id));
+ getQuickAccesItemQuery.exec();
+
+ QAItem = std::make_shared<services::QuickAccessItem>(
+ id,
+ getQuickAccesItemQuery.getString(0),
+ getQuickAccesItemQuery.getString(1),
+ getQuickAccesItemQuery.getInt(2),
+ getQuickAccesItemQuery.getInt(3),
+ static_cast<bool>(getQuickAccesItemQuery.getInt(4)));
+
+ if (static_cast<bool>(getQuickAccesItemQuery.getInt(4))) {
+ auto blob = getQuickAccesItemQuery.getBlob(5);
+ tools::BrowserImagePtr favicon = std::make_shared<tools::BrowserImage>(
+ getQuickAccesItemQuery.getInt(6),
+ getQuickAccesItemQuery.getInt(7),
+ blob->getLength());
+ favicon->setData(const_cast<void *>(blob->getData()),
+ false, tools::ImageType::ImageTypePNG);
+ QAItem->setFavicon(favicon);
+ }
+ } catch (const StorageException& e){
+ BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+ }
+ return QAItem;
+}
+
services::SharedQuickAccessItemVector QuickAccessStorage::getQuickAccessList()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
services::SharedQuickAccessItemVector QAList;
int QACount = getQuickAccessCount();
if (QACount > 0) {
- boost::format getQuickAccessListString("SELECT %1%, %2%, %3%, %4%, %5%, %6%, %7%, %8%, %9% FROM %10% ;");
+ boost::format getQuickAccessListString(
+ "SELECT %1%, %2%, %3%, %4%, %5%, %6%, %7%, %8%, %9% FROM %10% ORDER BY %5% ASC;");
getQuickAccessListString % COL_ID % COL_URL % COL_TITLE % COL_COLOR % COL_ORDER %
COL_HAS_FAVICON % COL_FAVICON % COL_WIDTH % COL_HEIGHT % TABLE_QUICKACCESS;
try {
QuickAccessStorage();
void init();
- void addQuickAccessItem(
+ unsigned addQuickAccessItem(
const std::string &url,
const std::string &title,
int color,
tools::BrowserImagePtr favicon,
int widht,
int height);
- void deleteQuickAccessItem(unsigned int id);
+ void deleteQuickAccessItem(const unsigned &id);
+ void updateItemOrder(const unsigned &id, const unsigned &order);
unsigned int getQuickAccessCount();
bool quickAccessItemExist(const std::string &url);
+ services::SharedQuickAccessItem getQuickAccessItem(const unsigned &id);
services::SharedQuickAccessItemVector getQuickAccessList();
private:
return true;
}
-SQLQueryPrivate::SQLQueryPrivate(std::shared_ptr<SQLDatabase> db_ref,
+SQLQueryPrivate::SQLQueryPrivate(const std::shared_ptr<SQLDatabase>& db_ref,
sqlite3 * db,
sqlite3_stmt * stmt,
const std::string& query) :
SQLQuery& SQLQuery::operator = (const SQLQuery& other)
{
- if(d != other.d) {
- if(other.d) {
+ if (&other != this && d != other.d) {
+ if (other.d) {
SQLQueryPrivate * new_d = new SQLQueryPrivate(*other.d);
delete d;
d = new_d;
bool _hasNext;
std::string _query;
- SQLQueryPrivate(std::shared_ptr<SQLDatabase> db_ref, sqlite3 * db, sqlite3_stmt * stmt, const std::string& query);
+ SQLQueryPrivate(const std::shared_ptr<SQLDatabase>& db_ref, sqlite3 * db, sqlite3_stmt * stmt, const std::string& query);
SQLQueryPrivate(const SQLQueryPrivate& other);
~SQLQueryPrivate();
};
std::shared_ptr<SQLDatabase> _db;
bool _inTransaction;
public:
- SQLTransactionScope(std::shared_ptr<SQLDatabase> db);
+ explicit SQLTransactionScope(std::shared_ptr<SQLDatabase> db);
~SQLTransactionScope();
void commit();
void rollback();
{
}
-void SettingsStorage::resetSettings()
-{
- setParam(basic_webengine::WebEngineSettings::PAGE_OVERVIEW, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_PAGE_OVERVIEW)));
- setParam(basic_webengine::WebEngineSettings::LOAD_IMAGES, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES)));
- setParam(basic_webengine::WebEngineSettings::ENABLE_JAVASCRIPT, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT)));
- setParam(basic_webengine::WebEngineSettings::REMEMBER_FROM_DATA, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA)));
- setParam(basic_webengine::WebEngineSettings::REMEMBER_PASSWORDS, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS)));
- setParam(basic_webengine::WebEngineSettings::AUTOFILL_PROFILE_DATA, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA)));
- setParam(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES)));
- setParamString(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<std::string>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::SAVE_CONTENT_LOCATION)));
- setParamString(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<std::string>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::DEFAULT_SEARCH_ENGINE)));
- setParamString(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<std::string>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::CURRENT_HOME_PAGE)));
-}
-
void SettingsStorage::init(bool testmode)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
SettingsStorage();
virtual ~SettingsStorage();
- void resetSettings();
void setParam(basic_webengine::WebEngineSettings param, bool value) const;
void setParamString(basic_webengine::WebEngineSettings param, std::string value) const;
bool getParamVal(basic_webengine::WebEngineSettings param) const;
#include "ServiceFactory.h"
#include "service_macros.h"
#include "SettingsStorage.h"
-#include "FoldersStorage.h"
#include "CertificateStorage.h"
#include "QuickAccessStorage.h"
+#include "PWAStorage.h"
#define DOMAIN_STORAGE_SERVICE "org.tizen.browser.storageservice"
virtual std::string getName();
storage::SettingsStorage& getSettingsStorage() { return m_settingsStorage; }
- storage::FoldersStorage& getFoldersStorage() { return m_foldersStorage; }
storage::CertificateStorage& getCertificateStorage() { return m_certificateStorage; }
storage::QuickAccessStorage& getQuickAccessStorage() { return m_quickaccessStorage; }
+ storage::PWAStorage getPWAStorage() const { return m_pwaStorage; }
private:
storage::SettingsStorage m_settingsStorage;
- storage::FoldersStorage m_foldersStorage;
storage::CertificateStorage m_certificateStorage;
storage::QuickAccessStorage m_quickaccessStorage;
+ storage::PWAStorage m_pwaStorage;
};
return adaptorId;
}
-boost::optional<int> TabService::convertTabId(std::string tabId) const
-{
- try {
- boost::optional<int> tabIdConverted = std::stoi(tabId);
- return tabIdConverted;
- } catch (const std::exception& /*e*/) {
- BROWSER_LOGE("%s can't convert %s to tab id",
- __PRETTY_FUNCTION__,
- tabId.c_str());
- return boost::none;
- }
-}
-
void TabService::errorPrint(std::string method) const
{
int error_code = bp_tab_adaptor_get_errorcode();
BROWSER_LOGW("getBlobPNG failed");
return;
}
- auto thumbData = std::move((unsigned char*)thumb_blob->getData());
+ auto thumbData = const_cast<unsigned char*>( static_cast<const unsigned char*>(thumb_blob->getData()));
if (bp_tab_adaptor_set_snapshot(
tabId.get(),
imagePtr->getWidth(),
BROWSER_LOGW("getBlobPNG failed");
return;
}
- auto faviconData = std::move((unsigned char*)favicon_blob->getData());
+ auto faviconData = const_cast<unsigned char*>(static_cast<const unsigned char*>(favicon_blob->getData()));
if (bp_tab_adaptor_set_icon(
tabId.get(),
imagePtr->getWidth(),
*/
int createTabId(int tabId = -1) const;
- /**
- * Convert tab id (string) to int.
- *
- * @return boost::none if string cannot be converted
- */
- boost::optional<int> convertTabId(std::string tabId) const;
-
boost::signals2::signal<void(basic_webengine::TabId)> generateThumb;
boost::signals2::signal<void(basic_webengine::TabId)> generateFavicon;
, m_genlist(nullptr)
, m_entry(nullptr)
, m_checkbox(nullptr)
+ , m_limit(nullptr)
+ , m_password_item(nullptr)
+ , m_action(PasswordAction::CreatePasswordFirstTime)
, m_state(PasswordState::CreatePassword)
{
+ TabTranslations::instance().update();
m_edjFilePath = EDJE_DIR;
m_edjFilePath.append("TabUI/PasswordUI.edj");
createGenlistItemClasses();
PasswordUI::~PasswordUI()
{
+ if (m_genlist)
+ evas_object_smart_callback_del(m_genlist, "language,changed", _language_changed);
+ if (m_limit)
+ free(m_limit);
}
void PasswordUI::showUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ TabTranslations::instance().update();
M_ASSERT(m_naviframe->getLayout());
m_naviframe->show();
changeState(m_state);
return nullptr;
}
+void PasswordUI::_language_changed(void *data, Evas_Object* obj, void*)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ TabTranslations::instance().update();
+ if (!data) {
+ BROWSER_LOGE("data is null");
+ return;
+ }
+ auto self = static_cast<PasswordUI*>(data);
+ self->changeState(self->m_state);
+ elm_genlist_realized_items_update(obj);
+}
+
Evas_Object* PasswordUI::_genlist_password_content_get(void *data, Evas_Object *obj, const char *part)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
elm_entry_single_line_set(passwordData->passwordUI->m_entry, EINA_TRUE);
elm_entry_scrollable_set(passwordData->passwordUI->m_entry, EINA_TRUE);
tools::EflTools::setExpandHints(passwordData->passwordUI->m_entry);
+ passwordData->passwordUI->m_limit = tools::EflTools::setEntryLimit(
+ passwordData->passwordUI->m_entry);
elm_entry_entry_set(passwordData->passwordUI->m_entry, elm_entry_utf8_to_markup(""));
elm_entry_password_set(passwordData->passwordUI->m_entry, EINA_TRUE);
elm_entry_input_panel_return_key_type_set(passwordData->passwordUI->m_entry,
elm_object_style_set(checkbox, "on&off");
elm_check_state_set(checkbox,
passwordData->passwordUI->getDBPassword().empty() ? EINA_FALSE : EINA_TRUE);
- evas_object_propagate_events_set(checkbox, EINA_TRUE);
+ evas_object_propagate_events_set(checkbox, EINA_FALSE);
+ evas_object_smart_callback_add(checkbox, "changed", _use_password_clicked, data);
return checkbox;
}
} else {
m_naviframe = std::make_unique<NaviframeWrapper>(m_parent);
m_genlist = elm_genlist_add(m_naviframe->getLayout());
+ evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
elm_scroller_policy_set(m_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
elm_genlist_multi_select_set(m_genlist, EINA_FALSE);
elm_genlist_select_mode_set(m_genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
elm_genlist_clear(m_genlist);
m_state = state;
- BROWSER_LOGD("___________ %d", m_state);
if (m_state != PasswordState::SecretModeData) {
//Add password item
auto passwordData = std::make_shared<PasswordUIData>();
switch (m_state) {
case PasswordState::ConfirmPassword:
- text = _(Translations::ConfirmPassword.c_str());
- m_naviframe->setTitle("Confirm password");
+ text = TabTranslations::instance().ConfirmPassword.c_str();
+ m_naviframe->setTitle("IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2");
break;
case PasswordState::IncorrectPassword:
- text = _(Translations::IncorrectPassword.c_str());
+ text = TabTranslations::instance().IncorrectPassword.c_str();
break;
case PasswordState::CreatePassword:
- text = (boost::format(_(Translations::CreatePassword.c_str()))
+ text = (boost::format(TabTranslations::instance().CreatePassword.c_str())
% PASSWORD_MINIMUM_CHARACTERS).str();
- m_naviframe->setTitle("Create password");
+ m_naviframe->setTitle("IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB");
break;
case PasswordState::ConfirmCreatePassword:
- text = _(Translations::ConfirmCreatePassword.c_str());
+ text = TabTranslations::instance().ConfirmCreatePassword.c_str();
break;
default:
break;
}
- BROWSER_LOGD("___________ %s", text.c_str());
passwordData->text = text;
passwordData->passwordUI = this;
m_password_item = elm_genlist_item_append(m_genlist, m_password_item_class, passwordData.get(),
//Add ShowPassword checkbox
auto checkboxData = std::make_shared<PasswordUIData>();
m_genlistItemData.push_back(checkboxData);
- checkboxData->text = _(Translations::ShowPassword.c_str());
+ checkboxData->text = TabTranslations::instance().ShowPassword.c_str();
checkboxData->passwordUI = this;
elm_genlist_item_append(m_genlist, m_checkbox_item_class, checkboxData.get(), nullptr,
ELM_GENLIST_ITEM_NONE, _show_password_clicked, checkboxData.get());
} else {
- m_naviframe->setTitle(_("IDS_BR_OPT_SECRET_MODE_SECURITY_ABB"));
+ m_naviframe->setTitle("IDS_BR_OPT_SECRET_MODE_SECURITY_ABB");
//Add UsePassword check_on_off
auto checkOnOffData = std::make_shared<PasswordUIData>();
m_genlistItemData.push_back(checkOnOffData);
- checkOnOffData->text = _(Translations::UsePassword.c_str());
+ checkOnOffData->text = TabTranslations::instance().UsePassword.c_str();
checkOnOffData->passwordUI = this;
elm_genlist_item_append(m_genlist, m_check_on_of_item_class, checkOnOffData.get(), nullptr,
ELM_GENLIST_ITEM_NONE, _use_password_clicked, checkOnOffData.get());
if (!getDBPassword().empty()) {
auto changeData = std::make_shared<PasswordUIData>();
m_genlistItemData.push_back(changeData);
- changeData->text = _(Translations::ChangePassword.c_str());
+ changeData->text = TabTranslations::instance().ChangePassword.c_str();
changeData->passwordUI = this;
elm_genlist_item_append(m_genlist, m_text_item_class, changeData.get(), nullptr,
ELM_GENLIST_ITEM_NONE, _change_password_clicked, changeData.get());
case PasswordAction::ConfirmPasswordEnterSecret:
self->changeEngineState();
self->closeUI();
+ break;
default:
BROWSER_LOGW("Action state is not supported in Password workflow");
break;
std::string s = std::string(elm_object_text_get(self->m_entry));
if (s.length() < PASSWORD_MINIMUM_CHARACTERS ||
!checkIfStringContainsLetter(s)) {
- elm_object_text_set(self->m_entry, "");
+ elm_object_translatable_text_set(self->m_entry, "");
} else {
self->m_not_confirmed_hash = hash;
self->changeState(PasswordState::ConfirmCreatePassword);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
PasswordUI* passwordUI = static_cast<PasswordUI*>(data);
- elm_check_state_set(passwordUI->m_checkbox,
- !elm_check_state_get(passwordUI->m_checkbox));
+ elm_check_state_set(passwordUI->m_checkbox, !elm_check_state_get(passwordUI->m_checkbox));
elm_entry_password_set(passwordUI->m_entry, !elm_check_state_get(passwordUI->m_checkbox));
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
static void _show_password_clicked(void* data, Evas_Object*, void*);
static void _use_password_clicked(void* data, Evas_Object*, void*);
static void _change_password_clicked(void* data, Evas_Object*, void*);
+ static void _language_changed(void *data, Evas_Object* obj, void*);
//Genlist items create callbacks
static char* _genlist_item_text_get(void *data, Evas_Object *obj, const char *part);
Evas_Object* m_entry;
Evas_Object* m_checkbox;
+ Elm_Entry_Filter_Limit_Size* m_limit;
+
Elm_Object_Item *m_password_item;
Elm_Genlist_Item_Class *m_password_item_class;
, m_content(nullptr)
, m_gengrid(nullptr)
, m_empty_layout(nullptr)
+ , m_popup_genlist(nullptr)
+ , m_popup_decision(true)
, m_itemToShow(nullptr)
, m_last_pressed_gengrid_item(nullptr)
, m_item_class(nullptr)
+ , m_popup_text_item_class(nullptr)
+ , m_popup_checkbox_item_class(nullptr)
+ , m_edjFilePath(std::string(EDJE_DIR) + std::string("TabUI/TabUI.edj"))
, m_state(State::NORMAL)
, m_passwordUI(std::make_shared<PasswordUI>())
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("TabUI/TabUI.edj");
createTabItemClass();
}
TabUI::~TabUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_gengrid_item_class_free(m_item_class);
+ if (m_gengrid)
+ evas_object_smart_callback_del(m_gengrid, "language,changed", _language_changed);
+ if (m_item_class)
+ elm_gengrid_item_class_free(m_item_class);
+ if (m_popup_text_item_class)
+ elm_genlist_item_class_free(m_popup_text_item_class);
+ if (m_popup_checkbox_item_class)
+ elm_genlist_item_class_free(m_popup_checkbox_item_class);
}
void TabUI::createTabItemClass()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (!m_item_class) {
m_item_class = elm_gengrid_item_class_new();
- m_item_class->item_style = "custom_tab_item";
- m_item_class->func.text_get = _gengrid_text_get;
+ m_item_class->item_style = "default";
+ m_item_class->func.text_get = nullptr;
m_item_class->func.content_get = _gengrid_content_get;
m_item_class->func.state_get = nullptr;
m_item_class->func.del = nullptr;
}
+
+ if (!m_popup_text_item_class) {
+ m_popup_text_item_class = elm_genlist_item_class_new();
+ m_popup_text_item_class->item_style = "multiline";
+ m_popup_text_item_class->func.text_get = _genlist_text_get;
+ m_popup_text_item_class->func.content_get = nullptr;
+ m_popup_text_item_class->func.state_get = nullptr;
+ m_popup_text_item_class->func.del = nullptr;
+ }
+
+ if (!m_popup_checkbox_item_class) {
+ m_popup_checkbox_item_class = elm_genlist_item_class_new();
+ m_popup_checkbox_item_class->item_style = "type1";
+ m_popup_checkbox_item_class->func.text_get = _genlist_checkbox_text_get;
+ m_popup_checkbox_item_class->func.content_get = _genlist_content_get;
+ m_popup_checkbox_item_class->func.state_get = nullptr;
+ m_popup_checkbox_item_class->func.del = nullptr;
+ }
}
void TabUI::showUI()
return m_naviframe->getLayout();
}
+Evas_Object* TabUI::getPopupContent(Evas_Object* parent)
+{
+ if (m_popup_genlist) {
+ evas_object_del(m_popup_genlist);
+ m_popup_genlist = nullptr;
+ }
+ m_popup_genlist = elm_genlist_add(parent);
+
+ elm_scroller_policy_set(m_popup_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ elm_genlist_mode_set(m_popup_genlist, ELM_LIST_COMPRESS);
+ evas_object_size_hint_weight_set(m_popup_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_popup_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ elm_genlist_item_select_mode_set(elm_genlist_item_append(m_popup_genlist, m_popup_text_item_class,
+ this, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, nullptr), ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ elm_genlist_item_select_mode_set(elm_genlist_item_append(m_popup_genlist, m_popup_checkbox_item_class,
+ this, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, nullptr), ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ evas_object_show(m_popup_genlist);
+
+ return m_popup_genlist;
+}
+
void TabUI::createTabUILayout()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
void TabUI::createTopContent()
{
- m_naviframe->setTitle(_("IDS_BR_SK_TABS"));
+ m_naviframe->setTitle("IDS_BR_SK_TABS");
m_naviframe->addPrevButton(_close_clicked, this);
m_naviframe->setPrevButtonVisible(true);
}
//TODO: Missing translation
m_naviframe->addButtonToBottomBar("Enable Secret", _left_button_clicked, this);
m_naviframe->setEnableButtonInBottomBar(0, true);
- m_naviframe->addButtonToBottomBar(_("IDS_BR_BUTTON_NEW_TAB_ABB2"), _right_button_clicked, this);
+ m_naviframe->addButtonToBottomBar("IDS_BR_BUTTON_NEW_TAB_ABB2", _right_button_clicked, this);
m_naviframe->setEnableButtonInBottomBar(1, true);
}
m_empty_layout = elm_layout_add(m_content);
elm_layout_theme_set(m_empty_layout, "layout", "nocontents", "default");
+ changeEmptyLayoutText();
+
evas_object_size_hint_weight_set(m_empty_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- //TODO: Add translations
- if (m_state != State::PASSWORD_DECISION)
- elm_object_translatable_part_text_set(m_empty_layout, "elm.text", _("IDS_BR_BODY_NO_TABS"));
- //TODO: _("IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE") when it works
- if (m_state == State::SECRET || m_state == State::PASSWORD_DECISION)
- elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
- "Any webpages viewed while Secret mode is enabled will not appear "
- "in your browser or search history while Secret mode is "
- "disabled. Any bookmarks and webpages saved while Secretmode "
- "is enabled will not be shown while it is disabled.");
- else
- elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
- _("IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE"));
-
elm_layout_signal_emit(m_empty_layout, "text,disabled", "");
elm_layout_signal_emit(m_empty_layout, "align.center", "elm");
elm_object_part_content_set(m_content, "elm.swallow.content_overlay", m_empty_layout);
}
+void TabUI::changeEmptyLayoutText()
+{
+ if (m_state != State::PASSWORD_DECISION)
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text",
+ "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS");
+ std::string message;
+ switch (m_state) {
+ case State::SECRET:
+ message = "IDS_BR_BODY_ANY_WEBPAGES_YOU_VIEW_WHILE_SECRET_MODE_IS_TURNED_ON_WONT_"
+ "APPEAR_IN_YOUR_BROWSER_OR_SEARCH_MSG";
+ break;
+ case State::PASSWORD_DECISION:
+ message = "IDS_BR_BODY_ANY_WEBPAGES_YOU_VIEW_WHILE_SECRET_MODE_IS_TURNED_ON_WONT_"
+ "APPEAR_IN_YOUR_BROWSER_OR_SEARCH_HISTORY_MSG";
+ break;
+ case State::NORMAL:
+ message = "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET";
+ break;
+ default:
+ BROWSER_LOGW("[%s:%d] Illegal state", __PRETTY_FUNCTION__, __LINE__);
+ break;
+ }
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", message.c_str());
+}
+
void TabUI::createGengrid()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_gengrid = elm_gengrid_add(m_content);
evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
- elm_scroller_page_size_set(m_gengrid, ELM_SCALE_SIZE(720), ELM_SCALE_SIZE(0));
- elm_gengrid_item_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH),
- ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
elm_scroller_bounce_set(m_gengrid, EINA_FALSE, EINA_FALSE);
- elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_NONE);
elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
- elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
- elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
+ elm_gengrid_highlight_mode_set(m_gengrid, EINA_FALSE);
+ elm_gengrid_align_set(m_gengrid, 0.5, 0);
+
evas_object_smart_callback_add(m_gengrid, "pressed", _gengrid_tab_pressed, this);
evas_object_smart_callback_add(m_gengrid, "released", _gengrid_tab_released, this);
evas_object_smart_callback_add(m_gengrid, "realized", _gengrid_tab_realized, this);
+ evas_object_smart_callback_add(m_gengrid, "language,changed", _language_changed, this);
elm_object_part_content_set(m_content, "elm.swallow.content", m_gengrid);
evas_object_show(m_gengrid);
}
+void TabUI::_language_changed(void* data, Evas_Object* obj, void*)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ auto self = static_cast<TabUI*>(data);
+ self->createEmptyLayout();
+ elm_gengrid_clear(obj);
+ self->refetchTabUIData();
+ elm_genlist_realized_items_update(obj);
+}
+
+void TabUI::_decision_check_changed(void* data, Evas_Object* obj, void*)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ if (data && obj) {
+ auto self = static_cast<TabUI*>(data);
+ self->m_popup_decision = elm_check_state_get(obj) == EINA_TRUE;
+ } else
+ BROWSER_LOGW("[%s] data or obj = nullptr", __PRETTY_FUNCTION__);
+}
+
void TabUI::_close_clicked(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
void TabUI::orientationChanged()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- boost::optional<bool> landscape = isLandscape();
+ auto landscape = isLandscape();
if (landscape) {
std::string state;
if (*landscape) {
+ state = "switch_landscape";
+ elm_scroller_page_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE));
elm_gengrid_item_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE));
- elm_object_signal_emit(m_content, "switch_landscape", "ui");
- state = "state_landscape";
} else {
+ state = "switch_vertical";
+ elm_scroller_page_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
elm_gengrid_item_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
- elm_object_signal_emit(m_content, "switch_vertical", "ui");
- state = "state_default";
}
+ elm_object_signal_emit(m_content, state.c_str(), "ui");
Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
while (it) {
- elm_object_item_signal_emit(it, state.c_str(), "ui");
+ auto scroller = elm_object_item_part_content_get(it, "elm.swallow.icon");
+ auto box = elm_object_content_get(scroller);
+ auto obj = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+ auto empty = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 1));
+ elm_object_signal_emit(obj, state.c_str(), "ui");
+ elm_object_signal_emit(empty, state.c_str(), "ui");
it = elm_gengrid_item_next_get(it);
}
} else {
Elm_Object_Item* it = elm_gengrid_first_item_get(tabUI->m_gengrid);
Elm_Object_Item* it_next;
while (it) {
- TabData *item = (TabData *)elm_object_item_data_get(it);
+ TabData *item = static_cast<TabData *>(elm_object_item_data_get(it));
it_next = elm_gengrid_item_next_get(it);
elm_object_item_del(it);
tabUI->closeTabsClicked(item->item->getId());
} else {
BROWSER_LOGW("[%s] data or event_info = nullptr", __PRETTY_FUNCTION__);
}
+
return EVAS_EVENT_FLAG_NONE;
}
self->showNoPasswordWarning();
break;
}
-
self->setStateButtons();
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
TabData *itemData = new TabData();
itemData->item = hi;
itemData->tabUI = this;
- Elm_Object_Item* tab = elm_gengrid_item_append(m_gengrid, m_item_class, itemData,
- nullptr, nullptr);
+ Elm_Object_Item* tab =
+ elm_gengrid_item_append(
+ m_gengrid,
+ m_item_class,
+ itemData,
+ nullptr,
+ nullptr);
// Check if item_object was created successfully
if (tab)
elm_gengrid_item_selected_set(tab, EINA_FALSE);
{
switch (m_state) {
case State::NORMAL:
- m_naviframe->setBottomButtonText(0, "Enable Secret");
- m_naviframe->setBottomButtonText(1, "New tab");
+ m_naviframe->setBottomButtonText(0, "IDS_BR_OPT_ENABLE_SECRET_MODE_ABB");
+ m_naviframe->setBottomButtonText(1, "IDS_BR_BUTTON_NEW_TAB_ABB2");
break;
case State::SECRET:
- m_naviframe->setBottomButtonText(0, "Disable Secret");
- m_naviframe->setBottomButtonText(1, _("IDS_BR_BUTTON_NEW_TAB_ABB2"));
+ m_naviframe->setBottomButtonText(0, "IDS_BR_OPT_DISABLE_SECRET_MODE_ABB");
+ m_naviframe->setBottomButtonText(1, "IDS_BR_BUTTON_NEW_TAB_ABB2");
break;
case State::PASSWORD_DECISION:
- m_naviframe->setBottomButtonText(0, "Do not use password");
- m_naviframe->setBottomButtonText(1, "Create password");
+ m_naviframe->setBottomButtonText(0, "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB");
+ m_naviframe->setBottomButtonText(1, "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB");
break;
}
}
return nullptr;
}
+char* TabUI::_genlist_text_get(void* , Evas_Object* , const char* part)
+{
+ BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
+ if (!strcmp(part, "elm.text.multiline")) {
+ //TODO: Missing translation
+ return strdup("The maximum number of tabs (20) has been reached."
+ " To open a new tab, the oldest tab will be closed.");
+ }
+ return nullptr;
+}
+
+char* TabUI::_genlist_checkbox_text_get(void* , Evas_Object* , const char* part)
+{
+ BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
+ if (!strcmp(part, "elm.text")) {
+ return strdup(_("IDS_BR_OPT_DO_NOT_SHOW_AGAIN"));
+ }
+ return nullptr;
+}
+
+Evas_Object* TabUI::createFavicon(TabData* data, Evas_Object* parent)
+{
+ auto favicon = data->item->getFavicon();
+ if (favicon) {
+ auto faviconEvas = favicon->getEvasImage(parent);
+ evas_object_size_hint_min_set(faviconEvas, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+ evas_object_size_hint_max_set(faviconEvas, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+ return faviconEvas;
+ } else {
+ auto layout = elm_layout_add(parent);
+ elm_layout_file_set(layout, data->tabUI->m_edjFilePath.c_str(), "favicon_image");
+ return layout;
+ }
+}
+
+Evas_Object* TabUI::createItem(TabData* itemData, Evas_Object* box)
+{
+ auto layout = elm_layout_add(box);
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_layout_file_set(layout, m_edjFilePath.c_str(), "elm/layout/custom_tab_item/default");
+ evas_object_show(layout);
+
+ auto button = elm_button_add(box);
+ elm_object_style_set(button, "invisible_button");
+ evas_object_smart_callback_add(button, "clicked", _gengrid_tab_clicked, itemData);
+
+ auto favicon = createFavicon(itemData, box);
+
+ auto delete_button = elm_button_add(box);
+ elm_object_style_set(delete_button, "delete_button");
+ evas_object_smart_callback_add(delete_button, "clicked", _close_tab_clicked, itemData);
+
+ auto thumbnail = itemData->item->getThumbnail();
+ Evas_Object* thumb = nullptr;
+ if (thumbnail) {
+ thumb = thumbnail->getEvasImage(box);
+ evas_object_size_hint_min_set(thumb,
+ ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE - 10),
+ ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE - 75));
+ evas_object_size_hint_max_set(thumb,
+ ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH - 10),
+ ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT - 75));
+ }
+
+ elm_object_part_content_set(layout, "elm.icon", favicon);
+ elm_object_part_content_set(layout, "elm.overlay", button);
+ elm_object_part_content_set(layout, "elm.button", delete_button);
+ elm_object_part_content_set(layout, "elm.thumbnail", thumb);
+ elm_object_part_text_set(layout, "elm.text", itemData->item->getTitle().c_str());
+
+ return layout;
+}
+
+Evas_Object* TabUI::createContent(TabData* itemData, Evas_Object* obj)
+{
+ auto scroller = elm_scroller_add(obj);
+ elm_scroller_propagate_events_set(scroller, EINA_TRUE);
+ evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_scroller_page_scroll_limit_set(scroller, 2, 1);
+ elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
+ if (*isLandscape()) {
+ elm_scroller_page_size_set(scroller,
+ ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE),
+ ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE));
+ } else {
+ elm_scroller_page_size_set(scroller,
+ ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH),
+ ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
+ }
+ elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
+ evas_object_smart_callback_add(scroller, "edge,right", _gengrid_swiped, itemData);
+
+ auto box = elm_box_add(scroller);
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_horizontal_set(box, EINA_TRUE);
+ elm_box_homogeneous_set(box, EINA_FALSE);
+
+ auto layout = createItem(itemData, box);
+
+ auto empty_layout = elm_layout_add(box);
+ evas_object_size_hint_weight_set(empty_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_layout_file_set(empty_layout, m_edjFilePath.c_str(), "elm/layout/empty/default");
+
+ elm_box_pack_end(box, layout);
+ elm_box_pack_end(box, empty_layout);
+
+ elm_object_content_set(scroller, box);
+ return scroller;
+}
+
Evas_Object * TabUI::_gengrid_content_get(void *data, Evas_Object *obj, const char *part)
{
BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
if (data && obj && part) {
auto itemData = static_cast<TabData*>(data);
- if (!strcmp(part, "elm.icon")) {
- auto favicon = itemData->item->getFavicon();
- if (favicon) {
- auto faviconEvas = favicon->getEvasImage(obj);
- evas_object_size_hint_min_set(faviconEvas,
- ELM_SCALE_SIZE(40),
- ELM_SCALE_SIZE(40));
- evas_object_size_hint_max_set(faviconEvas,
- ELM_SCALE_SIZE(40),
- ELM_SCALE_SIZE(40));
- return faviconEvas;
- } else {
- auto layout = elm_layout_add(obj);
- elm_layout_file_set(layout, itemData->tabUI->m_edjFilePath.c_str(), "favicon_image");
- return layout;
- }
- }
- if (!strcmp(part, "elm.button")) {
- auto button = elm_button_add(obj);
- elm_object_style_set(button, "delete_button");
- evas_object_smart_callback_add(button, "clicked", _close_tab_clicked, data);
- return button;
- }
- if (!strcmp(part, "elm.thumbnail")) {
- auto thumbnail = itemData->item->getThumbnail();
- if (thumbnail)
- return thumbnail->getEvasImage(obj);
- }
- if (!strcmp(part, "elm.overlay")) {
- auto button = elm_button_add(obj);
- elm_object_style_set(button, "invisible_button");
- evas_object_smart_callback_add(button, "clicked", _gengrid_tab_clicked, data);
-
- auto gesture = elm_gesture_layer_add(obj);
- elm_gesture_layer_attach(gesture, button);
- elm_gesture_layer_continues_enable_set(gesture, EINA_FALSE);
- elm_gesture_layer_cb_add(gesture, ELM_GESTURE_N_LINES, ELM_GESTURE_STATE_MOVE,
- _gesture_occured, data);
- return button;
- }
+ if (!strcmp(part, "elm.swallow.icon"))
+ return itemData->tabUI->createContent(itemData, obj);
} else {
BROWSER_LOGE("[%s:%d] Data or obj or part is null", __PRETTY_FUNCTION__, __LINE__);
}
return nullptr;
}
+Evas_Object * TabUI::_genlist_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
+ if (data && obj && part) {
+ if (!strcmp(part, "elm.swallow.icon")) {
+ TabUI *self = static_cast<TabUI*>(data);
+ auto checkbox = elm_check_add(obj);
+ evas_object_smart_callback_add(checkbox, "changed", self->_decision_check_changed, self);
+ elm_check_state_set(checkbox, EINA_TRUE);
+ evas_object_show(checkbox);
+ return checkbox;
+ }
+ } else {
+ BROWSER_LOGE("[%s:%d] Obj or part is null", __PRETTY_FUNCTION__, __LINE__);
+ }
+ return nullptr;
+}
+
+
void TabUI::_gengrid_tab_pressed(void *data, Evas_Object *, void *event_info)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto object_item = static_cast<Elm_Object_Item*>(event_info);
auto tabUI = static_cast<TabUI*>(data);
tabUI->m_last_pressed_gengrid_item = object_item;
- elm_object_signal_emit(
- elm_object_item_part_content_get(object_item, "elm.icon"),
- "on_mouse_down", "ui");
+ auto scroller = elm_object_item_part_content_get(object_item, "elm.swallow.icon");
+ auto box = elm_object_content_get(scroller);
+ auto layout = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+ auto icon = elm_object_part_content_get(layout, "elm.icon");
+ elm_object_signal_emit(layout, "elm,state,selected", "elm");
+ elm_object_signal_emit(icon, "on_mouse_down", "ui");
} else {
BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (event_info) {
auto object_item = static_cast<Elm_Object_Item*>(event_info);
- elm_object_signal_emit(
- elm_object_item_part_content_get(object_item, "elm.icon"),
- "on_mouse_up", "ui");
+ auto scroller = elm_object_item_part_content_get(object_item, "elm.swallow.icon");
+ auto box = elm_object_content_get(scroller);
+ auto layout = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+ auto icon = elm_object_part_content_get(layout, "elm.icon");
+ elm_object_signal_emit(layout, "elm,state,unselected", "elm");
+ elm_object_signal_emit(icon, "on_mouse_up", "ui");
} else {
BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
}
}
}
+void TabUI::_gengrid_swiped(void* data, Evas_Object *, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ if (data) {
+ auto tabData = static_cast<TabData*>(data);
+ tabData->tabUI->_close_tab_clicked(data, nullptr, nullptr);
+ tabData->tabUI->orientationChanged();
+ }
+}
void TabUI::_gengrid_tab_realized(void *, Evas_Object *, void *event_info)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (event_info) {
auto tabItem = static_cast<Elm_Object_Item*>(event_info);
auto tabData = static_cast<TabData*>(elm_object_item_data_get(tabItem));
- auto favicon = elm_object_item_part_content_get(tabItem, "elm.icon");
+
+ auto scroller = elm_object_item_part_content_get(tabItem, "elm.swallow.icon");
+ auto box = elm_object_content_get(scroller);
+ auto layout = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+ auto icon = elm_object_part_content_get(layout, "elm.icon");
+
if (tabData->item->getIsSecret()) {
- elm_object_item_signal_emit(tabItem, "state_secret", "ui");
- elm_object_signal_emit(favicon, "state_secret", "ui");
+ elm_object_signal_emit(layout, "state_secret", "ui");
+ elm_object_signal_emit(icon, "state_secret", "ui");
} else {
- elm_object_item_signal_emit(tabItem, "state_normal", "ui");
- elm_object_signal_emit(favicon, "state_normal", "ui");
+ elm_object_signal_emit(layout, "state_normal", "ui");
+ elm_object_signal_emit(icon, "state_normal", "ui");
}
+ tabData->tabUI->orientationChanged();
} else {
BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (forceShow || elm_gengrid_items_count(m_gengrid) == 0) {
+ changeEmptyLayoutText();
evas_object_show(m_empty_layout);
elm_object_signal_emit(m_content, "show_overlay", "ui");
} else {
public:
TabUI();
~TabUI();
+ TabUI(const TabUI&) = delete;
+ TabUI& operator=(const TabUI&) = delete;
+
//AbstractUIComponent interface implementation
void showUI();
void hideUI();
void init(Evas_Object *parent);
Evas_Object* getContent();
+ Evas_Object* getPopupContent(Evas_Object *parent);
+ bool getPopupDecision() const { return m_popup_decision; };
virtual std::string getName();
};
static char* _gengrid_text_get(void *data, Evas_Object *obj, const char *part);
+ static char* _genlist_text_get(void *data, Evas_Object *obj, const char *part);
+ static char* _genlist_checkbox_text_get(void *data, Evas_Object *obj, const char *part);
static Evas_Object * _gengrid_content_get(void *data, Evas_Object *obj, const char *part);
+ static Evas_Object * _genlist_content_get(void *data, Evas_Object *obj, const char *part);
static void _gengrid_tab_pressed(void * data, Evas_Object * obj, void * event_info);
static void _gengrid_tab_released(void * data, Evas_Object * obj, void * event_info);
static void _gengrid_tab_clicked(void * data, Evas_Object * obj, void * event_info);
static void _gengrid_tab_realized(void * data, Evas_Object * obj, void * event_info);
+ static void _gengrid_swiped(void *, Evas_Object *, void *event_info);
static void _close_clicked(void *data, Evas_Object *obj, void *event_info);
+ static void _language_changed(void *, Evas_Object*obj , void*);
+ static void _decision_check_changed(void *data, Evas_Object *obj, void *event_info);
void updateNoTabsText(bool forceShow=false);
static void _openedtabs_clicked(void * data, Evas_Object * obj, void * event_info);
static Evas_Event_Flags _gesture_occured(void * data, void * event_info);
SharedNaviframeWrapper m_naviframe;
+ Evas_Object* createFavicon(TabData* data, Evas_Object* parent);
+ Evas_Object* createContent(TabData* data, Evas_Object* obj);
+ Evas_Object* createItem(TabData* data, Evas_Object* obj);
void createTabUILayout();
void createTopContent();
void createBottomContent();
void createEmptyLayout();
+ void changeEmptyLayoutText();
void createGengrid();
void createTabItemClass();
void addTabItem(basic_webengine::TabContentPtr);
Evas_Object *m_gengrid;
Evas_Object *m_empty_layout;
+ Evas_Object *m_popup_genlist;
+ bool m_popup_decision;
+
Elm_Object_Item* m_itemToShow;
Elm_Object_Item* m_last_pressed_gengrid_item;
Elm_Gengrid_Item_Class * m_item_class;
+ Elm_Genlist_Item_Class * m_popup_text_item_class;
+ Elm_Genlist_Item_Class * m_popup_checkbox_item_class;
std::string m_edjFilePath;
State m_state;
#include "../../../core/Tools/edc/InvisibleButton.edc"
#include "../../../core/Tools/edc/ColorClasses.edc"
-#define ON_OTHER_DEVICE 0
-collections { base_scale: 2.6;
+collections {
+ base_scale: 2.6;
- group { name: "bottom_bar_with_margins";
- parts {
- rect { "top_left_content_spacer"; scale;
- description { "default";
- min: 32 0;
- max: 32 0;
- align: 0 0;
- fixed: 1 1;
- visible: 0;
- }
- }
- rect { "bottom_right_content_spacer"; scale;
- description { "default";
- min: 32 0;
- max: 32 0;
- align: 1 1;
- fixed: 1 1;
- visible: 0;
- }
- }
- swallow { "elm.swallow.content"; scale;
- description { "default";
- rel1 {
- relative: 1 1;
- to: "top_left_content_spacer";
- }
- rel2 {
- relative: 0 0;
- to: "bottom_right_content_spacer";
- }
- }
- }
- }
- }
+ styles {
+ style {
+ name: "selected_text";
+ base: "font=Tizen:style=Regular font_size=36 color=#ffffff color_class=ATO015 text_class=ATO015 ellipsis=1.0";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "b" "+ font_weight=Bold";
+ }
+ style {
+ name: "normal_text";
+ base: "font=Tizen:style=Regular font_size=36 color=#000000 color_class=ATO016 text_class=ATO016 ellipsis=1.0";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "b" "+ font_weight=Bold";
+ }
+ }
- group { name: "naviframe_content";
- parts {
- rect { "content_top_left_spacer"; scale;
- description { "default";
- min: 10 0;
- max: 10 0;
- fixed: 1 1;
- align: 0.0 0.0;
- }
- description { "landscape";
- inherit: "default";
- min: 0 0;
- max: 0 0;
- }
- }
- rect { "content_bottom_right_spacer"; scale;
- description { "default";
- min: 10 0;
- max: 10 0;
- fixed: 1 1;
- align: 1 1;
- }
- description { "landscape";
- inherit: "default";
- min: 0 0;
- max: 0 0;
- }
- }
- swallow { "elm.swallow.content"; scale;
- mouse_events: 1;
- description { "default";
- align: 0.0 0.0;
- min: 0 0;
- max: -1 -1;
- fixed: 0 0;
- rel1 {
- relative: 1.0 1.0;
- to: "content_top_left_spacer";
- }
- rel2 {
- relative: 0 0;
- to: "content_bottom_right_spacer";
- }
- }
- }
- swallow { "elm.swallow.content_overlay"; scale;
- multiline: 1;
- description { "default";
- visible: 0;
- }
- description { "visible";
- inherit: "default";
- visible: 1;
- }
- }
- }
- programs {
- program {
- name: "show_overlay";
- signal: "show_overlay";
- source: "ui";
- action: STATE_SET "visible" 0.0;
- target: "elm.swallow.content_overlay";
- }
- program {
- name: "hide_overlay";
- signal: "hide_overlay";
- source: "ui";
- action: STATE_SET "default" 0.0;
- target: "elm.swallow.content_overlay";
- }
- program {
- name: "switch_landscape";
- signal: "switch_landscape";
- source: "ui";
- action: STATE_SET "landscape" 0.0;
- target: "content_top_left_spacer";
- target: "content_bottom_right_spacer";
- }
- program {
- name: "switch_vertical";
- signal: "switch_vertical";
- source: "ui";
- action: STATE_SET "default" 0.0;
- target: "content_top_left_spacer";
- target: "content_bottom_right_spacer";
- }
- }
- }
+ group { "bottom_bar_with_margins";
+ parts {
+ spacer { "top_left_content_spacer"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 0 0;
+ fixed: 1 1;
+ }
+ }
+ spacer { "bottom_right_content_spacer"; scale;
+ description { "default";
+ min: 32 0;
+ max: 32 0;
+ align: 1 1;
+ fixed: 1 1;
+ }
+ }
+ swallow { "elm.swallow.content"; scale;
+ description { "default";
+ rel1 {
+ relative: 1 1;
+ to: "top_left_content_spacer";
+ }
+ rel2 {
+ relative: 0 0;
+ to: "bottom_right_content_spacer";
+ }
+ }
+ }
+ }
+ }
- group { name: "elm/button/base/delete_button";
- images {
- image: "btn_delete_nor.png" COMP;
- image: "btn_delete_press.png" COMP;
- }
- parts {
- part { name: "elm.image";
- type: IMAGE;
- scale: 1;
- mouse_events: 0;
- description { state: "default" 0.0;
- align: 0.5 0.5;
- visible: 1;
- min: 60 60;
- max: 60 60;
- fixed: 1 1;
- image.normal: "btn_delete_nor.png";
- }
- description { state: "pressed" 0.0;
- inherit: "default" 0.0;
- image.normal: "btn_delete_press.png";
- }
- }
- rect { "over"; scale;
- description { "default";
- rel1.to: "elm.image";
- rel2.to: "elm.image";
- color: 0 0 0 0;
- }
- }
- }
- programs {
- program { name: "on_mouse_down";
- signal: "mouse,down,1";
- source: "over";
- script {
- set_state(PART:"elm.image", "pressed", 0.0);
- emit("elm,action,press", "");
- }
- }
- program { name: "on_mouse_up";
- signal: "mouse,up,1";
- source: "over";
- script {
- set_state(PART:"elm.image", "default", 0.0);
- emit("elm,action,unpress", "");
- }
- }
- program { name: "on_mouse_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- emit("elm,action,click", "");
- }
- }
- }
- }
+ group { "naviframe_content";
+ parts {
+ spacer { "bg"; scale;
+ }
+ spacer { "content_top_left_spacer"; scale;
+ description { "default";
+ min: 10 0;
+ max: 10 0;
+ fixed: 1 1;
+ align: 0 0;
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default";
+ min: 5 0;
+ max: 5 0;
+ }
+ }
+ spacer { "content_bottom_right_spacer"; scale;
+ description { "default";
+ min: 10 0;
+ max: 10 0;
+ fixed: 1 1;
+ align: 1 1;
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default";
+ min: 5 0;
+ max: 5 0;
+ }
+ }
+ swallow { "elm.swallow.content"; scale;
+ mouse_events: 1;
+ description { "default";
+ align: 0 0;
+ min: 0 0;
+ max: -1 -1;
+ fixed: 0 0;
+ rel1 {
+ relative: 1 1;
+ to: "content_top_left_spacer";
+ }
+ rel2 {
+ relative: 0 0;
+ to: "content_bottom_right_spacer";
+ }
+ }
+ }
+ swallow { "elm.swallow.content_overlay"; scale;
+ description { "default";
+ align: 0 0;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default";
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { "show_overlay";
+ signal: "show_overlay";
+ source: "ui";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.content_overlay";
+ }
+ program { "hide_overlay";
+ signal: "hide_overlay";
+ source: "ui";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content_overlay";
+ }
+ program { "switch_landscape";
+ signal: "switch_landscape";
+ source: "ui";
+ action: STATE_SET "landscape" 0.0;
+ target: "content_top_left_spacer";
+ target: "content_bottom_right_spacer";
+ }
+ program { "switch_vertical";
+ signal: "switch_vertical";
+ source: "ui";
+ action: STATE_SET "default" 0.0;
+ target: "content_top_left_spacer";
+ target: "content_bottom_right_spacer";
+ }
+ }
+ }
- group { name: "favicon_image";
- images.image: "internet_tabs_ic_default.png" COMP;
- script {
- public secret_mode = 0;
- }
- parts {
- part { name: "image";
- type: IMAGE;
- description { state: "default" 0.0;
- fixed: 1 1;
- align: 0.5 0.5;
- min: 40 40;
- max: 40 40;
- visible: 1;
- image.normal: "internet_tabs_ic_default.png";
- color_class: "AO034";
- }
- description { state: "selected" 0.0;
- inherit: "default";
- color_class: "AO035";
- }
- }
- }
- programs {
- program { name: "on_mouse_down";
- signal: "on_mouse_down";
- source: "ui";
- action: STATE_SET "selected" 0.0;
- target: "image";
- }
- program { name: "on_mouse_up";
- signal: "on_mouse_up";
- source: "ui";
- script {
- if (get_int(secret_mode))
- set_state(PART:"image", "selected", 0.0);
- else
- set_state(PART:"image", "default", 0.0);
- }
- }
- program { name: "state_secret";
- signal: "state_secret";
- source: "ui";
- script {
- set_int(secret_mode, 1);
- set_state(PART:"image", "selected", 0.0);
- }
- }
- program { name: "state_normal";
- signal: "state_normal";
- source: "ui";
- script {
- set_int(secret_mode, 0);
- set_state(PART:"image", "default", 0.0);
- }
- }
- }
- }
+ group { "elm/button/base/delete_button";
+ images {
+ image: "btn_delete_nor.png" COMP;
+ image: "btn_delete_press.png" COMP;
+ }
+ parts {
+ image { "elm.image"; scale;
+ mouse_events: 0;
+ description { "default";
+ align: 0.5 0.5;
+ visible: 1;
+ min: 60 60;
+ max: 60 60;
+ fixed: 1 1;
+ image.normal: "btn_delete_nor.png";
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "btn_delete_press.png";
+ }
+ }
+ rect { "over"; scale;
+ description { "default";
+ rel1.to: "elm.image";
+ rel2.to: "elm.image";
+ color: 0 0 0 0;
+ }
+ }
+ }
+ programs {
+ program { "on_mouse_down";
+ signal: "mouse,down,1";
+ source: "over";
+ script {
+ set_state(PART:"elm.image", "pressed", 0.0);
+ emit("elm,action,press", "");
+ }
+ }
+ program { "on_mouse_up";
+ signal: "mouse,up,1";
+ source: "over";
+ script {
+ set_state(PART:"elm.image", "default", 0.0);
+ emit("elm,action,unpress", "");
+ }
+ }
+ program { "on_mouse_click";
+ signal: "mouse,clicked,1";
+ source: "over";
+ script {
+ emit("elm,action,click", "");
+ }
+ }
+ }
+ }
- group { name: "elm/gengrid/item/custom_tab_item/default";
- styles {
- style { name: "selected_text";
- base: "font=Tizen:style=Regular font_size=36 color=#ffffff color_class=ATO015 text_class=ATO015 ellipsis=1.0";
- tag: "br" "\n";
- tag: "ps" "ps";
- tag: "tab" "\t";
- tag: "b" "+ font_weight=Bold";
- }
- style { name: "normal_text";
- base: "font=Tizen:style=Regular font_size=36 color=#000000 color_class=ATO016 text_class=ATO016 ellipsis=1.0";
- tag: "br" "\n";
- tag: "ps" "ps";
- tag: "tab" "\t";
- tag: "b" "+ font_weight=Bold";
- }
- }
- images.image: "internet_tabs_bg.#.png" COMP;
- images.image: "internet_tabs_bg_ef.#.png" COMP;
- images.image: "internet_tabs_bg_press.#.png" COMP;
- images.image: "internet_tabs_img_mask.#.png" COMP;
- data.item: "texts" "elm.text";
- data.item: "contents" "elm.icon elm.button elm.thumbnail elm.overlay";
- script {
- public secret_mode = 0;
- }
- parts {
- rect { "top_left_spacer"; scale;
- description { "default";
- min: 11 0;
- max: 11 0;
- fixed: 1 1;
- align: 0 0;
- visible: 0;
- }
- description { "landscape";
- inherit: "default";
- min: 6 10;
- max: 6 10;
- }
- }
- rect { "bottom_right_spacer"; scale;
- description { "default";
- min: 11 21;
- max: 11 21;
- fixed: 1 1;
- align: 1 1;
- visible: 0;
- }
- description { "landscape";
- inherit: "default";
- min: 6 0;
- max: 6 0;
- }
- }
- part { name: "bg";
- scale: 1;
- type: IMAGE;
- description { state: "default" 0.0;
- rel1 {
- to: "top_left_spacer";
- relative: 1 1;
- }
- rel2 {
- to: "bottom_right_spacer";
- relative: 0 0;
- }
- image.normal: "internet_tabs_bg.#.png";
- color_class: "AO025";
- }
- }
- rect { "top_bg"; scale;
- description { "default";
- align: 0.5 0;
- min: 0 68;
- max: -1 68;
- fixed: 0 1;
- rel1 {
- to: "top_left_spacer";
- relative: 1 1;
- }
- rel2 {
- to: "bottom_right_spacer";
- relative: 0 0;
- }
- color_class: "AO026";
- }
- description { "secret_default";
- inherit: "default";
- color_class: "tabs_secret_bg";
- }
- description { "selected";
- inherit: "default";
- color_class: "AO027";
- }
- description { "secret_selected";
- inherit: "default";
- color_class: "AO028";
- }
- }
- rect { "icon_spacer"; scale;
- description { "default";
- min: 18 0;
- max: 18 0;
- align: 0 0;
- fixed: 1 1;
- visible: 0;
- rel1.to: "top_bg";
- }
- }
- swallow { "elm.icon"; scale;
- description { "default";
- min: 40 40;
- max: 40 40;
- align: 0.0 0.5;
- fixed: 1 1;
- rel1 {
- relative: 1.0 1.0;
- to: "icon_spacer";
- }
- rel2.to: "top_bg";
- }
- }
- rect { "text_spacer_1"; scale;
- description { "defalt";
- min: 70 8;
- max: 70 8;
- fixed: 1 1;
- align: 0 0;
- visible: 0;
- rel1.to: "top_bg";
- }
- }
- rect { "text_spacer_2"; scale;
- description { "defalt";
- min: 78 12;
- max: 78 12;
- fixed: 1 1;
- align: 1 1;
- visible: 0;
- rel2.to: "top_bg";
- }
- }
- part { name: "elm.text";
- type: TEXTBLOCK;
- scale: 1;
- description { state: "default" 0.0;
- min: 0 48;
- align: 0.0 0.0;
- rel1 {
- relative: 1 1;
- to: "text_spacer_1";
- }
- rel2 {
- relative: 0 0;
- to: "text_spacer_2";
- }
- text.style: "normal_text";
- text.min: 0 1;
- text.align: 0 0.5;
- }
- description { state: "selected" 0.0;
- inherit: "default";
- text.style: "selected_text";
- }
- }
- rect { "button_spacer"; scale;
- description { "default";
- min: 6 0;
- max: 6 0;
- align: 1 1;
- visible: 0;
- rel2.to: "top_bg";
- }
- }
- rect { "top_left_thumbnail_spacer"; scale;
- description { "default";
- min: 5 1;
- max: 5 1;
- fixed: 1 1;
- align: 0 0;
- visible: 0;
- rel1 {
- to: "top_bg";
- relative: 0 1;
- }
- }
- }
- rect { "bottom_right_thumbnail_spacer"; scale;
- description { "default";
- min: 5 6;
- max: 5 6;
- fixed: 1 1;
- align: 1 1;
- visible: 0;
- rel2.to: "bg";
- }
- }
- part { name: "image_mask";
- type: IMAGE;
- scale: 1;
- description { state: "default" 0.0;
- align: 0.5 0.0;
- rel1.to: "bg";
- rel2.to: "bg";
- visible: 1;
- image.normal: "internet_tabs_img_mask.#.png";
- }
- description { state: "secret" 0.0;
- inherit: "default";
- color_class: "AO033";
- }
- }
- swallow { "elm.thumbnail"; scale;
- description { "default";
- rel1 {
- relative: 1 1;
- to: "top_left_thumbnail_spacer";
- }
- rel2 {
- to: "bottom_right_thumbnail_spacer";
- relative: 0 0;
- }
- }
- }
- part { name: "bg_effect";
- scale: 1;
- type: IMAGE;
- description { state: "default" 0.0;
- rel1.to: "bg";
- rel2.to: "bg";
- image.normal: "internet_tabs_bg_ef.#.png";
- }
- }
- part { name: "press_effect";
- scale: 1;
- type: IMAGE;
- description { state: "default" 0.0;
- visible: 0;
- align: 0.5 0.0;
- rel1.to: "bg";
- rel2.to: "bg";
- image.normal: "internet_tabs_bg_press.#.png";
- color_class: "AO025P";
- }
- description { state: "selected"; 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- swallow { "elm.overlay"; scale;
- mouse_events: 1;
- description { "default";
- }
- }
- swallow { "elm.button"; scale;
- mouse_events: 1;
- repeat_events: 0;
- description { "default";
- min: 60 60;
- max: 60 60;
- align: 1 0.5;
- rel1.to: "top_bg";
- rel2.to: "button_spacer";
- }
- }
- }
- programs {
- program { name: "state_landscape";
- signal: "state_landscape";
- source: "ui";
- action: STATE_SET "landscape" 0.0;
- target: "top_left_spacer";
- target: "bottom_right_spacer";
- }
- program { name: "state_default";
- signal: "state_default";
- source: "ui";
- action: STATE_SET "default" 0.0;
- target: "top_left_spacer";
- target: "bottom_right_spacer";
- }
- program { name: "selected";
- signal: "elm,state,selected";
- source: "elm";
- script {
- if (get_int(secret_mode))
- set_state(PART:"top_bg", "secret_selected", 0.0);
- else
- set_state(PART:"top_bg", "selected", 0.0);
- set_state(PART:"elm.text", "selected", 0.0);
- }
- }
- program { name: "unselected";
- signal: "elm,state,unselected";
- source: "elm";
- script {
- if (get_int(secret_mode)) {
- set_state(PART:"elm.text", "selected", 0.0);
- set_state(PART:"top_bg", "secret_default", 0.0);
- } else {
- set_state(PART:"elm.text", "default", 0.0);
- set_state(PART:"top_bg", "default", 0.0);
- }
- }
- }
- program { name: "state_secret";
- signal: "state_secret";
- source: "ui";
- script {
- set_int(secret_mode, 1);
- set_state(PART:"elm.text", "selected", 0.0);
- set_state(PART:"top_bg", "secret_default", 0.0);
- set_state(PART:"image_mask", "secret", 0.0);
- }
- }
- program { name: "state_normal";
- signal: "state_normal";
- source: "ui";
- script {
- set_int(secret_mode, 0);
- set_state(PART:"elm.text", "default", 0.0);
- set_state(PART:"top_bg", "default", 0.0);
- set_state(PART:"image_mask", "default", 0.0);
- }
- }
- }
- }
+ group { "favicon_image";
+ images.image: "internet_tabs_ic_default.png" COMP;
+ script {
+ public secret_mode = 0;
+ }
+ parts {
+ image { "image"; scale;
+ description { "default";
+ fixed: 1 1;
+ align: 0.5 0.5;
+ min: 40 40;
+ max: 40 40;
+ visible: 1;
+ image.normal: "internet_tabs_ic_default.png";
+ color_class: "AO034";
+ }
+ description { state: "selected" 0.0;
+ inherit: "default";
+ color_class: "AO035";
+ }
+ }
+ }
+ programs {
+ program { "on_mouse_down";
+ signal: "on_mouse_down";
+ source: "ui";
+ action: STATE_SET "selected" 0.0;
+ target: "image";
+ }
+ program { "on_mouse_up";
+ signal: "on_mouse_up";
+ source: "ui";
+ script {
+ if (get_int(secret_mode))
+ set_state(PART:"image", "selected", 0.0);
+ else
+ set_state(PART:"image", "default", 0.0);
+ }
+ }
+ program { "state_secret";
+ signal: "state_secret";
+ source: "ui";
+ script {
+ set_int(secret_mode, 1);
+ set_state(PART:"image", "selected", 0.0);
+ }
+ }
+ program { "state_normal";
+ signal: "state_normal";
+ source: "ui";
+ script {
+ set_int(secret_mode, 0);
+ set_state(PART:"image", "default", 0.0);
+ }
+ }
+ }
+ }
+ group { "elm/gengrid/item/empty/default";
+ alias: "elm/layout/empty/default";
+ parts {
+ rect { "bg"; scale;
+ description { "default";
+ align: 0 0;
+ min: 700 312;
+ max: 700 312;
+ fixed: 0 1;
+ rel1.relative: 0 0;
+ rel2.relative: 1 1;
+ color: 0 0 0 0;
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default";
+ min: 636 274;
+ max: 636 274;
+ }
+ }
+ }
+ programs {
+ program { "switch_landscape";
+ signal: "switch_landscape";
+ source: "ui";
+ action: STATE_SET "landscape" 0.0;
+ target: "bg";
+ }
+ program { "switch_vertical";
+ signal: "switch_vertical";
+ source: "ui";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ }
+ }
+ }
+
+ group { "elm/gengrid/item/custom_tab_item/default";
+ alias: "elm/layout/custom_tab_item/default";
+
+ images.image: "internet_tabs_bg.#.png" COMP;
+ images.image: "internet_tabs_bg_ef.#.png" COMP;
+ images.image: "internet_tabs_bg_press.#.png" COMP;
+ images.image: "internet_tabs_img_mask.#.png" COMP;
+
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.icon elm.button elm.thumbnail elm.overlay";
+ script {
+ public secret_mode = 0;
+ }
+ parts {
+ image { "bg"; scale;
+ description { "default";
+ align: 0 0;
+ min: 700 312;
+ max: 700 312;
+ fixed: 0 1;
+ image.normal: "internet_tabs_bg.#.png";
+ color_class: "AO025";
+ rel1.relative: 0 0;
+ rel2.relative: 1 1;
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default";
+ min: 636 274;
+ max: 636 274;
+ }
+ }
+ rect { "top_bg"; scale;
+ description { "default";
+ align: 0 0;
+ min: 0 68;
+ max: -1 68;
+ fixed: 0 1;
+ color_class: "AO026";
+ rel1.to: "bg";
+ rel1.relative: 0 0;
+ rel2.to: "bg";
+ rel2.relative: 1 1;
+ }
+ description { state: "secret_default";
+ inherit: "default";
+ color_class: "tabs_secret_bg";
+ }
+ description { state: "selected";
+ inherit: "default";
+ color_class: "AO027";
+ }
+ description { state: "secret_selected";
+ inherit: "default";
+ color_class: "AO028";
+ }
+ }
+ spacer { "icon_spacer"; scale;
+ description { "default";
+ min: 18 0;
+ max: 18 0;
+ align: 0 0;
+ fixed: 1 1;
+ rel1.to: "top_bg";
+ }
+ }
+ swallow { "elm.icon"; scale;
+ description { "default";
+ min: 40 40;
+ max: 40 40;
+ align: 0.0 0.5;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "icon_spacer";
+ }
+ rel2.to: "top_bg";
+ }
+ }
+ spacer { "text_spacer_1"; scale;
+ description { "default";
+ min: 70 8;
+ max: 70 8;
+ fixed: 1 1;
+ align: 0 0;
+ rel1.to: "top_bg";
+ }
+ }
+ spacer { "text_spacer_2"; scale;
+ description { "default";
+ min: 78 12;
+ max: 78 12;
+ fixed: 1 1;
+ align: 1 1;
+ rel2.to: "top_bg";
+ }
+ }
+ textblock { "elm.text"; scale;
+ description { "default";
+ min: 0 48;
+ max: -1 48;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1 1;
+ to: "text_spacer_1";
+ }
+ rel2 {
+ relative: 0 0;
+ to: "text_spacer_2";
+ }
+ text.style: "normal_text";
+ text.min: 0 1;
+ text.align: 0 0.5;
+ }
+ description { state: "selected" 0.0;
+ inherit: "default";
+ text.style: "selected_text";
+ }
+ }
+ spacer { "button_spacer"; scale;
+ description { "default";
+ min: 6 0;
+ max: 6 0;
+ fixed: 1 1;
+ align: 1 1;
+ rel2.to: "top_bg";
+ }
+ }
+ spacer { "top_left_thumbnail_spacer"; scale;
+ description { "default";
+ min: 5 1;
+ max: 5 1;
+ fixed: 1 1;
+ align: 0 0;
+ rel1 {
+ to: "top_bg";
+ relative: 0 1;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ }
+ }
+ spacer { "bottom_right_thumbnail_spacer"; scale;
+ description { "default";
+ min: 5 6;
+ max: 5 6;
+ fixed: 1 1;
+ align: 1 1;
+ rel1 {
+ to: "bg";
+ relative: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ }
+ }
+ image { "image_mask"; scale;
+ description { "default";
+ align: 0 0;
+ visible: 1;
+ image.normal: "internet_tabs_img_mask.#.png";
+ rel1 {
+ to: "bg";
+ relative: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ }
+ description { state: "secret" 0.0;
+ inherit: "default";
+ color_class: "AO033";
+ }
+ }
+ swallow { "elm.thumbnail"; scale;
+ description { "default";
+ align: 0 0;
+ rel1 {
+ relative: 1 1;
+ to: "top_left_thumbnail_spacer";
+ }
+ rel2 {
+ to: "bottom_right_thumbnail_spacer";
+ relative: 0 0;
+ }
+ }
+ }
+ image { "bg_effect"; scale;
+ description { "default";
+ align: 0 0;
+ rel1 {
+ to: "bg";
+ relative: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ image.normal: "internet_tabs_bg_ef.#.png";
+ }
+ }
+ swallow { "elm.overlay"; scale;
+ mouse_events: 1;
+ description { "default";
+ align: 0 0;
+ rel1 {
+ to: "bg";
+ relative: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ }
+ }
+ swallow { "elm.button"; scale;
+ mouse_events: 1;
+ repeat_events: 0;
+ description { "default";
+ min: 60 60;
+ max: 60 60;
+ align: 1 0.5;
+ rel1.to: "top_bg";
+ rel2.to: "button_spacer";
+ }
+ }
+ }
+ programs {
+ program { "selected";
+ signal: "elm,state,selected";
+ source: "elm";
+ script {
+ if (get_int(secret_mode))
+ set_state(PART:"top_bg", "secret_selected", 0.0);
+ else
+ set_state(PART:"top_bg", "selected", 0.0);
+ set_state(PART:"elm.text", "selected", 0.0);
+ }
+ }
+ program { "unselected";
+ signal: "elm,state,unselected";
+ source: "elm";
+ script {
+ if (get_int(secret_mode)) {
+ set_state(PART:"elm.text", "selected", 0.0);
+ set_state(PART:"top_bg", "secret_default", 0.0);
+ } else {
+ set_state(PART:"elm.text", "default", 0.0);
+ set_state(PART:"top_bg", "default", 0.0);
+ }
+ }
+ }
+ program { "state_secret";
+ signal: "state_secret";
+ source: "ui";
+ script {
+ set_int(secret_mode, 1);
+ set_state(PART:"elm.text", "selected", 0.0);
+ set_state(PART:"top_bg", "secret_default", 0.0);
+ set_state(PART:"image_mask", "secret", 0.0);
+ }
+ }
+ program { "state_normal";
+ signal: "state_normal";
+ source: "ui";
+ script {
+ set_int(secret_mode, 0);
+ set_state(PART:"elm.text", "default", 0.0);
+ set_state(PART:"top_bg", "default", 0.0);
+ set_state(PART:"image_mask", "default", 0.0);
+ }
+ }
+ program { "switch_landscape";
+ signal: "switch_landscape";
+ source: "ui";
+ action: STATE_SET "landscape" 0.0;
+ target: "bg";
+ }
+ program { "switch_vertical";
+ signal: "switch_vertical";
+ source: "ui";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ }
+ }
+ }
}
--- /dev/null
+project(WebEngineMin)
+
+set(WebEngineMin_SRCS
+ WebEngineMin.cpp
+ )
+
+include(Coreheaders)
+include(EFLHelpers)
+include(EWebKitHelpers)
+
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${CMAKE_SOURCE_DIR})
+
+add_library(${PROJECT_NAME} SHARED ${WebEngineMin_SRCS})
+target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS})
+target_link_libraries(${PROJECT_NAME} ${EWEBKIT2_LDFLAGS})
+
+install(TARGETS ${PROJECT_NAME}
+ LIBRARY DESTINATION services
+ ARCHIVE DESTINATION services/static)
--- /dev/null
+#include "WebEngineMin.h"
+#include <EWebKit.h>
+#include <app_common.h>
+#include "BrowserAssert.h"
+#include "BrowserLogger.h"
+#include "Tools/GeneralTools.h"
+#include "push-service.h"
+#include "ServiceManager.h"
+#include "URIschemes.h"
+
+namespace tizen_browser {
+namespace basic_webengine {
+
+EXPORT_SERVICE(WebEngineMin, "org.tizen.browser.webenginemin")
+
+const std::string WebEngineMin::COOKIES_PATH = "cookies";
+const char* const APPLICATION_NAME_FOR_USER_AGENT_MOBILE =
+ "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG TM1) AppleWebKit/537.36"
+ " (KHTML, like Gecko) SamsungBrowser/1.0 Chrome/47.0.2526.69 Mobile safari/537.36";
+
+WebEngineMin::WebEngineMin() :
+ m_ewkView(nullptr),
+ m_ewkContext(nullptr),
+ m_loadingURL(""),
+ m_downloadControl(std::make_shared<DownloadControl>()),
+ m_policyCounter(0)
+{
+}
+
+WebEngineMin::~WebEngineMin()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ if (m_ewkContext)
+ ewk_context_push_message_callback_set(m_ewkContext, nullptr, nullptr);
+
+ if (m_ewkView) {
+ evas_object_smart_callback_del_full(m_ewkView, "load,finished", _load_finished, this);
+ evas_object_smart_callback_del_full(m_ewkView, "rotate,prepared", _rotate_prepared, this);
+ evas_object_smart_callback_del_full(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+ evas_object_smart_callback_del_full(m_ewkView, "create,window", __newWindowRequest, this);
+ evas_object_smart_callback_del_full(m_ewkView, "policy,response,decide", __policy_response_decide_cb, this);
+ evas_object_smart_callback_del_full(m_ewkView, "policy,navigation,decide", __policy_navigation_decide_cb, this);
+ evas_object_smart_callback_del_full(m_ewkView, "create,window,url", __newWindowRequestUrl, this);
+ evas_object_smart_callback_del_full(m_ewkView, "policy,newwindow,decide", __policy_newwindow_decide_cb, this);
+
+ evas_object_del(m_ewkView);
+ }
+}
+
+void WebEngineMin::_push_cb(const char *sender_id, const char* push_data, void* data) {
+ BROWSER_LOGD("[%s:%d] push_time %s", __PRETTY_FUNCTION__, __LINE__, sender_id);
+ if (data) {
+ auto self = static_cast<WebEngineMin*>(data);
+ std::string msg = *(self->pushSignal(sender_id, push_data));
+ if (!msg.empty())
+ ewk_context_send_push_message(self->m_ewkContext, (char*)msg.c_str());
+ } else {
+ BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+ }
+}
+
+void WebEngineMin::init(Evas_Object* guiParent)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_ewkView = ewk_view_add_with_context(evas_object_evas_get(guiParent), ewk_context_default_get());
+
+ m_ewkContext = ewk_view_context_get(m_ewkView);
+ if (m_ewkContext)
+ ewk_cookie_manager_accept_policy_set(ewk_context_cookie_manager_get(m_ewkContext),
+ EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
+
+ auto pwaData = *getPWADataSignal();
+ auto pwaInstanceId = *getPWAInstanceIDSignal();
+ if (!pwaInstanceId.empty() && !pwaData.empty())
+ ewk_context_send_push_message(m_ewkContext, (char*)pwaData.c_str());
+
+ ewk_context_push_message_callback_set(m_ewkContext, _push_cb, this);
+ evas_object_data_set(m_ewkView, "_container", this);
+ evas_object_color_set(m_ewkView, 255, 255, 255, 255);
+ evas_object_size_hint_weight_set(m_ewkView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_ewkView, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ ewk_view_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT_MOBILE);
+ ewk_context_cache_model_set(m_ewkContext, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER);
+ std::string path = app_get_data_path() + COOKIES_PATH;
+ ewk_cookie_manager_persistent_storage_set(ewk_context_cookie_manager_get(m_ewkContext),
+ path.c_str(), EWK_COOKIE_PERSISTENT_STORAGE_SQLITE);
+
+ evas_object_smart_callback_add(m_ewkView, "create,window", __newWindowRequest, this);
+ evas_object_smart_callback_add(m_ewkView, "load,finished", _load_finished, this);
+ evas_object_smart_callback_add(m_ewkView, "rotate,prepared", _rotate_prepared, this);
+ evas_object_smart_callback_add(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+ evas_object_smart_callback_add(m_ewkView, "policy,navigation,decide", __policy_navigation_decide_cb, this);
+ evas_object_smart_callback_add(m_ewkView, "policy,response,decide", __policy_response_decide_cb, this);
+ evas_object_smart_callback_add(m_ewkView, "create,window,url", __newWindowRequestUrl, this);
+ evas_object_smart_callback_add(m_ewkView, "policy,newwindow,decide", __policy_newwindow_decide_cb, this);
+
+ auto permissions = *getPermissionsMap();
+ Eina_List* permList = nullptr;
+ for (const auto& it : permissions) {
+ Ewk_Notification_Permission perm;
+ perm.origin = it.first.c_str();
+ perm.allowed = it.second;
+ BROWSER_LOGD("[%s:%d] Permission for %s is %d", __PRETTY_FUNCTION__, __LINE__, perm.origin, perm.allowed);
+ permList = eina_list_append(permList, (void*)&perm);
+ if (eina_error_get())
+ BROWSER_LOGE("[%s:%d] eina list append failed", __PRETTY_FUNCTION__, __LINE__);
+ }
+ if (permList) {
+ BROWSER_LOGD("[%s:%d] Set permissions", __PRETTY_FUNCTION__, __LINE__);
+ ewk_notification_cached_permissions_set(permList);
+ }
+
+ resume();
+}
+
+void WebEngineMin::windowRequest(const char* url)
+{
+ BROWSER_LOGD("[%s:%d] url=%s", __PRETTY_FUNCTION__, __LINE__,url);
+ app_control_h app_control;
+ app_control_create(&app_control);
+ app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW);
+ app_control_set_uri(app_control, url ? url : m_loadingURL.c_str());
+ app_control_send_launch_request(app_control, nullptr, nullptr);
+}
+
+void WebEngineMin::__newWindowRequest(void* data, Evas_Object*, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ RETURN_ON_NO_DATA(data);
+
+ auto self = static_cast<WebEngineMin*>(data);
+ self->windowRequest();
+}
+
+void WebEngineMin::__newWindowRequestUrl(void* data, Evas_Object*, void* out)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ RETURN_ON_NO_DATA(data);
+ RETURN_ON_NO_DATA(out);
+
+ auto self = static_cast<WebEngineMin*>(data);
+ self->windowRequest((const char*)out);
+}
+void WebEngineMin::__policy_newwindow_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ auto self = static_cast<WebEngineMin*>(data);
+
+ Ewk_Policy_Decision* policy_decision = static_cast<Ewk_Policy_Decision*>(event_info);
+ const char* uri = ewk_policy_decision_url_get(policy_decision);
+ BROWSER_LOGD("uri = [%s]", uri);
+ self->m_loadingURL = std::string(uri);
+}
+
+void WebEngineMin::__policy_navigation_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info)
+{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+ auto wv = static_cast<WebEngineMin*>(data);
+
+ Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision*)event_info;
+ const char* uri = ewk_policy_decision_url_get(policy_decision);
+ wv->m_loadingURL = std::string(uri);
+ BROWSER_LOGD("uri = [%s]", uri);
+
+ Eina_Bool is_scheme_handled = handle_scheme(uri);
+
+ if (is_scheme_handled) {
+ BROWSER_LOGD("Scheme handled");
+ ewk_policy_decision_ignore(policy_decision);
+ if (!wv->isBackEnabled())
+ wv = nullptr;
+ return;
+ }
+ ewk_policy_decision_use(policy_decision);
+}
+
+void WebEngineMin::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, void* event_info)
+{
+ auto wv = static_cast<WebEngineMin*>(data);
+ ++wv->m_policyCounter;
+
+ Ewk_Policy_Decision* policy_decision = static_cast<Ewk_Policy_Decision*>(event_info);
+ Ewk_Policy_Decision_Type policy_type = ewk_policy_decision_type_get(policy_decision);
+
+ switch (policy_type) {
+ case EWK_POLICY_DECISION_USE:
+ BROWSER_LOGD("[%s:%d] policy_use", __PRETTY_FUNCTION__, __LINE__);
+ ewk_policy_decision_use(policy_decision);
+ break;
+
+ case EWK_POLICY_DECISION_DOWNLOAD: {
+ BROWSER_LOGD("[%s:%d] policy_download", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_smart_callback_call(wv->m_ewkView, "close,window", nullptr);
+ const char *uri = ewk_policy_decision_url_get(policy_decision);
+ const char *content_type = ewk_policy_decision_response_mime_get(policy_decision);
+ const Eina_Hash *headers = ewk_policy_decision_response_headers_get(policy_decision);
+ app_control_h app_control = nullptr;
+ if (app_control_create(&app_control) < 0) {
+ BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+
+ if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
+ BROWSER_LOGE("[%s:%d] Fail to app_control_set_operation", __PRETTY_FUNCTION__, __LINE__);
+ app_control_destroy(app_control);
+ return;
+ }
+
+ BROWSER_LOGD("[%s:%d] uri: %s", __PRETTY_FUNCTION__, __LINE__, uri);
+ if (app_control_set_uri(app_control, uri) < 0) {
+ BROWSER_LOGE("[%s:%d] Fail to app_control_set_uri", __PRETTY_FUNCTION__, __LINE__);
+ app_control_destroy(app_control);
+ return;
+ }
+
+ BROWSER_LOGD("[%s:%d] content_type: %s", __PRETTY_FUNCTION__, __LINE__, content_type);
+ if (app_control_set_mime(app_control, content_type) < 0) {
+ BROWSER_LOGE("[%s:%d] Fail to app_control_set_mime", __PRETTY_FUNCTION__, __LINE__);
+ app_control_destroy(app_control);
+ return;
+ }
+
+ const char *content_dispotision = (const char *)eina_hash_find(headers, "Content-Disposition");
+ BROWSER_LOGD("[%s:%d] Content-disposition: %s", __PRETTY_FUNCTION__, __LINE__, content_dispotision);
+ if (content_dispotision && (strstr(content_dispotision, "attachment") != nullptr)){
+ wv->m_downloadControl->handle_download_request(uri, content_type);
+ app_control_destroy(app_control);
+ ewk_policy_decision_ignore(policy_decision);
+ break;
+ }
+
+ if (app_control_send_launch_request(app_control, nullptr, nullptr) == APP_CONTROL_ERROR_APP_NOT_FOUND) {
+ BROWSER_LOGD("[%s:%d] app_control_send_launch_request returns APP_CONTROL_ERROR_APP_NOT_FOUND", __PRETTY_FUNCTION__, __LINE__);
+ wv->m_downloadControl->handle_download_request(uri, content_type);
+ }
+ app_control_destroy(app_control);
+ ewk_policy_decision_ignore(policy_decision);
+ break;
+ }
+ case EWK_POLICY_DECISION_IGNORE:
+ default:
+ BROWSER_LOGD("[%s:%d] policy_ignore", __PRETTY_FUNCTION__, __LINE__);
+ ewk_policy_decision_ignore(policy_decision);
+ break;
+ }
+}
+
+TabId WebEngineMin::addTab(const std::string& uri,
+ const boost::optional<int>,
+ const std::string&,
+ bool,
+ TabOrigin)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ setURI(uri);
+ return 0;
+}
+
+void WebEngineMin::suspend()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_ewkView);
+
+ ewk_view_suspend(m_ewkView);
+}
+
+void WebEngineMin::resume()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_ewkView);
+
+ ewk_view_resume(m_ewkView);
+}
+
+void WebEngineMin::setURI(const std::string& uri)
+{
+ BROWSER_LOGD("[%s:%d] uri=%s", __PRETTY_FUNCTION__, __LINE__, uri.c_str());
+ ewk_view_url_set(m_ewkView, uri.c_str());
+}
+
+std::string WebEngineMin::getURI(void) const
+{
+ return tools::fromChar(ewk_view_url_get(m_ewkView));
+}
+
+void WebEngineMin::orientationChanged()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ boost::optional<int> signal = getRotation();
+ if (signal && *signal != -1) {
+ int angle = *signal;
+ if ((angle % 180) == 90)
+ angle -= 180;
+ ewk_view_orientation_send(m_ewkView, angle);
+ }
+}
+
+void WebEngineMin::_load_finished(void * data, Evas_Object * /* obj */, void * /* event_info */)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!data) {
+ BROWSER_LOGW("[%s:%d] Wrong data!", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+ WebEngineMin * self = static_cast<WebEngineMin *>(data);
+ self->loadFinished();
+}
+
+void WebEngineMin::_rotate_prepared(void * data, Evas_Object *, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data) {
+ auto *self = static_cast<WebEngineMin *>(data);
+ self->rotatePrepared();
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebEngineMin::__notification_reply_cb(void* data, Evas_Object*, void* event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!data || !event_info) {
+ BROWSER_LOGW("[%s] data or even_info = nullptr", __PRETTY_FUNCTION__);
+ return;
+ }
+ auto perm = static_cast<Ewk_Notification_Permission*>(event_info);
+ auto self = static_cast<WebEngineMin*>(data);
+ auto id = *self->getPermissionId(perm->origin);
+ if (!id) {
+ auto ret = *self->storePermission(perm->origin, perm->allowed);
+ if (!ret)
+ BROWSER_LOGW("[%s:%d] failed to store permission", __PRETTY_FUNCTION__, __LINE__);
+ } else {
+ auto ret = self->updatePermissionState(id, perm->allowed);
+ if (!ret)
+ BROWSER_LOGW("[%s:%d] failed to update permission", __PRETTY_FUNCTION__, __LINE__);
+ }
+}
+
+}
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WEBENGINEMIN_H_
+#define WEBENGINEMIN_H_
+
+
+#include <boost/noncopyable.hpp>
+#include <Evas.h>
+#include <EWebKit_internal.h>
+
+#include "AbstractWebEngine/AbstractWebEngine.h"
+#include "DownloadControl/DownloadControl.h"
+#include "service_macros.h"
+
+namespace tizen_browser {
+namespace basic_webengine {
+
+class BROWSER_EXPORT WebEngineMin : public AbstractWebEngine, boost::noncopyable
+{
+public:
+ WebEngineMin();
+ ~WebEngineMin();
+
+ std::string getName() override;
+ Evas_Object* getLayout() override { return m_ewkView; }
+
+ void init(Evas_Object* guiParent) override;
+ void setURI(const std::string& uri) override;
+ std::string getURI() const override;
+ std::string getTitle() const override { return std::string(); }
+ TabOrigin getOrigin() const override { return TabOrigin::UNKNOWN; }
+ std::string getUserAgent() const override { return std::string(); }
+ void suspend() override;
+ void resume() override;
+ bool isSuspended() const override { return false; }
+ bool isBackEnabled() const override { return ewk_view_back_possible(m_ewkView); }
+ bool isForwardEnabled() const override { return false; }
+ bool isLoading() const override { return false; }
+ int tabsCount() const override { return 1; }
+ TabId currentTabId() const override { return 0; }
+ TabId oldestTabId() const override { return 0; }
+ void destroyTabs() override { evas_object_del(m_ewkView); }
+ std::vector<std::shared_ptr<TabContent>> getTabContents() const override
+ { return std::vector<std::shared_ptr<TabContent>>(); }
+ TabId addTab(const std::string& uri, const boost::optional<int>, const std::string&,
+ bool, TabOrigin) override;
+ TabId openRequestedPage() override { return 0; }
+ Evas_Object* getTabView(TabId) override { return m_ewkView; }
+ bool switchToTab(TabId) override { return true; }
+ bool closeTab() override { return false; }
+ bool closeTab(TabId) override { return false; }
+ std::shared_ptr<tools::BrowserImage> getSnapshotData(int, int, tools::SnapshotType) override
+ { return nullptr; }
+ std::shared_ptr<tools::BrowserImage> getSnapshotData(TabId, int, int, bool, tools::SnapshotType) override
+ { return nullptr; }
+ bool isSecretMode() override { return false; }
+ bool isLoadError() const override { return false; }
+ bool getIMEState() const override { return false; }
+ void setFocus() override { ewk_view_focus_set(m_ewkView, EINA_TRUE); };
+ void clearFocus() override { ewk_view_focus_set(m_ewkView, EINA_FALSE); };
+ bool hasFocus() const override { return ewk_view_focus_get(m_ewkView) == EINA_TRUE; }
+ std::shared_ptr<tools::BrowserImage> getFavicon() override {
+ return nullptr; }
+ void backButtonClicked() override { ewk_view_back(m_ewkView); }
+ bool isDesktopMode() const override { return false; }
+ bool isFullScreenMode() const override { return false; }
+ bool getSettingsParam(WebEngineSettings) override { return false; }
+ void orientationChanged() override;
+ State getState() override { return State::NORMAL; }
+
+#if !DUMMY_BUTTON
+ Evas_Object* getWidget() override { }
+#endif
+ void setPWAData() override { }
+ void setUserAgent(const std::string&) override { }
+ void languageChanged() override { }
+ void stopLoading() override { }
+ void reload() override { }
+ void back() override { }
+ void forward() override { }
+ void confirmationResult(WebConfirmationPtr) override { }
+ void setIMEState(const bool&) override { }
+ void clearCache() override { }
+ void clearCookies() override { }
+ void clearPrivateData() override { }
+ void clearPasswordData() override { }
+ void clearFormData() override { }
+ void searchOnWebsite(const std::string &, int) override { }
+ void switchToMobileMode() override { }
+ void switchToDesktopMode() override { }
+ void onTabIdCreated(int) override { }
+ void findWord(const char*, Eina_Bool, Evas_Smart_Cb, void*) { }
+ void setSettingsParam(WebEngineSettings, bool) override { }
+ void changeState() override { }
+ void setBarsShown(bool) const override { }
+ void windowRequest(const char* url = nullptr);
+
+private:
+ static void _load_finished(void * data, Evas_Object * obj, void * event_info);
+ static void _rotate_prepared(void * data, Evas_Object * obj, void * event_info);
+ static void _push_cb(const char *sender_id, const char *, void *data);
+ static void __notification_reply_cb(void *data, Evas_Object *obj, void *event_info);
+ static void __newWindowRequest(void *data, Evas_Object *, void*);
+ static void __newWindowRequestUrl(void* data, Evas_Object*, void* out);
+ static void __policy_navigation_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info);
+ static void __policy_response_decide_cb(void *data, Evas_Object * /* obj */, void* event_info);
+ static void __policy_newwindow_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info);
+
+ Evas_Object* m_ewkView;
+ Ewk_Context* m_ewkContext;
+ std::string m_loadingURL;
+ std::shared_ptr<DownloadControl> m_downloadControl;
+ int m_policyCounter;
+
+ static const std::string COOKIES_PATH;
+};
+
+
+
+}
+}
+
+
+#endif /* WEBENGINEMIN_H_ */
#include <app.h>
#include "AbstractWebEngine/TabId.h"
+#include "AbstractWebEngine/WebConfirmation.h"
+#include "AbstractWebEngine/TabOrigin.h"
+
#include "BrowserAssert.h"
#include "BrowserLogger.h"
#include "Config/Config.h"
+#include "DownloadControl/DownloadControl.h"
+#include "WebView.h"
namespace tizen_browser {
namespace basic_webengine {
, m_currentWebView(nullptr)
, m_stateStruct(&m_normalStateStruct)
, m_tabIdCreated(-1)
+ , m_tabIdSecret(0)
, m_signalsConnected(false)
, m_downloadControl(nullptr)
, m_defaultContext(ewk_context_default_get())
+ , m_policyCounter(0)
{
m_stateStruct->mostRecentTab.clear();
m_stateStruct->tabs.clear();
m_settings[WebEngineSettings::LOAD_IMAGES] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES));
m_settings[WebEngineSettings::ENABLE_JAVASCRIPT] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT));
m_settings[WebEngineSettings::REMEMBER_FROM_DATA] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA));
+ m_settings[WebEngineSettings::ENABLE_COOKIES] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_COOKIES));
m_settings[WebEngineSettings::REMEMBER_PASSWORDS] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS));
m_settings[WebEngineSettings::AUTOFILL_PROFILE_DATA] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA));
m_settings[WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES));
-
- preinitializeWebViewCache();
}
WebEngineService::~WebEngineService()
void WebEngineService::destroyTabs()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_stateStruct->tabs.clear();
+ if (!m_secretStateStruct.tabs.empty())
+ m_secretStateStruct.tabs.clear();
+ if (!m_normalStateStruct.tabs.empty())
+ m_normalStateStruct.tabs.clear();
if (m_currentWebView)
m_currentWebView.reset();
}
if (!m_initialised) {
m_guiParent = guiParent;
m_initialised = true;
+ preinitializeWebViewCache();
}
}
m_downloadControl = std::make_shared<DownloadControl>();
}
+void WebEngineService::searchInNewTab(const std::string& text, bool desktopMode, const TabOrigin& origin)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto sig = createSearchQuery(text);
+ if (!sig) {
+ BROWSER_LOGW("[%s:%d] Signal error!", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+
+ switchToTab(addTab(*sig, boost::none, std::string(), desktopMode, origin));
+ windowCreated();
+}
+
void WebEngineService::preinitializeWebViewCache()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
webView->loadStop.connect(boost::bind(&WebEngineService::_loadStop, this));
webView->loadProgress.connect(boost::bind(&WebEngineService::_loadProgress, this, _1));
webView->loadError.connect(boost::bind(&WebEngineService::_loadError, this));
+#if DUMMY_BUTTON
+ webView->focusWebView.connect(
+ [this]{ this->focusWebView(); });
+#endif
webView->forwardEnableChanged.connect(boost::bind(&WebEngineService::_forwardEnableChanged, this, _1));
webView->backwardEnableChanged.connect(boost::bind(&WebEngineService::_backwardEnableChanged, this, _1));
webView->confirmationRequest.connect(boost::bind(&WebEngineService::_confirmationRequest, this, _1));
webView->IMEStateChanged.connect(boost::bind(&WebEngineService::_IMEStateChanged, this, _1));
webView->snapshotCaptured.connect(boost::bind(&WebEngineService::_snapshotCaptured, this, _1, _2));
- webView->redirectedWebPage.connect(boost::bind(&WebEngineService::_redirectedWebPage, this, _1, _2));
webView->setCertificatePem.connect(boost::bind(&WebEngineService::_setCertificatePem, this, _1, _2));
webView->setWrongCertificatePem.connect(boost::bind(&WebEngineService::_setWrongCertificatePem, this, _1, _2));
webView->fullscreenModeSet.connect([this](auto state){fullscreenModeSet(state);});
- webView->getRotation.connect(boost::bind(&WebEngineService::_getRotation, this));
- webView->rotatePrepared.connect([this](){rotatePrepared();});
webView->unsecureConnection.connect(boost::bind(&WebEngineService::_unsecureConnection, this));
webView->findOnPage.connect(boost::bind(&WebEngineService::_findOnPage, this, _1));
+ webView->urlbarOffsetSet.connect([this](auto offset){urlbarOffsetSet(offset);});
+ webView->bottombarOffsetSet.connect([this](auto offset){bottombarOffsetSet(offset);});
+ webView->isPolicyUse.connect([this](int count){m_policyCounter = count;});
+ webView->searchInNewTab.connect([this](auto text, auto desktopMode, auto origin) {
+ this->searchInNewTab(text, desktopMode, origin);
+ });
+ webView->changeUIColor.connect(
+ [this](const int& r, const int& g, const int& b, const int& a){
+ this->changeUIColor(r,g,b,a);
+ });
+ webView->installPWA.connect(
+ [this](const std::string& str, const std::string& id, const std::string& sn) { return *installPWA(str, id, sn); });
+ webView->storePWAShortcut.connect(
+ [this](const unsigned& id, const std::string& shortcut){this->storePWAShortcut(id, shortcut);});
+ webView->pushSignal.connect(
+ [this](const char* sender, const char* push_data) {
+ return *(this->pushSignal(sender, push_data));
+ });
+ webView->storePermission.connect(
+ [this](const std::string& origin, const bool& state) {
+ return *(this->storePermission(origin, state));
+ });
+ webView->getPermissionId.connect(
+ [this](const std::string& origin) {
+ return *(this->getPermissionId(origin));
+ });
+ webView->updatePermissionState.connect(
+ [this](const int& id, const bool& state) {
+ return *(this->updatePermissionState(id, state));
+ });
+ webView->getPermissionsMap.connect(
+ [this] { return *(this->getPermissionsMap());
+ });
m_signalsConnected = true;
}
webView->loadStop.disconnect(boost::bind(&WebEngineService::_loadStop, this));
webView->loadProgress.disconnect(boost::bind(&WebEngineService::_loadProgress, this, _1));
webView->loadError.disconnect(boost::bind(&WebEngineService::_loadError, this));
+#if DUMMY_BUTTON
+ webView->focusWebView.disconnect_all_slots();
+#endif
webView->forwardEnableChanged.disconnect(boost::bind(&WebEngineService::_forwardEnableChanged, this, _1));
webView->backwardEnableChanged.disconnect(boost::bind(&WebEngineService::_backwardEnableChanged, this, _1));
webView->confirmationRequest.disconnect(boost::bind(&WebEngineService::_confirmationRequest, this, _1));
webView->IMEStateChanged.disconnect(boost::bind(&WebEngineService::_IMEStateChanged, this, _1));
- webView->redirectedWebPage.disconnect(boost::bind(&WebEngineService::_redirectedWebPage, this, _1, _2));
webView->fullscreenModeSet.disconnect_all_slots();
- webView->getRotation.disconnect(boost::bind(&WebEngineService::_getRotation, this));
- webView->rotatePrepared.disconnect_all_slots();
webView->unsecureConnection.disconnect(boost::bind(&WebEngineService::_unsecureConnection, this));
webView->findOnPage.disconnect(boost::bind(&WebEngineService::_findOnPage, this, _1));
+ webView->searchInNewTab.disconnect_all_slots();
+ webView->changeUIColor.disconnect_all_slots();
+ webView->installPWA.disconnect_all_slots();
+ webView->storePWAShortcut.disconnect_all_slots();
+ webView->storePermission.disconnect_all_slots();
+ webView->getPermissionId.disconnect_all_slots();
+ webView->updatePermissionState.disconnect_all_slots();
+ webView->getPermissionsMap.disconnect_all_slots();
m_signalsConnected = false;
}
return std::string("");
}
-#if PWA
-void WebEngineService::requestManifest()
+void WebEngineService::setPWAData()
{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_currentWebView->requestManifest();
+ m_currentWebView->addManifestTypeToHandle(ManifestType::PWA_MANIFEST);
+ if (!m_currentWebView->isManifestReady())
+ m_currentWebView->requestManifest();
+ else
+ m_currentWebView->handleManifest();
}
-#endif
bool WebEngineService::isLoadError() const
{
registerHWKeyCallback();
}
+void WebEngineService::languageChanged()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!m_currentWebView) {
+ BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__, "m_currentWebView is null");
+ return;
+ }
+ m_currentWebView->reload();
+}
+
bool WebEngineService::isSuspended() const
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return m_stateStruct->tabs.size();
}
-TabId WebEngineService::currentTabId() const
-{
- return m_stateStruct->currentTabId;
-}
-
std::vector<TabContentPtr> WebEngineService::getTabContents() const {
std::vector<TabContentPtr> result;
for (auto const& tab : m_stateStruct->tabs) {
bool desktopMode,
TabOrigin origin)
{
- if (!(*AbstractWebEngine::checkIfCreate()))
- return currentTabId();
+ if (!(*AbstractWebEngine::checkIfCreate())) {
+ BROWSER_LOGD("[%s:%d] Requesting to open page after decision.", __PRETTY_FUNCTION__, __LINE__);
+ m_requestedPage.uri = uri;
+ m_requestedPage.tabId = tabId;
+ m_requestedPage.title = title;
+ m_requestedPage.desktopMode = desktopMode;
+ m_requestedPage.origin = origin;
+ return TabId::NONE;
+ }
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_webViewCacheInitialized = true;
}
WebViewPtr p = std::make_shared<WebView>(m_guiParent, newTabId, title, m_state == State::SECRET);
+ disconnectSignals(p);
+ connectSignals(p);
p->init(desktopMode, origin);
if (m_state == State::SECRET)
p->setURI(uri);
}
+ p->getRotation.connect([this] { return _getRotation(); } );
+ p->rotatePrepared.connect([this] { rotatePrepared(); } );
+
AbstractWebEngine::tabCreated();
return newTabId;
}
+TabId WebEngineService::openRequestedPage()
+{
+ return addTab(m_requestedPage.uri, m_requestedPage.tabId, m_requestedPage.title,
+ m_requestedPage.desktopMode, m_requestedPage.desktopMode);
+}
+
Evas_Object* WebEngineService::getTabView(TabId id){
if (m_stateStruct->tabs.find(id) == m_stateStruct->tabs.end()) {
BROWSER_LOGW("[%s:%d] there is no tab of id %d", __PRETTY_FUNCTION__, __LINE__, id.get());
if (closingTabId == TabId::NONE){
return res;
}
+
+ m_stateStruct->tabs[closingTabId]->getRotation.disconnect_all_slots();
+ m_stateStruct->tabs[closingTabId]->rotatePrepared.disconnect_all_slots();
+
m_stateStruct->tabs.erase(closingTabId);
m_stateStruct->mostRecentTab.erase(
std::remove(m_stateStruct->mostRecentTab.begin(),
return m_stateStruct->tabs[id]->captureSnapshot(width, height, async, snapshot_type);
}
+void WebEngineService::setIMEState(const bool& state)
+{
+ m_currentWebView->setIMEState(state);
+}
+
+bool WebEngineService::getIMEState() const
+{
+ return m_currentWebView->getIMEState();
+}
+
void WebEngineService::setFocus()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
webView->ewkSettingsLoadsImagesSet(m_settings[WebEngineSettings::LOAD_IMAGES]);
webView->ewkSettingsJavascriptEnabledSet(m_settings[WebEngineSettings::ENABLE_JAVASCRIPT]);
webView->ewkSettingsFormCandidateDataEnabledSet(m_settings[WebEngineSettings::REMEMBER_FROM_DATA]);
+ webView->ewkSettingsCookiesEnabledSet(m_settings[WebEngineSettings::ENABLE_COOKIES]);
webView->ewkSettingsAutofillPasswordFormEnabledSet(m_settings[WebEngineSettings::REMEMBER_PASSWORDS]);
webView->ewkSettingsFormProfileDataEnabledSet(m_settings[WebEngineSettings::AUTOFILL_PROFILE_DATA]);
webView->ewkSettingsScriptsCanOpenNewPagesEnabledSet(m_settings[WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES]);
openFindOnPage(str);
}
-int WebEngineService::getZoomFactor() const
-{
- if (!m_currentWebView)
- return 0;
- return static_cast<int>(m_currentWebView->getZoomFactor()*100);
-
-}
-
-void WebEngineService::setZoomFactor(int zoomFactor)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_currentWebView);
- if (!m_currentWebView) {
- BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
- return;
- }
- m_currentWebView->setZoomFactor(0.01*zoomFactor);
-
-}
-
void WebEngineService::clearCache()
{
for(const auto& it: m_stateStruct->tabs) {
snapshotCaptured(image, snapshot_type);
}
-void WebEngineService::_redirectedWebPage(const std::string& oldUrl, const std::string& newUrl)
-{
- redirectedWebPage(oldUrl, newUrl);
-}
-
void WebEngineService::_setCertificatePem(const std::string& uri, const std::string& pem)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
} else {
wes->downloadStarted(wes->m_downloadControl->launch_download_app(download_uri) == EINA_TRUE);
}
+
+ if (wes->m_policyCounter == 1 && strncmp(wes->getURI().c_str(), "file:", strlen("file:"))) {
+ wes->closeTab();
+ wes->m_policyCounter = 0;
+ }
}
return -1;
}
-void WebEngineService::moreKeyPressed()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- M_ASSERT(m_currentWebView);
- if (!m_currentWebView) {
- BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
- return;
- }
-
- if (m_stateStruct->currentTabId == TabId::NONE || m_currentWebView->clearTextSelection())
- return;
-
- if (m_currentWebView->isFullScreen()) {
- m_currentWebView->exitFullScreen();
- }
-}
-
void WebEngineService::backButtonClicked()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return m_currentWebView->isDesktopMode();
}
-void WebEngineService::scrollView(const int& dx, const int& dy)
+bool WebEngineService::isFullScreenMode() const
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_currentWebView);
if (!m_currentWebView) {
BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
- return;
+ return false;
}
- m_currentWebView->scrollView(dx, dy);
+ return m_currentWebView->isFullScreen();
}
void WebEngineService::findWord(const char *word, Eina_Bool forward, Evas_Smart_Cb found_cb, void *data)
case WebEngineSettings::REMEMBER_FROM_DATA:
it->second->ewkSettingsFormCandidateDataEnabledSet(value);
break;
+ case WebEngineSettings::ENABLE_COOKIES:
+ it->second->ewkSettingsCookiesEnabledSet(value);
+ break;
case WebEngineSettings::REMEMBER_PASSWORDS:
it->second->ewkSettingsAutofillPasswordFormEnabledSet(value);
break;
}
}
-void WebEngineService::resetSettingsParam()
-{
- setSettingsParam(WebEngineSettings::PAGE_OVERVIEW, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_PAGE_OVERVIEW)));
- setSettingsParam(WebEngineSettings::LOAD_IMAGES, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES)));
- setSettingsParam(WebEngineSettings::ENABLE_JAVASCRIPT, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT)));
- setSettingsParam(WebEngineSettings::REMEMBER_FROM_DATA, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA)));
- setSettingsParam(WebEngineSettings::REMEMBER_PASSWORDS, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS)));
- setSettingsParam(WebEngineSettings::AUTOFILL_PROFILE_DATA, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA)));
- setSettingsParam(WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<bool>(
- tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES)));
-}
-
void WebEngineService::changeState()
{
suspend();
m_currentWebView = m_stateStruct->tabs[m_stateStruct->currentTabId];
}
+void WebEngineService::setBarsShown(bool value) const
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_currentWebView);
+ if (!m_currentWebView) {
+ BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
+ return;
+ }
+ m_currentWebView->setBarsShown(value);
+}
+
} /* end of webengine_service */
} /* end of basic_webengine */
} /* end of tizen_browser */
#include <string>
#include <Evas.h>
#include <memory>
+#include <EWebKit_internal.h>
-#include "ServiceFactory.h"
#include "service_macros.h"
#include "AbstractWebEngine/AbstractWebEngine.h"
#include "AbstractWebEngine/TabIdTypedef.h"
-#include "AbstractWebEngine/WebConfirmation.h"
-#include "AbstractWebEngine/TabOrigin.h"
#include "AbstractWebEngine/State.h"
#include "SnapshotType.h"
-#include "BrowserImage.h"
-#include "DownloadControl/DownloadControl.h"
-#include "WebView.h"
+
+class DownloadControl;
namespace tizen_browser {
+
+namespace tools {
+class BrowserImage;
+}
namespace basic_webengine {
+
+class WebConfirmation;
+class TabOrigin;
+
namespace webengine_service {
class WebView;
using WebViewPtr = std::shared_ptr<WebView>;
-using TabsMapPtr = std::shared_ptr<std::map<TabId, WebViewPtr > >;
+using TabsMapPtr = std::shared_ptr<std::map<TabId, WebViewPtr>>;
class BROWSER_EXPORT WebEngineService : public AbstractWebEngine, boost::noncopyable
{
public:
WebEngineService();
virtual ~WebEngineService();
- virtual std::string getName();
+ std::string getName() override;
Evas_Object * getLayout();
#if !DUMMY_BUTTON
Evas_Object * getWidget();
#endif
- void init(Evas_Object *guiParent);
- void preinitializeWebViewCache();
-
+ void init(Evas_Object* guiParent);
void setURI(const std::string &);
std::string getURI(void) const;
-#if PWA
- void requestManifest(void);
-#endif
+ void setPWAData();
std::string getTitle(void) const;
TabOrigin getOrigin(void) const;
std::string getUserAgent(void) const;
void suspend(void);
void resume(void);
+ void languageChanged(void);
bool isSuspended(void) const;
void stopLoading(void);
void clearFormData();
int tabsCount() const;
- TabId currentTabId() const;
+ TabId currentTabId() const { return m_stateStruct->currentTabId; };
+ TabId oldestTabId() const { return m_stateStruct->mostRecentTab[0]; };
void destroyTabs();
const std::string& title = std::string(),
bool desktopMode = true,
TabOrigin origin = TabOrigin::UNKNOWN);
+ TabId openRequestedPage();
Evas_Object* getTabView(TabId id);
bool switchToTab(TabId);
bool closeTab();
std::shared_ptr<tizen_browser::tools::BrowserImage> getSnapshotData(TabId id, int width, int height, bool async, tizen_browser::tools::SnapshotType snapshot_type);
+ void setIMEState(const bool& state);
+ bool getIMEState() const;
+
/**
* @brief Get the state of secret mode
*
*/
bool hasFocus() const;
- virtual int getZoomFactor() const;
-
- /**
- * @brief check if autofit is enabled
- */
-
- virtual void setZoomFactor(int zoomFactor);
-
-
/**
* @brief Search string on searchOnWebsite
*
*/
void backButtonClicked();
- void moreKeyPressed();
void orientationChanged();
void switchToMobileMode();
void switchToDesktopMode();
bool isDesktopMode() const;
-
- void scrollView(const int& dx, const int& dy);
-
+ bool isFullScreenMode() const;
void onTabIdCreated(int tabId) override;
/**
void setSettingsParam(WebEngineSettings param, bool value) override;
/**
- * @brief Reset WebView settings
- */
- virtual void resetSettingsParam() override;
-
- /**
* @brief set next state
*/
void changeState() override;
* @brief Get current state of the engine
*/
State getState() override { return m_state; }
+
+ /**
+ * @brief If false bottom and url bar hide.
+ */
+ void setBarsShown(bool value) const override;
private:
// callbacks from WebView
void _favIconChanged(std::shared_ptr<tizen_browser::tools::BrowserImage> bi);
void _confirmationRequest(WebConfirmationPtr) ;
void _IMEStateChanged(bool);
void _snapshotCaptured(std::shared_ptr<tizen_browser::tools::BrowserImage> snapshot, tools::SnapshotType snapshot_type);
- void _redirectedWebPage(const std::string& oldUrl, const std::string& newUrl);
void _setCertificatePem(const std::string& uri, const std::string& pem);
void _setWrongCertificatePem(const std::string& uri, const std::string& pem);
static void _download_request_cb(const char *download_uri, void *data);
/**
+ * Preinitialize WebView parameters.
+ */
+ void preinitializeWebViewCache();
+
+ /**
* disconnect signals from specified WebView
* \param WebView
*/
int createTabId();
void initializeDownloadControl(Ewk_Context* context = ewk_context_default_get());
+ void searchInNewTab(const std::string&, bool, const TabOrigin&);
private:
struct StateStruct {
TabId currentTabId = TabId::NONE;
};
+ struct TabStruct {
+ std::string uri;
+ boost::optional<int> tabId = boost::none;
+ std::string title;
+ bool desktopMode = false;
+ TabOrigin origin = TabOrigin::UNKNOWN;
+ };
+
State m_state;
bool m_initialised;
Evas_Object* m_guiParent;
StateStruct m_normalStateStruct;
StateStruct m_secretStateStruct;
StateStruct* m_stateStruct;
+ TabStruct m_requestedPage;
int m_tabIdCreated;
int m_tabIdSecret;
bool m_signalsConnected;
std::map<WebEngineSettings, bool> m_settings;
std::shared_ptr<DownloadControl> m_downloadControl;
Ewk_Context* m_defaultContext;
+ int m_policyCounter;
};
} /* end of webengine_service */
#include "WebView.h"
#include <EWebKit.h>
-#include <EWebKit_internal.h>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <Elementary.h>
-#include <Evas.h>
#include "URIschemes.h"
#include "app_i18n.h"
#include "AbstractWebEngine/AbstractWebEngine.h"
+#include "AbstractWebEngine/TabOrigin.h"
+#include "Config.h"
+#include "DownloadControl/DownloadControl.h"
#include "app_common.h"
#include "BrowserAssert.h"
#include "BrowserLogger.h"
+#include "BrowserImage.h"
#include "EflTools.h"
#include "GeneralTools.h"
#include "Tools/WorkQueue.h"
#include "ServiceManager.h"
#include <shortcut_manager.h>
-#include <string>
#include <device/haptic.h>
#include <Ecore.h>
-#if PWA
#include <sys/stat.h>
#include <fcntl.h>
-#include <tzplatform_config.h>
-#endif
+#include <glib.h>
+#include <curl/curl.h>
-#define certificate_crt_path CERTS_DIR
-#define APPLICATION_NAME_FOR_USER_AGENT "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 safari/537.36 "
+const char* const APPLICATION_NAME_FOR_USER_AGENT =
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 safari/537.36 ";
//TODO: temporary user agent for mobile display, change to proper one
-#define APPLICATION_NAME_FOR_USER_AGENT_MOBILE "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG TM1) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/1.0 Chrome/47.0.2526.69 Mobile safari/537.36"
+const char* const APPLICATION_NAME_FOR_USER_AGENT_MOBILE =
+ "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG TM1) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/1.0 Chrome/47.0.2526.69 Mobile safari/537.36";
+
+const unsigned URL_BAR_HEIGHT = 108;
+const unsigned BOTTOM_BAR_HEIGHT = 96;
+const unsigned FIND_WORD_MAX_COUNT = 1000;
-Ecore_Timer* m_haptic_timer_id =NULL;
+Ecore_Timer* m_haptic_timer_id = nullptr;
haptic_device_h m_haptic_handle;
haptic_effect_h m_haptic_effect;
-#define FIND_WORD_MAX_COUNT 1000
-
using namespace tizen_browser::tools;
+using namespace tizen_browser::config;
namespace tizen_browser {
namespace basic_webengine {
namespace webengine_service {
const std::string WebView::COOKIES_PATH = "cookies";
-#if PWA
std::string WebView::s_pwaData = "";
std::string WebView::s_name = "";
-std::string WebView::s_start_url = "";
std::string WebView::s_icon = "";
-#define DOWNLOAD_PATH tzplatform_getenv(TZ_USER_DOWNLOADS)
-#endif
+const std::string WebView::DOWNLOAD_PATH = app_get_shared_data_path();
struct SnapshotItemData {
- WebView * web_view;
- tizen_browser::tools::SnapshotType snapshot_type;
+ WebView* web_view;
+ SnapshotType snapshot_type;
};
WebView::WebView(Evas_Object * obj, TabId tabId, const std::string& title, bool incognitoMode)
, m_title(title)
, m_redirectedURL("")
, m_isLoading(false)
+ , m_loadProgress(0.0)
, m_loadError(false)
+ , m_desktopMode(false)
, m_suspended(false)
, m_private(incognitoMode)
, m_fullscreen(false)
+ , m_manifestData()
+ , m_manifestReady(false)
, m_downloadControl(nullptr)
-{
+ , m_policyCounter(0)
+ , m_imeState(false)
+ , m_themeColor()
+{
+ m_manifestData.orientation_type = static_cast<Ewk_View_Orientation_Type>(0);
+ m_manifestData.web_display_mode = static_cast<Ewk_View_Web_Display_Mode>(0);
+ m_manifestData.theme_color.colorExist = 0;
+ m_manifestData.theme_color.r = 0;
+ m_manifestData.theme_color.g = 0;
+ m_manifestData.theme_color.b = 0;
+ m_manifestData.theme_color.a = 0;
+ m_manifestData.background_color.colorExist = 0;
+ m_manifestData.background_color.r = 0;
+ m_manifestData.background_color.g = 0;
+ m_manifestData.background_color.b = 0;
+ m_manifestData.background_color.a = 0;
+ m_manifestData.icons_count = 0;
}
WebView::~WebView()
delete m_downloadControl;
}
+void WebView::_push_cb(const char *sender_id, const char * push_data, void *data) {
+ BROWSER_LOGD("[%s:%d] pdush_time %d", __PRETTY_FUNCTION__, __LINE__, sender_id);
+ if (data) {
+ auto self = static_cast<WebView*>(data);
+ std::string msg = *(self->pushSignal(sender_id, push_data));
+ if (!msg.empty())
+ ewk_context_send_push_message(self->m_ewkContext, (char*)msg.c_str());
+ } else {
+ BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+ }
+}
+
void WebView::init(bool desktopMode, TabOrigin origin)
{
m_ewkView = m_private ? ewk_view_add_in_incognito_mode(evas_object_evas_get(m_parent)) :
m_ewkContext = ewk_view_context_get(m_ewkView);
if (m_ewkContext)
ewk_cookie_manager_accept_policy_set(ewk_context_cookie_manager_get(m_ewkContext), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
+ ewk_context_push_message_callback_set(m_ewkContext, _push_cb, this);
evas_object_data_set(m_ewkView, "_container", this);
BROWSER_LOGD("[%s:%d] self=%p", __PRETTY_FUNCTION__, __LINE__, this);
registerCallbacks();
m_downloadControl = new DownloadControl();
orientationChanged();
+
+ BROWSER_LOGD("[%s:%d] Check permissions", __PRETTY_FUNCTION__, __LINE__);
+ auto permissions = *getPermissionsMap();
+ Eina_List* permList = nullptr;
+ for (const auto& it : permissions) {
+ Ewk_Notification_Permission perm;
+ perm.origin = it.first.c_str();
+ perm.allowed = it.second;
+ BROWSER_LOGD("[%s:%d] Permission for %s is %d", __PRETTY_FUNCTION__, __LINE__, perm.origin, perm.allowed);
+ permList = eina_list_append(permList, (void*)&perm);
+ if (eina_error_get())
+ BROWSER_LOGE("[%s:%d] eina list append failed", __PRETTY_FUNCTION__, __LINE__);
+ }
+ if (permList) {
+ BROWSER_LOGD("[%s:%d] Set permissions", __PRETTY_FUNCTION__, __LINE__);
+ ewk_notification_cached_permissions_set(permList);
+ }
+
resume();
}
evas_object_smart_callback_add(m_ewkView, "load,finished", __loadFinished, this);
evas_object_smart_callback_add(m_ewkView, "load,progress", __loadProgress, this);
evas_object_smart_callback_add(m_ewkView, "load,error", __loadError, this);
+#if DUMMY_BUTTON
+ evas_object_smart_callback_add(m_ewkView, "webview,focus,request", __focusWebView, this);
+#endif
evas_object_smart_callback_add(m_ewkView, "title,changed", __titleChanged, this);
evas_object_smart_callback_add(m_ewkView, "url,changed", __urlChanged, this);
ewk_context_vibration_client_callbacks_set(m_ewkContext, __vibration_cb, __vibration_cancel_cb, this);
evas_object_smart_callback_add(m_ewkView, "rotate,prepared", __rotate_prepared_cb, this);
+
+ evas_object_smart_callback_add(m_ewkView, "topcontrol,moved", __top_controls_moved_cb, this);
+ evas_object_smart_callback_add(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+
+ ewk_view_did_change_theme_color_callback_set(m_ewkView, __theme_color_changed, this);
}
void WebView::unregisterCallbacks()
evas_object_smart_callback_del_full(m_ewkView, "load,finished", __loadFinished, this);
evas_object_smart_callback_del_full(m_ewkView, "load,progress", __loadProgress, this);
evas_object_smart_callback_del_full(m_ewkView, "load,error", __loadError, this);
+#if DUMMY_BUTTON
+ evas_object_smart_callback_del_full(m_ewkView, "webview,focus,request", __focusWebView, this);
+#endif
evas_object_smart_callback_del_full(m_ewkView, "title,changed", __titleChanged, this);
evas_object_smart_callback_del_full(m_ewkView, "url,changed", __urlChanged, this);
ewk_context_vibration_client_callbacks_set(m_ewkContext, NULL, NULL, this);
evas_object_smart_callback_del_full(m_ewkView, "rotate,prepared", __rotate_prepared_cb, this);
+ evas_object_smart_callback_del_full(m_ewkView, "topcontrol,moved", __top_controls_moved_cb, this);
+
+ evas_object_smart_callback_del_full(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+ ewk_context_push_message_callback_set(m_ewkContext, nullptr, nullptr);
}
void WebView::setupEwkSettings()
ewk_settings_uses_keypad_without_user_action_set(settings, EINA_FALSE);
}
-std::map<std::string, std::vector<std::string> > WebView::parse_uri(const char *uriToParse)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- std::string uri = uriToParse;
- std::map<std::string, std::vector<std::string> > uri_parts;
- std::string::size_type mainDelimiter;
- mainDelimiter = uri.find_first_of("?");
- if (mainDelimiter != std::string::npos) {
- uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
- std::string argsString = uri.substr(mainDelimiter+1, std::string::npos);
- const char *delimiter = "&";
- std::vector<std::string> argsVector;
- auto i = 0;
- auto pos = argsString.find(delimiter);
- if (pos != std::string::npos) {
- while (pos != std::string::npos) {
- argsVector.push_back(argsString.substr(i, pos-i));
- i = ++pos;
- pos = argsString.find(delimiter, pos);
- if (pos == std::string::npos)
- argsVector.push_back(argsString.substr(i, argsString.length()));
- }
- } else
- argsVector.push_back(argsString.substr(i, argsString.length()));
-
- const char *valueDelimiter = "=";
- const char *itemsDelimiter = ";";
- for (auto item : argsVector) {
- pos = item.find(valueDelimiter);
- if (pos != std::string::npos) {
- std::string key = item.substr(0, pos);
- std::string value = item.substr(pos+1, std::string::npos);
-
- auto pos2 = value.find(itemsDelimiter);
- auto j = 0;
- if (pos2 != std::string::npos) {
- while (pos2 != std::string::npos) {
- uri_parts[key].push_back(value.substr(j, pos2-j));
- j = ++pos2;
- pos2 = value.find(itemsDelimiter, pos2);
- if (pos2 == std::string::npos)
- uri_parts[key].push_back(value.substr(j, value.length()));
- }
- } else
- uri_parts[key].push_back(value);
- }
- }
- } else {
- uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
- }
- return uri_parts;
-}
-
-Eina_Bool WebView::handle_scheme(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- if (!strncmp(uri, HTTP_SCHEME, strlen(HTTP_SCHEME)))
- return EINA_FALSE;
- else if (!strncmp(uri, HTTPS_SCHEME, strlen(HTTPS_SCHEME)))
- return EINA_FALSE;
- else if (!strncmp(uri, FILE_SCHEME, strlen(FILE_SCHEME)))
- return EINA_FALSE;
- else if (!strncmp(uri, TIZENSTORE_SCHEME, strlen(TIZENSTORE_SCHEME))) {
- launch_tizenstore(uri);
- return EINA_TRUE;
- }
- else if (!strncmp(uri, MAILTO_SCHEME, strlen(MAILTO_SCHEME))) {
- launch_email(uri);
- return EINA_TRUE;
- }
- else if (!strncmp(uri, TEL_SCHEME, strlen(TEL_SCHEME))) {
- launch_dialer(uri);
- return EINA_TRUE;
- }
- else if (!strncmp(uri, TELTO_SCHEME, strlen(TELTO_SCHEME))) {
- std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(TELTO_SCHEME));
- launch_dialer(request_uri.c_str());
- return EINA_TRUE;
- }
- else if (!strncmp(uri, CALLTO_SCHEME, strlen(CALLTO_SCHEME))) {
- std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(CALLTO_SCHEME));
- launch_dialer(request_uri.c_str());
- return EINA_TRUE;
- }
- else if (!strncmp(uri, SMS_SCHEME, strlen(SMS_SCHEME))) {
- launch_message(uri);
- return EINA_TRUE;
- }
- else if (!strncmp(uri, SMSTO_SCHEME, strlen(SMSTO_SCHEME))) {
- std::string request_uri = std::string(SMS_SCHEME) + std::string(uri + strlen(SMSTO_SCHEME));
- launch_message(request_uri.c_str());
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-Eina_Bool WebView::launch_email(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- std::map<std::string, std::vector<std::string> >uri_parts = this->parse_uri(uri);
-
- app_control_h app_control = NULL;
- if (app_control_create(&app_control) < 0) {
- BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
- return EINA_FALSE;
- }
- if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
- BROWSER_LOGE("Fail to app_control_set_operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- auto it = uri_parts.find("url");
- if (it != uri_parts.end()) {
- if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_set_uri");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- } else
- return EINA_FALSE;
-
- it = uri_parts.find("subject");
- if (it != uri_parts.end()) {
- if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- it = uri_parts.find("body");
- if (it != uri_parts.end()) {
- if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- it = uri_parts.find("cc");
- if (it != uri_parts.end()) {
- size_t size = it->second.size();
- const char* cc[size];
- int i = 0;
- for(auto item : it->second) {
- cc[i] = item.c_str();
- ++i;
- }
- if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_CC, cc, size) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data_array");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- it = uri_parts.find("bcc");
- if (it != uri_parts.end()) {
- size_t size = it->second.size();
- const char* bcc[size];
- int i = 0;
- for(auto item : it->second) {
- bcc[i] = item.c_str();
- ++i;
- }
- if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_BCC, bcc, size) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data_array");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
- BROWSER_LOGE("Fail to app_control_send_launch_request");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- app_control_destroy(app_control);
-
- return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_contact(const char *uri, const char *protocol)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- std::map<std::string, std::vector<std::string> >uri_parts = this->parse_uri(uri);
-
- app_control_h app_control = NULL;
- if (app_control_create(&app_control) < 0) {
- BROWSER_LOGE("Fail to create app_control handle");
- return EINA_FALSE;
- }
- if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_ADD) < 0) {
- BROWSER_LOGE("Fail to app_control_set_operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- if (app_control_set_mime(app_control, "application/vnd.tizen.contact") < 0) {
- BROWSER_LOGE("Fail to app_control_set_mime");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- auto it = uri_parts.find("url");
- if (it != uri_parts.end()) {
- if (!strcmp(protocol, "tel")) {
- if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_PHONE,
- it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- } else if (strcmp(protocol, "mailto") == 0) {
- if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_EMAIL,
- it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- } else
- BROWSER_LOGE("Not supported protocol!");
- }
- if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
- BROWSER_LOGE("Fail to launch app_control operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- app_control_destroy(app_control);
-
- return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_dialer(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- app_control_h app_control = NULL;
- if (app_control_create(&app_control) < 0) {
- BROWSER_LOGE("Fail to create app_control handle");
- return EINA_FALSE;
- }
- if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_DIAL) < 0) {
- BROWSER_LOGE("Fail to app_control_set_operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- if (app_control_set_uri(app_control, uri) < 0) {
- BROWSER_LOGE("app_control_set_uri is failed.");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
- BROWSER_LOGE("Fail to launch app_control operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- app_control_destroy(app_control);
-
- return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_message(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- std::map<std::string, std::vector<std::string> >uri_parts = this->parse_uri(uri);
-
- app_control_h app_control = NULL;
- if (app_control_create(&app_control) < 0) {
- BROWSER_LOGE("Fail to create app_control handle");
- return EINA_FALSE;
- }
- if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
- BROWSER_LOGE("Fail to set app_control operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- auto it = uri_parts.find("url");
- if (it != uri_parts.end()) {
- if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_set_uri");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- else
- return EINA_FALSE;
-
- it = uri_parts.find("subject");
- if (it != uri_parts.end()) {
- if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- it = uri_parts.find("body");
- if (it != uri_parts.end()) {
- if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
- BROWSER_LOGE("Fail to app_control_add_extra_data");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- }
- if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
- BROWSER_LOGE("Fail to launch app_control operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- app_control_destroy(app_control);
-
- return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_tizenstore(const char *uri)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- app_control_h app_control = NULL;
- if (app_control_create(&app_control) < 0) {
- BROWSER_LOGE("Fail to create app_control handle");
- return EINA_FALSE;
- }
- if (!app_control) {
- BROWSER_LOGE("Fail to create app_control handle");
- return EINA_FALSE;
- }
- if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
- BROWSER_LOGE("Fail to set app_control operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- if (app_control_set_uri(app_control, uri) < 0) {
- BROWSER_LOGE("Fail to set uri operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- if (app_control_set_app_id(app_control, TIZENSTORE_APP_ID) < 0) {
- BROWSER_LOGE("Fail to app_control_set_app_id");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
- BROWSER_LOGE("Fail to launch app_control operation");
- app_control_destroy(app_control);
- return EINA_FALSE;
- }
- app_control_destroy(app_control);
-
- return EINA_TRUE;
-}
-
Evas_Object * WebView::getLayout()
{
return m_ewkView;
#if !DUMMY_BUTTON
Evas_Object * WebView::getWidget()
{
-#ifdef DENABLE_CHROMIUM_EWK_FEATURE
return ewk_view_widget_get(m_ewkView);
-#else
- return nullptr;
-#endif
}
#endif
return fromChar(ewk_view_url_get(m_ewkView));
}
-#if PWA
void WebView::requestManifest(void)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- ewk_view_request_manifest(m_ewkView, dataSetManifest, this);
+ ewk_view_request_manifest(m_ewkView, __setManifestData, this);
}
-void WebView::dataSetManifest(Evas_Object* view, Ewk_View_Request_Manifest* manifest, void* data)
+void WebView::handleManifest()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ for (const auto &type : m_manifestVector) {
+ switch (type) {
+ case ManifestType::QUICKACCESS_MANIFEST:
+ BROWSER_LOGD("Quickaccess manifest - not implemented");
+ break;
+ case ManifestType::THEME_MANIFEST:
+ BROWSER_LOGD("Quickaccess manifest - not implemented");
+ break;
+ case ManifestType::PWA_MANIFEST:
+ setPWAData();
+ break;
+ default:
+ BROWSER_LOGD("Bad manifest type");
+ break;
+ }
+ }
+ m_manifestVector.clear();
+}
- if (view && data) {
- WebView * self = reinterpret_cast<WebView *>(data);
+void WebView::setPWAData()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ s_name = m_manifestData.name;
- if (manifest) {
- uint8_t* theme_r = nullptr; uint8_t* theme_g = nullptr;
- uint8_t* theme_b = nullptr; uint8_t* theme_a = nullptr;
- uint8_t* bg_r = nullptr; uint8_t* bg_g = nullptr;
- uint8_t* bg_b = nullptr; uint8_t* bg_a = nullptr;
-
- const char* short_name(ewk_manifest_short_name_get(manifest));
- const char* name(ewk_manifest_name_get(manifest));
- const char* start_url(ewk_manifest_start_url_get(manifest));
- const char* icon_src(ewk_manifest_icons_src_get(manifest, 0));
- int orientation_type = ewk_manifest_orientation_type_get(manifest);
- int display_mode = ewk_manifest_web_display_mode_get(manifest);
- long theme_color = ewk_manifest_theme_color_get(manifest, theme_r, theme_g, theme_b, theme_a);
- long background_color = ewk_manifest_background_color_get(manifest, bg_r, bg_g, bg_b, bg_a);
- size_t icon_count = ewk_manifest_icons_count_get(manifest);
-
- std::string str_short_name = "";
- std::string str_icon_src = "";
-
- if (short_name)
- str_short_name = short_name;
- if (name)
- s_name = name;
- if (start_url)
- s_start_url = start_url;
- if (icon_src)
- str_icon_src = icon_src;
-
- std::string retVal("browser_shortcut:://");
- retVal.append("pwa_shortName:"); retVal.append(str_short_name.c_str()); retVal.append(",");
- retVal.append("pwa_name:"); retVal.append(s_name.c_str()); retVal.append(",");
- retVal.append("pwa_uri:"); retVal.append(s_start_url.c_str()); retVal.append(",");
- retVal.append("pwa_orientation:"); retVal.append(std::to_string(orientation_type)); retVal.append(",");
- retVal.append("pwa_displayMode:"); retVal.append(std::to_string(display_mode)); retVal.append(",");
- retVal.append("pwa_themeColor:"); retVal.append(std::to_string(theme_color)); retVal.append(",");
- retVal.append("theme_r:"); retVal.append(std::to_string((int)theme_r)); retVal.append(",");
- retVal.append("theme_g:"); retVal.append(std::to_string((int)theme_g)); retVal.append(",");
- retVal.append("theme_b:"); retVal.append(std::to_string((int)theme_b)); retVal.append(",");
- retVal.append("theme_a:"); retVal.append(std::to_string((int)theme_a)); retVal.append(",");
- retVal.append("pwa_backgroundColor:"); retVal.append(std::to_string(background_color)); retVal.append(",");
- retVal.append("bg_r:"); retVal.append(std::to_string((int)bg_r)); retVal.append(",");
- retVal.append("bg_g:"); retVal.append(std::to_string((int)bg_g)); retVal.append(",");
- retVal.append("bg_b:"); retVal.append(std::to_string((int)bg_b)); retVal.append(",");
- retVal.append("bg_a:"); retVal.append(std::to_string((int)bg_a)); retVal.append(",");
- retVal.append("icon_count:"); retVal.append(std::to_string(icon_count)); retVal.append(",");
- retVal.append("icon_src:"); retVal.append(str_icon_src.c_str()); retVal.append(",");
-
- BROWSER_LOGD("[%s:%d] retVal : %s", __PRETTY_FUNCTION__, __LINE__, retVal.c_str());
- s_pwaData = retVal;
-
- size_t len = strlen(icon_src);
- auto result = str_icon_src.substr(str_icon_src.find_last_of("/"), len);
- s_icon = DOWNLOAD_PATH + result;
- self->request_file_download(icon_src, s_icon, __download_result_cb, NULL);
- } else {
- s_pwaData = "";
- makeShortcut(self->getTitle(), self->getURI(), "");
- }
- BROWSER_LOGD("[%s:%d] dataSetManifest callback function end!", __PRETTY_FUNCTION__, __LINE__);
+ CURL *curl = curl_easy_init();
+ char* text;
+ if (!curl) {
+ BROWSER_LOGE("[%s:%d] CURL not initialized", __PRETTY_FUNCTION__, __LINE__);
+ return;
}
+
+ std::string str_icon_src = m_manifestData.icons.begin()->src;
+ auto result = str_icon_src.substr(str_icon_src.find_last_of("/"), str_icon_src.length());
+ s_icon = DOWNLOAD_PATH + result;
+ request_file_download(m_manifestData.icons.begin()->src, s_icon, __download_result_cb, nullptr);
+
+ if (m_manifestData.m_push_id.empty())
+ BROWSER_LOGW("[%s:%d] unknown Push ID value!", __PRETTY_FUNCTION__, __LINE__);
+
+ auto id = installPWA(m_manifestData.name, m_manifestData.m_push_id, m_manifestData.short_name);
+ if (!id) {
+ BROWSER_LOGE("[%s:%d] unknown installPWA value!", __PRETTY_FUNCTION__, __LINE__);
+ curl_easy_cleanup(curl);
+ return;
+ }
+
+ std::string retVal("multi-instance-shortcut://tizen.org/shortcut/multi-instance?");
+ retVal += "id=" + m_manifestData.short_name + std::to_string(*id)
+ + "&icon=" + std::string(text = curl_easy_escape(curl, s_icon.c_str(), s_icon.length()));
+ curl_free(text);
+ retVal += "&name=" + s_name
+ + "&uri=" + std::string(text = curl_easy_escape(curl,m_manifestData.start_url.c_str(),
+ m_manifestData.start_url.length()));
+ curl_free(text);
+ retVal += "&pwa_shortName=" + m_manifestData.short_name
+ + "&pwa_name=" + m_manifestData.name
+ + "&pwa_uri=" + std::string(text = curl_easy_escape(curl, m_manifestData.start_url.c_str(),
+ m_manifestData.start_url.length()));
+ curl_free(text);
+ retVal += "&pwa_orientation=" + std::to_string(static_cast<int>(m_manifestData.orientation_type))
+ + "&pwa_displayMode=" + std::to_string(static_cast<int>(m_manifestData.web_display_mode))
+ + "&pwa_themeColor=" + std::to_string(m_manifestData.theme_color.colorExist)
+ + "&pwa_theme_r=" + std::to_string(m_manifestData.theme_color.r)
+ + "&pwa_theme_g=" + std::to_string(m_manifestData.theme_color.g)
+ + "&pwa_theme_b=" + std::to_string(m_manifestData.theme_color.b)
+ + "&pwa_theme_a=" + std::to_string(m_manifestData.theme_color.a)
+ + "&pwa_backgroundColor=" + std::to_string(m_manifestData.background_color.colorExist)
+ + "&pwa_bg_r=" + std::to_string(m_manifestData.background_color.r)
+ + "&pwa_bg_g=" + std::to_string(m_manifestData.background_color.g)
+ + "&pwa_bg_b=" + std::to_string(m_manifestData.background_color.b)
+ + "&pwa_bg_a=" + std::to_string(m_manifestData.background_color.a)
+ + "&pwa_icon_count=" + std::to_string(m_manifestData.icons_count)
+ + "&pwa_icon_src=" + std::string(text = curl_easy_escape(curl,
+ m_manifestData.icons.begin()->src.c_str(), m_manifestData.icons.begin()->src.length()));
+ curl_free(text);
+ curl_easy_cleanup(curl);
+
+ BROWSER_LOGD("[%s:%d] retVal : %s", __PRETTY_FUNCTION__, __LINE__, retVal.c_str());
+ storePWAShortcut(*id, retVal);
+ s_pwaData = retVal;
}
void WebView::makeShortcut(const std::string& name, const std::string& pwaData, const std::string& icon)
{
- if (shortcut_add_to_home(name.c_str(),LAUNCH_BY_URI,pwaData.c_str(),
- icon.c_str(),0,result_cb,nullptr) != SHORTCUT_ERROR_NONE)
+ if (shortcut_add_to_home(name.c_str(), LAUNCH_BY_URI, pwaData.c_str(),
+ icon.c_str(), 0, result_cb, nullptr) != SHORTCUT_ERROR_NONE)
BROWSER_LOGE("[%s:%d] Fail to add to homescreen", __PRETTY_FUNCTION__, __LINE__);
else
BROWSER_LOGE("[%s:%d] Success to add to homescreen", __PRETTY_FUNCTION__, __LINE__);
}
int WebView::result_cb(int ret, void *data) {
-
if (data) {
BROWSER_LOGD("[%s:%d] ret : %d, data : %s", __PRETTY_FUNCTION__, __LINE__, ret, data);
} else {
return 0;
}
-void WebView::request_file_download(const char *uri, const std::string& file_path, download_finish_callback cb, void *data)
+void WebView::request_file_download(const std::string& uri, const std::string& file_path, download_finish_callback cb, void *data)
{
BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
- BROWSER_LOGD("uri = [%s], file_path = [%s]", uri, file_path.c_str());
+ BROWSER_LOGD("uri = [%s], file_path = [%s]", uri.c_str(), file_path.c_str());
SoupSession *soup_session = nullptr;
SoupMessage *soup_msg = nullptr;
+ char *s_filePath = strdup(file_path.c_str());
soup_session = soup_session_async_new();
g_object_set(soup_session, SOUP_SESSION_TIMEOUT, 15, nullptr);
- soup_msg = soup_message_new("GET", uri);
- download_request *request = new(std::nothrow) download_request(strdup(file_path.c_str()), cb, data);
+ soup_msg = soup_message_new("GET", uri.c_str());
+ download_request *request = new(std::nothrow) download_request(s_filePath, cb, data);
soup_session_queue_message(soup_session, soup_msg, __file_download_finished_cb, static_cast<void*>(request));
g_object_unref(soup_session);
+ free(s_filePath);
}
void WebView::__file_download_finished_cb(SoupSession *session, SoupMessage *msg, gpointer data)
BROWSER_LOGD("[%s:%d] file_path = [%s], data = [%s]", file_path.c_str(), data);
BROWSER_LOGD("[%s:%d] complete !", __PRETTY_FUNCTION__, __LINE__);
}
-#endif
std::string WebView::getTitle(void)
{
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_ewkView);
-
ewk_view_resume(m_ewkView);
m_suspended = false;
+ changeUIColor(m_themeColor.r, m_themeColor.g, m_themeColor.b, m_themeColor.a);
}
void WebView::stopLoading(void)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_isLoading = true;
- if(m_loadError)
- {
+ if (m_loadError) {
m_loadError = false;
ewk_view_url_set(m_ewkView, ewk_view_url_get(m_ewkView));
- }
- else
+ } else
ewk_view_reload(m_ewkView);
}
<
basic_webengine::AbstractWebEngine,tizen_browser::core::AbstractService
>
- (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice"));
+ (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice", "libWebEngineService.so"));
M_ASSERT(m_webEngine);
/// \todo: Choose newly created tab.
std::shared_ptr<AbstractWebEngine> m_webEngine =
std::dynamic_pointer_cast
<basic_webengine::AbstractWebEngine,tizen_browser::core::AbstractService>
- (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice"));
+ (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice", "libWebEngineService.so"));
m_webEngine->closeTab(self->getTabId());
}
+void WebView::__setManifestData(Evas_Object *view, Ewk_View_Request_Manifest *manifest, void *data)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ if (view && data) {
+ WebView *self = reinterpret_cast<WebView *>(data);
+
+ if (manifest) {
+ const char *tmp;
+ self->m_manifestData.m_push_id = ewk_manifest_push_sender_id_get(manifest);
+ self->m_manifestData.short_name = ((tmp = ewk_manifest_short_name_get(manifest)) ? tmp : "");
+ self->m_manifestData.name = ((tmp = ewk_manifest_name_get(manifest)) ? tmp : "");
+ self->m_manifestData.start_url = ((tmp = ewk_manifest_start_url_get(manifest)) ? tmp : "");
+ self->m_manifestData.orientation_type = ewk_manifest_orientation_type_get(manifest);
+ self->m_manifestData.web_display_mode = ewk_manifest_web_display_mode_get(manifest);
+ self->m_manifestData.theme_color.colorExist = ewk_manifest_theme_color_get(
+ manifest,
+ &self->m_manifestData.theme_color.r,
+ &self->m_manifestData.theme_color.g,
+ &self->m_manifestData.theme_color.b,
+ &self->m_manifestData.theme_color.a);
+ self->m_manifestData.background_color.colorExist = ewk_manifest_background_color_get(
+ manifest,
+ &self->m_manifestData.background_color.r,
+ &self->m_manifestData.background_color.g,
+ &self->m_manifestData.background_color.b,
+ &self->m_manifestData.background_color.a);
+
+ self->m_manifestData.icons_count = ewk_manifest_icons_count_get(manifest);
+ self->m_manifestData.icons.clear();
+ for (size_t iconNumber = 0; iconNumber < self->m_manifestData.icons_count; iconNumber++) {
+ ManifestData::_icon icon;
+ icon.src = (( tmp = ewk_manifest_icons_src_get(manifest, iconNumber)) ? tmp : "");
+ icon.type = (( tmp = ewk_manifest_icons_type_get(manifest, iconNumber)) ? tmp : "");
+ icon.sizes_count = ewk_manifest_icons_sizes_count_get(manifest, iconNumber);
+ for (size_t sizeNumber = 0; sizeNumber < icon.sizes_count; sizeNumber++) {
+ ManifestData::_icon::_size size;
+ size.width = ewk_manifest_icons_width_get(manifest, iconNumber, sizeNumber);
+ size.height = ewk_manifest_icons_height_get(manifest, iconNumber, sizeNumber);
+ icon.sizes.push_back(size);
+ }
+ self->m_manifestData.icons.push_back(icon);
+ }
+
+ if (!self->m_manifestData.name.empty() && !self->m_manifestData.start_url.empty()) {
+ self->m_manifestReady = true;
+ self->handleManifest();
+ } else {
+ BROWSER_LOGW("No Name and url in manifest!");
+ }
+
+ } else {
+ BROWSER_LOGW("No manifest for webview!");
+ std::string uri=self->getURI();
+ shortcut_add_to_home(self->m_title.c_str(), LAUNCH_BY_URI, uri.c_str(),nullptr, 0, result_cb, nullptr);
+ }
+ } else {
+ BROWSER_LOGW("No View or data!");
+ }
+}
+
void WebView::__loadStarted(void * data, Evas_Object * /* obj */, void * /* event_info */)
{
WebView * self = reinterpret_cast<WebView *>(data);
self->m_isLoading = true;
self->loadStarted();
+ ewk_view_top_controls_height_set(self->m_ewkView, URL_BAR_HEIGHT, BOTTOM_BAR_HEIGHT);
+ ewk_view_top_controls_state_set(self->m_ewkView, EWK_TOP_CONTROL_BOTH, EWK_TOP_CONTROL_SHOWN, EINA_TRUE);
}
void WebView::__loadFinished(void * data, Evas_Object * /* obj */, void * /* event_info */)
self->loadFinished();
self->loadProgress(self->m_loadProgress);
- self->captureSnapshot(boost::any_cast<int>(config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH)),
- boost::any_cast<int>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT)),
+ self->captureSnapshot(boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH)),
+ boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT)),
true, tools::SnapshotType::ASYNC_LOAD_FINISHED);
+
+ self->changeUIColor(
+ self->m_themeColor.r,
+ self->m_themeColor.g,
+ self->m_themeColor.b,
+ self->m_themeColor.a);
}
void WebView::__loadProgress(void * data, Evas_Object * /* obj */, void * event_info)
}
}
+#if DUMMY_BUTTON
+void WebView::__focusWebView(void *data, Evas_Object * /* obj */, void * /*event_info */)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ if (data) {
+ auto *self = static_cast<WebView *>(data);
+ self->focusWebView();
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+#endif
+
void WebView::__titleChanged(void * data, Evas_Object * obj, void * /* event_info */)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
WebView * self = reinterpret_cast<WebView *>(data);
BROWSER_LOGD("URL changed for tab: %s", self->getTabId().toString().c_str());
self->uriChanged(self->getURI());
+ self->m_manifestReady = false;
}
void WebView::__backForwardListChanged(void * data, Evas_Object * /* obj */, void * /* event_info */)
void WebView::__IMEClosed(void* data, Evas_Object*, void*)
{
- BROWSER_LOGD("%s", __func__);
- WebView * self = reinterpret_cast<WebView *>(data);
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto self = static_cast<WebView*>(data);
self->IMEStateChanged(false);
+ self->setIMEState(false);
}
void WebView::__IMEOpened(void* data, Evas_Object*, void*)
{
- BROWSER_LOGD("%s", __func__);
- WebView * self = reinterpret_cast<WebView *>(data);
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto self = static_cast<WebView*>(data);
self->IMEStateChanged(true);
+ self->setIMEState(true);
}
void WebView::__load_provisional_started(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
WebView * self = reinterpret_cast<WebView*>(data);
- if (!self->getRedirectedURL().empty())
- self->redirectedWebPage(self->getRedirectedURL(), self->getURI());
self->setRedirectedURL("");
}
}
/* Web Search*/
if (text_selected == true) {
- ewk_context_menu_item_append_as_action(menu, EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB, _("IDS_BR_OPT_WEB_SEARCH"), true);
+ ewk_context_menu_item_append_as_action(menu, CUSTOM_CONTEXT_MENU_ITEM_SEARCH, _("IDS_BR_OPT_WEB_SEARCH"), true);
}
/* Find on page*/
if (text_selected == true) {
const char *selected_text = ewk_view_text_selection_text_get(self->m_ewkView);
if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEND_EMAIL) {
- self->handle_scheme(link_url);
+ handle_scheme(link_url);
} else if (tag == CUSTOM_CONTEXT_MENU_ITEM_CALL) {
- self->handle_scheme(link_url);
+ handle_scheme(link_url);
} else if (tag == CUSTOM_CONTEXT_MENU_ITEM_FIND_ON_PAGE) {
self->findOnPage(selected_text);
} else if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEND_MESSAGE) {
std::string source = std::string(link_url);
while ((pos = source.find(TEL_SCHEME)) != std::string::npos)
source.replace(pos, strlen(TEL_SCHEME), SMS_SCHEME);
- self->handle_scheme(source.c_str());
+ handle_scheme(source.c_str());
}
} else if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEND_ADD_TO_CONTACT) {
if (link_url && !strncmp(TEL_SCHEME, link_url, strlen(TEL_SCHEME))) {
- self->launch_contact(link_url + strlen(TEL_SCHEME), "tel");
+ launch_contact(link_url + strlen(TEL_SCHEME), "tel");
} else if (link_url && !strncmp(MAILTO_SCHEME, link_url, strlen(MAILTO_SCHEME))) {
- size_t source_end_pos = 0;
std::string source = std::string(link_url);
if (source.find("?") != std::string::npos) {
- source_end_pos = source.find("?");
+ size_t source_end_pos = source.find("?");
source = source.substr(0, source_end_pos);
}
- self->launch_contact(source.c_str() + strlen(MAILTO_SCHEME), "mailto");
+ launch_contact(source.c_str() + strlen(MAILTO_SCHEME), "mailto");
}
+ } else if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEARCH) {
+ self->searchInNewTab(selected_text, self->m_desktopMode, TabOrigin(self->m_tabId.get()));
}
}
auto self = static_cast<WebView*>(data);
self->m_fullscreen = true;
self->fullscreenModeSet(self->m_fullscreen);
+ ewk_view_top_controls_state_set(self->m_ewkView, EWK_TOP_CONTROL_HIDDEN, EWK_TOP_CONTROL_HIDDEN, EINA_TRUE);
}
void WebView::__fullscreen_exit_cb(void *data, Evas_Object*, void*)
auto self = static_cast<WebView*>(data);
self->m_fullscreen = false;
self->fullscreenModeSet(self->m_fullscreen);
+ ewk_view_top_controls_state_set(self->m_ewkView, EWK_TOP_CONTROL_BOTH, EWK_TOP_CONTROL_SHOWN, EINA_TRUE);
}
void WebView::__rotate_prepared_cb(void * data, Evas_Object *, void *)
if (data) {
auto *self = static_cast<WebView *>(data);
self->rotatePrepared();
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebView::__top_controls_moved_cb(void* data, Evas_Object*, void* event_info)
+{
+ if (!data || !event_info) {
+ BROWSER_LOGW("[%s] data or even_info = nullptr", __PRETTY_FUNCTION__);
+ return;
+ }
+ auto offset = *static_cast<int*>(event_info);
+ auto self = static_cast<WebView*>(data);
+ BROWSER_LOGD("[%s:%d] %f", __PRETTY_FUNCTION__, __LINE__, offset);
+
+ self->urlbarOffsetSet(offset);
+ self->bottombarOffsetSet(
+ self->m_imeState ?
+ -boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::URL_BAR_HEIGHT)) : offset);
+}
+
+void WebView::__notification_reply_cb(void* data, Evas_Object*, void* event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!data || !event_info) {
+ BROWSER_LOGW("[%s] data or even_info = nullptr", __PRETTY_FUNCTION__);
+ return;
+ }
+ auto perm = static_cast< Ewk_Notification_Permission*>(event_info);
+ auto self = static_cast<WebView*>(data);
+ auto id = *self->getPermissionId(perm->origin);
+ if (!id) {
+ auto ret = *self->storePermission(perm->origin, perm->allowed);
+ if (!ret)
+ BROWSER_LOGD("[%s:%d] failed to store permission", __PRETTY_FUNCTION__, __LINE__);
} else {
- BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+ auto ret = self->updatePermissionState(id, perm->allowed);
+ if (!ret)
+ BROWSER_LOGD("[%s:%d] failed to update permission", __PRETTY_FUNCTION__, __LINE__);
}
}
+void WebView::__theme_color_changed(
+ Evas_Object*,
+ int r,
+ int g,
+ int b,
+ int alpha,
+ void* data)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (!data) {
+ BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+ BROWSER_LOGD("[%s:%d] changed color to %d %d %d %d", __PRETTY_FUNCTION__, __LINE__, r, g, b, alpha);
+ auto self = static_cast<WebView*>(data);
+ self->m_themeColor = tools::Color(r, g, b, alpha);
+ self->changeUIColor(r, g, b, alpha);
+}
+
+void WebView::setIMEState(const bool& state)
+{
+ int urlBarHeight =
+ boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::URL_BAR_HEIGHT));
+ int bottomBarHeight =
+ boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::BOTTOM_BAR_HEIGHT));
+ ewk_view_top_controls_height_set(
+ m_ewkView,
+ urlBarHeight,
+ state ? 0 : bottomBarHeight);
+ bottombarOffsetSet(state ? -urlBarHeight : 0);
+
+ m_imeState = state;
+}
+
+bool WebView::getIMEState() const
+{
+ return m_imeState;
+}
+
void WebView::setFocus()
{
ewk_view_focus_set(m_ewkView, EINA_TRUE);
bool WebView::hasFocus() const
{
-#ifdef DENABLE_CHROMIUM_EWK_FEATURE
return ewk_view_focus_get(m_ewkView) == EINA_TRUE ? true : false;
-#else
- return false;
-#endif
}
double WebView::getZoomFactor() const
return ewk_view_page_zoom_get(m_ewkView);
}
-void WebView::setZoomFactor(double zoomFactor)
-{
- if(m_ewkView) {
- //using zoomFactor = 0 sets zoom "fit to screen"
-
- if(zoomFactor != getZoomFactor())
- ewk_view_page_zoom_set(m_ewkView, zoomFactor);
- }
-}
-
-void WebView::scrollView(const int& dx, const int& dy)
-{
- ewk_view_scroll_by(m_ewkView, dx, dy);
-}
-
void WebView::findWord(const char *word, Eina_Bool forward, Evas_Smart_Cb found_cb, void *data)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
ewk_settings_form_candidate_data_enabled_set(settings, value);
}
+void WebView::ewkSettingsCookiesEnabledSet(bool value)
+{
+ BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
+ if (value)
+ ewk_cookie_manager_accept_policy_set(
+ ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
+ else
+ ewk_cookie_manager_accept_policy_set(
+ ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_NEVER);
+}
+
void WebView::ewkSettingsAutofillPasswordFormEnabledSet(bool value)
{
BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
ewk_settings_scripts_can_open_windows_set(settings, value);
}
-bool WebView::clearTextSelection() const {
- return ewk_view_text_selection_clear(m_ewkView);
-}
-
bool WebView::exitFullScreen() const {
return ewk_view_fullscreen_exit(m_ewkView);
}
ewk_settings_form_profile_data_enabled_set(settings, value);
}
+void WebView::setBarsShown(bool value) const
+{
+ BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
+ if (value)
+ ewk_view_top_controls_state_set(m_ewkView, EWK_TOP_CONTROL_BOTH, EWK_TOP_CONTROL_SHOWN, EINA_TRUE);
+ else
+ ewk_view_top_controls_state_set(m_ewkView, EWK_TOP_CONTROL_HIDDEN, EWK_TOP_CONTROL_HIDDEN, EINA_FALSE);
+}
+
const TabId& WebView::getTabId() {
return m_tabId;
}
return m_desktopMode;
}
-void WebView::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, void *event_info)
+void WebView::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, void* event_info)
{
- WebView *wv = (WebView *)data;
+ auto wv = static_cast<WebView*>(data);
+ ++wv->m_policyCounter;
- Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision *)event_info;
+ Ewk_Policy_Decision* policy_decision = static_cast<Ewk_Policy_Decision*>(event_info);
Ewk_Policy_Decision_Type policy_type = ewk_policy_decision_type_get(policy_decision);
- wv->m_status_code = ewk_policy_decision_response_status_code_get(policy_decision);
- wv->m_is_error_page = EINA_FALSE;
-
switch (policy_type) {
case EWK_POLICY_DECISION_USE:
BROWSER_LOGD("[%s:%d] policy_use", __PRETTY_FUNCTION__, __LINE__);
ewk_policy_decision_use(policy_decision);
+ if (wv->m_policyCounter)
+ wv->isPolicyUse(wv->m_policyCounter);
break;
case EWK_POLICY_DECISION_DOWNLOAD: {
BROWSER_LOGD("[%s:%d] policy_download", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_smart_callback_call(wv->m_ewkView, "close,window", nullptr);
const char *uri = ewk_policy_decision_url_get(policy_decision);
const char *content_type = ewk_policy_decision_response_mime_get(policy_decision);
const Eina_Hash *headers = ewk_policy_decision_response_headers_get(policy_decision);
- app_control_h app_control = NULL;
+ app_control_h app_control = nullptr;
if (app_control_create(&app_control) < 0) {
BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
return;
const char *content_dispotision = (const char *)eina_hash_find(headers, "Content-Disposition");
BROWSER_LOGD("[%s:%d] Content-disposition: %s", __PRETTY_FUNCTION__, __LINE__, content_dispotision);
- if (content_dispotision && (strstr(content_dispotision, "attachment") != NULL)){
+ if (content_dispotision && (strstr(content_dispotision, "attachment") != nullptr)){
wv->m_downloadControl->handle_download_request(uri, content_type);
app_control_destroy(app_control);
ewk_policy_decision_ignore(policy_decision);
break;
}
- if (app_control_send_launch_request(app_control, NULL, NULL) == APP_CONTROL_ERROR_APP_NOT_FOUND) {
+ if (app_control_send_launch_request(app_control, nullptr, nullptr) == APP_CONTROL_ERROR_APP_NOT_FOUND) {
BROWSER_LOGD("[%s:%d] app_control_send_launch_request returns APP_CONTROL_ERROR_APP_NOT_FOUND", __PRETTY_FUNCTION__, __LINE__);
wv->m_downloadControl->handle_download_request(uri, content_type);
}
void WebView::__policy_navigation_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info)
{
BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
- WebView *wv = (WebView *)data;
+ auto wv = static_cast<WebView*>(data);
Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision *)event_info;
const char *uri = ewk_policy_decision_url_get(policy_decision);
wv->m_loadingURL = std::string(uri);
BROWSER_LOGD("uri = [%s]", uri);
- Eina_Bool is_scheme_handled = wv->handle_scheme(uri);
+ Eina_Bool is_scheme_handled = handle_scheme(uri);
if (is_scheme_handled) {
BROWSER_LOGD("Scheme handled");
#include <boost/signals2/signal.hpp>
#include <string>
+#include <vector>
#include <Evas.h>
-#include <ecore-1/Ecore.h>
-#include <EWebKit.h>
#include <EWebKit_internal.h>
#include "browser_config.h"
-#include "Config.h"
-#include "BrowserImage.h"
#include "SnapshotType.h"
#include "AbstractWebEngine/TabId.h"
#include "AbstractWebEngine/WebConfirmation.h"
-#include "AbstractWebEngine/TabOrigin.h"
+#include "AbstractWebEngine.h"
+#include "GeneralTools.h"
-#include "DownloadControl/DownloadControl.h"
#include <app_control.h>
#include <app.h>
#include "AbstractRotatable.h"
-
-#if PWA
-#include <glib.h>
#include <libsoup/soup.h>
-#endif
-typedef enum _context_menu_type {
+enum context_menu_type {
TEXT_ONLY = 0,
INPUT_FIELD,
TEXT_LINK,
TEL_LINK,
TEXT_IMAGE_LINK,
UNKNOWN_MENU
-} context_menu_type;
+};
-typedef enum _custom_context_menu_item_tag {
+enum custom_context_menu_item_tag {
CUSTOM_CONTEXT_MENU_ITEM_BASE_TAG = EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG,
CUSTOM_CONTEXT_MENU_ITEM_FIND_ON_PAGE,
CUSTOM_CONTEXT_MENU_ITEM_SHARE,
CUSTOM_CONTEXT_MENU_ITEM_SEND_MESSAGE,
CUSTOM_CONTEXT_MENU_ITEM_SEND_EMAIL,
CUSTOM_CONTEXT_MENU_ITEM_SEND_ADD_TO_CONTACT,
-} custom_context_menu_item_tag;
+};
+class DownloadControl;
namespace tizen_browser {
+
+namespace tools {
+class BrowserImage;
+}
+
+enum class ManifestType {
+ PWA_MANIFEST,
+ QUICKACCESS_MANIFEST,
+ THEME_MANIFEST
+};
+
+struct ManifestData {
+ ManifestData() = default;
+ std::string short_name;
+ std::string name;
+ std::string start_url;
+ Ewk_View_Orientation_Type orientation_type;
+ Ewk_View_Web_Display_Mode web_display_mode;
+ struct _color {
+ _color() = default;
+ unsigned colorExist;
+ uint8_t r, g, b, a;
+ } theme_color, background_color;
+ size_t icons_count;
+ struct _icon {
+ _icon() = default;
+ std::string src;
+ std::string type;
+ size_t sizes_count;
+ struct _size {
+ _size() = default;
+ int width;
+ int height;
+ };
+ std::vector<_size> sizes;
+ };
+ std::vector<_icon> icons;
+ std::string m_push_id;
+};
+
namespace basic_webengine {
+
+class TabOrigin;
+
namespace webengine_service {
using download_finish_callback = void (*)(const std::string& file_path, void *data);
+using ManifestTypesVector = std::vector<ManifestType>;
class WebView
- : public tizen_browser::interfaces::AbstractRotatable
+ : public tizen_browser::interfaces::AbstractRotatable
{
public:
WebView(Evas_Object *, TabId, const std::string& title, bool incognitoMode);
virtual ~WebView();
void init(bool desktopMode, TabOrigin origin);
- virtual void orientationChanged() override;
+ void orientationChanged() override;
void setURI(const std::string &);
std::string getURI(void);
bool isLoading();
bool isLoadError() const;
-#if PWA
void requestManifest(void);
- void request_file_download(const char *uri, const std::string& file_path, download_finish_callback cb, void *data);
+ bool isManifestReady() { return m_manifestReady; }
+ void handleManifest();
+ void addManifestTypeToHandle(const ManifestType &type) { m_manifestVector.push_back(type); }
+
+ void setPWAData();
+ void request_file_download(const std::string& uri, const std::string& file_path, download_finish_callback cb, void *data);
struct download_request
{
public:
download_request(char* file_path_ = nullptr, download_finish_callback cb_ = nullptr, void* data_ = nullptr)
- : file_path(file_path_),
- cb(cb_),
- data(data_)
- {}
+ : file_path(file_path_)
+ , cb(cb_)
+ , data(data_)
+ {}
~download_request() {}
download_request& operator=(const download_request&);
download_request(const download_request&);
};
-#endif
std::map<std::string, std::vector<std::string> > parse_uri(const char *uriToParse);
std::shared_ptr<tizen_browser::tools::BrowserImage> captureSnapshot(int width, int height, bool async,
tizen_browser::tools::SnapshotType snapshot_type);
+
+ void setIMEState(const bool& state);
+ bool getIMEState() const;
+
/**
* \brief Sets Focus to URI entry.
*/
*/
double getZoomFactor() const;
- /**
- * @brief set zoom factor of website
- */
- void setZoomFactor(double zoomFactor);
-
void clearCache();
void clearCookies();
void clearPrivateData();
*/
std::shared_ptr<tizen_browser::tools::BrowserImage> getFavicon();
- /**
- * Sets an absolute scroll of the given view.
- *
- * Both values are from zero to the contents size minus the viewport
- * size.
- *
- * @param x horizontal position to scroll
- * @param y vertical position to scroll
- */
- void scrollView(const int& dx, const int& dy);
-
TabOrigin getOrigin() { return m_origin; }
Ewk_Context* getContext() { return m_ewkContext; }
void ewkSettingsFormCandidateDataEnabledSet(bool value);
/**
+ * @brief Set form Cookies data enabled settings flag.
+ */
+ void ewkSettingsCookiesEnabledSet(bool value);
+
+ /**
* @brief Set autofill password form enabled settings flag.
*/
void ewkSettingsAutofillPasswordFormEnabledSet(bool value);
bool isFullScreen() const { return m_fullscreen; };
/**
- * @brief Clear text slection return true if some selection was cleared.
- */
- bool clearTextSelection() const;
-
- /**
* @brief Exit full screen mode, return true if successful.
*/
bool exitFullScreen() const;
*/
void ewkSettingsFormProfileDataEnabledSet(bool value);
+ /**
+ * @brief If true bottom and url bar hide while scrolling web page.
+ */
+ void setBarsShown(bool value) const;
+
// signals
boost::signals2::signal<void (std::shared_ptr<tizen_browser::tools::BrowserImage>)> favIconChanged;
boost::signals2::signal<void (std::shared_ptr<tizen_browser::tools::BrowserImage>, tizen_browser::tools::SnapshotType snapshot_type)> snapshotCaptured;
boost::signals2::signal<void ()> loadStop;
boost::signals2::signal<void ()> loadError;
boost::signals2::signal<void (double)> loadProgress;
+#if DUMMY_BUTTON
+ boost::signals2::signal<void ()> focusWebView;
+#endif
boost::signals2::signal<void (bool)> forwardEnableChanged;
boost::signals2::signal<void (bool)> backwardEnableChanged;
boost::signals2::signal<void ()> rotatePrepared;
- boost::signals2::signal<void (const std::string&, const std::string&)> redirectedWebPage;
boost::signals2::signal<void()> unsecureConnection;
boost::signals2::signal<void(bool)> fullscreenModeSet;
+ boost::signals2::signal<void(float)> urlbarOffsetSet;
+ boost::signals2::signal<void(float)> bottombarOffsetSet;
+ boost::signals2::signal<void(int)> isPolicyUse;
+ boost::signals2::signal<void (const std::string&, bool, const TabOrigin&)> searchInNewTab;
+
+ boost::signals2::signal<void(int,int,int,int)> changeUIColor;
+
+ boost::signals2::signal<unsigned(const std::string&, const std::string&, const std::string&)> installPWA;
+ boost::signals2::signal<void(const unsigned&,const std::string&)> storePWAShortcut;
+ boost::signals2::signal<std::string(const char*, const char* )> pushSignal;
+ boost::signals2::signal<unsigned(const std::string&, const bool&)> storePermission;
+ boost::signals2::signal<unsigned(const std::string&)> getPermissionId;
+ boost::signals2::signal<bool(const int&, const bool&)> updatePermissionState;
+ boost::signals2::signal<std::map<std::string, bool>()> getPermissionsMap;
protected:
std::string getRedirectedURL() {return m_redirectedURL;};
static void __newWindowRequest(void * data, Evas_Object *, void *out);
static void __closeWindowRequest(void * data, Evas_Object *, void *);
+ static void __setManifestData(Evas_Object* view, Ewk_View_Request_Manifest* manifest, void *data);
-#if PWA
- static void dataSetManifest(Evas_Object* view, Ewk_View_Request_Manifest* manifest, void*);
static int result_cb(int ret, void *data);
static void makeShortcut(const std::string& name, const std::string& pwaData, const std::string& icon);
static void __file_download_finished_cb(SoupSession *session, SoupMessage *msg, gpointer data);
static void __download_result_cb(const std::string& file_path, void *data);
-#endif
+ static void _push_cb(const char *sender_id, const char *, void *data);
context_menu_type _get_menu_type(Ewk_Context_Menu *menu);
void _customize_context_menu(Ewk_Context_Menu *menu);
static void __fullscreen_enter_cb(void *data, Evas_Object *obj, void *event_info);
static void __fullscreen_exit_cb(void *data, Evas_Object *obj, void *event_info);
static void __rotate_prepared_cb(void *data, Evas_Object *obj, void *event_info);
-
- Eina_Bool handle_scheme(const char *uri);
- Eina_Bool launch_email(const char *uri);
- Eina_Bool launch_contact(const char *uri, const char *protocol);
- Eina_Bool launch_dialer(const char *uri);
- Eina_Bool launch_message(const char *uri);
- Eina_Bool launch_tizenstore(const char *uri);
+ static void __top_controls_moved_cb(void *data, Evas_Object *obj, void *event_info);
+ static void __notification_reply_cb(void *data, Evas_Object *obj, void *event_info);
+ static void __theme_color_changed(
+ Evas_Object* o,
+ int r,
+ int g,
+ int b,
+ int a,
+ void* data
+ );
// Load
static void __loadStarted(void * data, Evas_Object * obj, void * event_info);
static void __loadFinished(void * data, Evas_Object * obj, void * event_info);
static void __loadProgress(void * data, Evas_Object * obj, void * event_info);
static void __loadError(void* data, Evas_Object* obj, void *ewkError);
+#if DUMMY_BUTTON
+ static void __focusWebView(void * data, Evas_Object * obj, void * event_info);
+#endif
static void __titleChanged(void * data, Evas_Object * obj, void * event_info);
static void __urlChanged(void * data, Evas_Object * obj, void * event_info);
// Screenshot capture
static void __screenshotCaptured(Evas_Object* image, void* user_data);
-private:
+
Evas_Object * m_parent;
TabId m_tabId;
Evas_Object * m_ewkView;
std::string m_title;
std::string m_redirectedURL;
std::string m_loadingURL;
- std::shared_ptr<tizen_browser::tools::BrowserImage> m_faviconImage;
+ tools::BrowserImagePtr m_faviconImage;
bool m_isLoading;
double m_loadProgress;
bool m_loadError;
TabOrigin m_origin;
std::map<CertificateConfirmationPtr, Ewk_Certificate_Policy_Decision *> m_confirmationCertificatenMap;
+ ManifestData m_manifestData;
+ bool m_manifestReady;
+ ManifestTypesVector m_manifestVector;
static const std::string COOKIES_PATH;
-#if PWA
static std::string s_pwaData;
static std::string s_name;
static std::string s_start_url;
static std::string s_icon;
static const std::string DOWNLOAD_PATH;
-#endif
- int m_status_code;
- Eina_Bool m_is_error_page;
- DownloadControl *m_downloadControl;
+ DownloadControl* m_downloadControl;
+ int m_policyCounter;
+ bool m_imeState;
+ tools::Color m_themeColor;
};
} /* namespace webengine_service */
--- /dev/null
+project(WebPageMin)
+
+set(WebPageMin_SRCS
+ WebPageMin.cpp
+ )
+
+include(Coreheaders)
+include(EFLHelpers)
+include(EWebKitHelpers)
+
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${CMAKE_SOURCE_DIR})
+
+add_library(${PROJECT_NAME} SHARED ${WebPageMin_SRCS})
+target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS})
+
+install(TARGETS ${PROJECT_NAME}
+ LIBRARY DESTINATION services
+ ARCHIVE DESTINATION services/static)
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WebPageMin.h"
+#include "Tools/EflTools.h"
+#include <Elementary.h>
+
+namespace tizen_browser {
+namespace base_ui {
+
+EXPORT_SERVICE(WebPageMin, "org.tizen.browser.webpagemin")
+
+WebPageMin::WebPageMin()
+ : m_layout(nullptr)
+{ }
+
+void WebPageMin::init(Evas_Object* parent)
+{
+ // create web layout
+ m_layout = elm_layout_add(parent);
+ tools::EflTools::setExpandHints(m_layout);
+ elm_layout_theme_set(m_layout, "layout", "application", "default");
+ evas_object_show(m_layout);
+}
+
+Evas_Object* WebPageMin::getContent()
+{
+ return m_layout;
+}
+
+void WebPageMin::showUI()
+{
+ evas_object_show(m_layout);
+}
+
+void WebPageMin::hideUI()
+{
+ evas_object_hide(m_layout);
+}
+
+void WebPageMin::setMainContent(Evas_Object* content)
+{
+ elm_layout_content_set(m_layout, "elm.swallow.content", content);
+}
+
+} // base_ui
+} // tizen_browser
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WebPageMin_H
+#define WebPageMin_H
+
+#include "AbstractService.h"
+#include "AbstractUIComponent.h"
+#include "AbstractRotatable.h"
+#include "service_macros.h"
+
+namespace tizen_browser {
+namespace base_ui {
+
+class BROWSER_EXPORT WebPageMin
+ : public interfaces::AbstractUIComponent
+ , public core::AbstractService
+{
+public:
+ WebPageMin();
+ virtual ~WebPageMin() = default;
+ std::string getName() override;
+ void init(Evas_Object* parent) override;
+ Evas_Object* getContent() override;
+ void showUI() override;
+ void hideUI() override;
+ void setMainContent(Evas_Object* content);
+private:
+ Evas_Object* m_layout;
+};
+
+} // base_ui
+} // tizen_browser
+
+#endif
ButtonBar::ButtonBar(Evas_Object* parent, const std::string& edjFile, const std::string& groupName)
+ : m_edjFilePath(EDJE_DIR + edjFile)
{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append(edjFile);
elm_theme_extension_add(NULL, m_edjFilePath.c_str());
m_layout = elm_layout_add(parent);
Eina_Bool layoutSetResult = elm_layout_file_set(m_layout, m_edjFilePath.c_str(), groupName.c_str());
ButtonBar::~ButtonBar()
{
-
}
void ButtonBar::addAction(sharedAction action, const std::string& buttonName)
std::shared_ptr<EAction> eAction = std::make_shared<EAction>(action);
actionButton.eAction = eAction;
- auto button = elm_button_add(m_layout);
+ Evas_Object* button { elm_button_add(m_layout) };
elm_object_style_set(button, action->getIcon().c_str());
- elm_object_part_text_set(button, "button_text", action->getText().c_str());
+ elm_object_translatable_part_text_set(button, "button_text", action->getText().c_str());
elm_object_disabled_set(button, action->isEnabled() ? EINA_FALSE : EINA_TRUE);
evas_object_smart_callback_add(button, "clicked", EAction::callbackFunction, eAction.get());
evas_object_show(button);
}
-void ButtonBar::setActionForButton(const std::string& buttonName, sharedAction newAction)
-{
- ActionButton actionButton;
- Evas_Object* button = m_buttonsMap[buttonName].button;
- std::shared_ptr<EAction> eAction = std::make_shared<EAction>(newAction);
-
- evas_object_smart_callback_del(button, "clicked", EAction::callbackFunction);
- evas_object_smart_callback_add(button, "clicked", EAction::callbackFunction, eAction.get());
-
-
- if (elm_object_focus_get(button)) {
- elm_object_signal_emit(button, "elm,action,focus", "elm");
- }
-
- m_buttonsMap[buttonName].eAction = eAction;
- m_actionsMap[buttonName] = newAction;
-
- refreshButton(buttonName);
-
-}
-
void ButtonBar::refreshButton(const std::string& buttonName)
{
Evas_Object* button = m_buttonsMap[buttonName].button;
return m_layout;
}
-Evas_Object* ButtonBar::getButton(const std::string& buttonName)
-{
- return m_buttonsMap[buttonName].button;
-}
-
void ButtonBar::clearFocus()
{
for (auto it = m_buttonsMap.begin(); it != m_buttonsMap.end(); ++it) {
}
}
-void ButtonBar::setDisabled(bool disabled)
-{
- if (disabled) {
- clearFocus();
- }
- elm_object_disabled_set(getContent(), disabled ? EINA_TRUE : EINA_FALSE);
-}
-
void ButtonBar::setButtonsColor(bool secretMode)
{
std::string signal = secretMode ? "set_secret_mode" : "set_normal_mode";
ButtonBar(Evas_Object* parent, const std::string& edjFile, const std::string& groupName);
~ButtonBar();
void addAction(sharedAction action, const std::string& buttonName);
- void setActionForButton(const std::string& buttonName, sharedAction newAction);
/**
* @brief register callback, used internally by addAction,
* should be called externally for all actions that will be assigned to button
void registerEnabledChangedCallback(sharedAction action, const std::string& buttonName);
Evas_Object* getContent();
- Evas_Object* getButton(const std::string& buttonName);
void clearFocus();
- void setDisabled(bool disabled);
void setButtonsColor(bool secretMode);
private:
ButtonBar.cpp
EditQuickAccessUI.cpp
URIEntry.cpp
- UrlHistoryList/UrlHistoryList.cpp
- UrlHistoryList/GenlistManager.cpp
- UrlHistoryList/GenlistManagerCallbacks.cpp
- UrlHistoryList/TimerCallbacks.cpp
- UrlHistoryList/UrlMatchesStyler.cpp
- UrlHistoryList/GenlistItemsManager.cpp
)
include(Coreheaders)
BottomButtonBar.edc
RightButtonBar.edc
URIEntry.edc
- UrlHistoryList.edc
- CustomButton.edc
)
foreach(edec ${edcFiles})
EditQuickAccessUI::EditQuickAccessUI()
: m_parent(nullptr)
+ , m_layout(nullptr)
, m_editState(QuickAccessState::Edit)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
BROWSER_LOGW("Missing signal value");
if (m_editState == QuickAccessState::Edit) {
- m_naviframe->setTitle(_("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"));
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+ m_naviframe->setTitle("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB");
+ m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
m_naviframe->setRightButtonEnabled(true);
- auto signal = requestQuickAccessGengrid();
+ auto signal = requestQuickAccessEditLayout();
if (signal) {
elm_object_part_content_set(m_layout, "elm.swallow.content", *signal);
evas_object_show(*signal);
BROWSER_LOGW("Missing signal value");
}
} else if (m_editState == QuickAccessState::DeleteMostVisited) {
- m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_ITEMS_ABB2"));
- m_naviframe->setRightButtonText(_("IDS_BR_SK_DELETE_ABB"));
+ m_naviframe->setTitle("IDS_BR_HEADER_SELECT_ITEMS_ABB2");
+ m_naviframe->setRightButtonText("IDS_BR_SK_DELETE_ABB");
m_naviframe->setRightButtonEnabled(false);
- auto signal = requestMostVisitedGengrid();
+ auto signal = requestMostVisitedEditLayout();
if (signal) {
elm_object_part_content_set(m_layout, "elm.swallow.content", *signal);
evas_object_show(*signal);
if (count)
m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str());
else
- m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_ITEMS_ABB2"));
+ m_naviframe->setTitle("IDS_BR_HEADER_SELECT_ITEMS_ABB2");
m_naviframe->setRightButtonEnabled(count);
}
auto self = static_cast<EditQuickAccessUI*>(data);
self->editingFinished();
if (self->m_editState == QuickAccessState::Edit) {
- //TODO: save reordered items
+ self->reorderQuickAccessItems();
} else if (self->m_editState == QuickAccessState::DeleteMostVisited) {
self->deleteSelectedMostVisitedItems();
+
+ tools::EflTools::createToastPopup("Shortcut deleted"); //TODO: Missing translation
}
self->closeUI();
m_naviframe = std::make_shared<NaviframeWrapper>(m_parent);
m_naviframe->addLeftButton(_cancel_clicked, this);
- m_naviframe->setLeftButtonText(_("IDS_BR_SK_CANCEL_ABB"));
+ m_naviframe->setLeftButtonText("IDS_BR_SK_CANCEL_ABB");
m_naviframe->setLeftButtonVisible(true);
m_naviframe->addRightButton(_done_clicked, this);
m_naviframe->setContent(m_layout);
}
+void EditQuickAccessUI::orientationChanged(bool landscape)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ Evas_Object *content = elm_object_part_content_get(m_layout, "elm.swallow.content");
+ Evas_Object *gengrid = elm_object_part_content_get(content, "view");
+ if (landscape)
+ evas_object_size_hint_min_set(gengrid, Z3_SCALE_SIZE(GENGRID_HORIZONTAL_WIDTH), 0);
+ else
+ evas_object_size_hint_min_set(gengrid, Z3_SCALE_SIZE(GENGRID_PORTRAIT_WIDTH), 0);
+}
+
} // namespace tizen_browser
} // namespace base_ui
Evas_Object* getContent();
void backPressed();
void setMVSelectedItems(int count);
+ void orientationChanged(bool landscape);
- boost::signals2::signal<Evas_Object* ()> requestQuickAccessGengrid;
- boost::signals2::signal<Evas_Object* ()> requestMostVisitedGengrid;
+ boost::signals2::signal<Evas_Object* ()> requestQuickAccessEditLayout;
+ boost::signals2::signal<Evas_Object* ()> requestMostVisitedEditLayout;
boost::signals2::signal<QuickAccessState ()> requestQuickAccessState;
+ boost::signals2::signal<void ()> reorderQuickAccessItems;
boost::signals2::signal<void ()> editingFinished;
boost::signals2::signal<void ()> deleteSelectedMostVisitedItems;
Evas_Object *m_layout;
std::shared_ptr<QuickAccess> m_quickAccess;
QuickAccessState m_editState;
+
+ static const int GENGRID_HORIZONTAL_WIDTH = 1280;
+ static const int GENGRID_PORTRAIT_WIDTH = 720;
};
} // namespace tizen_browser
#include "BrowserAssert.h"
#include "BrowserLogger.h"
#include "MenuButton.h"
-#include "SettingsPrettySignalConnector.h"
#include "Tools/URIschemes.h"
#include "Tools/SettingsEnums.h"
#include "GeneralTools.h"
namespace tizen_browser {
namespace base_ui {
-#define GUIDE_TEXT_FOCUSED "Search or URL"
-#define GUIDE_TEXT_UNFOCUSED "Search or URL"
-
const std::string keynameSelect = "Select";
const std::string keynameClear = "Clear";
const std::string keynameKP_Enter = "KP_Enter";
, m_entry(NULL)
, m_favicon(0)
, m_entry_layout(NULL)
+ , m_limit(nullptr)
, m_entrySelectionState(SelectionState::SELECTION_NONE)
, m_entryContextMenuOpen(false)
, m_searchTextEntered(false)
{}
URIEntry::~URIEntry()
-{}
+{
+ if (m_limit)
+ free(m_limit);
+}
void URIEntry::init(Evas_Object* parent)
{
elm_layout_file_set(m_entry_layout, m_customEdjPath.c_str(), "uri_entry_layout");
m_entry = elm_entry_add(m_entry_layout);
- elm_object_style_set(m_entry, "uri_entry");
+ m_limit = tools::EflTools::setEntryLimit(m_entry, false);
elm_entry_single_line_set(m_entry, EINA_TRUE);
elm_entry_scrollable_set(m_entry, EINA_TRUE);
elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_URL);
+ elm_entry_input_panel_return_key_type_set(m_entry,ELM_INPUT_PANEL_RETURN_KEY_TYPE_GO);
+ elm_entry_text_style_user_push(m_entry, "DEFAULT='font=Tizen:style=Light font_size=42'");
m_rightIcon = elm_button_add(m_entry_layout);
elm_object_style_set(m_rightIcon, "custom");
evas_object_show(m_leftIcon);
elm_object_part_content_set(m_entry_layout, "left_icon", m_leftIcon);
- setUrlGuideText(GUIDE_TEXT_UNFOCUSED);
+ //TODO: Missing translation. Remove _() and use boost::format when text is updated.
+ elm_object_translatable_part_text_set(m_entry, "elm.guide",
+ (std::string("<font=Tizen:style=Light font_size=42>") +
+ std::string(_("IDS_BR_NPBODY_SEARCH_OR_ENTER_URL_ABB")) +
+ std::string("</font>")).c_str());
evas_object_smart_callback_add(m_entry, "activated", URIEntry::activated, this);
evas_object_smart_callback_add(m_entry, "preedit,changed", URIEntry::preeditChange, this);
return m_entry_layout;
}
-Evas_Object* URIEntry::getEntryWidget()
-{
- return m_entry;
-}
-
void URIEntry::changeUri(const std::string& newUri)
{
BROWSER_LOGD("[%s:%d] newUri=%s", __PRETTY_FUNCTION__, __LINE__, newUri.c_str());
evas_object_resize(m_favicon, 36, 36);
elm_object_part_content_set(m_entry_layout, "fav_icon", m_favicon);
setCurrentFavIcon();
- } else {
- setDocIcon();
}
}
elm_object_signal_emit(m_entry_layout, "show_favicon", "model");
}
-void URIEntry::setSearchIcon()
-{
- m_currentIconType = IconTypeSearch;
- elm_object_signal_emit(m_entry_layout, "set_search_icon", "model");
-}
-
-void URIEntry::setDocIcon()
-{
- m_currentIconType = IconTypeDoc;
- elm_object_signal_emit(m_entry_layout, "set_doc_icon", "model");
-}
-
void URIEntry::selectionTool()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
URIEntry* self = reinterpret_cast<URIEntry*>(data);
std::string entry(elm_entry_markup_to_utf8(elm_entry_entry_get(self->m_entry)));
- if ((entry.find("http://") == 0)
- || (entry.find("https://") == 0)
- || (entry.find(".") != std::string::npos)) {
- self->setDocIcon();
- } else {
- self->setSearchIcon();
- }
self->showCancelIcon();
if(entry.find(" ") != std::string::npos)
return;
self->uriEntryEditingChangedByUser(std::make_shared<std::string>(entry));
}
-void URIEntry::setUrlGuideText(const char* txt) const
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- elm_object_translatable_part_text_set(m_entry, "elm.guide", txt);
-}
-
void URIEntry::unfocused(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
showSecureIcon(false, false);
}
-std::string URIEntry::rewriteURI(const std::string& url)
+std::string URIEntry::rewriteURI(const std::string& url) const
{
BROWSER_LOGD("%s: %s", __PRETTY_FUNCTION__, url.c_str());
boost::regex urlRegex(R"(^(https?|ftp)://[^\s/$.?#].[^\s]*$)");
+ boost::regex chromeRegex(R"(^chrome:[^\s]*$)");
+ boost::regex aboutRegex(R"(^about:[^\s]*$)");
boost::regex fileRegex(R"(^file:///[^\s]*$)");
+ boost::regex myfilesappRegex(R"(^file:///opt/usr/media/[^\s]*$)");
- if (!url.empty() && url != "about:blank" && url != "about:home") {
- if (boost::regex_match(url, urlRegex) || boost::regex_match(url, fileRegex))
+ if (!url.empty()) {
+ if (boost::regex_match(url, urlRegex) ||
+ boost::regex_match(url, myfilesappRegex) ||
+ boost::regex_match(url, chromeRegex) ||
+ boost::regex_match(url, aboutRegex))
return url;
- else if (boost::regex_match(std::string("http://") + url, urlRegex) && url.find(".") != std::string::npos)
+ else if (boost::regex_match(std::string("http://") + url, urlRegex) &&
+ (!boost::regex_match(url, fileRegex)) &&
+ url.find(".") != std::string::npos)
return std::string("http://") + url;
else {
- const std::string searchEngine = [this]() -> std::string {
- auto sig =
- SPSC.getWebEngineSettingsParamString(
- basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
- return (sig && !sig->empty()) ?
- *sig :
- Translations::Google;
- }();
- std::string searchString = SearchEngineTranslation::instance().get(searchEngine);
- searchString += url;
- std::replace(searchString.begin(), searchString.end(), ' ', '+');
- BROWSER_LOGD("[%s:%d] Search string: %s", __PRETTY_FUNCTION__, __LINE__, searchString.c_str());
- return searchString;
+ auto sig = createSearchQuery(url);
+ if (!sig) {
+ BROWSER_LOGD("[%s:%d] signal error!", __PRETTY_FUNCTION__, __LINE__);
+ return "";
+ }
+ return *sig;
}
}
return url;
}
-void URIEntry::editingCanceled()
-{
- elm_entry_input_panel_hide(m_entry);
- setCurrentFavIcon();
-}
-
void URIEntry::loadStarted()
{
m_isPageLoading = true;
showReloadIcon();
}
-void URIEntry::AddAction(sharedAction action)
-{
- m_actions.push_back(action);
-}
-
-std::list<sharedAction> URIEntry::actions() const
-{
- return m_actions;
-}
-
void URIEntry::clearFocus()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return elm_object_focus_get(m_entry) == EINA_TRUE ? true : false;
}
-void URIEntry::setDisabled(bool disabled)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (disabled) {
- clearFocus();
- }
- elm_object_disabled_set(getContent(), disabled ? EINA_TRUE : EINA_FALSE);
-}
-
void URIEntry::_uri_entry_double_clicked(void* data, Evas_Object* /*obj*/, void* /*event_info*/)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
bool show = false, secure = false;
- if (m_URI.find(HTTPS_SCHEME) == 0) {
+ if (m_URI.compare(0, strlen(HTTPS_SCHEME), HTTPS_SCHEME) == 0) {
show = true;
auto valid = isValidCert(m_URI);
if (valid)
SELECTION_KEEP
, SELECTION_NONE
};
- URIEntry(WPUStatesManagerPtrConst statesMgr);
+ explicit URIEntry(WPUStatesManagerPtrConst statesMgr);
~URIEntry();
void init(Evas_Object* parent);
Evas_Object* getContent();
- Evas_Object* getEntryWidget();
void changeUri(const std::string&);
boost::signals2::signal<void (const std::string&)> uriChanged;
boost::signals2::signal<bool (const std::string&)> isValidCert;
boost::signals2::signal<void ()> reloadPage;
boost::signals2::signal<void ()> stopLoadingPage;
+ boost::signals2::signal<std::string (const std::string&)> createSearchQuery;
void updateSecureIcon();
void showSecureIcon(bool show, bool secure);
void setFavIcon(std::shared_ptr<tizen_browser::tools::BrowserImage> favicon);
void setCurrentFavIcon();
- void setSearchIcon();
- void setDocIcon();
void setPageLoading(bool isLoading) { m_isPageLoading = isLoading; }
/**
- * \brief Adds Action to URI bar.
- *
- * All Actions will be displayed before URI entry.
- */
- void AddAction(sharedAction action);
-
- /**
- * \brief returns list of stored actions
- */
- std::list<sharedAction> actions() const;
-
- /**
* @brief Remove focus form URI
*/
void clearFocus();
/**
* \brief Rewrites URI to support search and prefixing http:// if needed
*/
- std::string rewriteURI(const std::string& url);
+ std::string rewriteURI(const std::string& url) const;
- void setDisabled(bool disabled);
- void editingCanceled();
void loadStarted();
void loadFinished();
void editingCompleted();
// TODO This method should be removed when input events will be fixed
void selectionTool();
- void setUrlGuideText(const char* txt) const;
static void _fixed_entry_key_down_handler(void* data, Evas* e, Evas_Object* obj, void* event_info);
static void _uri_entry_clicked(void* data, Evas_Object* obj, void* event_info);
Evas_Object* m_entry;
Evas_Object* m_favicon;
Evas_Object* m_entry_layout;
+
+ Elm_Entry_Filter_Limit_Size* m_limit;
+
SelectionState m_entrySelectionState;
std::string m_pageTitle;
std::string m_URI;
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "GenlistItemsManager.h"
-#include "BrowserLogger.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-GenlistItemsManager::GenlistItemsManager()
-{
- ptrMap = {
- { GenlistItemType::ITEM_CURRENT,
- make_shared<Elm_Object_Item*>()},
- { GenlistItemType::ITEM_FIRST,
- make_shared<Elm_Object_Item*>()},
- { GenlistItemType::ITEM_LAST,
- make_shared<Elm_Object_Item*>()}
- };
- namesMap = {
- { GenlistItemType::ITEM_CURRENT, "ITEM_CURRENT" },
- { GenlistItemType::ITEM_FIRST, "ITEM_FIRST" },
- { GenlistItemType::ITEM_LAST, "ITEM_LAST" }
- };
-}
-
-GenlistItemsManager::~GenlistItemsManager()
-{
-}
-
-Elm_Object_Item* GenlistItemsManager::getItem(GenlistItemType type) const
-{
- return *ptrMap.at(type);
-}
-
-void GenlistItemsManager::setItems(std::initializer_list<GenlistItemType> types,
- Elm_Object_Item* item)
-{
- for (auto i : types) {
- *ptrMap.at(i) = item;
- }
-}
-
-void GenlistItemsManager::setItemsIfNullptr(
- std::initializer_list<GenlistItemType> types, Elm_Object_Item* item)
-{
- for (auto i : types) {
- if (!getItem(i)) {
- setItems( { i }, item);
- }
- }
-}
-
-void GenlistItemsManager::assignItem(GenlistItemType dst, GenlistItemType src)
-{
- setItems( { dst }, getItem(src));
-}
-
-bool GenlistItemsManager::shiftItemDown(GenlistItemType item)
-{
- if (!getItem(item))
- return false;
- Elm_Object_Item* item_next = elm_genlist_item_next_get(getItem(item));
- if (item_next) {
- setItems( { item }, item_next);
- return true;
- }
- return false;
-}
-
-bool GenlistItemsManager::shiftItemUp(GenlistItemType item)
-{
- if (!getItem(item))
- return false;
- Elm_Object_Item* item_prev = elm_genlist_item_prev_get(getItem(item));
- if (item_prev) {
- setItems( { item }, item_prev);
- return true;
- }
- return false;
-}
-
-void GenlistItemsManager::clear()
-{
- for (auto pair : ptrMap) {
- setItems({pair.first}, nullptr);
- }
-}
-
-std::string GenlistItemsManager::toString(GenlistItemType item) const
-{
- return namesMap.find(item)->second;
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef GENLISTITEMSMANAGER_H_
-#define GENLISTITEMSMANAGER_H_
-
-#include <memory>
-#include <map>
-
-#include <Elementary.h>
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-enum class GenlistItemType
-{
- ITEM_CURRENT, ITEM_FIRST, ITEM_LAST
-};
-
-/**
- * Stores and manipulated pointers on Elm_Object_Item for GenlistManager
- */
-class GenlistItemsManager
-{
-public:
- GenlistItemsManager();
- virtual ~GenlistItemsManager();
-
- Elm_Object_Item* getItem(GenlistItemType type) const;
- void setItems(std::initializer_list<GenlistItemType> types,
- Elm_Object_Item* item);
- /**
- * Same as #setItems, except only nullptr value pointers are set
- */
- void setItemsIfNullptr(std::initializer_list<GenlistItemType> types,
- Elm_Object_Item* item);
- /**
- * Assign src pointer value to dst.
- */
- void assignItem(GenlistItemType dst, GenlistItemType src);
- /**
- * Assign item of a given type to a elm_genlist_item_next_get item, if
- * there is one. Return false, if value has not changed.
- */
- bool shiftItemDown(GenlistItemType item);
- bool shiftItemUp(GenlistItemType item);
-
- /**
- * clear all pointers
- */
- void clear();
-
- std::string toString(GenlistItemType item) const;
-
-
-private:
- map<GenlistItemType, shared_ptr<Elm_Object_Item*>> ptrMap;
- std::map<GenlistItemType, std::string> namesMap;
-
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* GENLISTITEMSMANAGER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "services/HistoryService/HistoryItem.h"
-#include "GenlistManager.h"
-#include "GenlistManagerCallbacks.h"
-#include "UrlMatchesStyler.h"
-#include "GenlistItemsManager.h"
-#include "Config.h"
-#include <EflTools.h>
-#include <Edje.h>
-
-// Right now base scale in edc is 2.6, hence using 2.6 here to calculate proper
-// ITEM_H value. Probably assumptions will change and ITEM_H will have to be
-// calculated in a different way.
-#define ELM_SCALE_SIZE_Z3(x) (int)(((double)(x) * elm_config_scale_get()) / 2.6)
-
-namespace tizen_browser {
-namespace base_ui {
-
-GenlistManager::GenlistManager()
- : m_parentLayout(nullptr)
- , m_genlist(nullptr)
-#if PROFILE_MOBILE
- , ITEM_H(ELM_SCALE_SIZE_Z3(boost::any_cast<int>(tizen_browser::config::Config::
- getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT))))
-#else
- , ITEM_H(ELM_SCALE_SIZE(boost::any_cast<int>(tizen_browser::config::Config::
- getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT))))
-#endif
- , ITEMS_VISIBLE_NUMBER_MAX(boost::any_cast<int>(tizen_browser::config::Config::
- getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEMS_VISIBLE_NUMBER_MAX)))
- , m_historyItemsVisibleCurrent(0)
- , m_historyItemClass(nullptr)
-{
- m_urlMatchesStyler = make_shared<UrlMatchesStyler>();
- m_itemsManager = make_shared<GenlistItemsManager>();
- m_historyItemClass = elm_genlist_item_class_new();
- m_historyItemClass->item_style = "url_historylist_grid_item";
- m_historyItemClass->func.text_get = nullptr;
- m_historyItemClass->func.content_get = m_itemClassContentGet;
- m_historyItemClass->func.state_get = nullptr;
- m_historyItemClass->func.del = nullptr;
- GenlistManagerCallbacks::setGenlistManager(this);
- m_historyItemsVisibleCurrent = ITEMS_VISIBLE_NUMBER_MAX;
-}
-
-GenlistManager::~GenlistManager()
-{
- elm_genlist_item_class_free(m_historyItemClass);
-}
-
-void GenlistManager::setParentLayout(Evas_Object* parentLayout)
-{
- m_parentLayout = parentLayout;
-}
-
-Evas_Object* GenlistManager::getGenlist()
-{
- if (!m_genlist)
- m_genlist = createGenlist(m_parentLayout);
- return m_genlist;
-}
-
-GenlistItemsManagerPtr GenlistManager::getItemsManager()
-{
- return m_itemsManager;
-}
-
-void GenlistManager::show(const string& editedUrl,
- shared_ptr<services::HistoryItemVector> matchedEntries)
-{
- clear();
- m_genlist = createGenlist(m_parentLayout);
-
- prepareUrlsVector(editedUrl, matchedEntries);
-
- m_itemsManager->setItems( { GenlistItemType::ITEM_FIRST,
- GenlistItemType::ITEM_LAST }, nullptr);
- Elm_Object_Item* itemAppended = nullptr;
- for (auto it : m_readyUrlPairs) {
- itemAppended = elm_genlist_item_append(m_genlist, m_historyItemClass,
- it.get(), nullptr, ELM_GENLIST_ITEM_NONE,
- GenlistManagerCallbacks::_item_selected, it.get());
- m_itemsManager->setItemsIfNullptr( { GenlistItemType::ITEM_FIRST },
- itemAppended);
- }
- m_itemsManager->setItems( { GenlistItemType::ITEM_LAST }, itemAppended);
-
- const int list_items_number = elm_genlist_items_count(m_genlist);
- if (list_items_number != 0) {
- Edje_Message_Int message;
- if (list_items_number > ITEMS_VISIBLE_NUMBER_MAX)
- message.val = ITEMS_VISIBLE_NUMBER_MAX;
- else
- message.val = list_items_number;
- message.val *= ITEM_H;
- edje_object_message_send(elm_layout_edje_get(m_parentLayout), EDJE_MESSAGE_INT, 0, &message);
- }
-
- evas_object_show(m_genlist);
-}
-
-void GenlistManager::hide()
-{
- evas_object_hide(m_genlist);
- clear();
-}
-
-void GenlistManager::clear()
-{
- if (m_genlist && elm_genlist_items_count(m_genlist)) {
- elm_genlist_clear(m_genlist);
- evas_object_del(m_genlist);
- m_genlist = nullptr;
- m_itemsManager->clear();
- }
-}
-
-string GenlistManager::getItemUrl(
- std::initializer_list<GenlistItemType> types) const
-{
- for (auto t : types) {
- if (!m_itemsManager->getItem( { t }))
- continue;
- void* data = elm_object_item_data_get(m_itemsManager->getItem( { t }));
- if (!data)
- continue;
- const UrlPair* const urlPair = reinterpret_cast<UrlPair*>(data);
- if (!urlPair)
- continue;
- return urlPair->urlOriginal;
- }
- return "";
-}
-
-Evas_Object* GenlistManager::createGenlist(Evas_Object* parentLayout)
-{
- Evas_Object* genlist = elm_genlist_add(parentLayout);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
- 0.0);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL,
- 0.0);
- elm_scroller_bounce_set(genlist, EINA_FALSE, EINA_FALSE);
- elm_scroller_movement_block_set(genlist,
- ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL);
- elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF,
- ELM_SCROLLER_POLICY_OFF);
- elm_object_event_callback_add(genlist,
- GenlistManagerCallbacks::_object_event, this);
- signalGenlistCreated(genlist);
- return genlist;
-}
-
-Evas_Object* GenlistManager::m_itemClassContentGet(void* data, Evas_Object* obj,
- const char* part)
-{
- Evas_Object* layout = elm_layout_add(obj);
- tools::EflTools::setExpandHints(layout);
- if (strcmp(part, "matched_url") == 0) {
- const UrlPair* const item = reinterpret_cast<UrlPair*>(data);
- if (item) {
- string edjFilePath = EDJE_DIR;
- edjFilePath.append("WebPageUI/UrlHistoryList.edj");
- elm_layout_file_set(layout, edjFilePath.c_str(),
- "layoutMatchedUrl");
- elm_object_text_set(layout, item->urlHighlighted.c_str());
- }
- }
- return layout;
-}
-
-void GenlistManager::prepareUrlsVector(const string& editedUrl,
- shared_ptr<services::HistoryItemVector> matchedEntries)
-{
- // free previously used urls. IMPORTANT: it has to be assured that previous
- // genlist items are not using these pointers.
- m_readyUrlPairs.clear();
- for (auto it : *matchedEntries) {
- UrlPair newUrlPair(it->getUrl(),
- m_urlMatchesStyler->getUrlHighlightedMatches(it->getUrl(),
- editedUrl));
- m_readyUrlPairs.push_back(make_shared < UrlPair > (newUrlPair));
- }
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef GENLISTMANAGER_H_
-#define GENLISTMANAGER_H_
-
-#include <Elementary.h>
-#include "services/HistoryService/HistoryItemTypedef.h"
-#include <boost/signals2/signal.hpp>
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-class GenlistItemsManager;
-enum class GenlistItemType;
-typedef shared_ptr<GenlistItemsManager> GenlistItemsManagerPtr;
-class UrlMatchesStyler;
-typedef shared_ptr<UrlMatchesStyler> UrlMatchesStylerPtr;
-
-typedef struct UrlPair_s
-{
- UrlPair_s(string a, string b) :
- urlOriginal(a), urlHighlighted(b)
- {
- }
- string urlOriginal;
- /**
- * Url plus styling tags.
- */
- string urlHighlighted;
-} UrlPair;
-
-class GenlistManager
-{
-public:
- GenlistManager();
- ~GenlistManager();
- void setParentLayout(Evas_Object* parentLayout);
- Evas_Object* getGenlist();
- GenlistItemsManagerPtr getItemsManager();
- void show(const string& editedUrl,
- shared_ptr<services::HistoryItemVector> matchedEntries);
- void hide();
-
- /**
- * Clear genlist elements, delete genlist.
- */
- void clear();
-
- /**
- * Get url from item of a given type.
- * @param types The types of list items: url will be searched in these item types.
- * @return Url from the first item from the list, which has valid url. Empty if neither of items has url assigned.
- */
- string getItemUrl(std::initializer_list<GenlistItemType> types) const;
- boost::signals2::signal<void(string)> signalItemSelected;
- boost::signals2::signal<void()> signalItemFocusChange;
-
- /// sent to UrlHistoryList.
- boost::signals2::signal<void(Evas_Object*)> signalGenlistCreated;
-private:
- Evas_Object* createGenlist(Evas_Object* parentLayout);
- static Evas_Object* m_itemClassContentGet(void *data, Evas_Object *obj,
- const char *part);
- void prepareUrlsVector(const string& editedUrl,
- shared_ptr<services::HistoryItemVector> matchedEntries);
-
- Evas_Object* m_parentLayout;
- Evas_Object* m_genlist;
-
- // don't know how to get from edc:
- const int ITEM_H;
- const int ITEMS_VISIBLE_NUMBER_MAX;
- // currently visible items number
- int m_historyItemsVisibleCurrent;
-
- Elm_Gengrid_Item_Class* m_historyItemClass;
- GenlistItemsManagerPtr m_itemsManager;
-
- /*
- * keeps shared pointers to strings, which are ready to be displayed, so they can be
- * passed through EFL, until they're not needed. IMPORTANT: it has to be
- * assured, that list is not cleared until all EFL items has created their
- * labels from these pointers in m_contentGet(). in case of segfaults, delete copy of pointers
- * manually in m_contentGet().
- */
- vector<shared_ptr<UrlPair>> m_readyUrlPairs;
- UrlMatchesStylerPtr m_urlMatchesStyler;
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* GENLISTMANAGER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "GenlistManagerCallbacks.h"
-#include "GenlistItemsManager.h"
-#include <Ecore_Input.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-GenlistManager* GenlistManagerCallbacks::genlistManager = nullptr;
-
-GenlistManagerCallbacks::GenlistManagerCallbacks()
-{
-}
-
-GenlistManagerCallbacks::~GenlistManagerCallbacks()
-{
-}
-
-void GenlistManagerCallbacks::_item_selected(void* data, Evas_Object* /*obj*/,
- void* /*event_info*/)
-{
- const UrlPair* const item = reinterpret_cast<UrlPair*>(data);
- if (item) {
- if (genlistManager) {
- genlistManager->signalItemSelected(item->urlOriginal);
- genlistManager->hide();
- }
- }
-}
-
-Eina_Bool GenlistManagerCallbacks::_object_event(void* /*data*/,
- Evas_Object* /*obj*/, Evas_Object* /*src*/, Evas_Callback_Type type,
- void* event_info)
-{
- if(type != EVAS_CALLBACK_KEY_UP)
- return EINA_FALSE;
-
- if (!genlistManager)
- return EINA_FALSE;
-
- Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event_info);
- const std::string keyName = ev->keyname;
- if (keyName.compare("Down") == 0 || keyName.compare("Up") == 0) {
- GenlistItemsManagerPtr itemsManager = genlistManager->getItemsManager();
- // if there is no current item, set it to first item
- if (!itemsManager->getItem(GenlistItemType::ITEM_CURRENT)) {
- itemsManager->assignItem(GenlistItemType::ITEM_CURRENT,
- GenlistItemType::ITEM_FIRST);
- }
- if (keyName.compare("Down") == 0) {
- itemsManager->shiftItemDown(GenlistItemType::ITEM_CURRENT);
- } else {
- itemsManager->shiftItemUp(GenlistItemType::ITEM_CURRENT);
- }
- genlistManager->signalItemFocusChange();
- }
- return EINA_FALSE;
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef GENLISTMANAGERCALLBACKS_H_
-#define GENLISTMANAGERCALLBACKS_H_
-
-#include "GenlistManager.h"
-#include <Elementary.h>
-#include <Evas.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-class GenlistManagerCallbacks
-{
-public:
- GenlistManagerCallbacks();
- virtual ~GenlistManagerCallbacks();
-
- /**
- * Handles keyboard events: up and down keys.
- */
- static Eina_Bool _object_event(void* data, Evas_Object* obj,
- Evas_Object* src, Evas_Callback_Type type, void* event_info);
- static void _item_selected(void* data, Evas_Object* obj, void* event_info);
- static void setGenlistManager(GenlistManager* genlistManager)
- {
- GenlistManagerCallbacks::genlistManager = genlistManager;
- }
-private:
- static GenlistManager* genlistManager;
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* GENLISTMANAGERCALLBACKS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "TimerCallbacks.h"
-
-#include "BrowserLogger.h"
-#include "UrlHistoryList.h"
-#include "GenlistManager.h"
-#include "GenlistItemsManager.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-AdjustGenlistHeight::AdjustGenlistHeight()
- : m_genlist(nullptr)
- , m_items_visible_number_max(0)
- , m_item_h(0)
-{
-}
-
-void AdjustGenlistHeight::set(Evas_Object* genlist, int itemsVisibleNumberMax,
- int itemH)
-{
- m_genlist = genlist;
- m_items_visible_number_max = itemsVisibleNumberMax;
- m_item_h = itemH;
-}
-
-void AdjustGenlistHeight::operator()() const
-{
- if (!m_genlist)
- return;
- const int LIST_ITEMS_NUMBER = elm_genlist_items_count(m_genlist);
- if (LIST_ITEMS_NUMBER == 0)
- return;
- int historyItemsVisibleCurrent = m_items_visible_number_max;
- if (LIST_ITEMS_NUMBER < historyItemsVisibleCurrent)
- historyItemsVisibleCurrent = LIST_ITEMS_NUMBER;
- Evas_Coord w, h;
- evas_object_geometry_get(m_genlist, nullptr, nullptr, &w, nullptr);
- h = m_item_h * historyItemsVisibleCurrent;
- evas_object_resize(m_genlist, w, h);
-}
-
-GenlistFocused::GenlistFocused()
- : m_urlHistoryList(nullptr)
-{
-}
-
-void GenlistFocused::set(UrlHistoryList* urlHistoryList)
-{
- m_urlHistoryList = urlHistoryList;
-}
-
-void GenlistFocused::operator ()() const
-{
- m_urlHistoryList->onListWidgetFocusChange(true);
-}
-
-}
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef URLHISTORYLIST_TIMER_CALLBACKS_H_
-#define URLHISTORYLIST_TIMER_CALLBACKS_H_
-
-#include <Elementary.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-class UrlHistoryList;
-class GenlistManager;
-
-/**
- * Used with EcoreTimerCaller. Resizes genlist according to the number of its
- * elements.
- */
-class AdjustGenlistHeight
-{
-public:
- AdjustGenlistHeight();
- void set(Evas_Object* genlist, int itemsVisibleNumberMax, int itemH);
- void operator()() const;
-private:
- Evas_Object* m_genlist;
- int m_items_visible_number_max;
- int m_item_h;
-};
-
-/**
- * Used with EcoreTimerCaller. Callback invoked when UrlHistoryList genlist
- * gains focus.
- */
-class GenlistFocused
-{
-public:
- GenlistFocused();
- void set(UrlHistoryList* urlHistoryList);
- void operator()() const;
-private:
- UrlHistoryList* m_urlHistoryList;
-};
-
-}
-}
-
-#endif /* URLHISTORYLIST_TIMER_CALLBACKS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-#include <ecore-1/Ecore.h>
-#include "UrlHistoryList.h"
-#include "GenlistManager.h"
-#include "BrowserLogger.h"
-#include "GenlistItemsManager.h"
-#include "WebPageUI/WebPageUIStatesManager.h"
-#include "Config.h"
-#include <EflTools.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-UrlHistoryList::UrlHistoryList(WPUStatesManagerPtrConst webPageUiStatesMgr)
- : m_genlistManager(make_shared<GenlistManager>())
- , m_webPageUiStatesMgr(webPageUiStatesMgr)
- , ITEMS_NUMBER_MAX(boost::any_cast<int>(config::Config::
- getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEMS_NUMBER_MAX)))
- , KEYWORD_LENGTH_MIN(boost::any_cast<int>(tizen_browser::config::Config::
- getInstance().get(CONFIG_KEY::URLHISTORYLIST_KEYWORD_LENGTH_MIN)))
- , m_parent(nullptr)
- , m_entry(nullptr)
- , m_layout(nullptr)
- , m_widgetFocused(false)
-{
- m_edjFilePath = EDJE_DIR;
- m_edjFilePath.append("WebPageUI/UrlHistoryList.edj");
- m_genlistManager->signalItemSelected.connect(
- boost::bind(&UrlHistoryList::onItemSelect, this, _1));
- m_genlistManager->signalItemFocusChange.connect(
- boost::bind(&UrlHistoryList::onItemFocusChange, this));
- m_genlistManager->signalGenlistCreated.connect(
- boost::bind(&UrlHistoryList::onGenlistCreated, this, _1));
- m_genlistFocusedCallback.set(this);
-}
-
-UrlHistoryList::~UrlHistoryList()
-{
-}
-
-void UrlHistoryList::setMembers(Evas_Object* parent, Evas_Object* editedEntry)
-{
- m_parent = parent;
- m_entry = editedEntry;
- evas_object_smart_callback_add(m_entry, "changed,user",
- UrlHistoryList::_uri_entry_editing_changed_user, this);
-}
-
-void UrlHistoryList::createLayout(Evas_Object* parentLayout)
-{
- m_layout = elm_layout_add(parentLayout);
- tools::EflTools::setExpandHints(m_layout);
- elm_layout_file_set(m_layout, m_edjFilePath.c_str(), "url_history_list");
- m_genlistManager->setParentLayout(m_layout);
-}
-
-Evas_Object* UrlHistoryList::getLayout()
-{
- if (!m_layout)
- createLayout(m_parent);
- return m_layout;
-}
-
-void UrlHistoryList::saveEntryAsEditedContent()
-{
- m_entryEditedContent = elm_entry_entry_get(m_entry);
-}
-
-void UrlHistoryList::restoreEntryEditedContent()
-{
- elm_entry_entry_set(m_entry, m_entryEditedContent.c_str());
- elm_entry_cursor_end_set(m_entry);
-}
-
-int UrlHistoryList::getItemsNumberMax() const
-{
- return ITEMS_NUMBER_MAX;
-}
-
-int UrlHistoryList::getKeywordLengthMin() const
-{
- return KEYWORD_LENGTH_MIN;
-}
-
-bool UrlHistoryList::getGenlistVisible()
-{
- return evas_object_visible_get(m_genlistManager->getGenlist());
-}
-
-void UrlHistoryList::hideWidget()
-{
- m_genlistManager->hide();
-}
-
-void UrlHistoryList::onBackPressed()
-{
- hideWidget();
-}
-
-bool UrlHistoryList::getWidgetFocused() const
-{
- return m_widgetFocused;
-}
-
-void UrlHistoryList::onURLEntryEditedByUser(const string& editedUrl,
- shared_ptr<services::HistoryItemVector> matchedEntries)
-{
- if (matchedEntries->size() == 0) {
- hideWidget();
- } else {
- m_genlistManager->show(editedUrl, matchedEntries);
- evas_object_show(m_layout);
- }
-}
-
-void UrlHistoryList::onItemFocusChange()
-{
- elm_entry_entry_set(m_entry, m_genlistManager->getItemUrl( {
- GenlistItemType::ITEM_CURRENT }).c_str());
-}
-
-void UrlHistoryList::onGenlistCreated(Evas_Object* genlist)
-{
- elm_object_part_content_set(m_layout, "list_swallow", genlist);
- evas_object_show(m_layout);
-}
-
-void UrlHistoryList::onItemSelect(std::string content)
-{
- if (m_webPageUiStatesMgr->equals(WPUState::QUICK_ACCESS)) {
- openURL(content);
- } else {
- uriChanged(content);
- }
-}
-
-void UrlHistoryList::onListWidgetFocusChange(bool focused)
-{
- m_widgetFocused = focused;
- if (focused) {
- string itemUrl = m_genlistManager->getItemUrl( {
- GenlistItemType::ITEM_CURRENT, GenlistItemType::ITEM_FIRST });
- elm_entry_entry_set(m_entry, itemUrl.c_str());
- } else {
- restoreEntryEditedContent();
- }
-}
-
-void UrlHistoryList::listWidgetFocusedFromUri()
-{
- m_widgetFocused = true;
- m_timerGenlistFocused.addTimer(m_genlistFocusedCallback);
-}
-
-void UrlHistoryList::_uri_entry_editing_changed_user(void* data,
- Evas_Object* /* obj */, void* /* event_info */)
-{
- UrlHistoryList* self = reinterpret_cast<UrlHistoryList*>(data);
- self->saveEntryAsEditedContent();
-}
-
-}/* namespace base_ui */
-} /* namespace tizen_browser */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef URLHISTORYLIST_H_
-#define URLHISTORYLIST_H_
-
-#include <memory>
-#include <Evas.h>
-
-#include "services/HistoryService/HistoryItemTypedef.h"
-#include <boost/signals2/signal.hpp>
-#include "EcoreTimerCaller.h"
-#include "TimerCallbacks.h"
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-class WebPageUIStatesManager;
-typedef std::shared_ptr<const WebPageUIStatesManager> WPUStatesManagerPtrConst;
-class GenlistManager;
-typedef shared_ptr<GenlistManager> GenlistManagerPtr;
-
-/**
- * Manages list of url matches (URL from history). Manages top layout, creates
- * widget displaying url items.
- */
-class UrlHistoryList
-{
-public:
- UrlHistoryList(WPUStatesManagerPtrConst webPageUiStatesMgr);
- virtual ~UrlHistoryList();
- void setMembers(Evas_Object* parent, Evas_Object* chainObject);
- Evas_Object* getLayout();
- bool getGenlistVisible();
-
- /**
- * On uri entry widget "changed,user" signal.
- *
- * @param matchedEntries The entries matches for editedUrl
- */
- void onURLEntryEditedByUser(const string& editedUrl,
- shared_ptr<services::HistoryItemVector> matchedEntries);
- void hideWidget();
- void onBackPressed();
-
- /**
- * @return True if widget is focused.
- */
- bool getWidgetFocused() const;
- void onListWidgetFocusChange(bool focused);
- void listWidgetFocusedFromUri();
- void saveEntryAsEditedContent();
- void saveEntryAsURLContent();
- void restoreEntryEditedContent();
- void restoreEntryURLContent();
- int getItemsNumberMax() const;
- int getKeywordLengthMin() const;
- boost::signals2::signal<void (const std::string&)> openURL;
- boost::signals2::signal<void (const std::string&)> uriChanged;
-
-private:
- void createLayout(Evas_Object* parentLayout);
- void onItemSelect(std::string content);
-
- /**
- * On genlist's item focus change.
- */
- void onItemFocusChange();
-
- /**
- * Main layout is not setting genlist as a swallow in the beginnging,
- * because it will cover view in WebPageUi.
- */
- void onGenlistCreated(Evas_Object*);
- static void _uri_entry_editing_changed_user(void* data, Evas_Object* obj, void* event_info);
-
- GenlistManagerPtr m_genlistManager;
- WPUStatesManagerPtrConst m_webPageUiStatesMgr;
- // the maximum items number on a list
- const int ITEMS_NUMBER_MAX;
- // the minimum length of the keyword used to search matches
- const int KEYWORD_LENGTH_MIN;
- Evas_Object* m_parent;
- // entry widget from which change signals are received
- Evas_Object* m_entry;
- Evas_Object* m_layout;
- string m_edjFilePath;
- // content of the edited entry, needed to restore edited value
- string m_entryEditedContent;
- // content of the entry before edition: needed to restore original URL value
- string m_entryURLContent;
- bool m_widgetFocused;
- GenlistFocused m_genlistFocusedCallback;
- tools::EflTools::EcoreTimerCaller<GenlistFocused> m_timerGenlistFocused;
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* URLHISTORYLIST_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "UrlMatchesStyler.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-UrlMatchesStyler::UrlMatchesStyler() :
- TAG_WHOLE_URL(
- "<align=left><color=" + FONT_COLOR_NORMAL + "><font_size="
- + FONT_SIZE + ">"), TAG_WHOLE_URL_CLOSE(
- "</color></font></align>"), TAG_HIGHLIGHT("<font_weight=bold>"),
- TAG_HIGHLIGHT_CLOSE("</font_weight>"), TAG_COLOR(
- "<color=" + FONT_COLOR_HIGHLIGHT + ">"), TAG_COLOR_CLOSE(
- closeTag(TAG_COLOR)), TAG_COMPLETE(TAG_HIGHLIGHT + TAG_COLOR), TAG_COMPLETE_CLOSE(
- TAG_HIGHLIGHT_CLOSE + TAG_COLOR_CLOSE), TAGS_COMPLETE_LEN(
- TAG_COMPLETE.length() + TAG_COMPLETE_CLOSE.length())
-{
-}
-
-UrlMatchesStyler::~UrlMatchesStyler()
-{
-}
-
-string UrlMatchesStyler::closeTag(const string& tag) const
-{
- string closedTag(tag);
- return string(closedTag.insert(1, "/"));
-}
-
-string UrlMatchesStyler::getUrlHighlightedMatches(const string& styledUrl,
- const string& highlightingKeywords) const
-{
- vector<string> keywords;
- splitKeywordsString(highlightingKeywords, keywords);
-
- int_pairs rangesHighlight;
- for (auto key : keywords) {
- fillOccuranceRanges(styledUrl, key, rangesHighlight);
- }
-
- int_pairs mergedRangesHighlight;
- mergeRanges(rangesHighlight, mergedRangesHighlight);
- return getTaggedString(styledUrl, mergedRangesHighlight);
-}
-
-void UrlMatchesStyler::splitKeywordsString(const string& keywordsString,
- vector<string>& resultKeywords) const
-{
- boost::algorithm::split(resultKeywords, keywordsString,
- boost::is_any_of("\t "), boost::token_compress_on);
- // remove empty elements
- for (auto it = resultKeywords.begin(); it != resultKeywords.end();) {
- if ((*it).empty()) {
- it = resultKeywords.erase(it);
- } else {
- ++it;
- }
- }
-}
-
-void UrlMatchesStyler::fillOccuranceRanges(const string& _checkedString,
- const string& _searchedMatch, int_pairs& resultRanges) const
-{
- if (_checkedString.empty() || _searchedMatch.empty())
- return;
-
- string checkedString(_checkedString);
- string searchedMatch(_searchedMatch);
- boost::algorithm::to_lower(checkedString);
- boost::algorithm::to_lower(searchedMatch);
-
- int len = searchedMatch.length();
- vector<int> positions;
- getMatchesPositions(checkedString, searchedMatch, positions);
- for (auto pos : positions) {
- resultRanges.push_back( { pos, pos + len - 1 });
- }
-}
-
-void UrlMatchesStyler::getMatchesPositions(const string& checkedString,
- const string& searchedMatch, vector<int>& resultPositions) const
-{
- boost::regex match_regex(searchedMatch);
- for (auto it = boost::sregex_iterator(checkedString.begin(),
- checkedString.end(), match_regex); it != boost::sregex_iterator();
- ++it) {
- resultPositions.push_back(it->position());
- }
-}
-
-void UrlMatchesStyler::mergeRanges(int_pairs& ranges, int_pairs& result) const
-{
- if (ranges.size() == 0)
- return;
- sort(ranges.begin(), ranges.end());
-
- auto current = *(ranges.begin());
- for (auto it = ranges.begin() + 1; it != ranges.end(); ++it) {
- if (current.second >= it->first) {
- current.second = max(current.second, it->second);
- } else {
- result.push_back(current);
- current = *it;
- }
- }
- result.push_back(current);
-}
-
-string UrlMatchesStyler::getTaggedString(const string& strToHighlight,
- const int_pairs& ranges) const
-{
- string strResult(strToHighlight);
- int insertOffset = 0;
- for (auto pair : ranges) {
- strResult.insert(pair.second + insertOffset + 1, TAG_COMPLETE_CLOSE);
- strResult.insert(pair.first + insertOffset, TAG_COMPLETE);
- insertOffset += TAGS_COMPLETE_LEN;
- }
- strResult.insert(strResult.length(), TAG_WHOLE_URL_CLOSE);
- strResult.insert(0, TAG_WHOLE_URL);
- return strResult;
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef URLMATCHESSTYLER_H_
-#define URLMATCHESSTYLER_H_
-
-#include <string>
-#include <vector>
-#include <boost/algorithm/string.hpp>
-#include <boost/regex.hpp>
-#include "BrowserLogger.h"
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-class UrlMatchesStyler
-{
-public:
- UrlMatchesStyler();
- virtual ~UrlMatchesStyler();
-
- /**
- * @brief Get string containing EFL tags, which are highlighting given keywords.
- * @param styledUrl url which will be styled
- * @param highlightingKeyword keywords (entered url) indicating which
- * fragments should be highlighted
- * @return styledUrl enriched with EFL tags
- */
- string getUrlHighlightedMatches(const string& styledUrl,
- const string& highlightingKeywords) const;
-
-private:
- typedef vector<pair<int, int>> int_pairs;
- const string FONT_COLOR_HIGHLIGHT = "#4088D3";
- const string FONT_COLOR_NORMAL = "#888888";
- const string FONT_SIZE = "35";
- const string TAG_WHOLE_URL;
- const string TAG_WHOLE_URL_CLOSE;
- const string TAG_HIGHLIGHT, TAG_HIGHLIGHT_CLOSE;
- const string TAG_COLOR, TAG_COLOR_CLOSE;
- const string TAG_COMPLETE, TAG_COMPLETE_CLOSE;
- const int TAGS_COMPLETE_LEN;
-
- /**
- * @brief adds '/' to a tag (<a> -> </a>)
- * @param tag tag to be closed
- * @return closed tag
- */
- string closeTag(const string& tag) const;
- /**
- * @brief splits given string by removing spaces
- * @param keywordsString string to split
- * @param resultKeywords vector to which result strings are stored
- */
- void splitKeywordsString(const string& keywordsString,
- vector<string>& resultKeywords) const;
- /**
- * @brief Fills vector with ranges describing beginnings end ends of occurrences of one string in another.
- * @param checkedString the subject of search
- * @param searchedMatch match to be searched for
- * @param resultRanges vector filled with found ranges
- */
- void fillOccuranceRanges(const string& checkedString,
- const string& searchedMatch, int_pairs& resultRanges) const;
- /**
- * @brief Searches the string for positions of occurrences of another string.
- * @param checkedString the subject of search
- * @param searchedMatch string to be searched for
- * @param resultPositions vector filled with result positions
- */
- void getMatchesPositions(const string& checkedString,
- const string& searchedMatch, vector<int>& resultPositions) const;
- /**
- * @brief merges ranges
- * @param ranges vector of ranges to merge
- * @param result vector filled with merged ranges
- */
- void mergeRanges(int_pairs& ranges, int_pairs& result) const;
- /**
- * @brief get string enriched with opening and closing tags on given positions
- * @param strToHighlight string to be enriched with tags
- * @param ranges positions of opening and closing tags
- * @param tag opening tag (for every pair.first)
- * @param tagClose closing tag (for every pair.second)
- * @return string with tags
- */
- string getTaggedString(const string& strToHighlight,
- const int_pairs& ranges) const;
-
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* URLMATCHESSTYLER_H_ */
#include "BrowserLogger.h"
#include "ServiceManager.h"
#include "BrowserAssert.h"
-#include "UrlHistoryList/UrlHistoryList.h"
#include "WebPageUIStatesManager.h"
#include <string>
#include <app_control.h>
+#include <limits>
namespace tizen_browser {
namespace base_ui {
#define MAX_PROGRESS_LEVEL 20
#define PROGRESS_STEP 0.05
+const double WebPageUI::PROGRESS_100 = 1.0 - std::numeric_limits<double>::epsilon();
+const tools::Color WebPageUI::DEFAULT_THEME = tools::Color();
+
WebPageUI::WebPageUI()
: m_parent(nullptr)
, m_mainLayout(nullptr)
+ , m_previous_focus(nullptr)
+ , m_focus_pixel(nullptr)
#if DUMMY_BUTTON
, m_dummy_button(nullptr)
#endif
, m_statesMgr(std::make_shared<WebPageUIStatesManager>(WPUState::MAIN_WEB_PAGE))
, m_URIEntry(new URIEntry(m_statesMgr))
, m_editQuickAccessUI(std::make_shared<EditQuickAccessUI>())
- , m_urlHistoryList(std::make_shared<UrlHistoryList>(getStatesMgr()))
, m_webviewLocked(false)
, m_WebPageUIvisible(false)
-#if PWA
+ , m_desktopMode(false)
, m_pwaInfo(nullptr)
-#endif
#if GESTURE
, m_gestureLayer(nullptr)
#endif
, m_uriBarHidden(false)
, m_fullscreen(false)
+ , m_shouldOpenNewTab(true)
+ , m_currentTheme()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
return m_mainLayout;
}
-UrlHistoryPtr WebPageUI::getUrlHistoryList()
-{
- return m_urlHistoryList;
-}
-
void WebPageUI::updateEngineStateUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
default:
BROWSER_LOGE("[%s:%d] Unknown state!", __PRETTY_FUNCTION__, __LINE__);
}
- m_bottomButtonBar->setButtonsColor(*state == basic_webengine::State::SECRET);
- m_rightButtonBar->setButtonsColor(*state == basic_webengine::State::SECRET);
+ (*state == basic_webengine::State::SECRET) ?
+ changeButtonsColor(true) :
+ changeUIColor(m_currentTheme.r, m_currentTheme.g, m_currentTheme.b, m_currentTheme.a);
} else {
BROWSER_LOGE("[%s:%d] Wrong state value!", __PRETTY_FUNCTION__, __LINE__);
}
if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
setQuickAccessView();
+ changeUIColor();
}
m_WebPageUIvisible = true;
elm_object_event_callback_add(m_bottomButtonBar->getContent(), _cb_down_pressed_on_urlbar, this);
elm_object_event_callback_add(m_rightButtonBar->getContent(), _cb_down_pressed_on_urlbar, this);
elm_object_event_callback_add(m_URIEntry->getContent(), _cb_down_pressed_on_urlbar, this);
+
#if GESTURE
elm_gesture_layer_cb_add(m_gestureLayer, ELM_GESTURE_N_LINES, ELM_GESTURE_STATE_MOVE, _gesture_move, this);
elm_gesture_layer_line_min_length_set(m_gestureLayer, SWIPE_MOMENTUM_TRESHOLD);
m_URIEntry->loadFinished();
evas_object_hide(m_mainLayout);
- if(m_statesMgr->equals(WPUState::QUICK_ACCESS))
+ if (m_statesMgr->equals(WPUState::QUICK_ACCESS))
hideQuickAccess();
evas_object_hide(elm_object_part_content_get(m_mainLayout, "web_view"));
void WebPageUI::progressChanged(double progress)
{
- if (progress == 1.0) {
+ if (progress > PROGRESS_100) {
hideProgressBar();
} else {
int level = (int)(progress * MAX_PROGRESS_LEVEL);
evas_object_smart_callback_add(content, "mouse,down", _content_clicked, this);
#endif
updateManualRotation();
+
evas_object_show(content);
}
-void WebPageUI::switchViewToWebPage(Evas_Object* content, const std::string uri, bool loading)
+void WebPageUI::switchViewToWebPage(Evas_Object* content, const std::string& uri, bool loading)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if(m_statesMgr->equals(WPUState::QUICK_ACCESS))
- {
+ if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
hideQuickAccess();
m_statesMgr->set(WPUState::MAIN_WEB_PAGE);
}
setMainContent(content);
elm_object_signal_emit(m_mainLayout, "shiftright_uri", "ui");
-#if DUMMY_BUTTON
- elm_object_signal_emit(m_mainLayout, "show,dummy_button", "");
-#endif
+ elm_object_signal_emit(m_mainLayout, "show,web,view", "");
updateURIBar(uri, loading);
}
void WebPageUI::setQuickAccessView()
{
elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui");
+ elm_object_signal_emit(m_mainLayout, "show,quick,access", "");
hideProgressBar();
m_URIEntry->changeUri("");
m_URIEntry->showSecureIcon(false, false);
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_statesMgr->set(WPUState::QUICK_ACCESS);
- setMainContent(content);
- setQuickAccessView();
-#if DUMMY_BUTTON
- elm_object_signal_emit(m_mainLayout, "hide,dummy_button", "");
-#endif
+ if (!m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
+ Edje_Message_Int message;
+ message.val = 0;
+ edje_object_message_send(elm_layout_edje_get(m_mainLayout), EDJE_MESSAGE_INT, 0, &message);
+
+ m_statesMgr->set(WPUState::QUICK_ACCESS);
+ setMainContent(content);
+ setQuickAccessView();
+ m_shouldOpenNewTab = false;
+ elm_object_signal_emit(m_mainLayout, "show,quick,access", "");
+ }
}
void WebPageUI::setMostVisitedSelectedItemsCountInEditMode(int count)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
WebPageUI* self = reinterpret_cast<WebPageUI*>(data);
- if(!self->stateEquals({ WPUState::QUICK_ACCESS, WPUState::MAIN_ERROR_PAGE })) {
+ if (!self->stateEquals({ WPUState::QUICK_ACCESS, WPUState::MAIN_ERROR_PAGE })) {
self->getURIEntry().clearFocus();
}
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
WebPageUI* self = reinterpret_cast<WebPageUI*>(data);
- if(type == EVAS_CALLBACK_KEY_DOWN) {
+ if (type == EVAS_CALLBACK_KEY_DOWN) {
Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event_info);
const std::string keyName = ev->keyname;
- if(!keyName.compare("Down")){
+ if (!keyName.compare("Down")) {
self->lockWebview();
}
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (tabs == 0) {
- elm_object_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", "");
+ elm_object_translatable_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", "");
} else {
- elm_object_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str());
+ elm_object_translatable_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str());
}
}
void WebPageUI::lockWebview()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if(isWebPageUIvisible()) {
- if(m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
+ if (isWebPageUIvisible()) {
+ if (m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
elm_object_focus_custom_chain_unset(m_mainLayout);
elm_object_focus_custom_chain_append(m_mainLayout, elm_object_part_content_get(m_mainLayout, "web_view"), NULL);
m_webviewLocked = true;
}
}
-void WebPageUI::lockUrlHistoryList()
-{
- elm_object_focus_custom_chain_unset(m_mainLayout);
- elm_object_focus_custom_chain_append(m_mainLayout,
- getUrlHistoryList()->getLayout(), NULL);
- getUrlHistoryList()->listWidgetFocusedFromUri();
- elm_object_focus_set(getUrlHistoryList()->getLayout(), EINA_TRUE);
-}
-
-void WebPageUI::unlockUrlHistoryList()
-{
- elm_object_focus_set(m_URIEntry->getEntryWidget(), EINA_TRUE);
- getUrlHistoryList()->onListWidgetFocusChange(false);
-}
-
-void WebPageUI::setFocusOnSuspend()
-{
- elm_object_focus_set(m_rightButtonBar->getButton("tab_button"), EINA_TRUE);
-}
-
void WebPageUI::fullscreenModeSet(bool state)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (m_uriBarHidden)
elm_object_signal_emit(m_mainLayout, "hide_uri_bar_vertical", "ui");
}
+
+ if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
+ qaOrientationChanged();
+ } else if (m_statesMgr->equals(WPUState::EDIT_MODE)) {
+ m_editQuickAccessUI->orientationChanged(*landscape);
+ }
}
else
BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
-
- if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
- qaOrientationChanged();
- }
}
void WebPageUI::showContextMenu()
boost::optional<Evas_Object*> window = getWindow();
if (window) {
+ m_previous_focus = elm_object_focused_object_get(m_mainLayout);
+ elm_object_focus_set(m_focus_pixel, EINA_TRUE);
createContextMenu(*window);
if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
//TODO: Add translation
boost::optional<bool> isMostVisitedOpt(isMostVisited());
- if (!isMostVisitedOpt || !(*isMostVisitedOpt))
+ if (!isMostVisitedOpt || !(*isMostVisitedOpt)) {
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"), nullptr, _cm_edit_qa_clicked, this);
- else
- elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_DELETE"), nullptr, _cm_delete_mv_clicked, this);
+ } else {
+ boost::optional<int> mostVisitedItemsCount = getMostVisitedCount();
+ if (mostVisitedItemsCount > 0)
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_SK_DELETE_ABB"), nullptr, _cm_delete_mv_clicked, this);
+ }
} else if (m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_SHARE"), nullptr, _cm_share_clicked, this);
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_FIND_ON_PAGE"), nullptr, _cm_find_on_page_clicked, this);
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_REMOVE_FROM_BOOKMARKS_ABB"), nullptr,
_cm_delete_bookmark_clicked, this);
else
- elm_ctxpopup_item_append(m_ctxpopup, "Add to Bookmarks", nullptr,
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_BODY_ADD_TO_BOOKMARKS"), nullptr,
_cm_bookmark_flow_clicked, this);
} else
BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
}
+void WebPageUI::returnFocusAfterHideContextMenu()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (m_previous_focus) {
+ elm_object_focus_set(m_previous_focus, EINA_TRUE);
+ m_previous_focus = nullptr;
+ }
+}
+
+void WebPageUI::dismissContextMenu()
+{
+ m_previous_focus = nullptr;
+ evas_object_smart_callback_call(m_ctxpopup, "dismissed", nullptr);
+}
+
void WebPageUI::_cm_edit_qa_clicked(void* data, Evas_Object*, void* )
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->m_statesMgr->set(WPUState::EDIT_MODE);
webPageUI->quickAccessEdit();
} else
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->m_statesMgr->set(WPUState::EDIT_MODE);
webPageUI->deleteMostVisited();
} else {
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
std::string uri = webPageUI->getURI();
webPageUI->launch_share(uri.c_str());
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ elm_object_signal_emit(webPageUI->m_mainLayout, "show_findonpage", "ui");
+ webPageUI->setBarsShown(false);
+ webPageUI->dismissContextMenu();
webPageUI->showFindOnPageUI();
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->deleteBookmark();
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->showBookmarkFlowUI();
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
auto signal = webPageUI->getTitle();
if (signal)
webPageUI->addToQuickAccess(webPageUI->getURI(), *signal);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->switchToDesktopMode();
webPageUI->setDesktopMode(true);
} else
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->switchToMobileMode();
webPageUI->setDesktopMode(false);
} else
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data != nullptr) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
webPageUI->showSettingsUI();
} else
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
-#if PWA
+
void WebPageUI::_cm_add_to_hs_clicked(void* data, Evas_Object*, void* )
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
webPageUI->m_pwaInfo = std::make_shared<pwaInfo>();
- _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->dismissContextMenu();
// send request API.
webPageUI->pwaRequestManifest();
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
}
-#endif
-std::string WebPageUI::getURI() {
+void WebPageUI::urlbarOffsetSet(const float& offset)
+{
+ BROWSER_LOGD("[%s:%d] %f", __PRETTY_FUNCTION__, __LINE__, offset);
+ Edje_Message_Int message;
+ message.val = static_cast<int>(offset);
+ if (message.val % 2 == 0)
+ edje_object_message_send(elm_layout_edje_get(m_mainLayout), EDJE_MESSAGE_INT, 0, &message);
+}
+
+void WebPageUI::bottombarOffsetSet(const float& offset)
+{
+ BROWSER_LOGD("[%s:%d] %f", __PRETTY_FUNCTION__, __LINE__, offset);
+ Edje_Message_Int message;
+ message.val = static_cast<int>(offset);
+ auto edje = elm_layout_edje_get(m_mainLayout);
+ if (message.val % 2 == 0) {
+ edje_object_message_send(edje, EDJE_MESSAGE_INT, 1, &message);
+ edje_object_message_signal_process(edje);
+ }
+}
+
+bool WebPageUI::isBrighterThanDefault(const int& r, const int& g, const int& b)
+{
+ // Calculation based on https://en.wikipedia.org/wiki/Relative_luminance
+ double luminance { 0.2126*r + 0.7152*g + 0.00722*b };
+ double defLum { 0.2126*DEFAULT_THEME.r + 0.7152*DEFAULT_THEME.g + 0.00722*DEFAULT_THEME.b };
+ return (luminance > defLum - 50);
+}
+
+void WebPageUI::changeButtonsColor(const bool& isDarkBackground)
+{
+ m_bottomButtonBar->setButtonsColor(isDarkBackground);
+ m_rightButtonBar->setButtonsColor(isDarkBackground);
+}
+
+void WebPageUI::changeUIColor(const int& r, const int& g , const int& b, const int& a)
+{
+ BROWSER_LOGD("[%s:%d] %d %d %d %d", __PRETTY_FUNCTION__, __LINE__, r, g, b, a);
+ auto state = getEngineState();
+ if (*state == basic_webengine::State::NORMAL) {
+ if (!r && !g && !b && !a) {
+ elm_color_class_color_set(
+ "defaultBg",
+ DEFAULT_THEME.r,
+ DEFAULT_THEME.g,
+ DEFAULT_THEME.b,
+ DEFAULT_THEME.a);
+ changeButtonsColor(false);
+ m_currentTheme = DEFAULT_THEME;
+ } else {
+ elm_color_class_color_set("defaultBg", r, g ,b, a);
+ m_currentTheme = tools::Color(r, g, b, a);
+ changeButtonsColor(a && !isBrighterThanDefault(r,g,b));
+ }
+ } else {
+ changeButtonsColor(true);
+ }
+}
+
+std::string WebPageUI::getURI()
+{
auto retVal = requestCurrentPageForWebPageUI();
if(retVal && !(*retVal).empty()) {
return *retVal;
elm_layout_signal_callback_add(m_URIEntry->getContent(), "slide_websearch", "elm", faviconClicked, this);
-// elm_theme_extension_add(nullptr, edjePath("WebPageUI/UrlHistoryList.edj").c_str());
-// m_urlHistoryList->setMembers(m_mainLayout, m_URIEntry->getEntryWidget());
-// elm_object_part_content_set(m_mainLayout, "url_history_list", m_urlHistoryList->getLayout());
-
connectActions();
#if GESTURE
// will be attatch on every 'setMainContent'
m_gestureLayer = elm_gesture_layer_add(m_mainLayout);
#endif
+
+ m_focus_pixel = elm_button_add(m_mainLayout);
+ elm_object_style_set(m_focus_pixel, "invisible_button");
+ evas_object_size_hint_align_set(m_focus_pixel, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(m_focus_pixel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_focus_allow_set(m_focus_pixel, EINA_TRUE);
+ evas_object_show(m_focus_pixel);
+ elm_object_part_content_set(m_mainLayout, "focus_pixel", m_focus_pixel);
+ evas_object_smart_callback_add(m_focus_pixel, "focused", _focus_pixel_focused, nullptr);
+ evas_object_smart_callback_add(m_focus_pixel, "unfocused", _focus_pixel_unfocused, nullptr);
+
+ elm_atspi_accessible_role_set(m_focus_pixel, ELM_ATSPI_ROLE_REDUNDANT_OBJECT);
+ elm_atspi_accessible_can_highlight_set(m_focus_pixel, EINA_FALSE);
+}
+
+void WebPageUI::_focus_pixel_focused(void *, Evas_Object *, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void WebPageUI::_focus_pixel_unfocused(void *, Evas_Object *, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
#if DUMMY_BUTTON
evas_object_smart_callback_add(m_dummy_button, "focused", _dummy_button_focused, this);
evas_object_smart_callback_add(m_dummy_button, "unfocused", _dummy_button_unfocused, this);
+ evas_object_smart_callback_add(m_dummy_button, "mouse,down", _dummy_button_clicked, this);
elm_atspi_accessible_role_set(m_dummy_button, ELM_ATSPI_ROLE_REDUNDANT_OBJECT);
elm_atspi_accessible_can_highlight_set(m_dummy_button, EINA_FALSE);
}
}
+void WebPageUI::setDummyButtonFocus()
+{
+ elm_object_focus_set(m_dummy_button, EINA_TRUE);
+}
+
void WebPageUI::_dummy_button_focused(void *data, Evas_Object *, void *)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (data != nullptr) {
+ if (data) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
webPageUI->focusWebView();
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
}
void WebPageUI::_dummy_button_unfocused(void *data, Evas_Object *, void *)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (data != nullptr) {
+ if (data) {
WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
webPageUI->unfocusWebView();
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
}
-#endif
-
-void WebPageUI::_bookmark_manager_clicked(void * data, Evas_Object *, void *)
+void WebPageUI::_dummy_button_clicked(void *data, Evas_Object *, void *)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- WebPageUI* webpageUI = static_cast<WebPageUI*>(data);
- webpageUI->bookmarkManagerClicked();
+ if (data) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ elm_object_focus_set(webPageUI->m_dummy_button, EINA_TRUE);
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+ }
}
+#endif
+
void WebPageUI::setContentFocus()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (getURIEntry().hasFocus())
+ if (getURIEntry().hasFocus()) {
getURIEntry().clearFocus();
+ focusWebView();
+ }
}
void WebPageUI::showBottomBar(bool isShown)
void WebPageUI::createActions()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_back = sharedAction(new Action(_("IDS_BR_BUTTON_BACK_ABB")));
+ // Text must me forwarded to Action as not translated
+ m_back = sharedAction(new Action("IDS_BR_BUTTON_BACK_ABB"));
m_back->setIcon("toolbar_prev");
- m_forward = sharedAction(new Action(_("IDS_BR_SK_NEXT")));
+ m_forward = sharedAction(new Action("IDS_BR_OPT_GOFORWARD"));
m_forward->setIcon("toolbar_next");
- m_addTab = sharedAction(new Action(_("IDS_BR_BUTTON_NEW_TAB_ABB2")));
+ m_addTab = sharedAction(new Action("IDS_BR_BUTTON_NEW_TAB_ABB2"));
m_addTab->setIcon("add_tab");
m_homePage = sharedAction(new Action("Home"));
m_homePage->setIcon("toolbar_home");
- m_bookmarks = sharedAction(new Action(_("IDS_BR_BODY_BOOKMARKS")));
+ m_bookmarks = sharedAction(new Action("IDS_BR_BODY_BOOKMARKS"));
m_bookmarks->setIcon("toolbar_bookmark");
- m_tabs = sharedAction(new Action(_("IDS_BR_SK_TABS")));
+ m_tabs = sharedAction(new Action("IDS_BR_SK_TABS"));
m_tabs->setIcon("toolbar_tabs");
}
evas_object_hide(elm_object_part_content_unset(m_mainLayout, "web_view"));
}
-void WebPageUI::setErrorButtons()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- m_forward->setEnabled(false);
-}
-
void WebPageUI::setButtonsDisabled()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
elm_object_signal_emit(m_mainLayout, "decrease_unfocused_uri", "ui");
-
- // delay hiding on one efl loop iteration to enable genlist item selected callback to come
- ecore_timer_add(0.0, _hideDelay, this);
-}
-
-Eina_Bool WebPageUI::_hideDelay(void *data)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- auto self = static_cast<WebPageUI*>(data);
- self->m_urlHistoryList->hideWidget();
- return ECORE_CALLBACK_CANCEL;
}
-#if PWA
-void WebPageUI::setDisplayMode(WebPageUI::WebDisplayMode mode)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (mode == WebDisplayMode::WebDisplayModeFullscreen)
- elm_object_signal_emit(m_mainLayout, "webview_fullscreen", "ui");
- else if (mode == WebDisplayMode::WebDisplayModeStandalone)
- elm_object_signal_emit(m_mainLayout, "webview_fullscreen", "ui");
- else if (mode == WebDisplayMode::WebDisplayModeMinimalUi)
- BROWSER_LOGD("Not implemented");
- else if (mode == WebDisplayMode::WebDisplayModeBrowser)
- elm_object_signal_emit(m_mainLayout, "webview_default", "ui");
-}
-#endif
-
void WebPageUI:: launch_share(const char *uri)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
#include "URIEntry.h"
#include "AbstractWebEngine/State.h"
#include "EditQuickAccessUI.h"
+#include "core/Tools/GeneralTools.h"
namespace tizen_browser {
+
namespace base_ui {
class WebPageUIStatesManager;
enum class WPUState;
-class UrlHistoryList;
-typedef std::shared_ptr<UrlHistoryList> UrlHistoryPtr;
class BROWSER_EXPORT WebPageUI
- : public interfaces::AbstractContextMenu
- , public tizen_browser::core::AbstractService
- , public tizen_browser::interfaces::AbstractUIComponent
- , public tizen_browser::interfaces::AbstractRotatable
+ : public interfaces::AbstractContextMenu
+ , public core::AbstractService
+ , public interfaces::AbstractUIComponent
+ , public interfaces::AbstractRotatable
{
public:
-
-#if PWA
- typedef enum OrientationType {
+ enum orientationType {
WebScreenOrientationLockDefault = 0, // Equivalent to unlock.
WebScreenOrientationLockPortraitPrimary,
WebScreenOrientationLockPortraitSecondary,
WebScreenOrientationLockLandscape,
WebScreenOrientationLockPortrait,
WebScreenOrientationLockNatural,
- } orientationType;
+ };
- typedef enum WebDisplayMode {
+ enum WebDisplayMode {
WebDisplayModeUndefined = 0,
WebDisplayModeBrowser,
WebDisplayModeMinimalUi,
WebDisplayModeStandalone,
WebDisplayModeFullscreen,
WebDisplayModeLast = WebDisplayModeFullscreen
- } webDisplayMode;
+ };
struct pwaInfo {
std::string id;
long themeColor;
long backgroundColor;
};
-#endif
WebPageUI();
virtual ~WebPageUI();
- virtual std::string getName();
- virtual void init(Evas_Object* parent);
- virtual Evas_Object* getContent();
- UrlHistoryPtr getUrlHistoryList();
- virtual void showUI();
- virtual void hideUI();
+ std::string getName() override;
+ void init(Evas_Object* parent) override;
+ Evas_Object* getContent() override;
+ void showUI() override;
+ void hideUI() override;
void updateEngineStateUI();
#if DUMMY_BUTTON
void createDummyButton();
+ void setDummyButtonFocus();
#endif
void fullscreenModeSet(bool state);
- virtual void orientationChanged() override;
+ void orientationChanged() override;
//AbstractContextMenu interface implementation
- virtual void showContextMenu() override;
+ void showContextMenu() override;
+ void returnFocusAfterHideContextMenu();
void loadStarted();
void progressChanged(double progress);
* @returns True if one of the given states equals to the manager's state
*/
bool stateEquals(std::initializer_list<WPUState> states) const;
+ void setShouldOpenNewTab(bool should) { m_shouldOpenNewTab = should; }
+ bool shouldOpenNewTab() const { return m_shouldOpenNewTab; }
bool isWebPageUIvisible() { return m_WebPageUIvisible; }
- void switchViewToWebPage(Evas_Object* content, const std::string uri, bool loading);
+ void switchViewToWebPage(Evas_Object* content, const std::string& uri, bool loading);
void switchViewToQuickAccess(Evas_Object* content);
URIEntry& getURIEntry() const { return *m_URIEntry.get(); }
std::shared_ptr<EditQuickAccessUI> getQuickAccessEditUI() { return m_editQuickAccessUI; }
void setBackButtonEnabled(bool enabled) { m_back->setEnabled(enabled); }
void setForwardButtonEnabled(bool enabled) { m_forward->setEnabled(enabled); }
void lockWebview();
- void lockUrlHistoryList();
- void unlockUrlHistoryList();
- void setFocusOnSuspend();
void mobileEntryFocused();
void mobileEntryUnfocused();
void setContentFocus();
void showBottomBar(bool isShown);
- static Eina_Bool _hideDelay(void *data);
void setDesktopMode(bool desktopMode) {m_desktopMode = desktopMode;}
bool getDesktopMode() { return m_desktopMode; }
-#if PWA
- void setDisplayMode(WebDisplayMode mode);
-#endif
+ void urlbarOffsetSet(const float& offset);
+ void bottombarOffsetSet(const float& offset);
+ void changeButtonsColor(const bool& isDarkBackground);
+ void changeUIColor(
+ const int& r = DEFAULT_THEME.r,
+ const int& g = DEFAULT_THEME.g,
+ const int& b = DEFAULT_THEME.b,
+ const int& a = DEFAULT_THEME.a);
+ bool isBrighterThanDefault(const int& r, const int& g, const int& b);
+
std::string getURI();
boost::signals2::signal<void ()> backPage;
boost::signals2::signal<void ()> qaOrientationChanged;
boost::signals2::signal<void ()> hideQuickAccess;
boost::signals2::signal<void ()> showQuickAccess;
- boost::signals2::signal<void ()> bookmarkManagerClicked;
boost::signals2::signal<void ()> focusWebView;
boost::signals2::signal<void ()> unfocusWebView;
boost::signals2::signal<void ()> addNewTab;
//AbstractContextMenu signals
boost::signals2::signal<bool ()> isBookmark;
boost::signals2::signal<bool ()> isQuickAccess;
+ boost::signals2::signal<int ()> getMostVisitedCount;
boost::signals2::signal<void ()> deleteBookmark;
boost::signals2::signal<void ()> showBookmarkFlowUI;
boost::signals2::signal<void ()> showFindOnPageUI;
boost::signals2::signal<std::string ()> requestCurrentPageForWebPageUI;
boost::signals2::signal<basic_webengine::State ()> getEngineState;
-#if PWA
boost::signals2::signal<void ()> pwaRequestManifest;
boost::signals2::signal<void ()> getCountCheckSignal;
-#endif
+ boost::signals2::signal<void (bool value)> setBarsShown;
private:
static void faviconClicked(void* data, Evas_Object* obj, const char* emission, const char* source);
static Eina_Bool _cb_down_pressed_on_urlbar(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
- static void _bookmark_manager_clicked(void * data, Evas_Object *, void *);
+ static void _focus_pixel_focused(void *data, Evas_Object *, void *);
+ static void _focus_pixel_unfocused(void *data, Evas_Object *, void *);
#if DUMMY_BUTTON
static void _dummy_button_focused(void *data, Evas_Object *, void *);
static void _dummy_button_unfocused(void *data, Evas_Object *, void *);
+ static void _dummy_button_clicked(void *data, Evas_Object *, void *);
#endif
static void _content_clicked(void * data, Evas_Object *, void *);
#if GESTURE
static Evas_Event_Flags _gesture_move(void *data, void *event_info);
#endif
+ void dismissContextMenu();
static void _cm_edit_qa_clicked(void*, Evas_Object*, void*);
static void _cm_delete_mv_clicked(void*, Evas_Object*, void*);
static void _cm_share_clicked(void*, Evas_Object*, void*);
static void _cm_desktop_view_page_clicked(void*, Evas_Object*, void*);
static void _cm_mobile_view_page_clicked(void*, Evas_Object*, void*);
static void _cm_settings_clicked(void*, Evas_Object*, void*);
-#if PWA
static void _cm_add_to_hs_clicked(void*, Evas_Object*, void*);
-#endif
static void launch_share(const char *uri);
void createLayout();
void hideProgressBar();
void hideFindOnPage();
void hideWebView();
- void setErrorButtons();
void setButtonsDisabled();
void setMainContent(Evas_Object* content);
void updateURIBar(const std::string& uri, bool loading);
Evas_Object* m_parent;
Evas_Object* m_mainLayout;
+ Evas_Object *m_previous_focus;
+ Evas_Object* m_focus_pixel;
#if DUMMY_BUTTON
Evas_Object* m_dummy_button;
#endif
WPUStatesManagerPtr m_statesMgr;
std::unique_ptr<URIEntry> m_URIEntry;
std::shared_ptr<EditQuickAccessUI> m_editQuickAccessUI;
- UrlHistoryPtr m_urlHistoryList;
bool m_webviewLocked;
bool m_WebPageUIvisible;
bool m_desktopMode;
sharedAction m_bookmarks;
sharedAction m_tabs;
-#if PWA
std::shared_ptr<pwaInfo> m_pwaInfo;
-#endif
#if GESTURE
Evas_Object* m_gestureLayer;
#endif
bool m_uriBarHidden;
bool m_fullscreen;
+ bool m_shouldOpenNewTab;
+
+ tools::Color m_currentTheme;
+
+ static const double PROGRESS_100;
+ static const tools::Color DEFAULT_THEME;
};
namespace base_ui {
WebPageUIStatesManager::WebPageUIStatesManager(WPUState initialState) :
- m_state(initialState)
+ m_state(initialState) ,
+ namesMap({{ WPUState::QUICK_ACCESS, "QUICK_ACCESS" },
+ { WPUState::EDIT_MODE, "EDIT_MODE" },
+ { WPUState::MAIN_WEB_PAGE, "MAIN_WEB_PAGE" },
+ { WPUState::MAIN_ERROR_PAGE, "MAIN_ERROR_PAGE" },
+ { WPUState::MAIN_INCOGNITO_PAGE, "MAIN_INCOGNITO_PAGE" }})
{
- namesMap = {
- { WPUState::QUICK_ACCESS, "QUICK_ACCESS" },
- { WPUState::EDIT_MODE, "EDIT_MODE" },
- { WPUState::MAIN_WEB_PAGE, "MAIN_WEB_PAGE" },
- { WPUState::MAIN_ERROR_PAGE, "MAIN_ERROR_PAGE" },
- { WPUState::MAIN_INCOGNITO_PAGE, "MAIN_INCOGNITO_PAGE" }
- };
}
void WebPageUIStatesManager::set(WPUState state) {
class WebPageUIStatesManager
{
public:
- WebPageUIStatesManager(WPUState initialState);
+ explicit WebPageUIStatesManager(WPUState initialState);
virtual ~WebPageUIStatesManager() {}
void set(WPUState state);
};
-typedef std::shared_ptr<WebPageUIStatesManager> WPUStatesManagerPtr;
-typedef std::shared_ptr<const WebPageUIStatesManager> WPUStatesManagerPtrConst;
+using WPUStatesManagerPtr = std::shared_ptr<WebPageUIStatesManager>;
+using WPUStatesManagerPtrConst = std::shared_ptr<const WebPageUIStatesManager>;
} /* namespace base_ui */
} /* namespace tizen_browser */
-#include "ImageButton.edc"
+#include "../../../core/Tools/edc/ImageButton.edc"
#include "../../../core/Tools/edc/Spacer.edc"
#include "../../../core/Tools/edc/ToolbarButton.edc"
-#include "ImageButton.edc"
+#include "../../../core/Tools/edc/ImageButton.edc"
#include "../../../core/Tools/edc/Spacer.edc"
#include "../../../core/Tools/edc/ToolbarButton.edc"
-#include "CustomButton.edc"
+#include "../../../core/Tools/edc/CustomButton.edc"
#define URI_INPUTBOX_LENGTH 518
#define URI_INPUTBOX_LENGTH_ENLARGED 656
#define BORDER_WIDTH 5
collections { base_scale: 2.6;
+
+ IMAGE_BUTTON("toolbar_input_ic_refresh.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_refresh.png")
+ IMAGE_BUTTON("toolbar_input_ic_security.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security.png")
+ IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security_off.png")
+
group {
name: "elm/entry/selection/browser_entry";
parts {
}
}
}
- group {
- name: "elm/entry/base-single/uri_entry";
- color_classes {
- color_class {
- name: "guide_text_unselected_color";
- color: 51 51 51 0.5;
- }
- }
- styles {
- style {
- name: "browser-entry-uri-style-unselected";
- base: "font=Sans:style=SVD_Medium font_size="40" wrap=none color=#969696";
- tag: "br" "";
- }
- style {
- name: "browser-entry-uri-style-selected";
- base: "font=Sans:style=SVD_Medium font_size="40" wrap=none color=#4088d3";
- tag: "br" "";
- }
- style {
- name: "browser-entry-uri-style-selected-incognito";
- base: "font=Sans:style=SVD_Medium font_size="40" wrap=none color=#4088d3";
- tag: "br" "";
- }
- }
- data {
- item: focus_highlight "off";
- }
- parts {
-
- part {
- name: "bg";
- scale:1;
- type: RECT;
- mouse_events: 0;
- description {
- state: "default" 0.0;
- color: 0 0 0 0;
- fixed: 0 1;
- min: 0 URI_INPUTBOX_HEIGHT;
- max: -1 URI_INPUTBOX_HEIGHT;
- align: 0.0 0.0;
- }
- }
- part {
- name: "label.text.clip";
- scale:1;
- type: RECT;
- description {
- state: "default" 0.0;
- }
- }
- part {
- name: "elm.text";
- scale: 1;
- multiline: 0;
- entry_mode: EDITABLE;
- select_mode: DEFAULT;
- cursor_mode: BEFORE;
- type: TEXTBLOCK;
- source: "elm/entry/selection/browser_entry";
- source4: "elm/entry/cursor/browser_entry";
- description {
- state: "default" 0.0;
- rel1.to: "bg";
- rel1.relative: 0.0 0.0;
- rel2.to: "bg";
- rel2.relative: 1.0 1.0;
- align: 0.0 0.0;
- text {
- style: "browser-entry-uri-style-selected";
- min: 0 1;
- }
- }
- description {
- state: "incognito" 0.0;
- align: 0.0 0.0;
- text {
- style: "browser-entry-uri-style-selected-incognito";
- min: 0 1;
- }
- }
- }
- part {
- name: "elm.guide";
- scale:1;
- type: TEXTBLOCK;
- mouse_events: 0;
- clip_to: "label.text.clip";
- source4: "elm/entry/cursor/browser_entry";
- description {
- state: "default" 0.0;
- rel1.to: "bg";
- rel1.relative: 0.0 0.0;
- rel1.offset: BORDER_WIDTH 0;
- rel2.relative: 1.0 1.0;
- max: -1 URI_INPUTBOX_HEIGHT;
- text {
- style: "browser-entry-uri-style-unselected";
- min: 0 1;
- }
- }
- description {
- state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- }
- programs {
- program {
- name: "focus";
- signal: "load";
- source: "";
- action: FOCUS_SET;
- target: "elm.text";
- }
- program {
- name: "gdisabled";
- signal: "elm,guide,disabled";
- source: "elm";
- action: STATE_SET "hidden" 0.0;
- target: "elm.guide";
- }
- program {
- name: "genabled";
- signal: "elm,guide,enabled";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.guide";
- }
- program {
- name: "incognito_mode_uri_entry";
- source: "ui";
- signal: "uri_entry_incognito";
- action: STATE_SET "incognito" 0.0;
- target: "elm.text";
- }
- }
- }//group
group {
name: "uri_entry_layout";
state: "default" 0.0;
min: 16 URI_INPUTBOX_HEIGHT;
max: 16 URI_INPUTBOX_HEIGHT;
- rel1.to: "left_spacer";
+ rel1.to: "uri_entry_space";
rel1.relative: 0.0 0.0;
rel2.to: "uri_entry_space";
rel2.relative: 1.0 1.0;
+++ /dev/null
-#include "../../../core/Tools/edc/SpacerRect.edc"
-
-#if PROFILE_MOBILE
- #define HISTORY_ITEM_H 74
-#else
- #define HISTORY_ITEM_H 82
-#endif
-
-collections {
- #if PROFILE_MOBILE
- base_scale: 2.6;
- #else
- base_scale: 2.0;
- #endif
- group {
- name: "url_history_list";
- parts
- {
- SPACER_RECT_VERTICAL("spacerTop", 0, 16, 0.0)
- part {
- name: "list_swallow";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- max: -1 -1;
- fixed: 0 1;
- align: 0.0 0.0;
- rel1 { relative: 0.0 1.0; to: "spacerTop"; }
- }
- }
- }
- script {
- public message(Msg_Type:type,id, ...)
- {
- if((type == MSG_INT) && (id == 0))
- {
- new x,y,h;
- h = getarg(2);
- custom_state(PART:"list_swallow","default",0.0);
- get_state_val(PART:"list_swallow",STATE_MAX,x,y);
- set_state_val(PART:"list_swallow",STATE_MAX,x,h);
- set_state(PART:"list_swallow","custom",0.0);
- }
- }
- }
- }
-
- group {
- name: "elm/genlist/item/url_historylist_grid_item/default";
- data.item: "contents" "matched_url";
- parts {
- part {
- name: "bg";
- type: RECT;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 0 HISTORY_ITEM_H;
- max: -1 HISTORY_ITEM_H;
- visible: 1;
- color: 255 255 255 255;
- align: 0.0 0.0;
- }
- description {
- state: "focused" 0.0;
- inherit: "default" 0.0;
- color: 0 119 246 255;
- }
- }
- part {
- name: "matched_url";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- fixed: 0 1;
- visible: 1;
- align: 0.0 0.0;
- rel1 {
- to: "bg";
- }
- rel2 {
- to: "bg";
- }
-
- }
- }
- }
- programs {
- program {
- name: "focused";
- signal: "mouse,in";
- source: "matched_url";
- action: STATE_SET "focused" 0.0;
- target: "bg";
- }
- program {
- name: "selected";
- signal: "mouse,out";
- source: "matched_url";
- action: STATE_SET "default" 0.0;
- target: "bg";
- }
- }
- }
-
- group {
- name: "layoutMatchedUrl";
- styles {
- style {
- name: "styleMatchedUrl";
- base: "font=Tizen:style=Regular font_size=34 color=#333333 align=0.0 valign=1.0 ellipsis=1.0";
- }
- }
- parts {
- SPACER_RECT_HORIZONTAL("spacerLeft", 0, 48, 0.0)
- SPACER_RECT_HORIZONTAL("spacerRight", 0, 48, 1.0)
- part {
- name: "elm.text";
- type: TEXTBLOCK;
- scale: 1;
- description {
- state: "default" 0.0;
- align: 0.0 0.0;
- visible: 1;
- rel1 {
- relative: 1.0 0.0;
- to: "spacerLeft";
- }
- rel2 {
- relative: 0.0 1.0;
- to: "spacerRight";
- }
- text {
- style: "styleMatchedUrl";
- }
- }
- }
- }
- }
-}
}
}
part {
+ name: "spacer_for_uri_bar";
+ scale: 1;
+ type: SPACER;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ min: 0 0;
+ max: -1 108;
+ fixed: 0 0;
+ rel1 {
+ to: "bg";
+ relative: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ }
+ }
+ part {
+ name: "spacer_for_bottom_bar";
+ scale: 1;
+ type: SPACER;
+ description {
+ state: "default" 0.0;
+ align: 0 1;
+ min: 0 0;
+ max: -1 96;
+ fixed: 0 0;
+ rel1 {
+ to: "bg";
+ relative: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1 1;
+ }
+ }
+ description { "hidden";
+ inherit: "default" 0.0;
+ max: -1 0;
+ rel1.relative: 1 1;
+ }
+ }
+ part {
+ name: "web_view";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0.0 0.0;
+ fixed: 0 0;
+ min: 0 0;
+ max: -1 -1;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ description {
+ state: "fullscreen" 0.0;
+ inherit: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ description { "quick_access";
+ inherit: "default" 0.0;
+ rel1 { relative: 0.0 1.0; to: "spacer_for_uri_bar";}
+ rel2 { relative: 1.0 0.0; to: "spacer_for_bottom_bar";}
+ }
+ description { "findonpage_margin" 0.0;
+ inherit: "default" 0.0;
+ rel1 { relative: 0.0 1.0; to: "findonpage"; }
+ }
+
+ }
+
+#if DUMMY_BUTTON
+ swallow { "web_view_dummy_button"; scale;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { "default";
+ visible: 1;
+ align: 0.0 0.0;
+ fixed: 0 0;
+ min: 0 0;
+ max: -1 -1;
+ rel1 { relative: 0.0 0.0; to: "web_view"; }
+ rel2 { relative: 1.0 1.0; to: "web_view"; }
+ }
+ description { "quick_access";
+ inherit: "default";
+ visible: 0;
+ }
+ }
+#endif
+
+// URI BAR
+ part {
name: "uri_bar_bg";
type : RECT;
scale: 1;
align: 0 0;
min: 0 URI_BG_HEIGHT;
max: -1 URI_BG_HEIGHT;
+ rel1 {relative: 0.0 0.0; to:"web_view";}
+ rel2 {relative: 1.0 1.0; to:"web_view";}
+ }
+ description { "quick_access";
+ inherit: "default" 0.0;
rel1 {relative: 0.0 0.0; to:"bg";}
rel2 {relative: 1.0 1.0; to:"bg";}
}
description {
state: "hidden_vertical" 0.0;
inherit: "default" 0.0;
- rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/1228); to:"bg";}
+ rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/1228); to:"web_view";}
}
description {
state: "hidden_landscape" 0.0;
inherit: "default" 0.0;
- rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/668); to:"bg";}
+ rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/668); to:"web_view";}
}
}
}
}
+ rect {
+ name: "uri_bar_upper_bound";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ color_class: "defaultBg";
+ min: 0 1;
+ max: -1 1;
+ fixed: 1 1;
+ rel2 {relative: 1.0 0.0; to:"uri_bar_bg";}
+ }
+ description {
+ state: "secret" 0.0;
+ inherit: "default" 0.0;
+ color_class: "secret";
+ }
+ }
+
+ rect {
+ name: "bottom_bar_lower_bound";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ color_class: "defaultBg";
+ min: 0 1;
+ max: -1 1;
+ fixed: 1 1;
+ rel1 {relative: 0.0 1.0; to:"bottom_toolbar_bg_color";}
+ }
+ description {
+ state: "secret" 0.0;
+ inherit: "default" 0.0;
+ color_class: "secret";
+ }
+ }
+
part {
name: "right_spacer";
type: RECT;
}
}
- rect {
- name: "bottom_toolbar";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.0 1.0;
- min: 0 0;
- max: -1 BOTTOM_TOOLBAR_HEIGHT;
- color_class: "defaultBg";
- rel1 { relative: 0.0 0.0; to: "bg"; }
- rel2 { relative: 1.0 1.0; to: "bg"; }
- }
- description {
- state: "hidden" 0.0;
- inherit: "default" 0.0;
- rel1 {relative: 1.0 1.0; to:"bg";}
- }
- }
+// BOTTOM BAR
rect {
name: "bottom_toolbar_bg_color";
scale: 1;
visible: 1;
align: 0.0 0.0;
color_class: "defaultBg";
- rel1 { relative: 0.0 0.0; to: "bottom_toolbar"; }
- rel2 { relative: 1.0 1.0; to: "bottom_toolbar"; }
+ min: 0 0;
+ max: -1 BOTTOM_TOOLBAR_HEIGHT;
+ fixed: 0 0;
+ rel1 { relative: 0.0 0.0; to: "bottom_swallow"; }
+ rel2 { relative: 1.0 1.0; to: "bottom_swallow"; }
}
description {
state: "secret" 0.0;
color_class: "secret";
}
}
- rect {
- name: "swallow_spacer";
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- min: 0 2;
- max: -1 2;
- align: 0.0 0.0;
- rel1 { relative: 0.0 0.0; to: "bottom_toolbar"; }
- rel2 { relative: 1.0 1.0; to: "bottom_toolbar"; }
- }
- }
part {
name: "bottom_swallow";
type: SWALLOW;
description {
state: "default" 0.0;
visible: 1;
- rel1 { relative: 0.0 1.0; to: "swallow_spacer"; }
- rel2 { relative: 1.0 1.0; to: "bottom_toolbar"; }
- }
- }
-
- part {
- name: "web_view";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- align: 0.0 0.0;
- fixed: 0 0;
- min: 0 0;
- max: -1 -1;
- rel1 { relative: 0.0 1.0; to: "uri_bar_bg"; }
- rel2 { relative: 1.0 0.0; to: "bottom_toolbar"; }
- }
- description {
- state: "fullscreen" 0.0;
- inherit: "default" 0.0;
- rel1 { relative: 0.0 0.0; to: "bg"; }
- rel2 { relative: 1.0 1.0; to: "bg"; }
- }
- }
- swallow { "web_view_dummy_button"; scale;
- mouse_events: 1;
- repeat_events: 1;
- description { "default";
- visible: 1;
- align: 0.0 0.0;
- fixed: 0 0;
+ align: 0.0 1.0;
min: 0 0;
- max: -1 -1;
+ max: -1 BOTTOM_TOOLBAR_HEIGHT;
rel1 { relative: 0.0 0.0; to: "web_view"; }
rel2 { relative: 1.0 1.0; to: "web_view"; }
}
- description { "hidden";
- inherit: "default";
- visible: 0;
+ description { "quick_access";
+ inherit: "default" 0.0;
+ rel1 {relative: 0.0 0.0; to:"bg";}
+ rel2 {relative: 1.0 1.0; to:"bg";}
+ }
+ description {
+ "hidden";
+ rel1 {relative: 1.0 1.0;}
}
}
+
+// PROGRESSBAR
part { name: "progressbar_bg";
type: IMAGE;
scale: 1;
fixed: 0 1;
min: 0 5;
max: -1 5;
- align: 0.5 1;
+ align: 0.5 0;
image.normal: PROGRESS_BG_IMAGE;
- rel1 { relative: 0.0 0.0; to: "uri_bar_bg";}
- rel2 { relative: 1.0 1.0; to: "uri_bar_bg";}
+ rel1 { relative: 0.0 1.0; to: "uri_bar_bg";}
+ rel2 { relative: 1.0 1.0;}
}
description {
state: "progress" 0.0;
}
PROGRESS_DESCRIPTIONS
}
+ part {
+ name: "findonpage";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0 0;
+ fixed: 1 1;
+ color: 244 244 244 255;
+ min: 0 FINDONPAGE_HEIGHT;
+ max: -1 FINDONPAGE_HEIGHT;
+ rel1 {
+ relative: 0 0;
+ to: "bg";
+ }
+ rel2 {
+ relative: 1 1;
+ to: "bg";
+ }
+ }
+ description {
+ state: "findonpage_margin" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ script
+ {
+ public message(Msg_Type:type,id, ...)
+ {
+ if((type == MSG_INT) && (id == 0))
+ {
+ new offset;
+ offset = getarg(2)+1; // +1 added due to rounding error
+ custom_state(PART:"uri_bar_bg","default",0.0);
+ set_state_val(PART:"uri_bar_bg", STATE_REL1_OFFSET, 0, offset);
+ set_state_val(PART:"uri_bar_bg", STATE_REL2_OFFSET, 0, offset);
+ set_state(PART:"uri_bar_bg","custom",0.0);
+ }
+ if((type == MSG_INT) && (id == 1))
+ {
+ new offset;
+ new arg;
+ arg = -getarg(2);
+ offset = (arg*BOTTOM_TOOLBAR_HEIGHT/URI_BG_HEIGHT)-2; // -2 added due to rounding error
+ custom_state(PART:"bottom_swallow","default",0.0);
+ set_state_val(PART:"bottom_swallow", STATE_REL1_OFFSET, 0, offset);
+ set_state_val(PART:"bottom_swallow", STATE_REL2_OFFSET, 0, offset);
+ set_state(PART:"bottom_swallow","custom",0.0);
+ if (arg == 2*URI_BG_HEIGHT)
+ {
+ set_state(PART:"spacer_for_bottom_bar","hidden",0.0);
+ }
+ if (arg == URI_BG_HEIGHT)
+ {
+ set_state(PART:"spacer_for_bottom_bar","default",0.0);
+ }
+ }
+ }
+ }
programs {
program { name: "hide,progress";
signal: "hide,progress,signal";
transition: DECELERATE 0.1;
action: STATE_SET "default" 0.0;
target: "progress_bar";
- target: "bg";
- }
- program { name: "show,progress";
- signal: "show,progress,signal";
- action: STATE_SET "progress" 0.0;
- target: "bg";
}
program { name: "update,progress,0.00";
signal: "update,progress,0.00,signal";
program { name: "hide,bottom";
signal: "hide,bottom";
action: STATE_SET "hidden" 0.0;
- target: "bottom_toolbar";
+ target: "bottom_swallow";
}
program { name: "show,bottom";
signal: "show,bottom";
action: STATE_SET "default" 0.0;
- target: "bottom_toolbar";
+ target: "bottom_swallow";
}
- program { name: "show,dummy_button";
- signal: "show,dummy_button";
+ program { name: "show,web,view";
+ signal: "show,web,view";
action: STATE_SET "default" 0.0;
+ target: "web_view";
+ target: "uri_bar_bg";
+ target: "bottom_swallow";
+#if DUMMY_BUTTON
target: "web_view_dummy_button";
- }
- program { name: "hide,dummy_button";
- signal: "hide,dummy_button";
- action: STATE_SET "hidden" 0.0;
+#endif
+ }
+ program { name: "show,quick,access";
+ signal: "show,quick,access";
+ action: STATE_SET "quick_access" 0.0;
+ target: "web_view";
+ target: "uri_bar_bg";
+ target: "bottom_swallow";
+#if DUMMY_BUTTON
target: "web_view_dummy_button";
+#endif
}
}
-
- #include "WebPageUIUrlHistoryList.edc"
- part {
- name: "findonpage";
- type: SWALLOW;
- scale: 1;
- mouse_events: 1;
- description {
- state: "default" 0.0;
- visible: 0;
- align: 0 0;
- fixed: 1 1;
- color: 244 244 244 255;
- min: 0 FINDONPAGE_HEIGHT;
- max: -1 FINDONPAGE_HEIGHT;
- rel1 {
- relative: 0 0;
- to: "web_view";
- }
- rel2 {
- relative: 1 1;
- to: "web_view";
- }
- }
- description {
- state: "visible" 0.0;
- inherit: "default";
- visible: 1;
- }
+ swallow { "focus_pixel"; scale;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { "default";
+ visible: 1;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ min: 1 1;
+ max: 1 1;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
}
}
programs {
source: "ui";
action: STATE_SET "default" 0.0;
target: "uri_bar_bg";
- target: "bottom_toolbar";
transition: LINEAR 0.15;
}
program {
source: "ui";
action: STATE_SET "default" 0.0;
target: "findonpage";
+ target: "web_view";
}
program {
name: "show_findonpage";
signal: "show_findonpage";
source: "ui";
- action: STATE_SET "visible" 0.0;
+ action: STATE_SET "findonpage_margin" 0.0;
target: "findonpage";
+ target: "web_view";
}
program {
name: "set_normal_mode";
+++ /dev/null
-// included in WebPageUi.edc
-
-/*
- Swallow is on the top and its dimensions can hold maximum
- dimensions of its content. Its dimensions are changed in
- UrlHistoryList.edc
-*/
-part {
- name: "url_history_list";
- type: SWALLOW;
- scale: 1;
- description {
- state: "default" 0.0;
- visible: 1;
- fixed: 0 0;
- rel1 {
- relative: 0.0 1.0;
- to: "uri_entry";
- }
- rel2 {
- relative: 0.0 1.0;
- to: "spacer_url_history_list_right";
- }
- }
-}
-rect {
- "spacer_url_history_list_right";
- scale: 1;
- mouse_events: 1;
- repeat_events: 1;
- desc {
- "default";
- visible: 0;
- rel1 {
- relative: 1.0 0.0;
- to: "uri_entry";
- }
- }
-}
{
BROWSER_LOGI("[UT] BookmarkItem - bookm_item_set_get - START --> ");
- std::string retstr = "";
std::unique_ptr<tizen_browser::services::BookmarkItem>
bitem(new tizen_browser::services::BookmarkItem());
//Check empty address and title
bitem->setAddress("");
- retstr= bitem->getAddress();
+ std::string retstr = bitem->getAddress();
BOOST_CHECK_EQUAL("",retstr);
bitem->setTitle("");
retstr= bitem->getTitle();
{
BROWSER_LOGI(TAG "config_boundary_conditions - START --> ");
- std::string retstring;
-
// Wrong keys tests
- BOOST_CHECK(retstring.empty());
boost::any retany;
try{
retany = tizen_browser::config::Config::getInstance().get(NULL);
}
try{
- retstring = boost::any_cast<std::string>(retany);
+ std::string retstring = boost::any_cast<std::string>(retany);
BOOST_CHECK(retstring.empty());
}catch(boost::bad_any_cast & e){
/// \todo Need to resolve bad type (void *) from boost::any(empty_string))
BOOST_TEST_MESSAGE(TAG "Zoom factor at start:" << webEngineService->getZoomFactor());
- webEngineService->setZoomFactor(200);
-
- BOOST_TEST_MESSAGE(TAG "Zoom factor after setting 200:" << webEngineService->getZoomFactor());
-
- webEngineService->setZoomFactor(100);
-
- BOOST_TEST_MESSAGE(TAG "Zoom factor after setting 100:" << webEngineService->getZoomFactor());
-
BOOST_TEST_MESSAGE(TAG "Print closeTab():" << webEngineService->closeTab());
BROWSER_LOGI(TAG "--> END - ZoomAndAutofit");