2 * Copyright (c) 2014 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 "framework.h"
26 #include <dali/integration-api/debug.h>
29 #include <callback-manager.h>
43 /// Application Status Enum
54 } // Unnamed namespace
57 * Impl to hide EFL data members
59 struct Framework::Impl
64 : mAbortCallBack( NULL ),
65 mCallbackManager( NULL )
67 mEventCallback.create = AppCreate;
68 mEventCallback.terminate = AppTerminate;
69 mEventCallback.pause = AppPause;
70 mEventCallback.resume = AppResume;
71 #if defined(TIZEN_SDK_2_3)
72 mEventCallback.app_control = AppControl;
74 mEventCallback.service = AppService;
76 mEventCallback.low_memory = NULL;
77 mEventCallback.low_battery = NULL;
78 mEventCallback.device_orientation = DeviceRotated;
79 mEventCallback.language_changed = AppLanguageChange;
80 mEventCallback.region_format_changed = NULL;
82 mCallbackManager = CallbackManager::New();
87 delete mAbortCallBack;
89 // we're quiting the main loop so
90 // mCallbackManager->RemoveAllCallBacks() does not need to be called
91 // to delete our abort handler
92 delete mCallbackManager;
97 CallbackBase* mAbortCallBack;
98 app_event_callback_s mEventCallback;
99 CallbackManager *mCallbackManager;
103 * Called by AppCore on application creation.
105 static bool AppCreate(void *data)
107 return static_cast<Framework*>(data)->SlpAppStatusHandler(APP_CREATE);
111 * Called by AppCore when the application should terminate.
113 static void AppTerminate(void *data)
115 static_cast<Framework*>(data)->SlpAppStatusHandler(APP_TERMINATE);
119 * Called by AppCore when the application is paused.
121 static void AppPause(void *data)
123 static_cast<Framework*>(data)->SlpAppStatusHandler(APP_PAUSE);
127 * Called by AppCore when the application is resumed.
129 static void AppResume(void *data)
131 static_cast<Framework*>(data)->SlpAppStatusHandler(APP_RESUME);
135 * Called by AppCore when the application is launched from another module (e.g. homescreen).
136 * @param[in] b the bundle data which the launcher module sent
139 #if defined(TIZEN_SDK_2_3)
140 static void AppControl(app_control_h app_control, void *data)
142 static void AppService(service_h service, void *data)
145 Framework* framework = static_cast<Framework*>(data);
149 bundle *bundleData = NULL;
150 #if defined(TIZEN_SDK_2_3)
151 app_control_to_bundle(app_control, &bundleData);
153 service_to_bundle(service, &bundleData);
159 char* bundleName = const_cast<char*>(bundle_get_val(bundleData, "name"));
160 if(bundleName != NULL)
162 framework->SetBundleName(bundleName);
166 char* bundleId = const_cast<char*>(bundle_get_val(bundleData, "id"));
169 framework->SetBundleId(bundleId);
172 framework->SlpAppStatusHandler(APP_RESET);
177 * Called by AppCore when the language changes on the device.
179 static void AppLanguageChange(void* data)
181 static_cast<Framework*>(data)->SlpAppStatusHandler(APP_LANGUAGE_CHANGE);
184 static void DeviceRotated(app_device_orientation_e orientation, void *user_data)
188 case APP_DEVICE_ORIENTATION_0:
190 case APP_DEVICE_ORIENTATION_90:
192 case APP_DEVICE_ORIENTATION_180:
194 case APP_DEVICE_ORIENTATION_270:
201 Framework::Framework(Framework::Observer& observer, int *argc, char ***argv, const std::string& name)
202 : mObserver(observer),
210 mAbortHandler( MakeCallback( this, &Framework::AbortCallback ) ),
214 mImpl = new Impl(this);
217 Framework::~Framework()
227 void Framework::Run()
231 app_efl_main(mArgc, mArgv, &mImpl->mEventCallback, this);
236 void Framework::Quit()
241 bool Framework::IsMainLoopRunning()
246 void Framework::AddAbortCallback( CallbackBase* callback )
248 mImpl->mAbortCallBack = callback;
251 std::string Framework::GetBundleName() const
256 void Framework::SetBundleName(const std::string& name)
261 std::string Framework::GetBundleId() const
266 void Framework::SetBundleId(const std::string& id)
271 void Framework::AbortCallback( )
273 // if an abort call back has been installed run it.
274 if (mImpl->mAbortCallBack)
276 CallbackBase::Execute( *mImpl->mAbortCallBack );
284 bool Framework::SlpAppStatusHandler(int type)
292 // Connect to abnormal exit signals
293 mAbortHandler.AbortOnSignal( SIGINT );
294 mAbortHandler.AbortOnSignal( SIGQUIT );
295 mAbortHandler.AbortOnSignal( SIGKILL );
306 mObserver.OnResume();
310 mObserver.OnTerminate();
317 case APP_LANGUAGE_CHANGE:
318 mObserver.OnLanguageChanged();
328 } // namespace Adaptor
330 } // namespace Internal