2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 * Created on: Mar 18, 2014
29 #include "AbstractMainWindow.h"
30 #include "AbstractService.h"
31 #include "AbstractFavoriteService.h"
32 #include "ServiceFactory.h"
33 #include "service_macros.h"
36 #include "AbstractWebEngine.h"
37 #include "MoreMenuUI.h"
38 #include "HistoryUI.h"
39 #include "SettingsUI.h"
42 #include "ButtonBar.h"
43 #include "HistoryService.h"
44 #include "BookmarkManagerUI.h"
45 #include "SimpleURI.h"
46 #include "SimpleScroller.h"
47 #include "WebTitleBar.h"
48 #include "PlatformInputManager.h"
49 #include "SessionStorage.h"
50 #include "SqlStorage.h"
54 #include "SimplePopup.h"
55 #include "WebConfirmation.h"
58 #include "BookmarksManager.h"
60 #include "HistoryList.h"
61 #include "NetworkErrorHandler.h"
62 #include "CustomPopup.h"
65 namespace tizen_browser{
69 void AbstractMainWindow<Evas_Object>::setMainWindow(Evas_Object * rawPtr)
71 m_window = std::shared_ptr<Evas_Object>(rawPtr, evas_object_del);
74 class BROWSER_EXPORT SimpleUI : public AbstractMainWindow<Evas_Object>
77 SimpleUI(/*Evas_Object *window*/);
79 virtual int exec(const std::string& url);
80 virtual std::string getName();
87 void connectActions();
88 void loadUIServices();
89 void connectUISignals();
90 void loadModelServices();
91 void initModelServices();
92 void connectModelSignals();
93 void restoreLastSession();
94 Evas_Object* createWebLayout(Evas_Object* parent);
95 Evas_Object* createErrorLayout(Evas_Object* parent);
98 void backEnable(bool enable);
99 void forwardEnable(bool enable);
100 void stopEnable(bool enable);
101 void reloadEnable(bool enable);
102 void addBookmarkEnable(bool enable);
103 void removeBookmarkEnable(bool enable);
104 void zoomEnable(bool enable);
106 void settingsButtonEnable(bool enable);
109 void progressChanged(double progress);
113 void setErrorButtons();
114 bool isErrorPageActive();
116 void bookmarkAdded();
117 void bookmarkDeleted();
119 bool isHomePageActive();
120 void switchViewToHomePage();
121 void updateBrowserView();
122 void updateWebView();
123 void updateURIBarView();
126 void openNewTab(const std::string &uri, bool desktopMode = true);
127 void switchToTab(const tizen_browser::basic_webengine::TabId& tabId);
128 void newTabClicked(const std::string &);
129 void tabClicked(const tizen_browser::basic_webengine::TabId& tabId);
130 void closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId);
132 void tabClosed(const tizen_browser::basic_webengine::TabId& id);
134 void bookmarkCheck();
135 std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks(int folder_id = -1);
136 std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarkFolders(int folder_id);
137 std::shared_ptr<services::HistoryItemVector> getHistory();
138 std::shared_ptr<services::HistoryItemVector> getMostVisitedItems();
140 //UI signal handling functions
141 void onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
143 void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
144 void onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
145 void onBookmarkRemoved(const std::string& uri);
147 void onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem);
148 void onHistoryRemoved(const std::string& uri);
149 void onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
150 void onMostVisitedTileClicked(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, int itemsNumber);
151 void onClearHistoryClicked(const std::string&);
153 void onMostVisitedClicked(const std::string&);
154 void onBookmarkButtonClicked(const std::string&);
155 void onBookmarkManagerButtonClicked(const std::string&);
157 void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation);
158 void authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
160 void onActionTriggered(const Action& action);
163 void setwvIMEStatus(bool status);
166 sharedAction m_forward;
167 sharedAction m_stopLoading;
168 sharedAction m_reload;
169 sharedAction m_bookmark;
170 sharedAction m_unbookmark;
172 sharedAction m_share;
173 sharedAction m_zoom_in;
174 sharedAction m_showMoreMenu;
175 sharedAction m_showBookmarkManagerUI;
176 sharedAction m_settingPointerMode;
177 sharedAction m_settingPrivateBrowsing;
178 sharedAction m_settingDeleteHistory;
179 sharedAction m_settingDeleteData;
180 sharedAction m_settingDeleteFavorite;
181 sharedAction m_mostvisited;
182 sharedAction m_bookmarksvisited;
183 sharedAction m_bookmarks_manager_Add_NewFolder;
184 sharedAction m_bookmarks_manager_BookmarkBar;
185 sharedAction m_bookmarks_manager_Folder1;
186 sharedAction m_bookmarks_manager_Folder2;
187 sharedAction m_bookmarks_manager_Folder3;
190 * \brief filters URL before it is passed to WebEngine.
192 * This function should be connected with m_simpleURI->uriChanged.
193 * it is a good place to check for special urls (like "about:home"),
194 * filter forbidden addresses and to check set favorite icon.
196 void filterURL(const std::string& url);
199 * Checks if correct tab is visible to user, and if not, it update browser view
200 * @param id of tab that should be visible to user
202 void checkTabId(const tizen_browser::basic_webengine::TabId& id);
205 * \brief check if url comming back from WebEngine should be passed to URI.
207 * For filtered addresses we need to hide real URI so the user would be confused.
208 * and this is a back function that checks if address emited from browser should be changed.
210 void webEngineURLChanged(const std::string url);
211 void onmostHistoryvisitedClicked();
212 void onBookmarkvisitedClicked();
214 * @brief Adds current page to bookmarks.
217 void addToBookmarks(int);
219 * @brief Remove current page from bookmarks
224 void deleteBookmark(void);
227 * \brief shows Zoom showZoomMenu
231 void zoomLevelChanged(int zoom_level);
235 void AddBookmarkPopup(std::string& str);
236 void AddNewFolderPopup(std::string& str);
237 void addBookmarkFolders();
239 void newFolderBookmarkManager(const char* title, int by_user);
240 void newFolderMoreMenu(const char* title, int by_user);
242 void closeTabUI(const std::string& str);
244 void closeMoreMenu(const std::string& str);
245 void switchToMobileMode();
246 void switchToDesktopMode();
247 void showHistoryUI(const std::string& str);
248 void closeHistoryUI(const std::string&);
254 void hideSettingsMenu();
255 void showSettingsUI(const std::string&);
256 void closeSettingsUI(const std::string&);
258 void showProgressBar();
259 void hideProgressBar();
261 void closeBookmarkManagerMenu(const std::string& str);
262 void updateBookmarkManagerGenGrid(int folder_id);
263 void showBookmarkManagerMenu();
265 void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text);
268 void closeTab(const tizen_browser::basic_webengine::TabId& id);
270 void settingsPointerModeSwitch(bool newState);
271 void settingsPrivateModeSwitch(bool newState);
272 void settingsDeleteData();
273 void settingsDeleteFavorite();
274 void settingsDeleteSelectedData(const std::string& str);
275 void settingsResetMostVisited(const std::string& str);
276 void settingsResetBrowser(const std::string& str);
277 void onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
278 void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
279 void onResetBrowserButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
280 void onDeleteDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
281 void onDeleteFavoriteButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
282 void tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/);
283 void openLinkFromPopup(const std::string &);
284 void disableHistoryButton(bool flag);
287 void onNetworkError();
288 void onNetworkConnected();
289 void onNetErrorButtonPressed(PopupButtons, std::shared_ptr<PopupData>);
291 void onReturnPressed(MenuButton *m);
292 void onBackPressed();
294 boost::signals2::signal<void ()> hidePopup;
296 std::string edjePath(const std::string &);
298 Evas_Object *m_mainLayout;
299 Evas_Object *m_progressBar;
300 Evas_Object *m_popup;
301 Evas_Object *m_entry;
302 Evas_Object *m_errorLayout;
303 CustomPopup *m_ownPopup;
304 SimpleScroller *m_scroller;
306 std::shared_ptr<basic_webengine::AbstractWebEngine<Evas_Object>> m_webEngine;
307 std::shared_ptr<tizen_browser::base_ui::SimpleURI> m_simpleURI;
308 std::shared_ptr<ButtonBar> leftButtonBar;
309 std::shared_ptr<ButtonBar> webviewbar;
311 std::shared_ptr<ButtonBar> rightButtonBar;
312 std::shared_ptr<tizen_browser::interfaces::AbstractFavoriteService> m_favoriteService;
313 std::shared_ptr<tizen_browser::services::HistoryService> m_historyService;
314 std::shared_ptr<tizen_browser::base_ui::MoreMenuUI> m_moreMenuUI;
315 std::shared_ptr<tizen_browser::base_ui::BookmarkManagerUI> m_bookmarkManagerUI;
316 std::shared_ptr<tizen_browser::base_ui::MainUI> m_mainUI;
317 std::shared_ptr<tizen_browser::base_ui::HistoryUI> m_historyUI;
318 std::shared_ptr<tizen_browser::base_ui::SettingsUI> m_settingsUI;
319 std::shared_ptr<tizen_browser::base_ui::TabUI> m_tabUI;
320 std::shared_ptr<tizen_browser::base_ui::ZoomList> m_zoomList;
321 std::shared_ptr<tizen_browser::base_ui::TabList> m_tabList;
322 std::shared_ptr<tizen_browser::services::PlatformInputManager> m_platformInputManager;
323 std::shared_ptr<tizen_browser::services::SessionStorage> m_sessionService;
324 tizen_browser::Session::Session m_currentSession;
325 std::shared_ptr<BookmarksManager> m_bookmarks_manager;
326 std::shared_ptr<Settings> m_settings;
327 std::shared_ptr<HistoryList> m_historyList;
328 std::shared_ptr<WebTitleBar> webTitleBar;
330 bool m_isHomePageActive;
331 zoom_type m_currentZoom;
333 int m_favoritesLimit;
335 int m_curr_folder_id;
336 // This context object is used to implicitly init internal ewk data used by opengl to create the first and
337 // consecutive webviews in the application, otherwise we would encounter a crash after creating
338 // the first web view
339 Ewk_Context *m_ewkContext;
341 std::vector<std::shared_ptr<tizen_browser::services::HistoryItem>> items_vector;
342 std::unique_ptr<tizen_browser::basic_ui::NetworkErrorHandler> m_netErrorHandler;
343 SimplePopup* m_networkErrorPopup;
345 void searchWebPage(std::string &text, int flags);
346 static void favicon_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
353 #endif /* SIMPLEUI_H_ */