2 * Copyright (c) 2021 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.
19 #include <dali/internal/adaptor/common/framework.h>
22 #include <dali/devel-api/adaptor-framework/application-devel.h>
23 #include <dali/integration-api/adaptor-framework/adaptor.h>
24 #include <dali/integration-api/adaptor-framework/android/android-framework.h>
25 #include <dali/integration-api/debug.h>
26 #include <dali/public-api/adaptor-framework/application.h>
29 #include <dali/internal/adaptor/android/android-framework-impl.h>
30 #include <dali/internal/adaptor/common/application-impl.h>
31 #include <dali/internal/system/common/callback-manager.h>
42 * Impl to hide android data members
44 struct Framework::Impl
48 Impl(Framework* framework)
49 : mAbortCallBack(nullptr),
50 mCallbackManager(CallbackManager::New()),
51 mLanguage("NOT_SUPPORTED"),
52 mRegion("NOT_SUPPORTED")
54 AndroidFramework::GetImplementation(AndroidFramework::Get()).SetFramework(framework);
59 AndroidFramework::GetImplementation(AndroidFramework::Get()).SetFramework(nullptr);
61 delete mAbortCallBack;
62 mAbortCallBack = nullptr;
64 // we're quiting the main loop so
65 // mCallbackManager->RemoveAllCallBacks() does not need to be called
66 // to delete our abort handler
67 delete mCallbackManager;
68 mCallbackManager = nullptr;
71 std::string GetLanguage() const
76 std::string GetRegion() const
81 CallbackBase* mAbortCallBack;
82 CallbackManager* mCallbackManager;
83 std::string mLanguage;
87 Framework::Framework(Framework::Observer& observer, int* argc, char*** argv, Type type)
88 : mObserver(observer),
96 mAbortHandler(MakeCallback(this, &Framework::AbortCallback)),
99 mImpl = new Impl(this);
102 Framework::~Framework()
113 void Framework::Run()
115 AndroidFramework::GetImplementation(AndroidFramework::Get()).SetFramework(this);
119 unsigned int Framework::AddIdle(int timeout, void* data, bool (*callback)(void* data))
121 JNIEnv* env = nullptr;
122 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
123 if(javaVM == nullptr || javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK)
125 DALI_LOG_ERROR("Couldn't get JNI env.");
129 jclass clazz = env->FindClass("com/sec/daliview/DaliView");
132 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
136 jmethodID addIdle = env->GetStaticMethodID(clazz, "addIdle", "(JJJ)I");
139 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.addIdle.");
143 jint id = env->CallStaticIntMethod(clazz, addIdle, reinterpret_cast<jlong>(callback), reinterpret_cast<jlong>(data), static_cast<jlong>(timeout));
144 return static_cast<unsigned int>(id);
147 void Framework::RemoveIdle(unsigned int id)
149 JNIEnv* env = nullptr;
150 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
151 if(javaVM == nullptr || javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK)
153 DALI_LOG_ERROR("Couldn't get JNI env.");
157 jclass clazz = env->FindClass("com/sec/daliview/DaliView");
160 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
164 jmethodID removeIdle = env->GetStaticMethodID(clazz, "removeIdle", "(I)V");
167 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.removeIdle.");
171 env->CallStaticVoidMethod(clazz, removeIdle, static_cast<jint>(id));
174 void Framework::Quit()
176 DALI_LOG_ERROR("Quit does nothing for DaliView!");
179 bool Framework::IsMainLoopRunning()
184 void Framework::AddAbortCallback(CallbackBase* callback)
186 mImpl->mAbortCallBack = callback;
189 std::string Framework::GetBundleName() const
194 void Framework::SetBundleName(const std::string& name)
199 std::string Framework::GetBundleId() const
204 std::string Framework::GetResourcePath()
206 return DALI_DATA_RO_DIR;
209 std::string Framework::GetDataPath()
214 void Framework::SetBundleId(const std::string& id)
219 void Framework::AbortCallback()
221 // if an abort call back has been installed run it.
222 if(mImpl->mAbortCallBack)
224 CallbackBase::Execute(*mImpl->mAbortCallBack);
232 bool Framework::AppStatusHandler(int type, void* data)
234 Dali::Adaptor* adaptor = nullptr;
237 case APP_WINDOW_CREATED:
244 mObserver.OnSurfaceCreated(data);
247 case APP_WINDOW_DESTROYED:
248 mObserver.OnSurfaceDestroyed(data);
256 mObserver.OnResume();
257 adaptor = &Dali::Adaptor::Get();
262 adaptor = &Dali::Adaptor::Get();
267 case APP_LANGUAGE_CHANGE:
268 mObserver.OnLanguageChanged();
272 mObserver.OnTerminate();
275 mInitialised = false;
285 void Framework::InitThreads()
289 std::string Framework::GetLanguage() const
291 return mImpl->GetLanguage();
294 std::string Framework::GetRegion() const
296 return mImpl->GetRegion();
299 } // namespace Adaptor
301 } // namespace Internal