#include <Ecore.h>
#include <system_info.h>
+#include <system_settings.h>
#include <bundle_internal.h>
-
+#include <widget_base.h>
// CONDITIONAL INCLUDES
#ifdef APPCORE_WATCH_AVAILABLE
#include <appcore-watch/watch_app.h>
namespace Adaptor
{
-#if defined(DEBUG_ENABLED)
namespace
{
+#if defined(DEBUG_ENABLED)
Integration::Log::Filter* gDBusLogging = Integration::Log::Filter::New( Debug::NoLogging, false, "LOG_ADAPTOR_EVENTS_DBUS" );
-} // anonymous namespace
#endif
+bool IsWidgetFeatureEnabled()
+{
+ static bool feature = false;
+ static bool retrieved = false;
+ int ret;
+
+ if(retrieved == true)
+ {
+ return feature;
+ }
+
+ ret = system_info_get_platform_bool("http://tizen.org/feature/shell.appwidget", &feature);
+ if(ret != SYSTEM_INFO_ERROR_NONE)
+ {
+ DALI_LOG_ERROR("failed to get system info");
+ return false;
+ }
+
+ retrieved = true;
+ return feature;
+}
+
+} // anonymous namespace
+
namespace AppCore
{
#endif
mApplicationType = type;
mCallbackManager = CallbackManager::New();
+
+ char* region;
+ char* language;
+ system_settings_get_value_string( SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, ®ion );
+ system_settings_get_value_string( SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &language );
+ mRegion = std::string( region );
+ mLanguage = std::string( language );
}
~Impl()
{
ret = AppNormalMain();
}
+ else if(mApplicationType == WIDGET)
+ {
+ ret = AppWidgetMain();
+ }
else
{
ret = AppWatchMain();
{
AppNormalExit();
}
+ else if(mApplicationType == WIDGET)
+ {
+ AppWidgetExit();
+ }
else
{
AppWatchExit();
}
}
+ void SetLanguage( const std::string& language )
+ {
+ mLanguage = language;
+ }
+
+ void SetRegion( const std::string& region )
+ {
+ mRegion = region;
+ }
+
+ std::string GetLanguage() const
+ {
+ return mLanguage;
+ }
+
+ std::string GetRegion() const
+ {
+ return mRegion;
+ }
// Data
Type mApplicationType;
CallbackBase* mAbortCallBack;
CallbackManager *mCallbackManager;
+ std::string mLanguage;
+ std::string mRegion;
Framework* mFramework;
AppCore::AppEventHandlerPtr handlers[5];
return 0;
}
- static int AppInit(int argc, char **argv, void *data)
+ static void AppInit(int argc, char **argv, void *data)
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wold-style-cast"
ecore_app_args_set( argc, (const char **)argv );
#pragma GCC diagnostic pop
- return 0;
}
static void AppFinish(void)
static void AppLanguageChanged(AppCore::AppEventInfoPtr event, void *data)
{
- Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ Framework* framework = static_cast<Framework*>(data);
+ Observer *observer = &framework->mObserver;
- observer->OnLanguageChanged();
+ if( event && event->value )
+ {
+ framework->SetLanguage( std::string( static_cast<const char *>(event->value) ) );
+ observer->OnLanguageChanged();
+ }
+ else
+ {
+ DALI_LOG_ERROR( "NULL pointer in Language changed event\n" );
+ }
}
static void AppDeviceRotated(AppCore::AppEventInfoPtr event_info, void *data)
static void AppRegionChanged(AppCore::AppEventInfoPtr event, void *data)
{
- Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ Framework* framework = static_cast<Framework*>(data);
+ Observer *observer = &framework->mObserver;
- observer->OnRegionChanged();
+ if( event && event->value )
+ {
+ framework->SetRegion( std::string( static_cast<const char *>(event->value) ) );
+ observer->OnRegionChanged();
+ }
+ else
+ {
+ DALI_LOG_ERROR( "NULL pointer in Region changed event\n" );
+ }
}
static void AppBatteryLow(AppCore::AppEventInfoPtr event, void *data)
{
Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ int status = *static_cast<int *>(event->value);
+ Dali::DeviceStatus::Battery::Status result = Dali::DeviceStatus::Battery::NORMAL;
- observer->OnBatteryLow();
+ // convert to dali battery status
+ switch( status )
+ {
+ case 1:
+ {
+ result = Dali::DeviceStatus::Battery::POWER_OFF;
+ break;
+ }
+ case 2:
+ {
+ result = Dali::DeviceStatus::Battery::CRITICALLY_LOW;
+ break;
+ }
+ default :
+ break;
+ }
+ observer->OnBatteryLow(result);
}
static void AppMemoryLow(AppCore::AppEventInfoPtr event, void *data)
{
Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ int status = *static_cast<int *>(event->value);
+ Dali::DeviceStatus::Memory::Status result = Dali::DeviceStatus::Memory::NORMAL;
- observer->OnMemoryLow();
+ // convert to dali memmory status
+ switch( status )
+ {
+ case 1:
+ {
+ result = Dali::DeviceStatus::Memory::NORMAL;
+ break;
+ }
+ case 2:
+ {
+ result = Dali::DeviceStatus::Memory::LOW;
+ break;
+ }
+ case 4:
+ {
+ result = Dali::DeviceStatus::Memory::CRITICALLY_LOW;
+ break;
+ }
+ default :
+ break;
+ }
+ observer->OnMemoryLow(result);
}
appcore_ui_base_exit();
}
-#ifdef APPCORE_WATCH_AVAILABLE
- static bool WatchAppCreate(int width, int height, void *data)
+ void AppWidgetExit()
{
- return static_cast<Framework*>(data)->Create();
+ widget_base_exit();
}
- static void WatchAppTimeTick(watch_time_h time, void *data)
+ static int WidgetAppCreate( void *data )
{
- Observer *observer = &static_cast<Framework*>(data)->mObserver;
- WatchTime curTime(time);
-
- observer->OnTimeTick(curTime);
+ widget_base_on_create();
+ return static_cast<int>( static_cast<Framework*>(data)->Create() );
}
- static void WatchAppAmbientTick(watch_time_h time, void *data)
+ static int WidgetAppTerminate( void *data )
{
Observer *observer = &static_cast<Framework*>(data)->mObserver;
- WatchTime curTime(time);
+ observer->OnTerminate();
- observer->OnAmbientTick(curTime);
+ widget_base_on_terminate();
+ return 0;
}
- static void WatchAppAmbientChanged(bool ambient, void *data)
+ int AppWidgetMain()
{
- Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ if( !IsWidgetFeatureEnabled() )
+ {
+ DALI_LOG_ERROR("widget feature is not supported");
+ return 0;
+ }
- observer->OnAmbientChanged(ambient);
+ AppCore::AppAddEventHandler(&handlers[AppCore::LOW_BATTERY], AppCore::LOW_BATTERY, AppBatteryLow, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::LOW_MEMORY], AppCore::LOW_MEMORY, AppMemoryLow, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::DEVICE_ORIENTATION_CHANGED], AppCore::DEVICE_ORIENTATION_CHANGED, AppDeviceRotated, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::LANGUAGE_CHANGED], AppCore::LANGUAGE_CHANGED, AppLanguageChanged, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::REGION_FORMAT_CHANGED], AppCore::REGION_FORMAT_CHANGED, AppRegionChanged, mFramework);
+
+ widget_base_ops ops = widget_base_get_default_ops();
+
+ /* override methods */
+ ops.create = WidgetAppCreate;
+ ops.terminate = WidgetAppTerminate;
+ ops.init = AppInit;
+ ops.finish = AppFinish;
+ ops.run = AppRun;
+ ops.exit = AppExit;
+
+ int result = widget_base_init(ops, *mFramework->mArgc, *mFramework->mArgv, mFramework);
+
+ widget_base_fini();
+
+ return result;
}
- static void WatchAppLanguageChanged(app_event_info_h event, void *data)
+#ifdef APPCORE_WATCH_AVAILABLE
+ static bool WatchAppCreate(int width, int height, void *data)
{
- Observer *observer = &static_cast<Framework*>(data)->mObserver;
-
- observer->OnLanguageChanged();
+ return static_cast<Framework*>(data)->Create();
}
- static void WatchAppRegionChanged(app_event_info_h event, void *data)
+ static void WatchAppTimeTick(watch_time_h time, void *data)
{
Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ WatchTime curTime(time);
- observer->OnRegionChanged();
+ observer->OnTimeTick(curTime);
}
- static void WatchAppBatteryLow(app_event_info_h event, void *data)
+ static void WatchAppAmbientTick(watch_time_h time, void *data)
{
Observer *observer = &static_cast<Framework*>(data)->mObserver;
+ WatchTime curTime(time);
- observer->OnBatteryLow();
+ observer->OnAmbientTick(curTime);
}
- static void WatchAppMemoryLow(app_event_info_h event, void *data)
+ static void WatchAppAmbientChanged(bool ambient, void *data)
{
Observer *observer = &static_cast<Framework*>(data)->mObserver;
- observer->OnMemoryLow();
+ observer->OnAmbientChanged(ambient);
}
static void WatchAppControl(app_control_h app_control, void *data)
mWatchCallback.ambient_tick = WatchAppAmbientTick;
mWatchCallback.ambient_changed = WatchAppAmbientChanged;
- watch_app_add_event_handler(&watchHandlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, WatchAppBatteryLow, mFramework);
- watch_app_add_event_handler(&watchHandlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, WatchAppMemoryLow, mFramework);
- watch_app_add_event_handler(&watchHandlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, WatchAppLanguageChanged, mFramework);
- watch_app_add_event_handler(&watchHandlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, WatchAppRegionChanged, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::LOW_BATTERY], AppCore::LOW_BATTERY, AppBatteryLow, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::LOW_MEMORY], AppCore::LOW_MEMORY, AppMemoryLow, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::LANGUAGE_CHANGED], AppCore::LANGUAGE_CHANGED, AppLanguageChanged, mFramework);
+ AppCore::AppAddEventHandler(&handlers[AppCore::REGION_FORMAT_CHANGED], AppCore::REGION_FORMAT_CHANGED, AppRegionChanged, mFramework);
ret = watch_app_main(*mFramework->mArgc, *mFramework->mArgv, &mWatchCallback, mFramework);
#endif
#endif
}
-
private:
// Undefined
Impl( const Impl& impl );
}
}
+void Framework::SetLanguage( const std::string& language )
+{
+ mImpl->SetLanguage( language );
+}
+
+void Framework::SetRegion( const std::string& region )
+{
+ mImpl->SetRegion( region );
+}
+
+std::string Framework::GetLanguage() const
+{
+ return mImpl->GetLanguage();
+}
+
+std::string Framework::GetRegion() const
+{
+ return mImpl->GetRegion();
+}
+
} // namespace Adaptor
} // namespace Internal