From c93626eeddd34f3446d5917927691675ca7ff894 Mon Sep 17 00:00:00 2001 From: "jungmin76.park" Date: Tue, 18 Dec 2012 12:03:12 +0900 Subject: [PATCH] initial push to rsa Change-Id: If260be1dc22e14a839195cd121097f69e934680c Signed-off-by: jungmin76.park --- CMakeLists.txt | 61 +++ LICENSE | 202 +++++++++ NOTICE | 3 + data/dummy.txt | 0 icons/icon.png | Bin 0 -> 6197 bytes icons/splash.png | Bin 0 -> 161582 bytes inc/FShell_Livebox.h | 87 ++++ inc/FShell_LiveboxBase.h | 77 ++++ inc/FShell_LiveboxManagerService.h | 109 +++++ inc/FShell_LiveboxManagerStub.h | 92 ++++ inc/FShell_LiveboxPopup.h | 39 ++ inc/OspLiveboxService.h | 70 +++ manifest.xml | 32 ++ osp-livebox-service.manifest | 12 + packaging/osp-livebox-service.spec | 71 +++ res/screen-density-xhigh/tizen.png | Bin 0 -> 10361 bytes src/FShell_Livebox.cpp | 296 +++++++++++++ src/FShell_LiveboxBase.cpp | 335 ++++++++++++++ src/FShell_LiveboxManagerService.cpp | 624 +++++++++++++++++++++++++++ src/FShell_LiveboxManagerStub.cpp | 217 ++++++++++ src/FShell_LiveboxPopup.cpp | 135 ++++++ src/OspLiveboxService.cpp | 79 ++++ src/OspLiveboxServiceEntry.cpp | 74 ++++ system-service-export.ver | 6 + 24 files changed, 2621 insertions(+) create mode 100644 CMakeLists.txt create mode 100755 LICENSE create mode 100755 NOTICE create mode 100644 data/dummy.txt create mode 100644 icons/icon.png create mode 100644 icons/splash.png create mode 100644 inc/FShell_Livebox.h create mode 100644 inc/FShell_LiveboxBase.h create mode 100644 inc/FShell_LiveboxManagerService.h create mode 100644 inc/FShell_LiveboxManagerStub.h create mode 100644 inc/FShell_LiveboxPopup.h create mode 100644 inc/OspLiveboxService.h create mode 100644 manifest.xml create mode 100644 osp-livebox-service.manifest create mode 100644 packaging/osp-livebox-service.spec create mode 100644 res/screen-density-xhigh/tizen.png create mode 100644 src/FShell_Livebox.cpp create mode 100644 src/FShell_LiveboxBase.cpp create mode 100644 src/FShell_LiveboxManagerService.cpp create mode 100644 src/FShell_LiveboxManagerStub.cpp create mode 100644 src/FShell_LiveboxPopup.cpp create mode 100644 src/OspLiveboxService.cpp create mode 100644 src/OspLiveboxServiceEntry.cpp create mode 100755 system-service-export.ver diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..68e5a38 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,61 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +SET (this_target samsung-livebox-service) +SET (APPID gi2qxenosh) + +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") +SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/output") + +INCLUDE_DIRECTORIES ( + /usr/include/glib-2.0 + /usr/lib/glib-2.0/include + /usr/include/provider + /usr/include/appfw + /usr/include/aul + /usr/include/osp + /usr/include/osp/app + /usr/include/osp/base + /usr/include/osp/io + /usr/include/osp/system + /usr/include/osp/security + /usr/include/osp/shell + /usr/include/chromium + inc + ) + +SET (${this_target}_SOURCE_FILES + src/OspLiveboxService.cpp + src/OspLiveboxServiceEntry.cpp + src/FShell_Livebox.cpp + src/FShell_LiveboxBase.cpp + src/FShell_LiveboxManagerService.cpp + src/FShell_LiveboxManagerStub.cpp + src/FShell_LiveboxPopup.cpp + ) + +## SET EXTRA COMPILER FLAGS +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fPIE -Wall -pthread -g3" ) +#SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fstack-protector -Wstack-protector" ) + +## SET C COMPILER FLAGS +SET(CMAKE_C_FLAGS "${OSP_DEBUG_FLAGS} ${OSP_OPT_FLAGS} ${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} ${OSP_COMPILER_FLAGS}") + +## SET CPP COMPILER FLAGS +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") +SET(CMAKE_CXX_FLAGS "${OSP_DEBUG_FLAGS} ${OSP_OPT_FLAGS} ${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} ${OSP_COMPILER_FLAGS}") + +## Create Library +ADD_EXECUTABLE (${this_target} ${${this_target}_SOURCE_FILES}) + +TARGET_LINK_LIBRARIES(${this_target} -Xlinker --no-undefined -Xlinker --as-needed -pie) +TARGET_LINK_LIBRARIES(${this_target} -Xlinker --version-script=${CMAKE_CURRENT_SOURCE_DIR}/system-service-export.ver) +TARGET_LINK_LIBRARIES(${this_target} "-L/usr/lib/osp -losp-appfw -lchromium -lprovider -losp-shell -lbundle") + + +## Cory additional info +INSTALL(TARGETS ${this_target} DESTINATION ../usr/apps/${APPID}/bin) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/manifest.xml DESTINATION ../usr/apps/${APPID}/info) +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data DESTINATION ../usr/apps/${APPID}) +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/ DESTINATION ../usr/apps/${APPID}/data FILES_MATCHING PATTERN "*.ini") + + diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE b/NOTICE new file mode 100755 index 0000000..ccdad52 --- /dev/null +++ b/NOTICE @@ -0,0 +1,3 @@ +Copyright (c) Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Apache License, Version 2. +Please, see the LICENSE file for Apache License terms and conditions. diff --git a/data/dummy.txt b/data/dummy.txt new file mode 100644 index 0000000..e69de29 diff --git a/icons/icon.png b/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8169106bf19143547c5bbd481e45208be9e4a1aa GIT binary patch literal 6197 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 T4LD?+00000NkvXXu0mjfCHK^V literal 0 HcmV?d00001 diff --git a/icons/splash.png b/icons/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..74749595c03e773192d0a31c27cd6426fa2d931f GIT binary patch literal 161582 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
    jNHju1Okf&4#t3>U$y{xj`tFKe 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±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 z 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%0AV`j}&VORn9p7yUSPJb)5CZbC9SlkG7LCYSg=E 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 +#include + +#include +#include +#include +#include + +#include "FShell_LiveboxBase.h" + + +#define MAX_PACKAGENAME 512 + + +namespace Tizen { namespace Shell { namespace App +{ +class _LiveboxPopup; + +class _Livebox + : public _LiveboxBase + ,public Tizen::Base::Runtime::ITimerEventListener +{ +public: + _Livebox(const Tizen::Base::String& name, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, + int width, int height, int period, int priority); + virtual ~_Livebox(); + void OnAdded(void); + void OnUpdate(void); + void OnResize(int width, int height); + void OnRemoved(); + void OnForeground(); + void OnBackground(); + virtual void OnPopupCreated(int width, int height); + virtual void OnPopupDestoyed(void); + + result RequestUpdateRemote(int width, int height); + + _LiveboxPopup* GetLiveboxPopup() const; + virtual result SendTouchEvent(buffer_event event, double timestamp, double x, double y); + + void RestartLifeDurationTimer(); + +private: + result SendAddRequest(int width, int height); + result SendUpdateRequest(int width, int height); + result SendResizeRequest(int width, int height); + result SendRemoveRequest(); + + result SendRequestToApp(const Tizen::App::AppId& appId, const Tizen::Base::String& operation, Tizen::Base::Collection::ArrayList* pArgs); + + virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); + +private: + _LiveboxPopup* __pLiveboxPopup; + Tizen::Base::Runtime::Timer __lifeDurationTimer; + Tizen::Base::Runtime::Timer __UpdateTimer; + int __UpdateMillis; + +}; + + +} } } // Tizen::Shell::App { + + +#endif /* FShell_Livebox_H_ */ diff --git a/inc/FShell_LiveboxBase.h b/inc/FShell_LiveboxBase.h new file mode 100644 index 0000000..66770d2 --- /dev/null +++ b/inc/FShell_LiveboxBase.h @@ -0,0 +1,77 @@ +/* + * FShell_LiveboxBase.h + * + * Created on: Oct 20, 2012 + * Author: jungmin76park + */ + +#ifndef _FSHL_LIVEBOXBASE_H_ +#define _FSHL_LIVEBOXBASE_H_ + +#include + +#include +#include +#include + +#define TEST_MODE_ENABLE false // If this is enabled, appId of Livebox will be fixed to "EOE7JEjMWn.SampleLiveboxApp" for easy test +#define LIVEBOX_PROVIDER_ID_ENABLE true + +typedef struct _bundle_t bundle;//TODO move code to osp-appfw + +namespace Tizen { namespace Shell { namespace App +{ + +class _LiveboxBase: + public Tizen::Base::Object +{ +public: + _LiveboxBase(target_type type, const Tizen::Base::String& info, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int priority); + virtual ~_LiveboxBase(); + + virtual void OnPopupCreated(int width, int height) = 0; + virtual void OnPopupDestoyed(void) = 0; + + virtual result SendTouchEvent(buffer_event event, double timestamp, double x, double y) = 0; + + void SetClientId(int clientId); + bool HasValidClientId() const; + // for buffered livebox + int GetSharedMemId(int w, int h); + result ReleaseSharedMem(); + + +protected: + result SendRequestToApp(const Tizen::App::AppId& appId, const Tizen::Base::String& operation, Tizen::Base::Collection::ArrayList* pArgs); + +public: + target_type __type; + Tizen::Base::String __info; + Tizen::Base::String __appId; + Tizen::Base::String __providerName; + Tizen::Base::String __providerId; + Tizen::Base::String __instanceId; + int __width; + int __height; + int __priority; + +protected: + struct livebox_buffer *__buffer_info; + void *__buffer; + bool __isForeground;// LB only? + int __ipcClientId; + +}; + +class _LiveboxRequestHelper +{ +public: + static result SendRequestToApp(const Tizen::App::AppId& appId, const Tizen::Base::String& operation, Tizen::Base::Collection::ArrayList* pArgs); + static result AddStrArrayToBundle(bundle* b, const char* key, const Tizen::Base::Collection::IList* pList); +// static result ExtractPackageIdAndExecutableName(Tizen::App::AppId inAppId, Tizen::Base::String& outPackageId, Tizen::Base::String& outExecutableName); +}; + +} /* namespace App */ +} /* namespace Livebox */ +} /* namespace Samsung */ +#endif /* _FSHL_LIVEBOXBASE_H_ */ diff --git a/inc/FShell_LiveboxManagerService.h b/inc/FShell_LiveboxManagerService.h new file mode 100644 index 0000000..ce84e40 --- /dev/null +++ b/inc/FShell_LiveboxManagerService.h @@ -0,0 +1,109 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FShell_LiveboxManagerService.h + * @brief This is the header file for the %LiveboxManagerService class. + * + * This header file contains the declarations of the %LiveboxManagerService class. + */ + +#ifndef FShell_LiveboxMANAGERSERVICE_H_ +#define FShell_LiveboxMANAGERSERVICE_H_ + +#include +#include +#include +#include +#include +//#include +#include +#include "FShell_LiveboxManagerStub.h" + +namespace Tizen { namespace Shell { namespace App { + + +class LiveboxManagerService + :public Tizen::Shell::App::_LiveboxManagerStub + ,public Tizen::App::_IAppManagerEventListener + ,public Tizen::Base::Runtime::ITimerEventListener +{ +public: + static LiveboxManagerService* GetInstance(void); + result AddLivebox(_Livebox* pLivebox); + result RemoveLivebox(const char* pPackageName, const char* pId, bool free); + +private: + result Construct(); + result InitializeMasterDaemonEventReceiver(const char* pServiceExecutableName); + result DeinitializeMasterDaemonEventReceiver(void); + + // master daemon callbacks + static int LiveboxConnected(struct event_arg *arg, void* data); + static int LiveboxDisconnected(struct event_arg *arg, void* data); + static int OnLiveboxCreate(struct event_arg *arg, int *width, int *height, double *priority, void* data); + static int OnLiveboxDestroy(struct event_arg *arg, void* data); + static int OnLiveboxUpdate(struct event_arg *arg, void* data); + static int OnLiveboxPopupCreate(struct event_arg *arg, void* data); + static int OnLiveboxPopupDestroy(struct event_arg *arg, void* data); + static int OnLivePause(struct event_arg *arg, void* data); + static int OnLiveboxResume(struct event_arg *arg, void* data); + static int OnLiveboxClick(struct event_arg *arg, void* data); + static int OnLiveboxResize(struct event_arg *arg, void* data); + static int OnLiveboxPeriodChaned(struct event_arg *arg, void* data); + + // stub implementations + virtual result RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName); + virtual result RequestSharedMemoryId(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int w, int h, int& shmId); + virtual result RequestSharedMemoryIdForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int w, int h, int& shmId); + virtual result RequestSyncSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height); + virtual result RequestSyncSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId); + virtual result RequestReleaseSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId); + virtual result RequestReleaseSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId); + + // internal functions + LiveboxManagerService(); + virtual ~LiveboxManagerService(); + + virtual void OnApplicationLaunched(const Tizen::App::AppId& appId, Tizen::App::_AppType type); + virtual void OnApplicationTerminated(const Tizen::App::AppId& appId, Tizen::App::_AppType type); + + virtual void OnIpcClientConnected(const Tizen::Io::_IpcServer& server, int clientId); + virtual void OnIpcClientDisconnected(const Tizen::Io::_IpcServer&server, int clientId); + + // helpers + result SetClientIds(const Tizen::App::AppId& appId, int clientId); + int UpdateAllLiveboxesByAppId(const Tizen::Base::String& appId); + + void StartPingTimer(); + virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); + _Livebox* Find(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) const; + + + class _TaskHandlerThread + : public Tizen::Base::Runtime::Thread + { + public: + virtual ~_TaskHandlerThread(void); + virtual void OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs); + + }; + +private: + Tizen::Base::Collection::ArrayListT<_Livebox*> __liveboxes; + Tizen::Base::Runtime::Timer __pingTimer; + _TaskHandlerThread __handlerThread; +}; + +} } } // Tizen::Shell::App { + +#endif /* FShell_LiveboxMANAGERSERVICE_H_ */ diff --git a/inc/FShell_LiveboxManagerStub.h b/inc/FShell_LiveboxManagerStub.h new file mode 100644 index 0000000..00d8a4c --- /dev/null +++ b/inc/FShell_LiveboxManagerStub.h @@ -0,0 +1,92 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FAppAppManager.h + * @brief This is the header file for the %AppManager class. + * + * This header file contains the declarations of the %AppManager class. + */ + +#ifndef _FAPP_INTERNAL_APP_MANAGER_STUB_H_ +#define _FAPP_INTERNAL_APP_MANAGER_STUB_H_ + +#include +#include +#include +#include +#include + +#include +//#include + + +namespace Tizen { namespace Shell { namespace App { + +/** + * @class _LiveboxManagerStub + * @brief Handles IPC requests and calls real methods. + * @since 2.1 + */ +class _LiveboxManagerStub + : public Tizen::Base::Object + , public Tizen::Io::_IIpcServerEventListener + , virtual public Tizen::Base::Runtime::IEventListener +{ + +public: + bool SendTouchEvent(const int clientId, const Tizen::Base::String& instanceId, int eventType, double timestamp, double x, double y); + bool SendTouchEventForPD(const int clientId, const Tizen::Base::String& instanceId, int eventType, double timestamp, double x, double y); + +protected: + _LiveboxManagerStub(void); + virtual ~_LiveboxManagerStub(void); + + // handlers + bool OnRequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, result* pRes); + bool OnRequestSharedMemoryId(const Tizen::Base::String& instanceId, int width, int height, int* pShmId); + bool OnRequestSharedMemoryIdForPD(const Tizen::Base::String& instanceId, int width, int height, int* pShmId); + bool OnRequestSyncSharedMemory(const Tizen::Base::String& instanceId, int width, int height, result* pRes); + bool OnRequestSyncSharedMemoryForPD(const Tizen::Base::String& instanceId, result* pRes); + bool OnRequestReleaseSharedMemory(const Tizen::Base::String& instanceId, result* pRes); + bool OnRequestReleaseSharedMemoryForPD(const Tizen::Base::String& instanceId, result* pRes); + + // interface to service + virtual result RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName) = 0; + virtual result RequestSharedMemoryId(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& shmId) = 0; + virtual result RequestSharedMemoryIdForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& shmId) = 0; + virtual result RequestSyncSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height) = 0; + virtual result RequestSyncSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0; + virtual result RequestReleaseSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0; + virtual result RequestReleaseSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0; + + // _IIpcServerEventListener + virtual void OnIpcServerStarted(const Tizen::Io::_IpcServer& server); + virtual void OnIpcServerStopped(const Tizen::Io::_IpcServer& server); + virtual void OnIpcClientConnected(const Tizen::Io::_IpcServer& server, int clientId); + virtual void OnIpcClientDisconnected(const Tizen::Io::_IpcServer&server, int clientId); + virtual void OnIpcRequestReceived(Tizen::Io::_IpcServer& server, const IPC::Message& message); + + result StartIpcServer(void); + +private: + _LiveboxManagerStub(const _LiveboxManagerStub& value); + _LiveboxManagerStub& operator =(const _LiveboxManagerStub& source); + + +protected: + Tizen::Io::_IpcServer *__pIpcServer; +}; //_LiveboxManagerStub + +}}} + +#endif//_FAPP_INTERNAL_APP_MANAGER_STUB_H_ diff --git a/inc/FShell_LiveboxPopup.h b/inc/FShell_LiveboxPopup.h new file mode 100644 index 0000000..b93d26e --- /dev/null +++ b/inc/FShell_LiveboxPopup.h @@ -0,0 +1,39 @@ +/* + * FShell_LiveboxPopup.h + * + * Created on: Oct 19, 2012 + * Author: jungmin76park + */ + +#ifndef _FSHL_LiveboxPopup_H_ +#define _FSHL_LiveboxPopup_H_ + +#include "FShell_LiveboxBase.h" + +namespace Tizen { namespace Shell { namespace App +{ + +class _LiveboxPopup + :public Tizen::Shell::App::_LiveboxBase +{ +public: + _LiveboxPopup(const Tizen::Base::String& info, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int priority); + virtual ~_LiveboxPopup(); + + // event handler + void OnPopupCreated(int width, int height); + void OnPopupDestoyed(void); + + // request to app + result SendPopupCreateRequest(int width, int height); + result SendPopupDestroyRequest(); + virtual result SendTouchEvent(buffer_event event, double timestamp, double x, double y); + + result RequestUpdateRemote(); +}; + + +} /* namespace App */ +} /* namespace Livebox */ +} /* namespace Samsung */ +#endif /* _FSHL_LiveboxPopup_H_ */ diff --git a/inc/OspLiveboxService.h b/inc/OspLiveboxService.h new file mode 100644 index 0000000..695afb7 --- /dev/null +++ b/inc/OspLiveboxService.h @@ -0,0 +1,70 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file OspLiveboxService.h + * @brief This is the header file for the OspLiveboxService class. + * + * This header file contains the declarations of the OspLiveboxService class. + */ + +#ifndef _OSPLIVEBOXSERVICE_H_ +#define _OSPLIVEBOXSERVICE_H_ + +#include +#include +#include +//#include + +/** + * [OspLiveboxService] ServiceApp must inherit from ServiceApp class + * which provides basic features necessary to define an ServiceApp. + */ +class OspLiveboxService +// : public Tizen::App::ServiceApp + : public Tizen::App::ServiceApp +{ +public: + + /** + * [OspLiveboxService] ServiceApp must have a factory method that creates an instance of itself. + */ + static Tizen::App::ServiceApp* CreateInstance(void); + +public: + + OspLiveboxService(); + ~OspLiveboxService(); + +public: + + // Called when the ServiceApp is initializing. + bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry); + + // Called when the ServiceApp initializing is finished. + bool OnAppInitialized(void); + + // Called when the ServiceApp is requested to terminate. + bool OnAppWillTerminate(void); + + // Called when the ServiceApp is terminating. + bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false); + + // Called when the system memory is not sufficient to run the ServiceApp any further. + void OnLowMemory(void); + + // Called when the battery level changes. + void OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel); + +}; + +#endif // _$(baseName_upper)_H_ diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 0000000..a228dd4 --- /dev/null +++ b/manifest.xml @@ -0,0 +1,32 @@ + + + gi2qxenosh + 1.0.0 + C++App + + + + + + + + + + 2.1 + + + http://tizen.org/privilege/application.launch + http://tizen.org/privilege/appmanager.launch + + + + samsung-livebox-service + + + + + + + + + diff --git a/osp-livebox-service.manifest b/osp-livebox-service.manifest new file mode 100644 index 0000000..9aadc6f --- /dev/null +++ b/osp-livebox-service.manifest @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packaging/osp-livebox-service.spec b/packaging/osp-livebox-service.spec new file mode 100644 index 0000000..94604f6 --- /dev/null +++ b/packaging/osp-livebox-service.spec @@ -0,0 +1,71 @@ +Name: osp-livebox-service +Summary: osp livebox service +Version: 1.2.1.0 +Release: 1 +Group: System/Libraries +License: TO_BE/FILLED_IN +Source0: %{name}-%{version}.tar.gz +BuildRequires: cmake +BuildRequires: pkgconfig(chromium) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(aul) +BuildRequires: pkgconfig(bundle) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(provider) +BuildRequires: pkgconfig(osp-appfw) +BuildRequires: pkgconfig(osp-uifw) +BuildRequires: pkgconfig(osp-image) +BuildRequires: pkgconfig(osp-shell) +BuildRequires: osp-shell-internal-devel +BuildRequires: osp-appfw-internal-devel + +# runtime requires +Requires: chromium +Requires: osp-appfw +Requires: osp-shell + +%description +osp livebox service + +%prep +%setup -q + +%build +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` +%ifarch %{ix86} +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ -D_OSP_EMUL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} +%else +CXXFLAGS="-O2 -g -pipe -Wall -fno-exceptions -Wformat -Wformat-security -Wl,--as-needed -fmessage-length=0 -march=armv7-a -mtune=cortex-a8 -mlittle-endian -mfpu=neon -mfloat-abi=softfp -D__SOFTFP__ -mthumb -Wa,-mimplicit-it=thumb -D_OSP_DEBUG_ -D_OSP_ARMEL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} +%endif + +# Call make instruction with smp support +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/usr/share/license +cp %{_builddir}/%{name}-%{version}/LICENSE %{buildroot}/usr/share/license/%{name} + +%make_install + +%post + +/bin/rm -fr /opt/apps/gi2qxenosh + +/usr/etc/package-manager/backend/tpk -i /usr/apps/gi2qxenosh +cp -f %{_libdir}/osp/osp-system-service-loader /usr/apps/gi2qxenosh/bin/%{name} +if [ -f /usr/lib/rpm-plugins/msm.so ] +then + chsmack -a %{name} /usr/apps/gi2qxenosh/bin/%{name} + chsmack -e %{name} /usr/apps/gi2qxenosh/bin/%{name} +fi + +#%postun -p /sbin/ldconfig + +%files +%manifest %{name}.manifest +/usr/share/license/%{name} +/usr/apps/* +#/opt/apps/gi2qxenosh/* + + diff --git a/res/screen-density-xhigh/tizen.png b/res/screen-density-xhigh/tizen.png new file mode 100644 index 0000000000000000000000000000000000000000..66cdf2fc01cd35b674e2849732f4a974344d6bda GIT binary patch literal 10361 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 literal 0 HcmV?d00001 diff --git a/src/FShell_Livebox.cpp b/src/FShell_Livebox.cpp new file mode 100644 index 0000000..0cd59e7 --- /dev/null +++ b/src/FShell_Livebox.cpp @@ -0,0 +1,296 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FShell_Livebox.cpp + * @brief This is the implementation for the Livebox class. + */ + +#include +#include + +#include "provider_buffer.h" + +#include +#include +#include + +#include + +#include "FShell_LiveboxManagerService.h" +#include "FShell_LiveboxPopup.h" +#include "FShell_LiveboxBase.h" +#include "FShell_Livebox.h" + + +namespace Tizen { namespace Shell { namespace App +{ + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + + + +const String LIVEBOX_ON_ADD(L"Livebox='event=add'"); +const String LIVEBOX_ON_REMOVE(L"Livebox='event=remove'"); +const String LIVEBOX_ON_UPDATE(L"Livebox='event=update'"); +const String LIVEBOX_ON_RESIZE(L"Livebox='event=resize'"); +const String LIVEBOX_ON_TOUCH(L"Livebox='event=touch'"); + +const int LIVE_DURATION_MSEC= 30000;//30sec + +_Livebox::_Livebox(const String& info, const String& providerId, const String& instanceId, int width, int height, int period, int priority) +:_LiveboxBase(TYPE_LB, info, providerId, instanceId, width, height, priority) +,__pLiveboxPopup(null), __UpdateMillis(period) +{ + SysLog(NID_APP, "period(%d)", period); + + __lifeDurationTimer.Construct(*this);//, true); + __lifeDurationTimer.Start(LIVE_DURATION_MSEC); + + SysLog(NID_APP, "period(%d)", __UpdateMillis); + if( __UpdateMillis > 0) + { + __UpdateTimer.Construct(*this);//, false); + __UpdateTimer.StartAsRepeatable(__UpdateMillis); + } +} + +_Livebox::~_Livebox() +{ + SysLog(NID_APP, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority); + __lifeDurationTimer.Cancel(); + __UpdateTimer.Cancel(); +} + +_LiveboxPopup* +_Livebox::GetLiveboxPopup() const +{ + return __pLiveboxPopup; +} + +void +_Livebox::OnAdded(void) +{ + SendAddRequest(__width, __height); +} + +void +_Livebox::OnRemoved() +{ + SendRemoveRequest(); +} + +void +_Livebox::OnUpdate(void) +{ + SysLog(NID_APP, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority); + + SendUpdateRequest(__width, __height); +} + +void +_Livebox::OnResize(int width, int height) +{ + SysLog(NID_APP, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority); + + __width = width; + __height = height; + SendResizeRequest(__width, __height); +} + +void +_Livebox::OnForeground() +{ + SysLog(NID_APP, ""); + __isForeground = true; + + __UpdateTimer.Cancel(); + __UpdateTimer.StartAsRepeatable(__UpdateMillis); +} + +void +_Livebox::OnBackground() +{ + SysLog(NID_APP, ""); + __isForeground = false; + __UpdateTimer.Cancel(); +} + +void +_Livebox::OnPopupCreated(int width, int height) +{ + __pLiveboxPopup = new (std::nothrow) _LiveboxPopup(__info, __providerId, __instanceId, width, height, __priority); + __pLiveboxPopup->SetClientId(__ipcClientId); + __pLiveboxPopup->OnPopupCreated(width, height); + + __lifeDurationTimer.Cancel(); +} + +void +_Livebox::OnPopupDestoyed(void) +{ + if (__pLiveboxPopup) + { + __pLiveboxPopup->OnPopupDestoyed(); + __pLiveboxPopup->ReleaseSharedMem(); + delete __pLiveboxPopup; + } + + __pLiveboxPopup = null; + + RestartLifeDurationTimer(); +} + +result +_Livebox::SendAddRequest(int width, int height) +{ + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + pArgs->Add(*new String(Integer::ToString(width))); + pArgs->Add(*new String(Integer::ToString(height))); + + return SendRequestToApp( __appId, LIVEBOX_ON_ADD, pArgs.get()); +} + +result +_Livebox::SendUpdateRequest(int width, int height) +{ + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + pArgs->Add(*new String(Integer::ToString(width))); + pArgs->Add(*new String(Integer::ToString(height))); + + return SendRequestToApp( __appId, LIVEBOX_ON_UPDATE, pArgs.get()); +} + +result +_Livebox::SendResizeRequest(int width, int height) +{ + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + pArgs->Add(*new String(Integer::ToString(width))); + pArgs->Add(*new String(Integer::ToString(height))); + + return SendRequestToApp( __appId, LIVEBOX_ON_RESIZE, pArgs.get()); +} + +result +_Livebox::SendRemoveRequest() +{ + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + + return SendRequestToApp( __appId, LIVEBOX_ON_REMOVE, pArgs.get()); +} + +result +_Livebox::SendTouchEvent(buffer_event event, double timestamp, double x, double y) +{ + SysLog(NID_APP, ""); + if( HasValidClientId() == false ) + { + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + + pArgs->Add(*new String(Integer::ToString(event))); + pArgs->Add(*new String(Double::ToString(timestamp))); + pArgs->Add(*new String(Double::ToString(x))); + pArgs->Add(*new String(Double::ToString(y))); + + return SendRequestToApp( __appId, LIVEBOX_ON_TOUCH, pArgs.get()); + } + else + { +// SysAssertf( Tizen::App::AppManager::GetInstance()->IsRunning(__appId) == false, "application isn't running"); + LiveboxManagerService::GetInstance()->SendTouchEvent(__ipcClientId, __instanceId, event, timestamp, x, y); + } + return E_SUCCESS; +} + +result +_Livebox::SendRequestToApp(const AppId& appId, const String& operation, ArrayList* pArgs) +{ + result r = _LiveboxBase::SendRequestToApp(appId, operation, pArgs); + RestartLifeDurationTimer(); + + return r; +} + +result +_Livebox::RequestUpdateRemote(int width, int height) +{ + /*if( GetLiveboxPopup() != null) + { + SysLog(NID_APP, "LiveboxPopup is appeared, so livebox doesn't need to update"); + return E_SUCCESS; + }*/ + std::unique_ptr packageName(_StringConverter::CopyToCharArrayN(__providerId)); + std::unique_ptr id(_StringConverter::CopyToCharArrayN(__instanceId)); + std::unique_ptr content_info(_StringConverter::CopyToCharArrayN(__info)); + + int ret = provider_send_updated(packageName.get(), id.get(), width, height, __priority, content_info.get(), null); + SysTryReturnResult(NID_APP, ret >= 0 , E_SYSTEM, "[E_SYSTEM] failed to provider_send_updated"); + + SysLog(NID_APP, "Done"); + return E_SUCCESS; +} + +void +_Livebox::RestartLifeDurationTimer() +{ + __lifeDurationTimer.Cancel(); + __lifeDurationTimer.Start(LIVE_DURATION_MSEC); + SysLog(NID_APP, "lifeDuration timer restarted (%d)msec", LIVE_DURATION_MSEC); +} + +void +_Livebox::OnTimerExpired(Tizen::Base::Runtime::Timer& timer) +{ + SysLog(NID_APP, ""); + + if( &timer == &__lifeDurationTimer) + { + SysLog(NID_APP, "lifeDuration timer is expired, so terminating livebox app(%ls)..", __providerId.GetPointer() ); + +#if TEST_MODE_ENABLE + AppManager::GetInstance()->TerminateApplication(L"EOE7JEjMWn.SampleLiveboxApp");//todo remove this +#else + AppManager::GetInstance()->TerminateApplication(__providerId); +#endif + } + else if( &timer == &__UpdateTimer) + { + SysLog(NID_APP, "update timer is expired for livebox app(%ls)..", __providerId.GetPointer() ); + OnUpdate(); + } +} + + +} } } // Tizen::Shell::App { + diff --git a/src/FShell_LiveboxBase.cpp b/src/FShell_LiveboxBase.cpp new file mode 100644 index 0000000..c328fb1 --- /dev/null +++ b/src/FShell_LiveboxBase.cpp @@ -0,0 +1,335 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FShell_LiveboxBase.cpp + * @brief This is the implementation for the Livebox class. + */ + +#include +#include + +#include "provider_buffer.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include "FShell_LiveboxBase.h" + +// provider/src/fb.c +struct fb_info { + char *id; + int w; + int h; + int bufsz; + void *buffer; + + int handle; +}; + +// provider/inc/provider_buffer_internal.h +struct livebox_buffer { + enum { + BUFFER_CREATED = 0x00beef00, + BUFFER_DESTROYED = 0x00dead00, + } state; + + enum target_type type; + + union { + int fd; /* File handle(descriptor) */ + int id; /* SHM handle(id) */ + } handle; + + char *pkgname; + char *id; + int width; + int height; + int pixel_size; + + struct fb_info *fb; + + int (*handler)(struct livebox_buffer *info, enum buffer_event event, double timestamp, double x, double y, void *data); + void *data; +}; + +static int LiveboxHandleBufferEventCallback( struct livebox_buffer *info, enum buffer_event event, + double timestamp, double x, double y, void* data); + +namespace Tizen { namespace Shell { namespace App +{ + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + + +const String LIVEBOX_ON_ADD(L"Livebox='event=add'"); +const String LIVEBOX_ON_REMOVE(L"Livebox='event=remove'"); +const String LIVEBOX_ON_UPDATE(L"Livebox='event=update'"); +const String LIVEBOX_ON_RESIZE(L"Livebox='event=resize'"); +const String LIVEBOX_ON_TOUCH(L"Livebox='event=touch'"); +const String LIVEBOX_TRAY_ON_CREATE(L"LiveboxTray='event=create'"); +const String LIVEBOX_TRAY_ON_DESTROY(L"LiveboxTray='event=destroy'"); +const String LIVEBOX_TRAY_ON_TOUCH(L"LiveboxTray='event=touch'"); + + +_LiveboxBase::_LiveboxBase(target_type type, const String& info, const String& providerId, const String& instanceId, int width, int height, int priority) + :__type(type) + ,__info(info) + ,__providerId(providerId) + ,__instanceId(instanceId) + ,__width(width) + ,__height(height) + ,__priority(priority) + ,__buffer_info(null) + ,__buffer(null) // __pEcoreEvas(null), __pEvas(null), __current(0) + ,__isForeground(true) + ,__ipcClientId(-1) +{ + /*providerId.IndexOf(".", 11, index); + providerId.SubString(0, index, __appId); + providerId.SubString(index+1, __providerName);*/ + _LiveboxManagerImpl::ExtractAppIdAndProviderName(providerId, __appId, __providerName); + + SysLog(NID_APP, "providerId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority); + SysLog(NID_APP, "appId(%ls)", __appId.GetPointer()); +} + +_LiveboxBase::~_LiveboxBase() +{ + SysLog(NID_APP, "providerId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority); +} + + +void +_LiveboxBase::SetClientId(int clientId) +{ + __ipcClientId = clientId; +} + +bool +_LiveboxBase::HasValidClientId() const +{ + SysLog(NID_APP, "%d", __ipcClientId); + return (__ipcClientId > -1); +} + +int +_LiveboxBase::GetSharedMemId(int w, int h) +{ + SysLog(NID_APP, "Enter"); + + if( __buffer_info == null) + { + std::unique_ptr packageName(_StringConverter::CopyToCharArrayN(__providerId)); + std::unique_ptr id(_StringConverter::CopyToCharArrayN(__instanceId)); + + __buffer_info = provider_buffer_acquire(__type, packageName.get(), id.get(), w, h, sizeof(int), LiveboxHandleBufferEventCallback, this); + SysTryReturnResult(NID_APP, __buffer_info , -1, "[E_SYSTEM] failed to provider_buffer_acquire"); + SysLog(NID_APP, "provider_buffer_acquire successed"); + + __buffer = provider_buffer_ref(__buffer_info); + SysTryReturnResult(NID_APP, __buffer , -1, "[E_SYSTEM] failed to provider_buffer_ref"); + SysLog(NID_APP, "provider_buffer_ref successed"); + } + + int bufferId = __buffer_info->fb->handle; + + SysLog(NID_APP, "(%d) Exit", bufferId); + return bufferId; +} + +result +_LiveboxBase::ReleaseSharedMem() +{ + SysLog(NID_APP, "Enter"); + int ret; + + if( __buffer) + { + ret = provider_buffer_unref(__buffer); + __buffer = null; + SysTryReturnResult(NID_APP, ret >= 0 , E_SYSTEM, "[E_SYSTEM] failed to provider_buffer_unref"); + SysLog(NID_APP, "provider_buffer_unref successed"); + } + + if( __buffer_info) + { + ret = provider_buffer_release(__buffer_info); + __buffer_info = null; + SysTryReturnResult(NID_APP, ret >= 0 , E_SYSTEM, "[E_SYSTEM] failed to provider_buffer_release"); + SysLog(NID_APP, "provider_buffer_release successed"); + } + + SysLog(NID_APP, "Exit."); + + return E_SUCCESS; +} + +result +_LiveboxBase::SendRequestToApp(const AppId& appId, const String& operation, ArrayList* pArgs) +{ + if( __isForeground == false) + { + SysLog(NID_APP, "livebox isn't foreground, so, message skip"); + return E_SUCCESS; + } + +#if TEST_MODE_ENABLE + const String sampleLiveboxAppId(L"EOE7JEjMWn.SampleLiveboxApp"); //TODO: specify appid for temporary test + return _LiveboxRequestHelper::SendRequestToApp(sampleLiveboxAppId, operation, pArgs); +#else + return _LiveboxRequestHelper::SendRequestToApp(appId, operation, pArgs); +#endif + +} + +result +_LiveboxRequestHelper::SendRequestToApp(const AppId& appId, const String& operation, ArrayList* pArgs) +{ + SysLog(NID_APP, "operation(%ls)", operation.GetPointer()); + + String outAppId; + String execName; + +// ExtractPackageIdAndExecutableName(appId, outAppId, execName); + + const char OSP_K_APPCONTROL_OPERATION[] = "__OSP_APPCONTROL_OPERATION__"; + const char OSP_K_APPCONTROL_INTERNAL_OPERATION[] = "__OSP_APPCONTROL_INTERNAL_INTERNAL_OPERATION__"; + const char OSP_K_ARG[] = "__OSP_ARGS__"; + + _AppMessageImpl msg; + + msg.AddData(OSP_K_APPCONTROL_OPERATION, operation); + msg.AddData(OSP_K_APPCONTROL_INTERNAL_OPERATION, L"livebox"); + AddStrArrayToBundle(msg.GetBundle(), OSP_K_ARG, pArgs); + + std::unique_ptr pAppId(_StringConverter::CopyToCharArrayN(appId) ); + std::unique_ptr pOperation(_StringConverter::CopyToCharArrayN(operation) ); + + return Tizen::App::_AppControlManager::GetInstance()->LaunchPkg(msg, pAppId.get(), pOperation.get(), null, null, null, null); +} + +/*result +_LiveboxRequestHelper::ExtractPackageIdAndExecutableName(AppId appId, AppId& outPackageId, String& outExecutableName) +{ + const int APP_ID_LEN = 10; + + if (appId.GetLength() > APP_ID_LEN) + { + result r = appId.SubString(APP_ID_LEN + 1, appId.GetLength() - (APP_ID_LEN + 1), outExecutableName); + SysTryReturnResult(NID_APP, !IsFailed(r), E_INVALID_ARG, "invalid AppId(%ls)", appId.GetPointer()); + + r = appId.SubString(0, APP_ID_LEN, outPackageId); + SysTryReturnResult(NID_APP, !IsFailed(r), E_INVALID_ARG, "invalid AppId(%ls)", appId.GetPointer()); + + return E_SUCCESS; + } + return E_SYSTEM; +}*/ + +// helper for bundle +result +_LiveboxRequestHelper::AddStrArrayToBundle(bundle* b, const char* key, const IList* pList) +{ + bundle* pb = b; + SysTryReturnResult(NID_APP, pb != NULL, E_INVALID_ARG, "Empty bundle."); + + if (pList == null || pList->GetCount() == 0) + { + SysLog(NID_APP, "No element added for bundle."); + return E_SUCCESS; + } + + int i = 0; + const int count = pList->GetCount(); + + const char** pSa = new (std::nothrow) const char*[count]; + SysTryReturnResult(NID_APP, pSa != null, E_OUT_OF_MEMORY, "Memory allocation failure with cound %d.", count); + + for (i = 0; i < count; i++) + { + pSa[i] = null; + + const String* pStr = static_cast(pList->GetAt(i)); + if (pStr) + { + pSa[i] = _StringConverter::CopyToCharArrayN(*pStr); + } + } + + result r = E_SUCCESS; + + int ret = bundle_add_str_array(pb, key, pSa, count); + SysTryReturnResult(NID_APP, ret >= 0, E_SYSTEM, "Bundle add failre with %d.", strerror(errno)); + +//CATCH: + for (i = 0; i < count; i++) + { + delete[] pSa[i]; + } + + delete[] pSa; + + return r; +} + +} } } // Tizen::Shell::App { + + +//////////////////////////////////////////// +// callback +//////////////////////////////////////////// +static int LiveboxHandleBufferEventCallback( struct livebox_buffer *info, enum buffer_event event, + double timestamp, double x, double y, void* data) +{ + SysLog(NID_APP, "timestamp(%f), x(%f), y(%f)", timestamp, x, y); + + Tizen::Shell::App::_LiveboxBase *pLiveboxBase = static_cast(data); + SysTryReturn(NID_APP, pLiveboxBase != null, 0, E_SYSTEM, "[E_SYSTEM] retrieved pLiveboxBase is null"); + +// const char *pkgname = provider_buffer_pkgname(info); +// const char *id = provider_buffer_id(info); +// enum target_type type = provider_buffer_type(info); + + if( event == BUFFER_EVENT_ENTER) + { + SysLog(NID_APP, "BUFFER_EVENT_ENTER"); + } + else if( event == BUFFER_EVENT_LEAVE) + { + SysLog(NID_APP, "BUFFER_EVENT_LEAVE"); + } + else if( event == BUFFER_EVENT_DOWN) + { + SysLog(NID_APP, "BUFFER_EVENT_DOWN"); + } + else if( event == BUFFER_EVENT_MOVE) + { + SysLog(NID_APP, "BUFFER_EVENT_MOVE"); + } + else if( event == BUFFER_EVENT_UP) + { + SysLog(NID_APP, "BUFFER_EVENT_UP"); + } + + pLiveboxBase->SendTouchEvent(event, timestamp, x, y); + + return 0; +} diff --git a/src/FShell_LiveboxManagerService.cpp b/src/FShell_LiveboxManagerService.cpp new file mode 100644 index 0000000..5284069 --- /dev/null +++ b/src/FShell_LiveboxManagerService.cpp @@ -0,0 +1,624 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FAppAppManager.cpp + * @brief This is the implementation for the AppManager class. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "FShell_Livebox.h" +#include "FShell_LiveboxPopup.h" +#include "FShell_LiveboxManagerStub.h" + +#include "FShell_LiveboxManagerService.h" + +namespace Tizen { namespace Shell { namespace App { + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Io; +using namespace Tizen::System; +using namespace Tizen::Shell::App; + + +namespace +{ +static const RequestId LOCAL_EVENT_REQUEST_UPDATE = 0; +} + +LiveboxManagerService::LiveboxManagerService() +{ +} + +LiveboxManagerService::~LiveboxManagerService() +{ + __pingTimer.Cancel(); + DeinitializeMasterDaemonEventReceiver(); +} + +LiveboxManagerService* +LiveboxManagerService::GetInstance(void) +{ + static LiveboxManagerService* pSelf = null; + if( pSelf == null) + { + pSelf = new LiveboxManagerService(); + SysTryReturn(NID_APP, pSelf != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); + + result r = pSelf->Construct(); + SysAssertf(!IsFailed(r), "Failed to construct LiveboxManagerService"); + SysLog(NID_APP, "LiveboxManagerService is created."); + } + return pSelf; +} + +result +LiveboxManagerService::Construct() +{ + _AppManagerImpl::GetInstance()->AddEventListener(*this); + + _LiveboxManagerStub::StartIpcServer(); + + result r = __handlerThread.Construct(THREAD_TYPE_EVENT_DRIVEN); + SysTryReturn(NID_APP, IsFailed(r) == false, false, r, "[%s] Event thread creation failure.", GetErrorMessage(r)); + + r = __handlerThread.Start(); + SysTryReturn(NID_APP, IsFailed(r) == false, false, r, "[%s] Event thread Start failure.", GetErrorMessage(r)); + + return InitializeMasterDaemonEventReceiver("samsung-livebox-service"); +} + +int +LiveboxManagerService::LiveboxConnected(struct event_arg *arg, void* data) +{ + int ret; + ret = provider_send_hello(); + if (ret == 0) + { + SysLog(NID_APP, "success to be connected with master daemon"); + LiveboxManagerService::GetInstance()->StartPingTimer(); + + } + else + { + SysLog(NID_APP, "failed to provider_send_hello()"); + } + return ret; +} + +int +LiveboxManagerService::LiveboxDisconnected(struct event_arg *arg, void* data) +{ + SysLog(NID_APP, "success to be disconnected with master daemon"); +// aul_terminate_pid(getpid()); + return 0; +} + +void +LiveboxManagerService::StartPingTimer() +{ + __pingTimer.Construct(*this);//, true); + __pingTimer.StartAsRepeatable(120000); +} + +void +LiveboxManagerService::OnTimerExpired(Timer& timer) +{ + SysLog(NID_APP, "provider_send_ping"); + provider_send_ping(); +} + +_Livebox* +LiveboxManagerService::Find(const String& appId, const String& instanceId) const +{ + for( int i = 0; i < __liveboxes.GetCount(); i++ ) + { + _Livebox* pLivebox = null; + __liveboxes.GetAt(i, pLivebox); + SysLog(NID_APP, "%ls", pLivebox->__instanceId.GetPointer()); + + if ( pLivebox->__instanceId == instanceId ) + { +// SysAssert(pLivebox->__appId == appId) + return pLivebox; + } + } + return null; +} + +result +LiveboxManagerService::SetClientIds(const Tizen::App::AppId& appId, int clientId) +{ + for( int i = 0; i < __liveboxes.GetCount(); i++ ) + { + _Livebox* pLivebox = null; + __liveboxes.GetAt(i, pLivebox); + SysLog(NID_APP, "%ls", pLivebox->__instanceId.GetPointer()); + SysLog(NID_APP, "%ls, %ls", pLivebox->__providerId.GetPointer(), appId.GetPointer()); + +#if TEST_MODE_ENABLE + String sampleAppId = L"EOE7JEjMWn.SampleLiveboxApp"; + if( sampleAppId == appId) //TODO: specify appid for temporary test +#else + if ( pLivebox->__providerId == appId ) +#endif + { + pLivebox->SetClientId(clientId); + SysLog(NID_APP, "client is registered.(%d)", clientId); + } + } + return E_SUCCESS; +} + +void +LiveboxManagerService::OnApplicationLaunched(const AppId& appId, _AppType type) +{ + +} + +void +LiveboxManagerService::OnApplicationTerminated(const AppId& appId, _AppType type) +{ + this->SetClientIds(appId, -1); +} + +void +LiveboxManagerService::OnIpcClientConnected(const _IpcServer& server, int clientId) +{ + //SysLog(NID_APP, "(clientId:%d)\n", clientId); + String fullAppId = server.GetClientAppId() + "." + server.GetClientAppExecutableName(); + SysLog(NID_APP, "(%ls)\n", fullAppId.GetPointer()); +// this->SetClientIds(fullAppId, clientId); + +} + +void +LiveboxManagerService::OnIpcClientDisconnected(const _IpcServer& server, int clientId) +{ + String fullAppId = server.GetClientAppId() + "." + server.GetClientAppExecutableName(); + SysLog(NID_APP, "(%ls)\n", fullAppId.GetPointer()); +// SysLog(NID_APP, "(appId:%ls, pid:%d, clientId:%d)\n", server.GetClientAppId().GetPointer(), server.GetClientProcessId(), clientId); +// this->SetClientIds(server.GetClientAppId(), -1); +} + +result +LiveboxManagerService::AddLivebox(_Livebox* pLivebox) +{ + SysLog(NID_APP, "%ls, %ls, count(%d)", pLivebox->__providerId.GetPointer(), pLivebox->__instanceId.GetPointer(), __liveboxes.GetCount()); + + return __liveboxes.Add(pLivebox); +} + +result +LiveboxManagerService::RemoveLivebox(const char* pPackageName, const char* pId, bool free) +{ + SysLog(NID_APP, "%s, %s, count(%d)", pPackageName, pId, __liveboxes.GetCount()); + + SysTryReturn(NID_APP, ( pPackageName != null && pId != null), null, E_INVALID_ARG, "[E_INVALID_ARG]"); + SysLog(NID_APP, "%s, %s", pPackageName, pId); + + _Livebox* pLivebox = Find(pPackageName, pId); + SysTryReturn(NID_APP, pLivebox, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]"); + + result r = __liveboxes.Remove(pLivebox); + + if( __liveboxes.GetCount() == 0 ) + { + SysLog(NID_APP, "No running native livebox app remains, terminating samsung livebox service..."); + Tizen::App::App::GetInstance()->Terminate(); + } + + return r; +} + + +/////////////////////////////////////////////////////// +// MasterDaemonEventReceiver implementation +/////////////////////////////////////////////////////// +int +LiveboxManagerService::OnLiveboxCreate(struct event_arg *arg, int *width, int *height, double *priority, void* data) +{ + SysTryReturn(NID_APP, arg != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]"); + SysTryReturn(NID_APP, arg->pkgname != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]"); + SysTryReturn(NID_APP, arg->id != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]"); + SysTryReturn(NID_APP, arg->type == event_arg::EVENT_NEW, -EPERM, E_SUCCESS, "invalid argument from master"); + + SysLog(NID_APP, "packageName(%s), id(%s)", arg->pkgname, arg->id, arg->info.lb_create.content, arg->info.lb_create.cluster, arg->info.lb_create.category ); + SysTryReturn (NID_APP, LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id) == null, -EBUSY, E_SUCCESS,"already exist"); + + double default_priority = 1.0f; + _Livebox* pLivebox = new (std::nothrow)_Livebox( arg->info.lb_create.content, arg->pkgname, arg->id, + arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority); + SysTryReturn(NID_APP, pLivebox, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); + + LiveboxManagerService* pLiveboxService = LiveboxManagerService::GetInstance(); + pLiveboxService->AddLivebox(pLivebox); + pLivebox->OnAdded(); + + *priority = pLivebox->__priority; + *height= pLivebox->__height; + *width = pLivebox->__width; + + SysLog(NID_APP, "Exit. %d livebox(es)", pLiveboxService->__liveboxes.GetCount()); + return 0; +} + +int +LiveboxManagerService::OnLiveboxUpdate(struct event_arg *arg, void* data) +{ + if( arg->id == null || strlen(arg->id) < 1) + { + SysLog(NID_APP, "updating alls"); + LiveboxManagerService::GetInstance()->UpdateAllLiveboxesByAppId(arg->pkgname); + } + else + { + _Livebox* pLivebox = LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnUpdate(); + } + + SysLog(NID_APP, "Exit"); + return 0; +} + +int +LiveboxManagerService::UpdateAllLiveboxesByAppId(const String& providerId) +{ + for( int i = 0; i < __liveboxes.GetCount(); i++ ) + { + _Livebox* pLivebox = null; + __liveboxes.GetAt(i, pLivebox); + +#if TEST_MODE_ENABLE + String sampleAppId = L"EOE7JEjMWn.SampleLiveboxApp"; + if( sampleAppId == appId) //TODO: specify appid for temporary test +#else + if ( pLivebox->__providerId == providerId ) +#endif + { + pLivebox->OnUpdate(); + } + } + return E_SUCCESS; +} + +int +LiveboxManagerService::OnLiveboxDestroy(struct event_arg *arg, void* data) +{ + SysTryReturn (NID_APP, arg->type == event_arg::EVENT_DELETE, -EPERM, E_SUCCESS, "invalid argument from master"); + SysLog(NID_APP, "Enter"); + + LiveboxManagerService* pLiveboxManagerService = LiveboxManagerService::GetInstance(); + + _Livebox* pLivebox = pLiveboxManagerService->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnRemoved(); + pLiveboxManagerService->RemoveLivebox( arg->pkgname, arg->id, true); + delete pLivebox; + + SysLog(NID_APP, "Exit"); + return 0; +} + +int +LiveboxManagerService::OnLiveboxPopupCreate(struct event_arg *arg, void* data) +{ + SysTryReturn (NID_APP, arg->type == event_arg::EVENT_PD_CREATE, -EPERM, E_SUCCESS, "invalid argument from master"); + SysLog(NID_APP, "packageName(%s), id(%s), width(%d), height(%d), priority(%d)", arg->pkgname, arg->id); + + SysLog(NID_APP, "Enter"); + _Livebox* pLivebox = LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnPopupCreated(arg->info.pd_create.w, arg->info.pd_create.h); + + SysLog(NID_APP, "Exit"); + return 0; +} + + int + LiveboxManagerService::OnLiveboxPopupDestroy(struct event_arg *arg, void* data) +{ + SysTryReturn (NID_APP, arg->type == event_arg::EVENT_PD_DESTROY, -EPERM, E_SUCCESS, "invalid argument from master"); + SysLog(NID_APP, "packageName(%s), id(%s), width(%d), height(%d), priority(%d)", arg->pkgname, arg->id); + SysLog(NID_APP, "Enter"); + + _Livebox* pLivebox = LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnPopupDestoyed(); + + SysLog(NID_APP, "Exit"); + return 0; +} + + int + LiveboxManagerService::OnLivePause(struct event_arg *arg, void* data) +{ + SysTryReturn(NID_APP, arg || arg->id || arg->pkgname, 0, E_SUCCESS, "arg is null!"); + SysLog(NID_APP, "packageName(%s), id(%s)", arg->pkgname, arg->id); + + _Livebox* pLivebox = LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , 0, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnBackground(); + + return 0; +} + +int +LiveboxManagerService::OnLiveboxResume(struct event_arg *arg, void* data) +{ + SysTryReturn(NID_APP, arg || arg->id || arg->pkgname, 0, E_SUCCESS, "arg is null!"); + SysLog(NID_APP, "packageName(%s), id(%s)", arg->pkgname, arg->id); + + _Livebox* pLivebox = LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnForeground(); + return 0; +} + +int +LiveboxManagerService::OnLiveboxClick(struct event_arg *arg, void* data) +{ + SysTryReturn (NID_APP, arg->type == event_arg::EVENT_CLICKED, -EPERM, E_SUCCESS, "invalid argument from master"); + SysTryReturn(NID_APP, arg != null, -EPERM, E_SUCCESS, "arg is null!"); + SysLog(NID_APP, "packageName(%s), id(%s), clicked.event(%s), clicked.x(%d), clicked.y(%d)", arg->pkgname, arg->id, arg->info.clicked.event, arg->info.clicked.x, arg->info.clicked.y); + + return 0; +} + +int +LiveboxManagerService::OnLiveboxResize(struct event_arg *arg, void* data) +{ + SysTryReturn(NID_APP, arg || arg->id || arg->pkgname, 0, E_SUCCESS, "arg is null!"); + SysTryReturn (NID_APP, arg->type == event_arg::EVENT_RESIZE, -EPERM, E_SUCCESS, "invalid argument from master"); + + SysLog(NID_APP, "packageName(%s), id(%s), resize.w(%d), resize.h(%d)", arg->pkgname, arg->id, arg->info.resize.w, arg->info.resize.h); + + _Livebox* pLivebox = LiveboxManagerService::GetInstance()->Find(arg->pkgname, arg->id); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for appId(%s), instanceId(%s)", arg->pkgname, arg->id); + + pLivebox->OnResize(arg->info.resize.w, arg->info.resize.h); + + return 0; +} + +int +LiveboxManagerService::OnLiveboxPeriodChaned(struct event_arg *arg, void* data) +{ + SysTryReturn(NID_APP, arg != null, 0, E_SUCCESS, "arg is null!"); + SysLog(NID_APP, "packageName(%s), id(%s), width(%d), height(%d), priority(%d)", arg->pkgname, arg->id); + return 0; +} + +result +LiveboxManagerService::InitializeMasterDaemonEventReceiver(const char *pServiceExecutableName) +{ + SysTryReturnResult(NID_APP, pServiceExecutableName != null, E_INVALID_ARG, ""); + SysLog(NID_APP, "Enter."); + + __liveboxes.Construct(); + + /*! + * \note + * Only for the buffer type + */ + struct event_handler cbs; + memset(&cbs, 0, sizeof(event_handler)); + + cbs.connected = LiveboxConnected, + cbs.disconnected = LiveboxDisconnected, + cbs.pause = OnLivePause, + cbs.resume = OnLiveboxResume, + cbs.lb_create = OnLiveboxCreate, + cbs.lb_destroy = OnLiveboxDestroy, + cbs.update_content = OnLiveboxUpdate, + cbs.pd_create = OnLiveboxPopupCreate, + cbs.pd_destroy = OnLiveboxPopupDestroy, + cbs.clicked = OnLiveboxClick, + cbs.resize = OnLiveboxResize, + cbs.set_period = OnLiveboxPeriodChaned; + //cbs.lb_recreate = OnLiveboxRecreate,/* Recover from the fault of slave */ + //cbs.content_event = OnLiveboxContentEvent, + //cbs.change_group = OnLiveboxGroupChanged; + + int ret = provider_init(null, pServiceExecutableName, &cbs, this); + SysTryReturnResult(NID_APP, ret == 0, E_SYSTEM, "provider_init failed."); + + SysLog(NID_APP, "Exit."); + return E_SUCCESS; +} + +result +LiveboxManagerService::DeinitializeMasterDaemonEventReceiver() +{ + SysLog(NID_APP, "Enter."); + provider_fini(); + SysLog(NID_APP, "Exit."); + return E_SUCCESS; +} + +/////////////////////////////////////////////////////// +// stub implmentation +/////////////////////////////////////////////////////// + +result +LiveboxManagerService::RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)//, const Tizen::Base::String& param) +{ + SysLog(NID_APP, "Enter."); + + bool found = false; + for( int i = 0; i < __liveboxes.GetCount(); i++ ) + { + _Livebox* pLivebox = null; + __liveboxes.GetAt(i, pLivebox); + SysLog(NID_APP, "%ls", pLivebox->__instanceId.GetPointer()); + + if ( pLivebox->__appId == appId && pLivebox->__providerName == providerName) + { + SysLog(NID_APP, "OK"); + + ArrayList* pArray = new ArrayList(); + SysTryReturnResult(NID_APP, pArray, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); + + pArray->Construct(); + pArray->Add(pLivebox); + + result r = __handlerThread.SendUserEvent(LOCAL_EVENT_REQUEST_UPDATE, pArray); + SysTryLog(NID_APP, !IsFailed(r), "[%s] Propagated.", GetErrorMessage(r)); + + found = true; +// pLivebox->OnUpdate(); + } + } + SysLog(NID_APP, "Exit."); + return (found) ? E_SUCCESS : E_OBJ_NOT_FOUND; + +} + +result +LiveboxManagerService::RequestSharedMemoryId(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& shmId) +{ + _Livebox* pLivebox = this->Find(appId, instanceId); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + if(pLivebox->HasValidClientId() == false) + { + String fullAppId = __pIpcServer->GetClientAppId() + "." + __pIpcServer->GetClientAppExecutableName(); + this->SetClientIds(fullAppId, __pIpcServer->GetClientId()); + } + + shmId = pLivebox->GetSharedMemId(width, height); + SysTryReturnResult(NID_APP, pLivebox , shmId != -1, "[E_SYSTEM] failed to GetSharedMemId for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + return E_SUCCESS; +} + +result +LiveboxManagerService::RequestSharedMemoryIdForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& shmId) +{ + _Livebox* pLivebox = this->Find(appId, instanceId); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + _LiveboxPopup* pPd = pLivebox->GetLiveboxPopup(); + SysTryReturnResult(NID_APP, pPd , E_SYSTEM, "[E_SYSTEM] pPd is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + if(pPd->HasValidClientId() == false) + { + String fullAppId = __pIpcServer->GetClientAppId() + "." + __pIpcServer->GetClientAppExecutableName(); + pPd->SetClientId(__pIpcServer->GetClientId()); + } + + shmId = pPd->GetSharedMemId(width, height); + SysTryReturnResult(NID_APP, pLivebox , shmId != -1, "[E_SYSTEM] failed to GetSharedMemId for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + return E_SUCCESS; +} + +result +LiveboxManagerService::RequestSyncSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height) +{ + _Livebox* pLivebox = this->Find(appId, instanceId); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + return pLivebox->RequestUpdateRemote(width, height); +} + +result +LiveboxManagerService::RequestSyncSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) +{ + _Livebox* pLivebox = this->Find(appId, instanceId); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + SysTryReturnResult(NID_APP, pLivebox->GetLiveboxPopup(), E_SYSTEM, "[E_SYSTEM] GetLiveboxPopup() returns null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + return pLivebox->GetLiveboxPopup()->RequestUpdateRemote(); +} + +result +LiveboxManagerService::RequestReleaseSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) +{ + std::unique_ptr pkgname(_StringConverter::CopyToCharArrayN(appId)); + std::unique_ptr id(_StringConverter::CopyToCharArrayN(instanceId)); + + _Livebox* pLivebox = this->Find(appId, instanceId); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + return pLivebox->ReleaseSharedMem(); +} + +result +LiveboxManagerService::RequestReleaseSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) +{ + std::unique_ptr pkgname(_StringConverter::CopyToCharArrayN(appId)); + std::unique_ptr id(_StringConverter::CopyToCharArrayN(instanceId)); + + _Livebox* pLivebox = this->Find(appId, instanceId); + SysTryReturnResult(NID_APP, pLivebox , E_SYSTEM, "[E_SYSTEM] pLivebox is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + SysTryReturnResult(NID_APP, pLivebox->GetLiveboxPopup(), E_SYSTEM, "[E_SYSTEM] GetLiveboxPopup() returns null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); + + return pLivebox->GetLiveboxPopup()->ReleaseSharedMem(); +} + +LiveboxManagerService::_TaskHandlerThread::~_TaskHandlerThread(void) +{ + +} + +void +LiveboxManagerService::_TaskHandlerThread::OnUserEventReceivedN(RequestId reqId, IList* pArgs) +{ + SysTryReturnVoidResult(NID_APP, pArgs != null, E_INVALID_STATE, "pArgs is null!."); + + SysLog(NID_APP, "Enter."); + + switch (reqId) + { + case LOCAL_EVENT_REQUEST_UPDATE: + { + _Livebox* pLivebox = dynamic_cast<_Livebox*>( pArgs->GetAt(0) ); + SysLog(NID_APP, "111."); + SysTryReturnVoidResult(NID_APP, pLivebox != null, E_INVALID_STATE, "_Livebox is null!."); + SysLog(NID_APP, "222."); + pLivebox->OnUpdate(); + SysLog(NID_APP, "333."); + pArgs->RemoveAll(); + delete pArgs; + } + break; + + default: + SysAssertf(false, "never get here!"); + break; + } + SysLog(NID_APP, "Exit."); +} + +} } } //namespace Tizen { namespace Shell { namespace App { diff --git a/src/FShell_LiveboxManagerStub.cpp b/src/FShell_LiveboxManagerStub.cpp new file mode 100644 index 0000000..761a932 --- /dev/null +++ b/src/FShell_LiveboxManagerStub.cpp @@ -0,0 +1,217 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FAppAppManager.cpp + * @brief This is the implementation for the AppManager class. + */ + +#include +#include +#include +#include + +#include "FShell_LiveboxManagerStub.h" + + +namespace Tizen { namespace Shell { namespace App { + +namespace +{ +const char IPC_SERVER_NAME[] = "osp.shell.ipcserver.liveboxmanager"; +const int INVALID_CLIENT_ID = -1; +}; + +using namespace Tizen::Base; +using namespace Tizen::Io; +using namespace Tizen::Text; +using namespace Tizen::Security; + + +_LiveboxManagerStub::_LiveboxManagerStub(void) +:__pIpcServer(null) +{ + SysLog(NID_APP, "Enter\n"); + + SysLog(NID_APP, "Exit\n"); +} + +_LiveboxManagerStub::~_LiveboxManagerStub(void) +{ + SysLog(NID_APP, "Enter\n"); + + if ( __pIpcServer != null) + { + __pIpcServer->Stop(); + delete __pIpcServer; + } + + SysLog(NID_APP, "Exit\n"); +} + +result +_LiveboxManagerStub::StartIpcServer(void) +{ + SysLog(NID_APP, "Enter."); + __pIpcServer = new (std::nothrow) _IpcServer(); + SysTryReturn(NID_APP, __pIpcServer != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Not enough memory."); + + result r = __pIpcServer->Construct( IPC_SERVER_NAME, *this); + SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Failed to create IPC server(%s)", GetErrorMessage(r), "osp.app.ipcserver.appmanager"); + SysLog(NID_APP, "Exit."); + + return E_SUCCESS; + +CATCH: + delete __pIpcServer; + __pIpcServer = null; + return r; +} + + +///////////////////////////////////////////// +// handlers +///////////////////////////////////////////// + + + +bool +_LiveboxManagerStub::OnRequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, result* pRes) +{ + SysLog(NID_APP, ""); + *pRes = RequestUpdate(appId, providerName); + return true; +} + +bool +_LiveboxManagerStub::OnRequestSharedMemoryId(const String& instanceId, int w, int h, int* pShmId) +{ + SysLog(NID_APP, "(instanceId:%d)xxx", instanceId.GetPointer()); + + RequestSharedMemoryId(__pIpcServer->GetClientAppId(), instanceId, w, h, *pShmId); + + return true; +} + +bool +_LiveboxManagerStub::OnRequestSharedMemoryIdForPD(const String& instanceId, int w, int h, int* pShmId) +{ + SysLog(NID_APP, "(instanceId:%d)", instanceId.GetPointer()); + + RequestSharedMemoryIdForPD(__pIpcServer->GetClientAppId(), instanceId, w, h, *pShmId); + + return true; +} + +bool +_LiveboxManagerStub::OnRequestSyncSharedMemory(const String& instanceId, int w, int h, result* pRes) +{ + SysLog(NID_APP, "(instanceId:%ls)", instanceId.GetPointer()); + + *pRes = RequestSyncSharedMemory(__pIpcServer->GetClientAppId(), instanceId, w, h); + + return true; +} + +bool +_LiveboxManagerStub::OnRequestSyncSharedMemoryForPD(const String& instanceId, result* pRes) +{ + SysLog(NID_APP, "(instanceId:%ls)", instanceId.GetPointer()); + + *pRes = RequestSyncSharedMemoryForPD(__pIpcServer->GetClientAppId(), instanceId); + + return true; +} + +bool +_LiveboxManagerStub::OnRequestReleaseSharedMemory(const String& instanceId, result* pRes) +{ + SysLog(NID_APP, "(instanceId:%ls)", instanceId.GetPointer()); + + *pRes = RequestReleaseSharedMemory(__pIpcServer->GetClientAppId(), instanceId); + + return true; +} + +bool +_LiveboxManagerStub::OnRequestReleaseSharedMemoryForPD(const String& instanceId, result* pRes) +{ + SysLog(NID_APP, "(instanceId:%ls)", instanceId.GetPointer()); + + *pRes = RequestReleaseSharedMemoryForPD(__pIpcServer->GetClientAppId(), instanceId); + + return true; +} + +bool +_LiveboxManagerStub::SendTouchEvent(const int clientId, const String& instanceId, int eventType, double timestamp, double x, double y) +{ + SysLog(NID_APP,""); + result r = __pIpcServer->SendResponse(clientId, new LiveboxManager_SendTouchEvent(instanceId, eventType, timestamp, x, y)); + SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagated.", GetErrorMessage(r)); + return true; +} + +bool +_LiveboxManagerStub::SendTouchEventForPD(const int clientId, const String& instanceId, int eventType, double timestamp, double x, double y) +{ + SysLog(NID_APP,""); + result r = __pIpcServer->SendResponse(clientId, new LiveboxManager_SendTouchEventForPD(instanceId, eventType, timestamp, x, y)); + SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagated.", GetErrorMessage(r)); + + return true; +} + + +void +_LiveboxManagerStub::OnIpcRequestReceived(_IpcServer& server, const IPC::Message& message) +{ + SysLog(NID_APP, "(appId:%ls, pid:%d, clientId:%d)\n", server.GetClientAppId().GetPointer(), server.GetClientProcessId(), server.GetClientId()); + + IPC_BEGIN_MESSAGE_MAP(_LiveboxManagerStub, message) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestUpdate, &server, OnRequestUpdate) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestSharedMemoryId, &server, OnRequestSharedMemoryId) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestSharedMemoryIdForPD, &server, OnRequestSharedMemoryIdForPD) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestSyncSharedMemory, &server, OnRequestSyncSharedMemory) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestSyncSharedMemoryForPD, &server, OnRequestSyncSharedMemoryForPD) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestReleaseSharedMemory, &server, OnRequestReleaseSharedMemory) + IPC_MESSAGE_HANDLER_EX(LiveboxManager_RequestReleaseSharedMemoryForPD, &server, OnRequestReleaseSharedMemoryForPD) + IPC_END_MESSAGE_MAP() +} + +void +_LiveboxManagerStub::OnIpcServerStarted(const _IpcServer& server) +{ + SysLog(NID_APP, "\n"); +} + +void +_LiveboxManagerStub::OnIpcServerStopped(const _IpcServer& server) +{ + SysLog(NID_APP, "\n"); +} + +void +_LiveboxManagerStub::OnIpcClientConnected(const _IpcServer& server, int clientId) +{ + SysLog(NID_APP, "(clientId:%d)\n", clientId); + +} + +void +_LiveboxManagerStub::OnIpcClientDisconnected(const _IpcServer& server, int clientId) +{ + SysLog(NID_APP, "(appId:%ls, pid:%d, clientId:%d)\n", server.GetClientAppId().GetPointer(), server.GetClientProcessId(), clientId); +} + + +}}}//namespace Tizen { namespace Shell { namespace App { diff --git a/src/FShell_LiveboxPopup.cpp b/src/FShell_LiveboxPopup.cpp new file mode 100644 index 0000000..c144030 --- /dev/null +++ b/src/FShell_LiveboxPopup.cpp @@ -0,0 +1,135 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file FShell_Livebox.cpp + * @brief This is the implementation for the Livebox class. + */ + +#include +#include + +#include "provider_buffer.h" + +#include +#include +#include + +#include + +#include "FShell_LiveboxManagerService.h" +#include "FShell_LiveboxPopup.h" + +namespace Tizen { namespace Shell { namespace App +{ + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + + +const String LIVEBOX_TRAY_ON_CREATE(L"LiveboxTray='event=create'"); +const String LIVEBOX_TRAY_ON_DESTROY(L"LiveboxTray='event=destroy'"); +const String LIVEBOX_TRAY_ON_TOUCH(L"LiveboxTray='event=touch'"); + +_LiveboxPopup::_LiveboxPopup(const String& info, const String& appId, const String& instanceId, int width, int height, int priority) +:_LiveboxBase(TYPE_PD, info, appId, instanceId, width, height, priority) +{ + SysLog(NID_APP, "appId(%ls), instanceId(%ls), width(%d), height(%d)", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height); +} + +_LiveboxPopup::~_LiveboxPopup() +{ + SysLog(NID_APP, "appId(%ls), instanceId(%ls), width(%d), height(%d))", __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height); +} + + +void +_LiveboxPopup::OnPopupCreated(int width, int height) +{ + SysLog(NID_APP, "width(%d), height(%d)", width, height); + SendPopupCreateRequest(width, height); +} + +void +_LiveboxPopup::OnPopupDestoyed() +{ + SysLog(NID_APP, ""); + SendPopupDestroyRequest(); +} + +result +_LiveboxPopup::SendPopupCreateRequest(int width, int height) +{ + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + + pArgs->Add(*new String(Integer::ToString(width))); + pArgs->Add(*new String(Integer::ToString(height))); + + return SendRequestToApp( __appId, LIVEBOX_TRAY_ON_CREATE, pArgs.get()); +} + +result +_LiveboxPopup::SendPopupDestroyRequest() +{ + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__providerId)); + pArgs->Add(*new String(__info)); + + return SendRequestToApp( __appId, LIVEBOX_TRAY_ON_DESTROY, pArgs.get()); +} + +result +_LiveboxPopup::SendTouchEvent(buffer_event event, double timestamp, double x, double y) +{ + SysLog(NID_APP, ""); + /*if( HasValidClientId() == false ) + { + std::unique_ptr pArgs (new (std::nothrow) ArrayList); + pArgs->Construct(); + pArgs->Add(*new String(__instanceId)); + pArgs->Add(*new String(__info)); + pArgs->Add(*new String(Integer::ToString(event))); + pArgs->Add(*new String(Double::ToString(timestamp))); + pArgs->Add(*new String(Double::ToString(x))); + pArgs->Add(*new String(Double::ToString(y))); + + return SendRequestToApp( __appId, LIVEBOX_TRAY_ON_TOUCH, pArgs.get()); + } + else*/ + { +// SysAssertf( Tizen::App::AppManager::GetInstance()->IsRunning(__appId) == false, "application isn't running"); + LiveboxManagerService::GetInstance()->SendTouchEventForPD(__ipcClientId, __instanceId, event, timestamp, x, y); + } + return E_SUCCESS; +} + +result +_LiveboxPopup::RequestUpdateRemote() +{ + std::unique_ptr packageName(_StringConverter::CopyToCharArrayN(__providerId)); + std::unique_ptr id(_StringConverter::CopyToCharArrayN(__instanceId)); + + int ret = provider_send_desc_updated(packageName.get(), id.get(), null); + SysTryReturnResult(NID_APP, ret >= 0 , E_SYSTEM, "[E_SYSTEM] failed to provider_send_updated"); + + SysLog(NID_APP, "Done"); + return E_SUCCESS; +} + +} } } // Tizen::Shell::App { + diff --git a/src/OspLiveboxService.cpp b/src/OspLiveboxService.cpp new file mode 100644 index 0000000..fb8cc5e --- /dev/null +++ b/src/OspLiveboxService.cpp @@ -0,0 +1,79 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file OspLiveboxService.cpp + * @brief This is the implementation for the OspLiveboxService class. + */ + +#include "FShell_LiveboxManagerService.h" +#include "OspLiveboxService.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::System; +using namespace Tizen::Shell::App; + + +OspLiveboxService::OspLiveboxService() +{ +} + +OspLiveboxService::~OspLiveboxService() +{ +} + +ServiceApp* +OspLiveboxService::CreateInstance(void) +{ + // Create the instance through the constructor. + return new OspLiveboxService(); +} + +bool +OspLiveboxService::OnAppInitializing(AppRegistry& appRegistry) +{ + AppLog("Enter."); + + LiveboxManagerService* pSvc = LiveboxManagerService::GetInstance(); + AppAssertf( pSvc != null, "LiveboxManagerService::GetInstance() failed."); + + return true; +} + +bool +OspLiveboxService::OnAppInitialized(void) +{ + return true; +} + +bool +OspLiveboxService::OnAppWillTerminate(void) +{ + return true; +} + +bool +OspLiveboxService::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination) +{ + return true; +} + +void +OspLiveboxService::OnLowMemory(void) +{ +} + +void +OspLiveboxService::OnBatteryLevelChanged(BatteryLevel batteryLevel) +{ +} diff --git a/src/OspLiveboxServiceEntry.cpp b/src/OspLiveboxServiceEntry.cpp new file mode 100644 index 0000000..615a5d3 --- /dev/null +++ b/src/OspLiveboxServiceEntry.cpp @@ -0,0 +1,74 @@ +// +// Open Service Platform +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// All rights reserved. +// +// This software contains confidential and proprietary information +// of Samsung Electronics Co., Ltd. +// The user of this software agrees not to disclose, disseminate or copy such +// Confidential Information and shall use the software only in accordance with +// the terms of the license agreement the user entered into with Samsung. +// + +/** + * @file OspLiveboxService.cpp + * @brief This file contains the Tizen application entry point. + */ + +#include "OspLiveboxService.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +_EXPORT_ int OspMain(int argc, char *pArgv[]); +#ifdef _PROFILE +extern void start_profile (void); +extern void end_profile (void); +#else +#define start_profile() +#define end_profile() +#endif + + +/** + * The entry function of Tizen C++ application called by the operating system. + */ +int +OspMain(int argc, char *pArgv[]) +{ + result r = E_SUCCESS; + + AppLog("Application started."); + ArrayList* pArgs = new ArrayList(); + pArgs->Construct(); + for (int i = 0; i < argc; i++) + pArgs->Add(*(new String(pArgv[i]))); + + start_profile(); + r = Tizen::App::ServiceApp::Execute(OspLiveboxService::CreateInstance, pArgs); + if (IsFailed(r)) + { + AppLogException("Application execution failed-[%s].", GetErrorMessage(r)); + } + end_profile(); + + AppLog("arg count %d", pArgs->GetCount()); + + for(int i =0 ; i < pArgs->GetCount(); i++) + { + AppLog("%ls", dynamic_cast(pArgs->GetAt(i))); + } + pArgs->RemoveAll(true); + delete pArgs; + AppLog("Application finished."); + + return static_cast(r); +} +#ifdef __cplusplus +} +#endif // __cplusplus diff --git a/system-service-export.ver b/system-service-export.ver new file mode 100755 index 0000000..68c06a8 --- /dev/null +++ b/system-service-export.ver @@ -0,0 +1,6 @@ +{ +global: + OspMain; +local: + *; +}; -- 2.34.1