[WRTjs] Refactor popup
[platform/framework/web/chromium-efl.git] / wrt / src / browser / splash_screen.cc
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
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 #include "wrt/src/browser/splash_screen.h"
18
19 #include "base/logging.h"
20 #include "base/task/single_thread_task_runner.h"
21 #include "wrt/src/browser/basic_splash_screen.h"
22 #include "wrt/src/browser/wrt_native_window.h"
23
24 #if BUILDFLAG(IS_TIZEN_TV)
25 #include "wrt/src/browser/tv/splash_screen_delegate_tv.h"
26 #elif BUILDFLAG(IS_TIZEN_DA)
27 #include "wrt/src/browser/da/splash_screen_delegate_da.h"
28 #endif
29
30 namespace wrt {
31
32 namespace {
33
34 std::unique_ptr<SplashScreen> splash_screen;
35 HideReason hidden_reason = HideReason::UNDECIDED;
36
37 }  // namespace
38
39 // static
40 bool SplashScreen::ShowSplashScreen() {
41   if (splash_screen)
42     return true;
43
44   std::unique_ptr<SplashScreenDelegate> delegate;
45 #if BUILDFLAG(IS_TIZEN_TV)
46   delegate = std::make_unique<SplashScreenDelegateTV>();
47 #elif BUILDFLAG(IS_TIZEN_DA)
48   delegate = std::make_unique<SplashScreenDelegateDA>();
49 #endif
50
51   auto& app_data = ApplicationData::GetInstance();
52   if (delegate && delegate->IsVideoPlaying())
53     splash_screen.reset(delegate->CreateVideoSplashScreen());
54   else if (app_data.launch_screen_info().HasLaunchScreenData())
55     splash_screen.reset(BasicSplashScreen::Create(std::move(delegate)));
56
57   if (!splash_screen)
58     return false;
59
60   splash_screen->Init();
61   return true;
62 }
63
64 // static
65 bool SplashScreen::HideSplashScreen(HideReason reason) {
66   if (!splash_screen)
67     return true;
68
69   auto ready_when = splash_screen->GetReadyWhen();
70   if (reason == HideReason::RENDERED &&
71       ready_when != wgt::parse::ReadyWhen::FIRSTPAINT) {
72     return false;
73   }
74   if (reason == HideReason::LOADFINISHED &&
75       ready_when != wgt::parse::ReadyWhen::COMPLETE) {
76     return false;
77   }
78   if (reason == HideReason::CUSTOM &&
79       ready_when != wgt::parse::ReadyWhen::CUSTOM) {
80     return false;
81   }
82   if (reason == HideReason::VIDEOFINISHED) {
83     LOG(INFO) << "video has finished, then will be reset anyway";
84   }
85   hidden_reason = reason;
86
87   splash_screen->BeforeHide();
88   LOG(INFO) << "Will HideSplashScreen reason by " << reason;
89   return true;
90 }
91
92 // static
93 HideReason SplashScreen::GetHiddenReason() {
94   return hidden_reason;
95 }
96
97 // static
98 bool SplashScreen::IsShowing() {
99   return !!splash_screen && hidden_reason == HideReason::UNDECIDED;
100 }
101
102 SplashScreen::SplashScreen() {
103   auto main_native_window = WRTNativeWindow::GetMainNativeWindow();
104   if (main_native_window)
105     main_native_window->AddObserver(this);
106 }
107
108 SplashScreen::~SplashScreen() {
109   LOG(INFO) << "SplashScreen is deleted";
110   auto main_native_window = WRTNativeWindow::GetMainNativeWindow();
111   if (main_native_window)
112     main_native_window->RemoveObserver(this);
113 }
114
115 void SplashScreen::OnWindowShow() {
116   // when main window is raised, will hide splash window
117   LOG(INFO) << "SplashScreen will hide now";
118   Hide();
119   base::SingleThreadTaskRunner::GetCurrentDefault()->DeleteSoon(
120       FROM_HERE, std::move(splash_screen));
121 }
122
123 }  // namespace wrt