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, Framework::TaskObserver& taskObserver, int* argc, char*** argv, Type type, bool useUiThread)
88 : mObserver(observer),
89 mTaskObserver(taskObserver),
97 mAbortHandler(MakeCallback(this, &Framework::AbortCallback)),
100 mImpl = new Impl(this);
103 Framework::~Framework()
114 void Framework::Run()
116 AndroidFramework::GetImplementation(AndroidFramework::Get()).SetFramework(this);
120 unsigned int Framework::AddIdle(int timeout, void* data, bool (*callback)(void* data))
122 JNIEnv* env = nullptr;
123 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
124 if(javaVM == nullptr || javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK)
126 DALI_LOG_ERROR("Couldn't get JNI env.");
130 jclass clazz = env->FindClass("com/sec/daliview/DaliView");
133 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
137 jmethodID addIdle = env->GetStaticMethodID(clazz, "addIdle", "(JJJ)I");
140 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.addIdle.");
144 jint id = env->CallStaticIntMethod(clazz, addIdle, reinterpret_cast<jlong>(callback), reinterpret_cast<jlong>(data), static_cast<jlong>(timeout));
145 return static_cast<unsigned int>(id);
148 void Framework::RemoveIdle(unsigned int id)
150 JNIEnv* env = nullptr;
151 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
152 if(javaVM == nullptr || javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK)
154 DALI_LOG_ERROR("Couldn't get JNI env.");
158 jclass clazz = env->FindClass("com/sec/daliview/DaliView");
161 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
165 jmethodID removeIdle = env->GetStaticMethodID(clazz, "removeIdle", "(I)V");
168 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.removeIdle.");
172 env->CallStaticVoidMethod(clazz, removeIdle, static_cast<jint>(id));
175 void Framework::Quit()
177 DALI_LOG_ERROR("Quit does nothing for DaliView!");
180 bool Framework::IsMainLoopRunning()
185 void Framework::AddAbortCallback(CallbackBase* callback)
187 mImpl->mAbortCallBack = callback;
190 std::string Framework::GetBundleName() const
195 void Framework::SetBundleName(const std::string& name)
200 std::string Framework::GetBundleId() const
205 std::string Framework::GetResourcePath()
207 return DALI_DATA_RO_DIR;
210 std::string Framework::GetDataPath()
215 void Framework::SetBundleId(const std::string& id)
220 void Framework::AbortCallback()
222 // if an abort call back has been installed run it.
223 if(mImpl->mAbortCallBack)
225 CallbackBase::Execute(*mImpl->mAbortCallBack);
233 bool Framework::AppStatusHandler(int type, void* data)
235 Dali::Adaptor* adaptor = nullptr;
238 case APP_WINDOW_CREATED:
245 mObserver.OnSurfaceCreated(data);
248 case APP_WINDOW_DESTROYED:
249 mObserver.OnSurfaceDestroyed(data);
257 mObserver.OnResume();
258 adaptor = &Dali::Adaptor::Get();
263 adaptor = &Dali::Adaptor::Get();
268 case APP_LANGUAGE_CHANGE:
269 mObserver.OnLanguageChanged();
273 mObserver.OnTerminate();
276 mInitialised = false;
286 void Framework::InitThreads()
290 std::string Framework::GetLanguage() const
292 return mImpl->GetLanguage();
295 std::string Framework::GetRegion() const
297 return mImpl->GetRegion();
300 } // namespace Adaptor
302 } // namespace Internal