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>
23 #include <dali/internal/system/linux/dali-ecore.h>
24 #include <dali/internal/system/linux/dali-efreet.h>
25 #include <dali/internal/system/linux/dali-elementary.h>
27 #include <dali/integration-api/debug.h>
30 #include <dali/internal/system/common/callback-manager.h>
40 /// Application Status Enum
51 } // Unnamed namespace
54 * Impl to hide EFL data members
56 struct Framework::Impl
61 : mAbortCallBack(NULL),
62 mCallbackManager(CallbackManager::New()),
63 mLanguage("NOT_SUPPORTED"),
64 mRegion("NOT_SUPPORTED")
70 delete mAbortCallBack;
72 // we're quiting the main loop so
73 // mCallbackManager->RemoveAllCallBacks() does not need to be called
74 // to delete our abort handler
75 delete mCallbackManager;
78 std::string GetLanguage() const
83 std::string GetRegion() const
89 CallbackBase* mAbortCallBack;
90 CallbackManager* mCallbackManager;
91 std::string mLanguage;
97 * Called by AppCore on application creation.
99 static bool AppCreate(void* data)
101 return static_cast<Framework*>(data)->AppStatusHandler(APP_CREATE, NULL);
105 * Called by AppCore when the application should terminate.
107 static void AppTerminate(void* data)
109 static_cast<Framework*>(data)->AppStatusHandler(APP_TERMINATE, NULL);
113 * Called by AppCore when the application is paused.
115 static void AppPause(void* data)
117 static_cast<Framework*>(data)->AppStatusHandler(APP_PAUSE, NULL);
121 * Called by AppCore when the application is resumed.
123 static void AppResume(void* data)
125 static_cast<Framework*>(data)->AppStatusHandler(APP_RESUME, NULL);
129 * Called by AppCore when the language changes on the device.
131 static void AppLanguageChange(void* data)
133 static_cast<Framework*>(data)->AppStatusHandler(APP_LANGUAGE_CHANGE, NULL);
137 Framework::Framework(Framework::Observer& observer, int* argc, char*** argv, Type type)
138 : mObserver(observer),
146 mAbortHandler(MakeCallback(this, &Framework::AbortCallback)),
150 mImpl = new Impl(this);
153 Framework::~Framework()
163 void Framework::Run()
167 efreet_cache_disable();
168 elm_init(mArgc ? *mArgc : 0, mArgv ? *mArgv : nullptr);
170 Impl::AppCreate(this);
177 void Framework::Quit()
179 Impl::AppTerminate(this);
184 bool Framework::IsMainLoopRunning()
189 void Framework::AddAbortCallback(CallbackBase* callback)
191 mImpl->mAbortCallBack = callback;
194 std::string Framework::GetBundleName() const
199 void Framework::SetBundleName(const std::string& name)
204 std::string Framework::GetBundleId() const
209 std::string Framework::GetResourcePath()
211 // "DALI_APPLICATION_PACKAGE" is used by Ubuntu specifically to get the already configured Application package path.
212 const char* ubuntuEnvironmentVariable = "DALI_APPLICATION_PACKAGE";
213 char* value = getenv(ubuntuEnvironmentVariable);
214 std::string resourcePath;
217 resourcePath = value;
220 if(resourcePath.back() != '/')
228 std::string Framework::GetDataPath()
230 const char* ubuntuEnvironmentVariable = "DALI_APPLICATION_DATA_DIR";
231 char* value = getenv(ubuntuEnvironmentVariable);
232 std::string dataPath;
241 void Framework::SetBundleId(const std::string& id)
246 void Framework::AbortCallback()
248 // if an abort call back has been installed run it.
249 if(mImpl->mAbortCallBack)
251 CallbackBase::Execute(*mImpl->mAbortCallBack);
259 bool Framework::AppStatusHandler(int type, void* bundleData)
276 mObserver.OnResume();
280 mObserver.OnTerminate();
287 case APP_LANGUAGE_CHANGE:
288 mObserver.OnLanguageChanged();
298 void Framework::InitThreads()
303 std::string Framework::GetLanguage() const
305 return mImpl->GetLanguage();
308 std::string Framework::GetRegion() const
310 return mImpl->GetRegion();
313 } // namespace Adaptor
315 } // namespace Internal