2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
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.
17 #include "wrt/src/browser/splash_screen.h"
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"
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"
34 std::unique_ptr<SplashScreen> splash_screen;
35 HideReason hidden_reason = HideReason::UNDECIDED;
40 bool SplashScreen::ShowSplashScreen() {
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>();
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)));
60 splash_screen->Init();
65 bool SplashScreen::HideSplashScreen(HideReason reason) {
69 auto ready_when = splash_screen->GetReadyWhen();
70 if (reason == HideReason::RENDERED &&
71 ready_when != wgt::parse::ReadyWhen::FIRSTPAINT) {
74 if (reason == HideReason::LOADFINISHED &&
75 ready_when != wgt::parse::ReadyWhen::COMPLETE) {
78 if (reason == HideReason::CUSTOM &&
79 ready_when != wgt::parse::ReadyWhen::CUSTOM) {
82 if (reason == HideReason::VIDEOFINISHED) {
83 LOG(INFO) << "video has finished, then will be reset anyway";
85 hidden_reason = reason;
87 splash_screen->BeforeHide();
88 LOG(INFO) << "Will HideSplashScreen reason by " << reason;
93 HideReason SplashScreen::GetHiddenReason() {
98 bool SplashScreen::IsShowing() {
99 return !!splash_screen && hidden_reason == HideReason::UNDECIDED;
102 SplashScreen::SplashScreen() {
103 auto main_native_window = WRTNativeWindow::GetMainNativeWindow();
104 if (main_native_window)
105 main_native_window->AddObserver(this);
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);
115 void SplashScreen::OnWindowShow() {
116 // when main window is raised, will hide splash window
117 LOG(INFO) << "SplashScreen will hide now";
119 base::SingleThreadTaskRunner::GetCurrentDefault()->DeleteSoon(
120 FROM_HERE, std::move(splash_screen));