#ifndef __ABSTRACT_UI_COMPONENT_H__
#define __ABSTRACT_UI_COMPONENT_H__ 1
+#include <boost/signals2/signal.hpp>
+
namespace tizen_browser
{
namespace interfaces
* Deletes genlists and gengrids (due to elm_genlist_clear and elm_gengrid_clear isue)
*/
virtual void hideUI() = 0;
+
+/**
+ * @brief Signal which has to be connected to view manager pop from stack function.
+ */
+ boost::signals2::signal<void ()> closeUI;
};
}//namespace interfaces
m_tabUI->changeEngineState.connect(boost::bind(&basic_webengine::AbstractWebEngine::changeState, m_webEngine.get()));
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->getPasswordUI().closeUI.connect(boost::bind(&SimpleUI::closeTopView, this));
+ m_tabUI->getPasswordUI().setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString, &m_storageService->getSettingsStorage(), _1, _2));
M_ASSERT(m_historyUI.get());
m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryAllClicked, this));
}
void SimpleUI::refetchTabUIData() {
- m_tabUI->setState(m_webEngine->getState());
std::vector<basic_webengine::TabContentPtr> tabsContents =
m_webEngine->getTabContents();
m_tabService->fillThumbs(tabsContents);
m_webEngine->searchOnWebsite(text, flags);
}
+void SimpleUI::showPasswordUI()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_viewManager.pushViewToStack(&(m_tabUI->getPasswordUI()));
+}
+
+void SimpleUI::closeTopView()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_viewManager.popTheStack();
+}
+
void SimpleUI::addBookmark(BookmarkUpdate bookmark_update)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
void onBackPressed();
void searchWebPage(std::string &text, int flags);
+ void showPasswordUI();
+ void closeTopView();
std::string edjePath(const std::string &);
setSettingsString(paramName,value);
}
-bool SettingsStorage::isParamPresent(basic_webengine::WebEngineSettings param) const
+bool SettingsStorage::isDBParamPresent(const std::string& key) const
{
- const std::string& paramName = basic_webengine::PARAMS_NAMES.at(param);
auto con = storage::DriverManager::getDatabase(DB_SETTINGS);
-
storage::SQLQuery select(con->prepare(SQL_CHECK_IF_PARAM_EXISTS));
- select.bindText(1, paramName);
+ select.bindText(1, key);
select.exec();
return select.hasNext();
}
+bool SettingsStorage::isParamPresent(basic_webengine::WebEngineSettings param) const
+{
+ const std::string& paramName = basic_webengine::PARAMS_NAMES.at(param);
+ return isDBParamPresent(paramName);
+}
+
bool SettingsStorage::getParamVal(basic_webengine::WebEngineSettings param) const
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return defaultValue;
}
+bool SettingsStorage::getSettingsBool(const std::string & key, const bool defaultValue) const
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ int value = getSettingsInt(key, -1);
+ if (value < 0)
+ return defaultValue;
+ else
+ return static_cast<bool>(value);
+}
+
/**
* @throws StorageException on error
*/
setSettingsValue(key, field);
}
+/**
+ * @throws StorageException on error
+ */
+void SettingsStorage::setSettingsBool(const std::string & key, bool value) const
+{
+ BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
+ setSettingsInt(key, static_cast<int>(value));
+}
+
}
}
void resetSettings();
void setParam(basic_webengine::WebEngineSettings param, bool value) const;
void setParamString(basic_webengine::WebEngineSettings param, std::string value) const;
- bool isParamPresent(basic_webengine::WebEngineSettings param) const;
bool getParamVal(basic_webengine::WebEngineSettings param) const;
+ bool isDBParamPresent(const std::string& key) const;
/**
* @throws StorageException on error
*/
*/
const std::string getSettingsText(const std::string & key, const std::string & defaultValue) const;
+ /**
+ * @throws StorageException on error
+ */
+ bool getSettingsBool(const std::string & key, const bool defaultValue) const;
+
/**
* @throws StorageException on error
*/
*/
void setSettingsString(const std::string & key, std::string value) const;
+ /**
+ * @throws StorageException on error
+ */
+ void setSettingsBool(const std::string & key, bool value) const;
+
void init(bool testmode = false);
void initWebEngineSettingsFromDB();
*/
void setSettingsValue(const std::string & key, storage::FieldPtr field) const;
+ bool isParamPresent(basic_webengine::WebEngineSettings param) const;
+
bool m_dbSettingsInitialised;
std::string DB_SETTINGS;
set(TabUI_SRCS
TabUI.cpp
+ PasswordUI.cpp
)
include(Coreheaders)
if (${PROFILE} MATCHES "mobile") # mobile profile
set(edcFiles
TabUI_mob.edc
+ PasswordUI.edc
)
else (${PROFILE} MATCHES "mobile") # tv profile
set(edcFiles
--- /dev/null
+#include "BrowserAssert.h"
+#include "PasswordUI.h"
+#include "BrowserLogger.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+const std::string PasswordUI::PASSWORD_FIELD = "secret_password";
+
+PasswordUI::PasswordUI()
+ : m_parent(nullptr)
+ , m_content(nullptr)
+ , m_entry(nullptr)
+ , m_checkbox(nullptr)
+{
+ m_edjFilePath = EDJE_DIR;
+ m_edjFilePath.append("TabUI/PasswordUI.edj");
+}
+
+PasswordUI::~PasswordUI()
+{
+}
+
+void PasswordUI::showUI()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_naviframe->getLayout());
+ m_naviframe->show();
+}
+
+void PasswordUI::hideUI()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_naviframe->getLayout());
+ m_naviframe->hide();
+}
+
+void PasswordUI::init(Evas_Object* parent)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(parent);
+ m_parent = parent;
+}
+
+Evas_Object* PasswordUI::getContent()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_parent);
+ if (!m_naviframe)
+ createLayout();
+ return m_naviframe->getLayout();
+}
+
+void PasswordUI::createLayout()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_parent);
+ elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
+
+ m_naviframe = std::make_unique<NaviframeWrapper>(m_parent);
+
+ m_content = elm_layout_add(m_naviframe->getLayout());
+ evas_object_size_hint_weight_set(m_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(m_content);
+ elm_layout_file_set(m_content, m_edjFilePath.c_str(), "main_layout");
+
+ elm_layout_text_set(m_content, "instruction", "Your password must contain at "
+ "least 6 characters, including at least one letter.");
+
+ m_entry = elm_entry_add(m_content);
+ elm_entry_password_set(m_entry, EINA_TRUE);
+ evas_object_show(m_entry);
+ elm_layout_content_set(m_content, "password_field", m_entry);
+
+ m_checkbox = elm_check_add(m_content);
+ elm_check_state_set(m_checkbox, EINA_FALSE);
+ evas_object_smart_callback_add(m_checkbox, "changed", _show_password_state_changed, this);
+ evas_object_show(m_checkbox);
+ elm_layout_content_set(m_content, "show_password", m_checkbox);
+ elm_layout_text_set(m_content, "chb_label", "Show password");
+
+ m_naviframe->setContent(m_content);
+ m_naviframe->setTitle("Create password");
+ m_naviframe->addPrevButton(_close_clicked, this);
+ m_naviframe->setPrevButtonVisible(true);
+
+
+ m_naviframe->setVisibleBottomBar(true);
+ m_naviframe->addButtonToBottomBar("Cancel", _left_button_clicked, this);
+ m_naviframe->setEnableButtonInBottomBar(0, true);
+ m_naviframe->addButtonToBottomBar("Save", _right_button_clicked, this);
+ m_naviframe->setEnableButtonInBottomBar(1, true);
+
+
+}
+
+void PasswordUI::_close_clicked(void* data, Evas_Object*, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto self = static_cast<PasswordUI*>(data);
+ self->closeUI();
+}
+
+void PasswordUI::_right_button_clicked(void* data, Evas_Object*, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ auto self = static_cast<PasswordUI*>(data);
+ std::string hash = std::to_string(
+ static_cast<int>(
+ std::hash<std::string>()(std::string(elm_object_text_get(self->m_entry)))
+ )
+ );
+ self->setDBStringParamValue(PASSWORD_FIELD, hash);
+
+ // TODO: set PASSWORD_DECISION_MADE flag to true
+}
+
+void PasswordUI::_left_button_clicked(void* data, Evas_Object*, void*)
+{
+ auto self = static_cast<PasswordUI*>(data);
+ elm_entry_entry_set(self->m_entry, "");
+ self->closeUI();
+}
+
+void PasswordUI::_show_password_state_changed(void* data, Evas_Object*, void*)
+{
+ auto self = static_cast<PasswordUI*>(data);
+ elm_entry_password_set(self->m_entry, !elm_check_state_get(self->m_checkbox));
+}
+
+}
+}
\ No newline at end of file
--- /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 PASWORDUI_H
+#define PASWORDUI_H
+
+#include <Evas.h>
+#include <memory>
+#include "AbstractInterfaces/AbstractUIComponent.h"
+#include "NaviframeWrapper.h"
+
+namespace tizen_browser {
+namespace base_ui {
+
+class PasswordUI : public interfaces::AbstractUIComponent
+{
+public:
+ PasswordUI();
+ virtual ~PasswordUI();
+
+ void init(Evas_Object* parent) override;
+ Evas_Object* getContent() override;
+ void showUI() override;
+ void hideUI() override;
+
+ void createLayout();
+ boost::signals2::signal<void (std::string, std::string)> setDBStringParamValue;
+
+ static const std::string PASSWORD_FIELD;
+
+private:
+
+ static void _close_clicked(void *data, Evas_Object *obj, void *event_info);
+ static void _right_button_clicked(void * data, Evas_Object * obj, void * event_info);
+ static void _left_button_clicked(void * data, Evas_Object * obj, void * event_info);
+ static void _show_password_state_changed(void* data, Evas_Object*, void*);
+
+ Evas_Object* m_parent;
+ Evas_Object* m_content;
+ Evas_Object* m_entry;
+ Evas_Object* m_checkbox;
+ std::unique_ptr<NaviframeWrapper> m_naviframe;
+ std::string m_edjFilePath;
+};
+
+}
+}
+
+#endif // PASWORDUI_H
EXPORT_SERVICE(TabUI, "org.tizen.browser.tabui")
+const std::string TabUI::PASSWORD_DECISION_MADE = "password_decision";
+
TabUI::TabUI()
: m_parent(nullptr)
, m_content(nullptr)
, m_itemToShow(nullptr)
, m_last_pressed_gengrid_item(nullptr)
, m_item_class(nullptr)
+ , m_state(State::NORMAL)
{
m_edjFilePath = EDJE_DIR;
m_edjFilePath.append("TabUI/TabUI.edj");
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_naviframe->getLayout());
+ if (m_state == State::PASSWORD_DECISION) {
+ m_state = State::NORMAL;
+ createEmptyLayout();
+ setStateButtons();
+ updateNoTabsText();
+ }
elm_gengrid_clear(m_gengrid);
m_naviframe->hide();
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(parent);
m_parent = parent;
+ auto paramExists = checkIfParamExistsInDB(PASSWORD_DECISION_MADE);
+ if (paramExists) {
+ if (!*paramExists) {
+ setDBBoolParamValue(PASSWORD_DECISION_MADE, false);
+ }
+ } else {
+ BROWSER_LOGE("[%s:%d] unknow checkIfParamExistsInDB value!", __PRETTY_FUNCTION__, __LINE__);
+ }
+
+ m_passwordUI.init(parent);
}
Evas_Object* TabUI::getContent()
m_naviframe->createBottomBar(layout);
m_naviframe->setVisibleBottomBar(true);
//TODO: Missing translation
- m_naviframe->addButtonToBottomBar("Enable Secret", _enable_secret_clicked, this);
+ m_naviframe->addButtonToBottomBar("Enable Secret", _left_button_clicked, this);
m_naviframe->setEnableButtonInBottomBar(0, true);
//TODO: _("IDS_BR_OPT_NEW_TAB") when it works
- m_naviframe->addButtonToBottomBar("New tab", _new_tab_clicked, this);
+ m_naviframe->addButtonToBottomBar("New tab", _right_button_clicked, this);
m_naviframe->setEnableButtonInBottomBar(1, true);
}
evas_object_size_hint_align_set(m_empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
//TODO: Add translations
- elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "No tabs");
+ if (m_state != State::PASSWORD_DECISION)
+ elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "No tabs");
//TODO: _("IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE") when it works
- elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
- "After you view webpages, they will be shown here.");
+ 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",
+ "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");
}
}
-void TabUI::setState(basic_webengine::State state)
-{
- switch(state) {
- case basic_webengine::State::NORMAL:
- m_naviframe->setBottomButtonText(0, "Enable Secret");
- break;
- case basic_webengine::State::SECRET:
- m_naviframe->setBottomButtonText(0, "Disable Secret");
- break;
- default:
- BROWSER_LOGE("[%s:%d] Unknown state!", __PRETTY_FUNCTION__, __LINE__);
- }
-}
-
void TabUI::_cm_sync_clicked(void* data, Evas_Object*, void* )
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
return flag;
}
-void TabUI::_new_tab_clicked(void * data, Evas_Object*, void*)
+void TabUI::_right_button_clicked(void * data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
- TabUI* tabUI = static_cast<TabUI*>(data);
- tabUI->newTabClicked();
+ auto self = static_cast<TabUI*>(data);
+ switch (self->m_state) {
+ case State::NORMAL:
+ self->newTabClicked();
+ break;
+ case State::SECRET:
+ self->newTabClicked();
+ break;
+ case State::PASSWORD_DECISION:
+ self->showPasswordUI();
+ break;
+ default:
+ BROWSER_LOGW("[%s] Unknown state!", __PRETTY_FUNCTION__);
+ }
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
}
-void TabUI::_enable_secret_clicked(void* data, Evas_Object*, void*)
+void TabUI::_left_button_clicked(void* data, Evas_Object*, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
auto self = static_cast<TabUI*>(data);
- self->changeEngineState();
- self->refetchTabUIData();
+
+ switch (self->m_state) {
+ case State::NORMAL: {
+ auto decisionMade = self->getDBBoolParamValue(PASSWORD_DECISION_MADE);
+ if (decisionMade) {
+ if(*decisionMade) {
+ //TODO check password
+ auto password = self->getDBStringParamValue(PasswordUI::PASSWORD_FIELD);
+ if (password) {
+ if (password->empty()) { // password is not used
+ self->m_state = State::SECRET;
+ self->changeEngineState();
+ self->refetchTabUIData();
+ } else { // check password validity
+ //TODO open screen with password confirm
+ }
+ } else {
+ BROWSER_LOGW("[%s] cannot read password from DB", __PRETTY_FUNCTION__);
+ }
+ } else { // decison not taken
+ self->m_state = State::PASSWORD_DECISION;
+ self->updateNoTabsText(true);
+ }
+ } else {
+ BROWSER_LOGW("[%s] cannot read decision flag from DB", __PRETTY_FUNCTION__);
+ }
+ } break;
+ case State::SECRET: // disable secret
+ self->m_state = State::NORMAL;
+ self->changeEngineState();
+ self->refetchTabUIData();
+ break;
+ case State::PASSWORD_DECISION: // do not use password
+ self->m_state = State::SECRET;
+ self->setDBStringParamValue(PasswordUI::PASSWORD_FIELD, "");
+ self->setDBBoolParamValue(PASSWORD_DECISION_MADE, true);
+ self->changeEngineState();
+ self->refetchTabUIData();
+ break;
+ }
+
+ self->setStateButtons();
+ self->createEmptyLayout();
} else {
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
updateNoTabsText();
}
+void TabUI::setStateButtons()
+{
+ switch (m_state) {
+ case State::NORMAL:
+ m_naviframe->setBottomButtonText(0, "Enable Secret");
+ m_naviframe->setBottomButtonText(1, "New tab");
+ break;
+ case State::SECRET:
+ m_naviframe->setBottomButtonText(0, "Disable Secret");
+ m_naviframe->setBottomButtonText(1, "New tab");
+ break;
+ case State::PASSWORD_DECISION:
+ m_naviframe->setBottomButtonText(0, "Do not use password");
+ m_naviframe->setBottomButtonText(1, "Create password");
+ break;
+ }
+}
+
char* TabUI::_gengrid_text_get(void *data, Evas_Object*, const char *part)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
closeTabUIClicked();
}
-void TabUI::updateNoTabsText()
+void TabUI::updateNoTabsText(bool forceShow)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (elm_gengrid_items_count(m_gengrid)) {
- evas_object_hide(m_empty_layout);
- elm_object_signal_emit(m_content, "hide_overlay", "ui");
- } else {
+ if (forceShow || elm_gengrid_items_count(m_gengrid) == 0) {
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");
}
}
#include "TabIdTypedef.h"
#include "AbstractRotatable.h"
#include "NaviframeWrapper.h"
+#include "PasswordUI.h"
namespace tizen_browser{
namespace base_ui{
//AbstractContextMenu interface implementation
virtual void showContextMenu() override;
- void setState(basic_webengine::State state);
+ PasswordUI& getPasswordUI() { return m_passwordUI; };
boost::signals2::signal<void (const tizen_browser::basic_webengine::TabId&)> tabClicked;
boost::signals2::signal<void ()> newTabClicked;
boost::signals2::signal<void ()> closeTabUIClicked;
boost::signals2::signal<void ()> changeEngineState;
boost::signals2::signal<void ()> refetchTabUIData;
+ boost::signals2::signal<bool (std::string)> checkIfParamExistsInDB;
+ boost::signals2::signal<void (std::string, bool)> setDBBoolParamValue;
+ boost::signals2::signal<void (std::string, std::string)> setDBStringParamValue;
+ boost::signals2::signal<bool (std::string)> getDBBoolParamValue;
+ boost::signals2::signal<std::string (std::string)> getDBStringParamValue;
+ boost::signals2::signal<void ()> showPasswordUI;
private:
struct TabData
std::shared_ptr<tizen_browser::base_ui::TabUI> tabUI;
};
+ enum class State {
+ NORMAL,
+ SECRET,
+ PASSWORD_DECISION
+ };
+
static char* _gengrid_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 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 _close_clicked(void *data, Evas_Object *obj, void *event_info);
- void updateNoTabsText();
+ void updateNoTabsText(bool forceShow=false);
static void _openedtabs_clicked(void * data, Evas_Object * obj, void * event_info);
- static void _new_tab_clicked(void * data, Evas_Object * obj, void * event_info);
- static void _newincognitotab_clicked(void * data, Evas_Object * obj, void * event_info);
- static void _enable_secret_clicked(void * data, Evas_Object * obj, void * event_info);
+ static void _right_button_clicked(void * data, Evas_Object * obj, void * event_info);
+ static void _left_button_clicked(void * data, Evas_Object * obj, void * event_info);
static void _close_all_clicked(void * data, Evas_Object * obj, void * event_info);
static void _close_tab_clicked(void *data, Evas_Object*, void*);
static void _cm_sync_clicked(void*, Evas_Object*, void*);
void createTabItemClass();
void closeAllTabs();
void addTabItem(basic_webengine::TabContentPtr);
+ void setStateButtons();
Evas_Object *m_parent;
Evas_Object *m_content;
Elm_Gengrid_Item_Class * m_item_class;
std::string m_edjFilePath;
+ State m_state;
+ PasswordUI m_passwordUI;
+
const unsigned int GENGRID_ITEM_WIDTH = 700;
const unsigned int GENGRID_ITEM_HEIGHT = 312;
const unsigned int GENGRID_ITEM_WIDTH_LANDSCAPE = 636;
const unsigned int GENGRID_ITEM_HEIGHT_LANDSCAPE = 274;
const unsigned int GESTURE_MOMENTUM_MIN = 2000;
+ static const std::string PASSWORD_DECISION_MADE;
};
}
}
--- /dev/null
+
+collections { base_scale: 2.6;
+ group {
+ name: "main_layout";
+
+ styles {
+ style { name: "instruction_style";
+ base: "font=Tizen:style=Regular font_size=40 align=left color=#FFFFFF wrap=mixed ellipsis=1.0";
+ }
+ }
+
+ parts {
+ rect {
+ name: "bg";
+ scale: 1;
+ description {
+ align: 0 0;
+ color: 255 255 255 255;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+
+ textblock {
+ name: "instruction";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ color: 0 0 0 255;
+ min: 0 200;
+ max: -1 200;
+ rel1 { relative: 0.05 0.0; to: "bg"; }
+ rel2 { relative: 0.95 1.0; to: "bg"; }
+
+ text {
+ style: "instruction_style";
+ align: 0.0 0.5;
+ }
+ }
+ }
+
+ swallow {
+ name: "password_field";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ rel1 { relative: 0.0 1.0; to: "instruction"; }
+ rel2 { relative: 0.95 1.0; to: "bg"; }
+ }
+ }
+
+ rect {
+ name: "line";
+ scale : 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ max: -1 1;
+ visible: 1;
+ align: 0 0;
+ color: 0 0 0 255;
+ rel1 { relative: 0.0 1.0; to: "password_field"; }
+ rel2 { relative: 0.95 1.0; to: "bg";}
+ }
+ }
+
+ swallow {
+ name: "show_password";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ min: 100 100;
+ max: 100 100;
+ rel1 { relative: 0.0 1.0; to: "line"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+
+ textblock {
+ name: "chb_label";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ color: 0 0 0 255;
+ min: 100 100;
+ max: -1 100;
+ rel1 { relative: 1.0 0.0; to: "show_password"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+
+ text {
+ style: "instruction_style";
+ align: 0.0 0.5;
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
it.second->clearPrivateData();
}
}
+
void WebEngineService::clearPasswordData()
{
for(const auto& it: m_stateStruct->tabs) {