Moved code responsible for web page ui to separate service.
[profile/tv/apps/web/browser.git] / services / SimpleUI / SimpleUI.h
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*
18  * SimpleUI.h
19  *
20  *  Created on: Mar 18, 2014
21  *      Author: k.szalilow
22  */
23
24 #ifndef SIMPLEUI_H_
25 #define SIMPLEUI_H_
26
27 #include <Evas.h>
28
29 #include "AbstractMainWindow.h"
30 #include "AbstractService.h"
31 #include "AbstractFavoriteService.h"
32 #include "ServiceFactory.h"
33 #include "service_macros.h"
34
35 // components
36 #include "WebPageUI.h"
37 #include "AbstractWebEngine.h"
38 #include "MoreMenuUI.h"
39 #include "HistoryUI.h"
40 #include "SettingsUI.h"
41 #include "MainUI.h"
42 #include "TabUI.h"
43 #include "HistoryService.h"
44 #include "BookmarkManagerUI.h"
45 #include "PlatformInputManager.h"
46 #include "SessionStorage.h"
47 #include "SqlStorage.h"
48
49 // other
50 #include "Action.h"
51 #include "SimplePopup.h"
52 #include "WebConfirmation.h"
53 #include "BookmarksManager.h"
54 #include "Config.h"
55
56 namespace tizen_browser{
57 namespace base_ui{
58
59 template <>
60 void AbstractMainWindow<Evas_Object>::setMainWindow(Evas_Object * rawPtr)
61 {
62     m_window = std::shared_ptr<Evas_Object>(rawPtr, evas_object_del);
63 }
64
65 class BROWSER_EXPORT SimpleUI : public AbstractMainWindow<Evas_Object>
66 {
67 public:
68     SimpleUI(/*Evas_Object *window*/);
69     virtual ~SimpleUI();
70     virtual int exec(const std::string& url);
71     virtual std::string getName();
72
73     void destroyUI();
74 private:
75     // setup functions
76     void createActions();
77     void connectActions();
78     void loadUIServices();
79     void connectUISignals();
80     void loadModelServices();
81     void initModelServices();
82     void initUIServices();
83     void connectModelSignals();
84     void restoreLastSession();
85     Evas_Object* createWebLayout(Evas_Object* parent);
86     Evas_Object* createErrorLayout(Evas_Object* parent);
87
88
89     void backEnable(bool enable);
90     void forwardEnable(bool enable);
91     void stopEnable(bool enable);
92     void reloadEnable(bool enable);
93     void addBookmarkEnable(bool enable);
94     void removeBookmarkEnable(bool enable);
95     void zoomEnable(bool enable);
96
97     void settingsButtonEnable(bool enable);
98
99     void loadFinished();
100     void progressChanged(double progress);
101     void loadStarted();
102
103     void loadError();
104     void setErrorButtons();
105     bool isErrorPageActive();
106
107     void bookmarkAdded();
108     void bookmarkDeleted();
109
110     void switchViewToQuickAccess();
111     void switchViewToWebPage();
112     void updateView();
113
114     void openNewTab(const std::string &uri, bool desktopMode = true);
115     void switchToTab(const tizen_browser::basic_webengine::TabId& tabId);
116     void newTabClicked(const std::string &);
117     void tabClicked(const tizen_browser::basic_webengine::TabId& tabId);
118     void closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId);
119     void tabCreated();
120     void tabClosed(const tizen_browser::basic_webengine::TabId& id);
121
122     void bookmarkCheck();
123     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks(int folder_id = -1);
124     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarkFolders(int folder_id);
125     std::shared_ptr<services::HistoryItemVector> getHistory();
126     std::shared_ptr<services::HistoryItemVector> getMostVisitedItems();
127
128     //UI signal handling functions
129     void onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
130
131     void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
132     void onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
133     void onBookmarkRemoved(const std::string& uri);
134
135     void onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem);
136     void onHistoryRemoved(const std::string& uri);
137     void onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
138     void onMostVisitedTileClicked(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, int itemsNumber);
139     void onClearHistoryClicked(const std::string&);
140
141     void onMostVisitedClicked(const std::string&);
142     void onBookmarkButtonClicked(const std::string&);
143     void onBookmarkManagerButtonClicked(const std::string&);
144
145     void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation);
146     void authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
147
148     void onActionTriggered(const Action& action);
149     void setwvIMEStatus(bool status);
150
151     sharedAction m_share;
152     sharedAction m_zoom_in;
153     sharedAction m_showBookmarkManagerUI;
154     sharedAction m_settingPointerMode;
155     sharedAction m_settingPrivateBrowsing;
156     sharedAction m_settingDeleteHistory;
157     sharedAction m_settingDeleteData;
158     sharedAction m_settingDeleteFavorite;
159     sharedAction m_mostvisited;
160     sharedAction m_bookmarksvisited;
161     sharedAction m_bookmarks_manager_Add_NewFolder;
162     sharedAction m_bookmarks_manager_BookmarkBar;
163     sharedAction m_bookmarks_manager_Folder1;
164     sharedAction m_bookmarks_manager_Folder2;
165     sharedAction m_bookmarks_manager_Folder3;
166
167     /**
168      * \brief filters URL before it is passed to WebEngine.
169      *
170      * This function should be connected with m_simpleURI->uriChanged.
171      * it is a good place to check for special urls (like "about:home"),
172      * filter forbidden addresses and to check set favorite icon.
173      */
174     void filterURL(const std::string& url);
175
176     /**
177      * Checks if correct tab is visible to user, and if not, it update browser view
178      * @param id of tab that should be visible to user
179      */
180     void checkTabId(const tizen_browser::basic_webengine::TabId& id);
181
182     /**
183      * \brief check if url comming back from WebEngine should be passed to URI.
184      *
185      * For filtered addresses we need to hide real URI so the user would be confused.
186      * and this is a back function that checks if address emited from browser should be changed.
187      */
188     void webEngineURLChanged(const std::string url);
189     void onmostHistoryvisitedClicked();
190     void onBookmarkvisitedClicked();
191      /**
192      * @brief Adds current page to bookmarks.
193      *
194      */
195     void addToBookmarks(int);
196     /**
197      * @brief Remove current page from bookmarks
198      *
199      * @param  ...
200      * @return void
201      */
202     void deleteBookmark(void);
203
204     void showHistory();
205     void hideHistory();
206     void addBookmarkFolders();
207
208     void newFolderBookmarkManager(const char* title, int by_user);
209     void newFolderMoreMenu(const char* title, int by_user);
210     void showTabUI();
211     void closeTabUI(const std::string& str);
212     void showMoreMenu();
213     void closeMoreMenu(const std::string& str);
214     void switchToMobileMode();
215     void switchToDesktopMode();
216     void showHistoryUI(const std::string& str);
217     void closeHistoryUI(const std::string&);
218     void showURIBar();
219     void hideURIBar();
220     void hideSettingsMenu();
221     void showSettingsUI(const std::string&);
222     void closeSettingsUI(const std::string&);
223
224     void closeBookmarkManagerMenu(const std::string& str);
225     void updateBookmarkManagerGenGrid(int folder_id);
226     void showBookmarkManagerMenu();
227
228     void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text);
229
230     void closeTab();
231     void closeTab(const tizen_browser::basic_webengine::TabId& id);
232
233     void settingsPointerModeSwitch(bool newState);
234     void settingsPrivateModeSwitch(bool newState);
235     void settingsDeleteData();
236     void settingsDeleteFavorite();
237     void settingsDeleteSelectedData(const std::string& str);
238     void settingsResetMostVisited(const std::string& str);
239     void settingsResetBrowser(const std::string& str);
240     void onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
241     void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
242     void onResetBrowserButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
243     void onDeleteDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
244     void onDeleteFavoriteButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
245     void tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/);
246     void disableHistoryButton(bool flag);
247     int tabsCount();
248
249     void onNetworkError();
250     void onNetworkConnected();
251     void onNetErrorButtonPressed(PopupButtons, std::shared_ptr<PopupData>);
252
253     void onReturnPressed(MenuButton *m);
254     void onBackPressed();
255
256     boost::signals2::signal<void ()> hidePopup;
257
258     std::string edjePath(const std::string &);
259
260     Evas_Object *m_popup;
261     Evas_Object *m_entry;
262     Evas_Object *m_errorLayout;
263
264     std::shared_ptr<WebPageUI> m_webPageUI;
265     std::shared_ptr<basic_webengine::AbstractWebEngine<Evas_Object>>  m_webEngine;
266 //     std::shared_ptr<tizen_browser::base_ui::URIEntry> m_simpleURI;
267     std::shared_ptr<tizen_browser::interfaces::AbstractFavoriteService> m_favoriteService;
268     std::shared_ptr<tizen_browser::services::HistoryService> m_historyService;
269     std::shared_ptr<tizen_browser::base_ui::MoreMenuUI> m_moreMenuUI;
270     std::shared_ptr<tizen_browser::base_ui::BookmarkManagerUI> m_bookmarkManagerUI;
271     std::shared_ptr<tizen_browser::base_ui::MainUI> m_mainUI;
272     std::shared_ptr<tizen_browser::base_ui::HistoryUI> m_historyUI;
273     std::shared_ptr<tizen_browser::base_ui::SettingsUI> m_settingsUI;
274     std::shared_ptr<tizen_browser::base_ui::TabUI> m_tabUI;
275     std::shared_ptr<tizen_browser::services::PlatformInputManager> m_platformInputManager;
276     std::shared_ptr<tizen_browser::services::SessionStorage> m_sessionService;
277     tizen_browser::Session::Session m_currentSession;
278     std::shared_ptr<BookmarksManager> m_bookmarks_manager;
279     bool m_initialised;
280     int m_tabLimit;
281     int m_favoritesLimit;
282     bool m_wvIMEStatus;
283     int m_curr_folder_id;
284     // This context object is used to implicitly init internal ewk data used by opengl to create the first and
285     // consecutive webviews in the application, otherwise we would encounter a crash after creating
286     // the first web view
287     Ewk_Context *m_ewkContext;
288
289     std::vector<std::shared_ptr<tizen_browser::services::HistoryItem>> items_vector;
290     SimplePopup* m_networkErrorPopup;
291
292     void searchWebPage(std::string &text, int flags);
293 };
294
295 }
296 }
297
298 #endif /* SIMPLEUI_H_ */