From: Sehong Na Date: Sat, 31 May 2014 03:29:08 +0000 (+0900) Subject: Initialize Tizen 2.3 X-Git-Tag: 2.3a_release X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=65b8cb94e656784c5790b605ee8a0950fcf29153;p=apps%2Fosp%2FInstaller.git Initialize Tizen 2.3 --- 65b8cb94e656784c5790b605ee8a0950fcf29153 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ffcec8b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/Installer/Debug +/Installer/crash-info +/Installer/.sign +/InstallerService/Debug +/InstallerService/crash-info + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..6c2f176 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,5 @@ +PROJECT(Installer) + +ADD_SUBDIRECTORY(Installer) +ADD_SUBDIRECTORY(InstallerService) + diff --git a/Installer/.cproject b/Installer/.cproject new file mode 100644 index 0000000..d68001d --- /dev/null +++ b/Installer/.cproject @@ -0,0 +1,446 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Installer/.project b/Installer/.project new file mode 100644 index 0000000..6beb7c7 --- /dev/null +++ b/Installer/.project @@ -0,0 +1,100 @@ + + + Installer + + + InstallerService + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + sbi-make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/$(projectName)/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + true + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + + + 0 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + diff --git a/Installer/CMakeLists.txt b/Installer/CMakeLists.txt new file mode 100644 index 0000000..01c55bd --- /dev/null +++ b/Installer/CMakeLists.txt @@ -0,0 +1,30 @@ +# Target name and AppID +SET(this_target Installer) +SET(PKG_ID D7eOJquGtL) + +# include directory +INCLUDE_DIRECTORIES( + /usr/include/osp + inc + ) + +# Source files +FILE(GLOB ${this_target}_SOURCE_FILES src/*.cpp) + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") + +# Create executable +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") +ADD_EXECUTABLE (${this_target} ${${this_target}_SOURCE_FILES}) + +# Set link libraries and link options +TARGET_LINK_LIBRARIES(${this_target} -L/usr/lib/osp osp-appfw osp-uifw pthread) +TARGET_LINK_LIBRARIES(${this_target} -Xlinker --allow-shlib-undefined -pthread -pie) + +# Copy info, data, res, and icons directories +INSTALL(TARGETS ${this_target} DESTINATION ../usr/apps/${PKG_ID}/bin) + +# Copy resource +INSTALL(FILES ${CMAKE_SOURCE_DIR}/manifest.xml DESTINATION ../usr/apps/${PKG_ID}/info) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/Installer/res DESTINATION ../usr/apps/${PKG_ID}) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/Installer/shared DESTINATION ../usr/apps/${PKG_ID}) diff --git a/Installer/inc/AppResourceId.h b/Installer/inc/AppResourceId.h new file mode 100644 index 0000000..19cb6aa --- /dev/null +++ b/Installer/inc/AppResourceId.h @@ -0,0 +1,70 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file AppResourceId.h + * @brief This is the header file for resource definition. + */ + +#ifndef _APP_RESOURCE_ID_H_ +#define _APP_RESOURCE_ID_H_ + +extern const wchar_t* IDC_BUTTON_CANCEL; +extern const wchar_t* IDC_BUTTON_INSTALL; +extern const wchar_t* IDC_BUTTON_LAUNCH; +extern const wchar_t* IDC_BUTTON_REINSTALL; +extern const wchar_t* IDC_LABEL; +extern const wchar_t* IDC_LABEL_EX; +extern const wchar_t* IDC_LABEL_MAIN_TEXT; +extern const wchar_t* IDC_LABEL_MESSAGE; +extern const wchar_t* IDC_LABEL_SUB_TEXT; +extern const wchar_t* IDC_LABEL_VERSION; +extern const wchar_t* IDC_PANEL; +extern const wchar_t* IDC_SECTIONTABLEVIEW; +extern const wchar_t* IDL_DETAIL_FORM; +extern const wchar_t* IDL_INSTALLED_POPUP; +extern const wchar_t* IDL_PANEL_BACKGROUND_BUTTON_ITEM; +extern const wchar_t* IDL_PANEL_EXPANDABLE_ITEM; +extern const wchar_t* IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB; +extern const wchar_t* IDS_APINST_BODY_INSTALLED_VERSION_C_ABB; +extern const wchar_t* IDS_APINST_BODY_INSTALLING_PS_ING; +extern const wchar_t* IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA; +extern const wchar_t* IDS_APINST_BODY_UNABLE_TO_INSTALL_NOT_ENOUGH_MEMORY_ABB; +extern const wchar_t* IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB; +extern const wchar_t* IDS_APINST_BUTTON_OPEN; +extern const wchar_t* IDS_APINST_BUTTON_REINSTALL; +extern const wchar_t* IDS_APINST_BUTTON_UPDATE; +extern const wchar_t* IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB; +extern const wchar_t* IDS_APINST_HEADER_WARNING; +extern const wchar_t* IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED; +extern const wchar_t* IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION; +extern const wchar_t* IDS_APINST_POP_FAILED; +extern const wchar_t* IDS_APINST_POP_INSTALLED; +extern const wchar_t* IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED; +extern const wchar_t* IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID; +extern const wchar_t* IDS_PB_POP_ERROR; +extern const wchar_t* IDS_ST_SK3_CANCEL; +extern const wchar_t* ID_SCNT_DETAIL_SCENE; + +enum +{ + IDA_BUTTON_REINSTALL = 10000, + IDA_BUTTON_LAUNCH, + IDA_BUTTON_CANCEL, + IDA_BUTTON_INSTALL = 1000, +}; + +#endif // _APP_RESOURCE_ID_H_ diff --git a/Installer/inc/IstDetailForm.h b/Installer/inc/IstDetailForm.h new file mode 100644 index 0000000..b09ff91 --- /dev/null +++ b/Installer/inc/IstDetailForm.h @@ -0,0 +1,76 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file IstDetailForm.h + * @brief This file contains declaration of DetailForm class, which acts as a + * application installer displaying a list of all the privilege description in the TPK file. + */ + +#ifndef _IST_DETAIL_FORM_H_ +#define _IST_DETAIL_FORM_H_ + +#include +#include +#include +#include + +class DetailForm + : public Tizen::Ui::Controls::Form + , public virtual Tizen::Ui::IActionEventListener + , public virtual Tizen::Ui::Controls::IFormBackEventListener + , public virtual Tizen::Ui::Controls::ISectionTableViewItemEventListener + , public virtual Tizen::Ui::Controls::ISectionTableViewItemProviderF + , public virtual Tizen::Ui::Scenes::ISceneEventListener + , public virtual Tizen::Ui::IOrientationEventListener +{ +public: + DetailForm(void); + virtual ~DetailForm(void); + result Initialize(); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int sectionIndex, int itemIndex, float itemWidth); + virtual bool DeleteItem(int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem); + virtual float GetDefaultItemHeight(void); + virtual int GetItemCount(int sectionIndex); + virtual int GetSectionCount(void); + virtual Tizen::Base::String GetSectionFooter(int sectionIndex); + virtual Tizen::Base::String GetSectionHeader(int sectionIndex); + virtual bool HasSectionFooter(int sectionIndex); + virtual bool HasSectionHeader(int sectionIndex); + virtual void UpdateItem(int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem); + virtual void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::SectionTableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated); + virtual void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::SectionTableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status); + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); +private: + bool GetPrivilegeListIndex(int actualIndex, int& privilegeIndex); + float GetTextHeight(const Tizen::Base::String& text, const Tizen::Graphics::Font& font, float width); +private: + Tizen::Base::Collection::ArrayList* __pPrivilegeList; + Tizen::Graphics::Bitmap* __pExpandCloseIcon; + Tizen::Graphics::Bitmap* __pExpandOpenIcon; + bool* __pExposedItemList; + float __fontSize; + float __childFontSize; +}; + +#endif diff --git a/Installer/inc/IstFormFactory.h b/Installer/inc/IstFormFactory.h new file mode 100644 index 0000000..9ba4fee --- /dev/null +++ b/Installer/inc/IstFormFactory.h @@ -0,0 +1,38 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + *@file IstFormFactory.h + *@brief This file contains the implementation FormFactory class, which manages + * all the forms of the application. + */ + +#ifndef _IST_FORM_FACTORY_H_ +#define _IST_FORM_FACTORY_H_ + +#include + +class FormFactory + : public virtual Tizen::Ui::Scenes::IFormFactory +{ +public: + FormFactory(void); + virtual ~FormFactory(void); + + virtual Tizen::Ui::Controls::Form* CreateFormN(const Tizen::Base::String& formId, const Tizen::Ui::Scenes::SceneId& sceneId); +}; + +#endif // _IST_FORM_FACTORY_H_ diff --git a/Installer/inc/IstInstalledPopup.h b/Installer/inc/IstInstalledPopup.h new file mode 100644 index 0000000..c376c2a --- /dev/null +++ b/Installer/inc/IstInstalledPopup.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file InstalledPopup.h + * @brief This file contains declaration of InstalledPopup class. + */ + +#ifndef _IST_INSTALLED_POPUP_H_ +#define _IST_INSTALLED_POPUP_H_ + +#include +#include + +class InstalledPopup + : public Tizen::Ui::Controls::Popup + , public virtual Tizen::Ui::IActionEventListener + , public virtual Tizen::Ui::IPropagatedKeyEventListener +{ +public: + InstalledPopup(); + virtual ~InstalledPopup(); + result Initialize(Tizen::Ui::Control* pTarget); + result RequestPopup(const Tizen::Base::String& appName, const Tizen::Base::String& installedVersion, + const Tizen::Base::String& currentVersion, bool isLaunchable); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + virtual bool OnKeyPressed(Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;}; + virtual bool OnKeyReleased(Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo); + virtual bool OnPreviewKeyPressed(Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;}; + virtual bool OnPreviewKeyReleased(Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;}; +private: + Tizen::Ui::Control* __pTarget; + Tizen::Base::String __installMessage; + Tizen::Base::String __versionMessage; + bool __isLaunchable; +}; + +#endif /* _IST_INSTALLED_POPUP_H_ */ diff --git a/Installer/inc/IstInstallerApp.h b/Installer/inc/IstInstallerApp.h new file mode 100644 index 0000000..260869b --- /dev/null +++ b/Installer/inc/IstInstallerApp.h @@ -0,0 +1,54 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file IstInstallerApp.h + * @brief This file contains the declaration of InstallerApp Class, + * which provides basic features necessary to define an UiApp. + */ + +#ifndef _IST_INSTALLER_APP_H_ +#define _IST_INSTALLER_APP_H_ + +#include +#include +#include + +class InstallerApp + : public Tizen::App::UiApp + , public virtual Tizen::App::IAppControlProviderEventListener +{ +public: + InstallerApp(void); + virtual~InstallerApp(void); + const Tizen::App::Package::PackageInfo* GetPackageInfo(void) const; + Tizen::Base::String GetPackageFilePath(void) const; + + virtual bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry); + virtual bool OnAppInitialized(void); + virtual bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false); + virtual void OnBackground(void); + virtual void OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String& operationId, + const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData); + + static Tizen::App::UiApp* CreateInstance(void); + +private: + Tizen::App::Package::PackageInfo* __pPackageInfo; + Tizen::Base::String __packageFilePath; +}; + +#endif // _IST_INSTALLER_APP_H_ diff --git a/Installer/inc/IstMainFrame.h b/Installer/inc/IstMainFrame.h new file mode 100644 index 0000000..3fe106b --- /dev/null +++ b/Installer/inc/IstMainFrame.h @@ -0,0 +1,45 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file IstMainFrame.h + * @brief This file contains declaration of MainFrame class, which is the main frame of the application. + */ + +#ifndef _IST_MAIN_FRAME_H_ +#define _IST_MAIN_FRAME_H_ + +#include +#include +#include +#include "IstInstalledPopup.h" + +class MainFrame + : public Tizen::Ui::Controls::Frame +{ +public: + MainFrame(void); + virtual ~MainFrame(void); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + virtual void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs); +private: + InstalledPopup* __pInstalledPopup; + Tizen::App::AppId __mainAppId; +}; + +#endif //_IST_MAIN_FRAME_H_ diff --git a/Installer/manifest.xml b/Installer/manifest.xml new file mode 100644 index 0000000..a8830ac --- /dev/null +++ b/Installer/manifest.xml @@ -0,0 +1,38 @@ + + + D7eOJquGtL + 1.0.0 + C++App + + true + true + true + + + 2.2 + + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/package.info + http://tizen.org/privilege/application.launch + + + + + + Installer + + + mainmenu.png + + + + application/vnd.tizen.package + application/vnd.wac.widget-sharing + application/widget + http://tizen.org/appcontrol/operation/view + + + + + + diff --git a/Installer/res/.workflow b/Installer/res/.workflow new file mode 100644 index 0000000..d7052d5 Binary files /dev/null and b/Installer/res/.workflow differ diff --git a/Installer/res/ara-AE.xml b/Installer/res/ara-AE.xml new file mode 100644 index 0000000..1f3b3d6 --- /dev/null +++ b/Installer/res/ara-AE.xml @@ -0,0 +1,25 @@ + + + + الإصدار الذي تم تنزيله: %ls + طلبات الإذن + إلغاء + قد يكون هذا التطبيق ضارا وربما يؤدي إلى تلف الجهاز أو البيانات + يوجد إصدار أحدث مثبت بالفعل على جهازك. سيتم استبدال الإصدار الأقدم به + يتعذر تثبيت هذا الملف. التنسيق غير صالح + تم التثبيت + تحديث + تحذير + فتح + فشل + يتعذر التثبيت. مساحة الذاكرة غير كافية + يوجد إصدار أقدم مثبت بالفعل على جهازك. سيتم تحديثه + الإصدار الذي تم تثبيته: %ls + السماح والتثبيت + خطأ + هذا الإصدار مثبت بالفعل على جهازك. ستتم إعادة تثبيته + يتم تثبيت %ls... + إعادة التثبيت + diff --git a/Installer/res/aze-AZ.xml b/Installer/res/aze-AZ.xml new file mode 100644 index 0000000..d6409a7 --- /dev/null +++ b/Installer/res/aze-AZ.xml @@ -0,0 +1,25 @@ + + + + Yüklənmiş versiya: %ls + İcazə sorğuları + Ləğv et + Bu proqram zərərli ola və cihaz və ya məlumatlarınızı zədələyə bilər + Daha yeni versiya artıq cihazınızda quraşdırılıb. O, köhnə versiya ilə əvəz ediləcək + Bu faylı quraşdırmaq mümkün deyil. Format səhvdir + Quruldu + Yenilə + Xəbərdarlıq + Aç + Mümkün olmadı + Quraşdırmaq mümkün deyil. Yaddaş azdır. + Daha köhnə versiya artıq cihazınızda quraşdırılıb. O, yenilənəcək + Quraşdırılmış versiya: %ls + İcazə ver və quraşdır + Xəta + Bu versiya artıq cihazınızda quraşdırılıb. O, yenidən quraşdırılacaq + Quraşdırılır %ls... + Yenidən quraşdır + diff --git a/Installer/res/bul-BG.xml b/Installer/res/bul-BG.xml new file mode 100644 index 0000000..da9c9ee --- /dev/null +++ b/Installer/res/bul-BG.xml @@ -0,0 +1,25 @@ + + + + Изтеглена версия: %ls + Искания за разрешения + Отмени + Това приложение може да е опасно и да навреди на устройството или данните ви + На устройството ви вече е инсталирана по-нова версия. Тя ще бъде заменена с по-старата версия + Този файл не може да се инсталира. Форматът е невалиден + Инсталирано + Актуализиране + Предупреждение + Отвори + Неуспешно + Не може да се инсталира. Няма достатъчно памет + На устройството ви вече е инсталирана по-стара версия. Тя ще се актуализира + Инсталирана версия: %ls + Позволи и инсталирай + Грешка + Тази версия вече е инсталирана на устройството ви. Тя ще се преинсталира + Инсталиране на %ls... + Преинсталиране + diff --git a/Installer/res/cat-ES.xml b/Installer/res/cat-ES.xml new file mode 100644 index 0000000..81cce2e --- /dev/null +++ b/Installer/res/cat-ES.xml @@ -0,0 +1,25 @@ + + + + Versió descarregada: %ls + Sol·licituds de permís + Cancel·lar + Aquesta aplicació pot ser perillosa i pot malmetre el seu dispositiu o les seves dades + Ja hi ha una versió més nova instal·lada al seu dispositiu. Se substituirà per la versió més antiga + No es pot instal·lar aquest fitxer. El format no és vàlid + Instal·lat + Actualitzar + Advertiment + Obrir + Error + No es pot desinstal·lar. No hi ha prou memòria + Ja hi ha una versió més antiga instal·lada al seu dispositiu. S'actualitzarà + Versió instal·lada: %ls + Permetre i instal·lar + Error + Aquesta versió ja està instal·lada al seu dispositiu. Es tornarà a instal·lar + Instal·lant %ls... + Reinstal·lar + diff --git a/Installer/res/ces-CZ.xml b/Installer/res/ces-CZ.xml new file mode 100644 index 0000000..9d987d8 --- /dev/null +++ b/Installer/res/ces-CZ.xml @@ -0,0 +1,25 @@ + + + + Stažená verze: %ls + Požadavky na oprávnění + Zrušit + Aplikace může být škodlivá a může poškodit zařízení nebo data + V zařízení je již nainstalována novější verze. Bude nahrazena starší verzí + Soubor se nepodařilo nainstalovat. Má neplatný formát + Nainstalováno + Aktualizovat + Upozornění + Otevřít + Nezdařilo se + Nelze nainstalovat. Nedostatek paměti + V zařízení je již nainstalována starší verze. Bude aktualizována + Instalovaná verze: %ls + Povolit a nainstalovat + Chyba + Tato verze je již v zařízení nainstalována. Bude nainstalována znovu + Instalace %ls... + Nainstalovat znovu + diff --git a/Installer/res/dan-DK.xml b/Installer/res/dan-DK.xml new file mode 100644 index 0000000..fcbf8a3 --- /dev/null +++ b/Installer/res/dan-DK.xml @@ -0,0 +1,25 @@ + + + + Overført version: %ls + Anm. om tilladelse + Annullér + Dette program kan være skadeligt og beskadige din enhed eller dine data + En nyere version er allerede installeret på din enhed. Den vil blive erstattet af den ældre version. + Kunne ikke installere denne fil. Formatet er ugyldigt. + Installeret + Opdatér + Advarsel + Åben + Mislykkedes + Kunne ikke installere. Ikke nok hukommelse. + En ældre version er allerede installeret på din enhed. Den vil blive opdateret. + Installeret version: %ls + Tillad, og installér + Fejl + Denne version er allerede installeret på din enhed. Den vil blive geninstalleret. + Installerer %ls ... + Geninstallér + diff --git a/Installer/res/deu-DE.xml b/Installer/res/deu-DE.xml new file mode 100644 index 0000000..9845ec2 --- /dev/null +++ b/Installer/res/deu-DE.xml @@ -0,0 +1,25 @@ + + + + Heruntergeladene Version: %ls + Berechtigung angefragt + Abbrechen + Diese Anwendung kann Ihr Gerät oder Ihre Daten beschädigen. + Auf Ihrem Gerät ist bereits eine neuere Version installiert. Diese wird durch die ältere Version ersetzt. + Installation dieser Datei nicht möglich. Das Format ist ungültig. + Installiert + Aktualisieren + Warnung + Offen + Fehlgeschlagen + Install. nicht möglich. Nicht genügend Speicher. + Auf Ihrem Gerät ist bereits eine ältere Version installiert. Diese wird aktualisiert. + Installierte Version: %ls + Zulassen und install. + Fehler + Diese Version ist bereits auf Ihrem Gerät installiert. Sie wird neu installiert. + %ls Installieren... + Neu installieren + diff --git a/Installer/res/ell-GR.xml b/Installer/res/ell-GR.xml new file mode 100644 index 0000000..feffd58 --- /dev/null +++ b/Installer/res/ell-GR.xml @@ -0,0 +1,25 @@ + + + + Ληφθείσα έκδοση: %ls + Αιτήματα δικαιωμάτων + Άκυρο + Αυτή η εφαρμογής ενδέχεται να είναι επιβλαβής και να καταστρέψει τη συσκευή ή τα δεδομένα σας + Έχει ήδη εγκατασταθεί η νεότερη έκδοση στη συσκευή σας. Θα αντικατασταθεί από την παλαιότερη έκδοση + Δεν είναι δυνατή η εγκατάσταση αυτού του αρχείου. Η μορφή δεν είναι έγκυρη + Εγκαταστάθηκε + Ενημέρωση + Προειδοποίηση + Άνοιγμα + Αποτυχία + Δεν ήταν δυνατή η εγκατάσταση. Ανεπαρκής μνήμη + Έχει ήδη εγκατασταθεί μια παλαιότερη έκδοση στη συσκευή σας. Θα ενημερωθεί + Εγκατεστημένη έκδοση: %ls + Αποδοχή και εγκατάσταση + Σφάλμα + Αυτή η έκδοση έχει ήδη εγκατασταθεί στη συσκευή σας. Θα γίνει επανάληψη της εγκατάστασης + Εγκατάσταση %ls... + Επανάληψη εγκατάστασης + diff --git a/Installer/res/eng-GB.xml b/Installer/res/eng-GB.xml new file mode 100644 index 0000000..3b44369 --- /dev/null +++ b/Installer/res/eng-GB.xml @@ -0,0 +1,25 @@ + + + + Downloaded version: %ls + Permission requests + Cancel + This application may be harmful and damage your device or data + A newer version is already installed on your device. It will be replaced with the older version. + Unable to install this file. The format is invalid. + Installed + Update + Warning + Open + Failed + Unable to install. Not enough memory. + An older version is already installed on your device. It will be updated. + Installed version: %ls + Allow and install + Error + This version is already installed on your device. It will be reinstalled. + Installing %ls... + Reinstall + diff --git a/Installer/res/eng-PH.xml b/Installer/res/eng-PH.xml new file mode 100644 index 0000000..3b44369 --- /dev/null +++ b/Installer/res/eng-PH.xml @@ -0,0 +1,25 @@ + + + + Downloaded version: %ls + Permission requests + Cancel + This application may be harmful and damage your device or data + A newer version is already installed on your device. It will be replaced with the older version. + Unable to install this file. The format is invalid. + Installed + Update + Warning + Open + Failed + Unable to install. Not enough memory. + An older version is already installed on your device. It will be updated. + Installed version: %ls + Allow and install + Error + This version is already installed on your device. It will be reinstalled. + Installing %ls... + Reinstall + diff --git a/Installer/res/eng-US.xml b/Installer/res/eng-US.xml new file mode 100644 index 0000000..7ad4395 --- /dev/null +++ b/Installer/res/eng-US.xml @@ -0,0 +1,25 @@ + + + + Downloaded version: %ls + Permission requests + Cancel + This application may be harmful, and may damage your device or data + A newer version is already installed on your device. It will be replaced with the older version. + Unable to install this file. The format is invalid. + Installed + Update + Warning + Open + Failed + Unable to install. Not enough memory. + An older version is already installed on your device. It will be updated. + Installed version: %ls + Allow and install + Error + This version is already installed on your device. It will be reinstalled. + Installing %ls... + Reinstall + diff --git a/Installer/res/est-EE.xml b/Installer/res/est-EE.xml new file mode 100644 index 0000000..e0555cf --- /dev/null +++ b/Installer/res/est-EE.xml @@ -0,0 +1,25 @@ + + + + Allalaetud versioon: %ls + Lubade taotlused + Tühista + See rakendus võib olla ohtlik ja võib kahjustada teie seadet või andmeid + Uuem versioon on teie seadmesse juba installitud. See asendatakse vanema versiooniga + Seda faili ei saa installida. Vale vorming + Installitud + Värskenda + Hoiatus + Ava + Nurjus + Ei saa installida. Mälu pole piisavalt + Vanem versioon on teie seadmesse juba installitud. Seda värskendatakse + Installitud versioon: %ls + Luba ja installi + Tõrge + See versioon on teie seadmesse juba installitud. See installitakse uuesti + Rakenduse %ls installimine... + Installi uuesti + diff --git a/Installer/res/eus-ES.xml b/Installer/res/eus-ES.xml new file mode 100644 index 0000000..bc6d20a --- /dev/null +++ b/Installer/res/eus-ES.xml @@ -0,0 +1,25 @@ + + + + Deskargatutako bertsioa: %ls + Baimen eskaera + Ezeztatu + Baliteke aplikazio hau kaltegarria izatea eta zure gailua edo datuak kaltetzea + Zure gailuan bertsio berriago bat dago instalatuta. Bertsio zaharragoarekin ordezkatuko da + Ezin da fitxategi hau instalatu. Formatua baliogabea da + Instalatuta + Eguneratu + Oharra + Ireki + Huts egin du + Ezin da instalatu. Ez dago nahikoa memoria + Zure gailuan bertsio zaharrago bat dago instalatuta. Eguneratu egingo da + Instalatutako bertsioa: %ls + Baimendu eta instalatu + Akatsa + Bertsio hau zure gailuan instalatuta dago. Berrinstalatu egingo da + %ls instalatzen... + Berriz instalatu + diff --git a/Installer/res/fin-FI.xml b/Installer/res/fin-FI.xml new file mode 100644 index 0000000..908f451 --- /dev/null +++ b/Installer/res/fin-FI.xml @@ -0,0 +1,25 @@ + + + + Ladattu versio: %ls + Lupapyynnöt + Peruuta + Tämä sovellus voi olla vaarallinen ja vahingoittaa laitetta tai tietoja + Laitteeseen on jo asennettu uudempi versio. Se korvataan vanhemmalla versiolla + Tätä tiedostoa ei voi asentaa. Sen muoto on virheellinen + Asennettu + Päivitä + Varoitus + Avaa + Epäonnistui + Ei voi asentaa. Muisti ei riitä + Laitteeseen on jo asennettu vanhempi versio. Se päivitetään + Asennettu versio: %ls + Salli ja asenna + Virhe + Tämä versio on jo asennettu laitteeseen. Se asennetaan uudelleen + Asennetaan %ls... + Asenna uudelleen + diff --git a/Installer/res/fra-CA.xml b/Installer/res/fra-CA.xml new file mode 100644 index 0000000..9d585ca --- /dev/null +++ b/Installer/res/fra-CA.xml @@ -0,0 +1,25 @@ + + + + Version téléchargée : %ls + Demandes d'autorisation + Annuler + Cette application peut être dangereuse et endommager votre appareil ou vos données + Une version plus récente est déjà installée sur votre appareil. Elle va être remplacée par la version plus ancienne + Impossible d'installer ce fichier. Le format n'est pas valide + Installé + Mise à jour + Avertissement + Ouvrir + Échec + Installation impossible. Mémoire insuffisante + Une version plus ancienne est déjà installée sur votre appareil. Elle va être mise à jour + Version installée : %ls + Autoriser et installer + Erreur + Cette version est déjà installée sur votre appareil. Elle va être réinstallée + Installation de %ls... + Réinstaller + diff --git a/Installer/res/fra-FR.xml b/Installer/res/fra-FR.xml new file mode 100644 index 0000000..8fce6ee --- /dev/null +++ b/Installer/res/fra-FR.xml @@ -0,0 +1,25 @@ + + + + Version téléchargée : %ls + Demandes d'autorisation + Annuler + Cette application peut être dangereuse et endommager votre appareil ou vos données + Une version plus récente est déjà installée sur votre appareil. Elle va être remplacée par la version plus ancienne + Impossible d'installer ce fichier. Le format n'est pas valide + Installée + Mise à jour + Avertissement + Ouvrir + Échec + Installation impossible. Mémoire insuffisante + Une version plus ancienne est déjà installée sur votre appareil. Elle va être mise à jour + Version installée : %ls + Autoriser et installer + Erreur + Cette version est déjà installée sur votre appareil. Elle va être réinstallée + Installation de %ls... + Réinstaller + diff --git a/Installer/res/gle-IE.xml b/Installer/res/gle-IE.xml new file mode 100644 index 0000000..086c21c --- /dev/null +++ b/Installer/res/gle-IE.xml @@ -0,0 +1,25 @@ + + + + Leagan íoslódáilte: %ls + Iarratais ar chead + Cuir ar ceal + Is féidir go ndéanfaidh an feidhmchlár seo dochar do do ghléas nó sonraí + Tá leagan níos nuaí suiteáilte ar do ghléas cheana. Athsholáthrófar é leis an leagan níos sine + Ní féidir an comhad seo a shuiteáil. Tá an fhormáid neamhbhailí + Suiteáilte + Nuashonraigh + Rabhadh + Oscail + Theip air + Ní féidir é a shuiteáil. Easpa cuimhne + Tá leagan níos sine suiteáilte ar do ghléas cheana. Nuashonrófar é + Leagan suiteáilte: %ls + Ceadaigh agus suiteáil + Earráid + Tá leagan seo suiteáilte ar do ghléas cheana. Athshuiteálfar é + Suiteáil %ls... + Athshuiteáil + diff --git a/Installer/res/glg-ES.xml b/Installer/res/glg-ES.xml new file mode 100644 index 0000000..559d280 --- /dev/null +++ b/Installer/res/glg-ES.xml @@ -0,0 +1,25 @@ + + + + Versión descargada: %ls + Solicitudes de permiso + Cancelar + É posible que esta aplicación resulte daniña e dane o teu dispositivo ou datos + Xa hai unha versión máis nova instalada no teu dispositivo. Será substituída pola versión anterior + Non se pode instalar este arquivo. O formato non é válido + Instalados + Actualizar + Aviso + Abrir + Erro + Non se pode instalar. Non hai memoria suficiente + Xa hai unha versión anterior instalada no teu dispositivo. Actualizarase + Versión instalada: %ls + Permitir e instalar + Erro + Esta versión xa está instalada no teu dispositivo. Reinstalarase + Instalando %ls... + Reinstalar + diff --git a/Installer/res/hin-IN.xml b/Installer/res/hin-IN.xml new file mode 100644 index 0000000..0b81606 --- /dev/null +++ b/Installer/res/hin-IN.xml @@ -0,0 +1,25 @@ + + + + डाउनलोड किया गया संस्करण: %ls + अनु‍मति के अनुरोध + रद्द + यह एप्लीकेशन हानिकारक हो सकता है और आपके डिवाइस या डाटा को क्षति पहुँचा सकती है + एक नया संस्करण आपके डिवाइस पर पहले से स्थापित है। इसे पुराने संस्करण के साथ बदला जाएगा। + इस फ़ाइल को स्थापित करने में अक्षम। फ़ॉर्मेट अमान्य है। + स्थापित किया + अपडेट करें + चेतावनी + खोलें + विफल + स्थापित करने में अक्षम। पर्याप्त मेमोरी नहीं। + एक पुराना संस्करण आपके डिवाइस पर पहले से स्थापित है। इसे अपडेट किया जाएगा। + स्थापित संस्करण: %ls + अनुमति दें और स्थापित करें + त्रुटि + यह संस्करण आपके डिवाइस पर पहले से स्थापित है। इसे पुन: %ls स्थापित किया जाएगा। + %ls स्थापित हो रहा है... + पुन: स्थापना करें + diff --git a/Installer/res/hrv-HR.xml b/Installer/res/hrv-HR.xml new file mode 100644 index 0000000..5ddc699 --- /dev/null +++ b/Installer/res/hrv-HR.xml @@ -0,0 +1,25 @@ + + + + Skinuta verzija: %ls + Zahtjevi za odobrenje + Prekid + Ova aplikacija može biti šetna i može oštetiti vaš uređaj ili podatke + Novija verzija već je instalirana na vašem uređaju. Zamijenit će se starijom verzijom + Nemoguće instalirati ovu datoteku. Neispravan format + Instalirano + Aktualiziraj + Upozorenje + Otvori + Neuspješno + Nemoguće instalirati. Nedovoljno memorije + Starija verzija već je instalirana na vašem uređaju. Aktualizirat će se + Instalirana verzija: %ls + Dopusti i instaliraj + Greška + Ova verzija već je instalirana na vašem uređaju. Ponovno će se instalirati + Instaliranje %ls... + Ponovno instaliraj + diff --git a/Installer/res/hun-HU.xml b/Installer/res/hun-HU.xml new file mode 100644 index 0000000..03540e2 --- /dev/null +++ b/Installer/res/hun-HU.xml @@ -0,0 +1,25 @@ + + + + Letöltött verzió: %ls + Engedélykérések + Mégse + Ez az alkalmazás káros lehet, sérülést okozhat az eszközben vagy az adatokban + Már telepítve van az eszközön egy újabb verzió. Ez le lesz cserélve a régebbi verzióra + Nem lehet telepíteni a fájlt. A formátum érvénytelen + Telepítve + Frissítés + Figyelmeztetés + Megnyitás + Sikertelen + Nem lehet telepíteni. Nincs elég memória + Már telepítve van az eszközön egy régebbi verzió. Ez frissülni fog + Telepített verzió: %ls + Engedélyezi és telepíti + Hiba + Ez a verzió már telepítve van az eszközön. Újra lesz telepítve + %ls telepítése... + Újratelepítés + diff --git a/Installer/res/hye-AM.xml b/Installer/res/hye-AM.xml new file mode 100644 index 0000000..c2ff1de --- /dev/null +++ b/Installer/res/hye-AM.xml @@ -0,0 +1,25 @@ + + + + Ներբեռնված վարկածը՝ %ls + Թույլտվության հարցումներ + Չեղարկել + Այս ծրագիրը կարող է վնասակար լինել և վնասել Ձեր սարքը կամ տվյալները + Ավելի նոր վարկած է արդեն տեղադրված Ձեր սարքում: %ls Այն կփոխարինվի ավելի հին վարկածով + Անհնար է տեղադրել այս ֆայլը. ձևաչափն անվավեր է + Տեղադրված է + Թարմացնել + Զգուշացում + Բացել + Ձախողվեց + Անհնար է տեղադրել. հիշողությունը բավարար չէ: %ls + Ավելի հին վարկած է արդեն տեղադրված Ձեր սարքում: %ls Այն կթարմացվի + Տեղադրված վարկածը՝ %ls + Թույլ տալ և տեղադրել + Սխալ + Այս վարկածն արդեն տեղադրված է Ձեր սարքում: %ls Այն կվերատեղադրվի + Տեղադրվում է %ls... + Վերատեղադրել + diff --git a/Installer/res/isl-IS.xml b/Installer/res/isl-IS.xml new file mode 100644 index 0000000..a95a291 --- /dev/null +++ b/Installer/res/isl-IS.xml @@ -0,0 +1,25 @@ + + + + Sótt útgáfa: %ls + Leyfisbeiðnir + Hætta við + Þetta forrit gæti verið skaðlegt og skemmt tækið þitt eða gögn + Nýrri útgáfa er þegar sett upp í tækinu. Henni verður skipt út fyrir eldri útgáfuna + Ekki er hægt að setja upp þessa skrá. Sniðið er ógilt + Uppsett + Uppfæra + Viðvörun + Opna + Mistókst + Ekki hægt að setja upp. Ekki nægt minni + Eldri útgáfa er þegar sett upp í tækinu. Hún verður uppfærð + Uppsett útgáfa: %ls + Leyfa og setja upp + Villa + Þessi útgáfa er þegar sett upp í tækinu. Hún verður sett upp aftur + Set upp %ls... + Setja upp aftur + diff --git a/Installer/res/ita-IT.xml b/Installer/res/ita-IT.xml new file mode 100644 index 0000000..92c6b9a --- /dev/null +++ b/Installer/res/ita-IT.xml @@ -0,0 +1,25 @@ + + + + Versione scaricata: %ls + Richieste autorizzazione + Annulla + Quest'applicazione potrebbe essere dannosa e danneggiare il dispositivo o i dati + Una versione più recente è già installata sul dispositivo in uso. Verrà sostituita con quella meno recente + Impossibile installare questo file perché il formato non è valido + Installazione eseguita + Aggiorna + Avviso + Apri + Errore + Impossibile installare. Memoria insufficiente + Una versione precedente è già installata sul dispositivo in uso. Verrà aggiornata + Versione installata: %ls + Consenti e installa + Errore + Questa versione è già installata sul dispositivo in uso. Verrà installata nuovamente + Installazione di %ls in corso... + Installa nuovamente + diff --git a/Installer/res/jpn-JP.xml b/Installer/res/jpn-JP.xml new file mode 100644 index 0000000..0c7fa61 --- /dev/null +++ b/Installer/res/jpn-JP.xml @@ -0,0 +1,25 @@ + + + + ダウンロードしたバージョン: %ls + 権限の要求 + キャンセル + このアプリケーションは有害であり、お客様の端末やデータを破損する恐れがあります。 + 新しいバージョンが既に端末にインストールされています。古いバージョンに置き換えられます。 + このファイルをインストールできません。フォーマットが無効です。 + インストールしました。 + 更新 + 警告 + 開く + 失敗しました。 + インストールできません。メモリ空き容量が低下しています。 + 古いバージョンが既に端末にインストールされています。更新します。 + インストール済みのバージョン: %ls + 許可してインストール + エラー + このバージョンは既に端末にインストールされています。再インストールします。 + %lsをインストール中... + 再インストール + diff --git a/Installer/res/kat-GE.xml b/Installer/res/kat-GE.xml new file mode 100644 index 0000000..7bef330 --- /dev/null +++ b/Installer/res/kat-GE.xml @@ -0,0 +1,25 @@ + + + + ჩამოტვირთული ვერსია: %ls + საჭიროა ნებართვა + გაუქმება + ეს პროგრამა შეიძლება საზიანო იყოს და დააზიანოს თქვენი მოწყობილობა ან მონაცემები + შედარებით ახალი ვერსია უკვე დაინსტალირებულია მოწყობილობაში. იგი შეიცვლება უფრო ძველი ვერსიით + ამ ფაილს ვერ დააინსტალირებთ. ფორმატი არასწორია + დაინსტალირდა + განახლება + გაფრთხილება + გახსნა + ვერ შესრულდა + ვერ ინსტალირდება. არ არის საკმარისი მეხსიერება + შედარებით ძველი ვერსია უკვე დაინსტალირებულია მოწყობილობაში. იგი განახლდება + დაინსტალირებული ვერსია: %ls + ნებართვა და ინსტალაცია + შეცდომა + ეს ვერსია უკვე დაინსტალირებულია მოწყობილობაში. იგი თავიდან დაინსტალირდება + ინსტალირდება %ls... + თავიდან დაინსტალირება + diff --git a/Installer/res/kaz-KZ.xml b/Installer/res/kaz-KZ.xml new file mode 100644 index 0000000..e6c9148 --- /dev/null +++ b/Installer/res/kaz-KZ.xml @@ -0,0 +1,25 @@ + + + + Жүктелген нұсқа: %ls + Рұқсат сұрайды + Тоқтату + Бұл бағдарлама құрылғыңыз немесе деректеріңізге зиянды немесе зақым келтіруі мүмкін + Жаңа нұсқа құрылғыңызда әлдеқашан орнатылған. Ол ескі нұсқамен ауыстырылады + Бұл файлды орнату мүмкін емес. Пішім жарамсыз + Орнатылды + Жаңарту + Ескерту + Ашу + Үзіліп кетті + Орнату мүмкін емес. Жад жеткіліксіз + Ескі нұсқа құрылғыңызда әлдеқашан орнатылған. Ол жаңартылады + Орнатылған нұсқа: %ls + Рұқсат беру және орнату + Қате + Бұл нұсқа құрылғыңызда әлдеқашан орнатылған. Ол қайта орнатылады + %ls орнатылуда... + Қайта орнату + diff --git a/Installer/res/kor-KR.xml b/Installer/res/kor-KR.xml new file mode 100644 index 0000000..011c12d --- /dev/null +++ b/Installer/res/kor-KR.xml @@ -0,0 +1,25 @@ + + + + 다운로드한 버전: %ls + 권한 요청 + 취소 + 이 애플리케이션은 유해하여 디바이스나 데이터를 손상시킬 수 있습니다 + 새 버전이 이미 디바이스에 설치되어 있습니다. 이전 버전으로 교체합니다. + 형식이 바르지 않아 이 파일을 설치할 수 없습니다 + 설치되었습니다 + 업데이트 + 경고 + 열기 + 실패하였습니다 + 메모리가 부족하여 설치할 수 없습니다 + 이전 버전이 이미 디바이스에 설치되어 있습니다. 업데이트합니다. + 설치한 버전: %ls + 허용 및 설치 + 오류가 발생하였습니다 + 이 버전이 이미 디바이스에 설치되어 있습니다. 다시 설치합니다. + %ls 설치 중... + 다시 설치 + diff --git a/Installer/res/lav-LV.xml b/Installer/res/lav-LV.xml new file mode 100644 index 0000000..10dbcda --- /dev/null +++ b/Installer/res/lav-LV.xml @@ -0,0 +1,25 @@ + + + + Lejupielādētā versija: %ls + Atļauju pieprasījumi + Atcelt + Šī programma var būt kaitīga un sabojāt jūsu ierīci vai datus + Jūsu ierīcē jau ir instalēta jaunāka versija. Tā tiks aizstāta ar vecāko versiju + Nevar instalēt šo failu. Nederīgs formāts + Instalēšana pabeigta + Atjaunināt + Brīdinājums + Atvērt + Neizdevās + Nevar instalēt. Nepietiek atmiņas + Jūsu ierīcē jau ir instalēta vecāka versija. Tā tiks atjaunināta + Instalētā versija: %ls + Atļaut un instalēt + Kļūda + Jūsu ierīcē jau ir instalēta šī versija. Tā tiks instalēta atkārtoti + Instalē %ls... + Instalēt atkāroti + diff --git a/Installer/res/lit-LT.xml b/Installer/res/lit-LT.xml new file mode 100644 index 0000000..497daff --- /dev/null +++ b/Installer/res/lit-LT.xml @@ -0,0 +1,25 @@ + + + + Atsisiųsta versija: %ls + Leidimų prašymai + Atšaukti + Ši programa gali pakenkti ir pažeisti įrenginį ir duomenis + Naujesnė versija jau įdiegta jūsų įrenginyje. Ji bus pakeista senesne versija + Neįmanoma įdiegti šio failo. Formatas netinkamas + Įdiegta + Atnaujinti + Perspėjimas + Atidaryti + Nepavyko + Neįmanoma įdiegti. Nepakanka atminties + Senesnė versija jau įdiegta jūsų įrenginyje. Ji bus atnaujinta + Įdiegta versija: %ls + Leisti ir įdiegti + Klaida + Ši versija jau įdiegta jūsų įrenginyje. Jis bus įdiegta dar kartą + Diegiama %ls... + Įdiegti iš naujo + diff --git a/Installer/res/mkd-MK.xml b/Installer/res/mkd-MK.xml new file mode 100644 index 0000000..b399052 --- /dev/null +++ b/Installer/res/mkd-MK.xml @@ -0,0 +1,25 @@ + + + + Преземена верзија: %ls + Барања за дозвола + Откажи + Оваа апликација може да биде штетна и да го оштети Вашиот уред или податоците + На уредот е веќе инсталирана понова верзија. Ќе се замени со постарата верзија + Не може да се инсталира фајлот. Форматот е неважечки + Инсталирано + Ажурирај + Предупредување + Отвори + Неуспешно + Не може да се инсталира. Нема доволно меморија + На уредот е веќе инсталирана постара верзија. Ќе се ажурира + Инсталирана верзија: %ls + Дозволи и инсталирај + Грешка + Оваа верзија е веќе инсталирана на уредот. Ќе се одинсталира + Се инсталира %ls... + Преинсталирај + diff --git a/Installer/res/nld-NL.xml b/Installer/res/nld-NL.xml new file mode 100644 index 0000000..ae6f19c --- /dev/null +++ b/Installer/res/nld-NL.xml @@ -0,0 +1,25 @@ + + + + Gedownloade versie: %ls + Verzoeken om toestemming + Annul. + Deze applicatie kan schadelijk zijn voor uw apparaat of gegevens + Er is al een nieuwere versie op uw apparaat geïnstalleerd. Deze wordt vervangen door de oudere versie + Kan dit bestand niet installeren. De indeling is ongeldig + Geïnstalleerd + Bijwerken + Waarschuwing + Openen + Mislukt + Kan niet installeren. Onvoldoende geheugen + Er is al een oudere versie op uw apparaat geïnstalleerd. Deze wordt bijgewerkt + Geïnstalleerde versie: %ls + Toestaan en installeren + Fout + Deze versie is al op uw apparaat geïnstalleerd. De versie wordt opnieuw geïnstalleerd + %ls installeren... + Opnieuw installeren + diff --git a/Installer/res/nob-NO.xml b/Installer/res/nob-NO.xml new file mode 100644 index 0000000..2033d64 --- /dev/null +++ b/Installer/res/nob-NO.xml @@ -0,0 +1,25 @@ + + + + Nedlastet versjon: %ls + Tillatelsesforespørsler + Avbryt + Dette programmet kan være skadelig og vil kunne skade enheten din eller data på den + Det er allerede installert en nyere versjon på enheten. Den vil bli erstattet med den eldre versjonen + Kan ikke installere denne filen. Formatet er ugyldig + Installert + Oppdater + Advarsel + Åpne + Det oppstod en feil + Kan ikke installere. Ikke nok minne + Det er allerede installert en eldre versjon på enheten. Den vil bli oppdatert + Installert versjon: %ls + Tillat og installer + Feil + Denne versjonen er allerede installert på enheten. Den vil bli installert på nytt + Installerer %ls... + Installer på nytt + diff --git a/Installer/res/pol-PL.xml b/Installer/res/pol-PL.xml new file mode 100644 index 0000000..822e258 --- /dev/null +++ b/Installer/res/pol-PL.xml @@ -0,0 +1,25 @@ + + + + Pobrana wersja: %ls + Żądania zezwoleń + Anuluj + Ta aplikacja może być szkodliwa i wyrządzić szkody na Twoim urządzeniu, jak też uszkodzić dane + Na urządzeniu zainstalowano już nowszą wersję. Zostanie ona zastąpiona starszą wersją + Nie można zainstalować tego pliku. Format jest nieprawidłowy + Zainstalowano + Aktualizuj + Ostrzeżenie + Otwórz + Błąd + Nie można zainstalować. Za mało pamięci + W urządzeniu zainstalowano już starszą wersję. Zostanie ona zaktualizowana + Zainstalowana wersja: %ls + Zezwól i zainstaluj + Błąd + W urządzeniu zainstalowano już tę wersję. Zostanie ona ponownie zainstalowana + Instalowanie %ls... + Zainstaluj ponownie + diff --git a/Installer/res/por-BR.xml b/Installer/res/por-BR.xml new file mode 100644 index 0000000..2722294 --- /dev/null +++ b/Installer/res/por-BR.xml @@ -0,0 +1,25 @@ + + + + Versão baixada: %ls + Solicitações permissão + Cancelar + Este aplicativo pode ser prejudicial e danificar o dispositivo ou dados + Uma versão mais recente já está instalada no dispositivo. Ela será substituída pela versão anterior + Não é possível instalar este arquivo. O formato é inválido + Instalado + Atualizar + Aviso + Abrir + Falhou + Não é possível instalar. Sem memória suficiente + Uma versão mais antiga já está instalada no dispositivo. Ela será atualizada + Versão instalada: %ls + Permitir e instalar + Erro + Esta versão já está instalada no dispositivo. Ela será reinstalada + Instalando %ls... + Reinstalar + diff --git a/Installer/res/por-PT.xml b/Installer/res/por-PT.xml new file mode 100644 index 0000000..ba52d24 --- /dev/null +++ b/Installer/res/por-PT.xml @@ -0,0 +1,25 @@ + + + + Versão transferida: %ls + Pedidos de permissão + Cancelar + Esta aplicação pode ser perigosa e pode danificar o seu dispositivo ou os dados + Já existe uma versão mais recente instalada no seu dispositivo. Esta vai ser substituída pela versão mais antiga + Impossível instalar este ficheiro. O formato é inválido + Instalado + Actualizar + Aviso + Aberta + Falha + Impossível instalar. Memória insuficiente + Já existe uma versão mais antiga instalada no seu dispositivo. Esta vai ser actualizada + Versão instalada: %ls + Permitir e instalar + Erro + Esta versão já está instalada no seu dispositivo. Vai ser reinstalada + A instalar %ls... + Reinstalar + diff --git a/Installer/res/ron-RO.xml b/Installer/res/ron-RO.xml new file mode 100644 index 0000000..38b35de --- /dev/null +++ b/Installer/res/ron-RO.xml @@ -0,0 +1,25 @@ + + + + Versiune descărcată: %ls + Solicitări de permisiuni + Anulare + Este posibil ca această aplicaţie să fie dăunătoare şi să deterioreze dispozitivul sau datele + O versiune mai recentă este deja instalată pe dispozitiv. Aceasta va fi înlocuită cu versiunea mai veche + Nu se poate instala acest fişier. Formatul nu este valid + Instalate + Actualizare + Avertisment + Deschidere + Nereuşit + Nu se poate instala. Memorie insuficientă + O versiune mai veche este deja instalată pe dispozitiv. Aceasta va fi actualizată + Versiune instalată: %ls + Permitere şi instalare + Eroare + Această versiune este deja instalată pe dispozitiv. Va fi reinstalată + Se instalează %ls... + Reinstalare + diff --git a/Installer/res/rus-RU.xml b/Installer/res/rus-RU.xml new file mode 100644 index 0000000..c792312 --- /dev/null +++ b/Installer/res/rus-RU.xml @@ -0,0 +1,25 @@ + + + + Загруженная версия: %ls + Запросы разрешений + Отмена + Это приложение может быть опасным: %ls оно может повредить ваше устройство или данные + На устройстве уже установлена более новая версия. Она будет заменена старой версией + Не удается установить этот файл. Формат недопустим + Установлено + Обновить + Предупреждение + Открыть + Сбой + Установка невозможна. Недостаточно памяти + На устройстве уже установлена более старая версия. Она будет обновлена + Установленная версия: %ls + Разрешить и установить + Ошибка + На устройстве уже установлена эта версия. Она будет переустановлена + Установка %ls... + Переустановить + diff --git a/Installer/res/screen-density-xhigh/00_button_expand_closed.png b/Installer/res/screen-density-xhigh/00_button_expand_closed.png new file mode 100644 index 0000000..129e06d Binary files /dev/null and b/Installer/res/screen-density-xhigh/00_button_expand_closed.png differ diff --git a/Installer/res/screen-density-xhigh/00_button_expand_opened.png b/Installer/res/screen-density-xhigh/00_button_expand_opened.png new file mode 100644 index 0000000..4db0f6a Binary files /dev/null and b/Installer/res/screen-density-xhigh/00_button_expand_opened.png differ diff --git a/Installer/res/screen-size-normal/IDL_DETAIL_FORM.xml b/Installer/res/screen-size-normal/IDL_DETAIL_FORM.xml new file mode 100644 index 0000000..11a38b9 --- /dev/null +++ b/Installer/res/screen-size-normal/IDL_DETAIL_FORM.xml @@ -0,0 +1,23 @@ + + + + + + 720 +
+ + + + +
+ + +
+ + + + + +
diff --git a/Installer/res/screen-size-normal/IDL_INSTALLED_POPUP.xml b/Installer/res/screen-size-normal/IDL_INSTALLED_POPUP.xml new file mode 100644 index 0000000..3a629a5 --- /dev/null +++ b/Installer/res/screen-size-normal/IDL_INSTALLED_POPUP.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Installer/res/screen-size-normal/IDL_PANEL_BACKGROUND_BUTTON_ITEM.xml b/Installer/res/screen-size-normal/IDL_PANEL_BACKGROUND_BUTTON_ITEM.xml new file mode 100644 index 0000000..4bbd6d1 --- /dev/null +++ b/Installer/res/screen-size-normal/IDL_PANEL_BACKGROUND_BUTTON_ITEM.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/Installer/res/screen-size-normal/IDL_PANEL_EXPANDABLE_ITEM.xml b/Installer/res/screen-size-normal/IDL_PANEL_EXPANDABLE_ITEM.xml new file mode 100644 index 0000000..03ab45a --- /dev/null +++ b/Installer/res/screen-size-normal/IDL_PANEL_EXPANDABLE_ITEM.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + diff --git a/Installer/res/screen-size-normal/workflow.xml b/Installer/res/screen-size-normal/workflow.xml new file mode 100644 index 0000000..dbe830f --- /dev/null +++ b/Installer/res/screen-size-normal/workflow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Installer/res/slk-SK.xml b/Installer/res/slk-SK.xml new file mode 100644 index 0000000..9bc0df7 --- /dev/null +++ b/Installer/res/slk-SK.xml @@ -0,0 +1,25 @@ + + + + Stiahnutá verzia: %ls + Žiadosti o povolenie + Zrušiť + Táto aplikácia môže byť škodlivá a poškodiť vaše zariadenie alebo údaje + V zariadení je už nainštalovaná novšia verzia. Nahradí sa staršou verziou + Tento súbor nemožno nainštalovať. Tento formát je neplatný + Nainštalované + Aktualizovať + Varovanie + Otvoriť + Nepodarilo sa + Nedá sa nainštalovať. Nedostatok pamäte + V zariadení je už nainštalovaná staršia verzia. Aktualizuje sa + Nainštalovaná verzia: %ls + Povoliť a nainštalovať + Chyba + V zariadení je už nainštalovaná táto verzia. Preinštaluje sa + Inštaluje sa %ls... + Preinštalovať + diff --git a/Installer/res/slv-SI.xml b/Installer/res/slv-SI.xml new file mode 100644 index 0000000..f43a568 --- /dev/null +++ b/Installer/res/slv-SI.xml @@ -0,0 +1,25 @@ + + + + Prenesena različica: %ls + Zahteva za dovoljenje + Prekliči + Ta aplikacija je lahko škodljiva in lahko poškoduje vašo napravo ali podatke + V vaši napravi je že nameščena novejša različica. Zamenjana bo s starejšo različico + Te datoteke ni mogoče namestiti. Oblika zapisa je neveljavna + Nameščeno + Posodobi + Opozorilo + Odpri + Ni uspelo + Ni mogoče namestiti. Ni dovolj pomnilnika + V vaši napravi je že nameščena starejša različica. Posodobljena bo + Nameščena različica: %ls + Dovoli in namesti + Napaka + V vaši napravi je že nameščena ta različica. Nameščena bo znova + Nameščanje aplikacije %ls ... + Znova namesti + diff --git a/Installer/res/spa-ES.xml b/Installer/res/spa-ES.xml new file mode 100644 index 0000000..7d275d3 --- /dev/null +++ b/Installer/res/spa-ES.xml @@ -0,0 +1,25 @@ + + + + Versión descargada: %ls + Solicitudes de permiso + Cancelar + Esta aplicación puede ser dañina y causar daños en el dispositivo o los datos + Hay una versión más reciente instalada en el dispositivo. Se sustituirá con la versión anterior + No se puede instalar este archivo. El formato no es válido + Instalados + Actualizar + Aviso + Abrir + Error + No se puede instalar. No hay memoria suficiente + Hay una versión anterior instalada en el dispositivo. Se actualizará + Versión instalada: %ls + Permitir e instalar + Error + Esta versión ya está instalada en el dispositivo. Se volverá a instalar + Instalando %ls... + Volver a instalar + diff --git a/Installer/res/spa-MX.xml b/Installer/res/spa-MX.xml new file mode 100644 index 0000000..818a818 --- /dev/null +++ b/Installer/res/spa-MX.xml @@ -0,0 +1,25 @@ + + + + Versión descargada: %ls + Solicitudes de permisos + Cancelar + Esta aplicación puede ser dañina y dañar su dispositivo o datos + Hay una versión más reciente instalada en el dispositivo. Se reemplazará con la versión anterior + No se puede instalar este archivo. El formato no es válido + Instalado + Actualizar + Aviso + Abrir + Error + No se puede instalar. No hay memoria suficiente + Ya hay una versión anterior instalada en el dispositivo. Se actualizará + Versión instalada: %ls + Permitir e instalar + Error + Esta versión ya está instalada en el dispositivo. Se reinstalará + Instalando %ls... + Reinstalar + diff --git a/Installer/res/srp-RS.xml b/Installer/res/srp-RS.xml new file mode 100644 index 0000000..d4f2ce0 --- /dev/null +++ b/Installer/res/srp-RS.xml @@ -0,0 +1,25 @@ + + + + Preuzeta verzija: %ls + Zahtevi za dozvolu + Poništi + Ova aplikacija može da bude štetna i da ošteti tvoj uređaj i podatke + Novija verzija je već instalirana na vašem uređaju. Ona će biti zamenjena starijom verzijom + Nije moguće instalirati ovaj fajl. Format je nevažeći + Instalirano + Ažuriraj + Upozorenje + Otvori + Neuspešno + Nemoguće instalirati aplik. Nedovoljna memorija + Starija verzija je već instalirana na vašem uređaju. Ona će biti ažurirana + Instalirana verzija: %ls + Dozvoli i instaliraj + Greška + Ova verzija je već instalirana na tvom uređaju. Ona će biti ponovo instalirana + Instaliranje %ls... + Ponovo instaliraj + diff --git a/Installer/res/swe-SE.xml b/Installer/res/swe-SE.xml new file mode 100644 index 0000000..534b3d0 --- /dev/null +++ b/Installer/res/swe-SE.xml @@ -0,0 +1,25 @@ + + + + Hämtad version: %ls + Begäran om tillstånd + Avbryt + Det här programmet kan vara skadligt för enheten eller data + Det finns redan en nyare version installerad på enheten. Den kommer att ersättas med den äldre versionen + Det går inte att avinstallera den här filen. Formatet är ogiltigt + Installerad + Uppdatera + Varning + Öppna + Misslyckades + Det går inte att avinstallera. För lite minne + Det finns redan en äldre version installerad på enheten. Den kommer att uppdateras + Installerad version: %ls + Tillåt och installera + Fel + Den här versionen är redan installerad på enheten. Den kommer att installeras igen + Installerar %ls... + Ominstallera + diff --git a/Installer/res/tur-TR.xml b/Installer/res/tur-TR.xml new file mode 100644 index 0000000..ade4b4e --- /dev/null +++ b/Installer/res/tur-TR.xml @@ -0,0 +1,25 @@ + + + + İndirilen sürüm: %ls + İzin talepleri + İptal + Uygulama zararlı olabilir ve cihazınız veya verilerinize zarar verebilir + Yeni bir sürüm zaten cihazınıza yüklenmiş durumda. Eski sürüm ile değiştirilecek + Bu dosya yüklenemiyor. Geçersiz format + Yüklendi + Güncelle + Uyarı + Aç + Başarısız + Yüklenemiyor. Yeterli bellek yok + Eski bir sürüm zaten cihazınıza yüklenmiş durumda. Güncellenecek + Yüklenen sürüm: %ls + İzin ver ve yükle + Hata + Bu sürüm zaten cihazınıza yüklenmiş durumda. Yeniden yüklenecek + %ls kuruluyor... + Yeniden yükle + diff --git a/Installer/res/ukr-UA.xml b/Installer/res/ukr-UA.xml new file mode 100644 index 0000000..61995fe --- /dev/null +++ b/Installer/res/ukr-UA.xml @@ -0,0 +1,25 @@ + + + + Завантажена версія: %ls + Запити дозволу + Скасувати + Ця програма може пошкодити пристрій або дані + На пристрої вже встановлено новішу версію. Її буде замінено попередньою версією + Неможливо інсталювати цей файл. Невірний формат + Встановлено + Оновити + Попередження + Відкрити + Збій + Неможливо інсталювати. Недостатньо пам’яті + На пристрої вже встановлено попередню версію. Програму буде оновлено + Встановлена версія: %ls + Дозволити та інсталювати + Помилка + Цю версію вже встановлено на пристрої. Її буде встановлено повторно + Інсталяція %ls... + Повторно інсталювати + diff --git a/Installer/res/uzb-UZ.xml b/Installer/res/uzb-UZ.xml new file mode 100644 index 0000000..543831d --- /dev/null +++ b/Installer/res/uzb-UZ.xml @@ -0,0 +1,25 @@ + + + + Yuklab olingan versiya: %ls + Ruxsatnoma so‘rovlari + Bekor qilish + Ushbu ilova zararli bo‘lishi va qurilma yoki ma’lumotlaringizga zarar yetkazishi mumkin + Yangiroq versiya qurilmangizda oldindan o‘rnatilgan. U eskiroq versiya bilan almashtiriladi + Ushbu faylni o‘rnatib bo‘lmaydi. Format noto‘g‘ri + O‘rnatildi + Yangilash + Ogohlantirish + Ochish + Xato + O‘rnatib bo‘lmaydi. Xotira yetarli emas + Eskiroq versiya qurilmangizda oldindan o‘rnatilgan. U yangilanadi + O‘rnatilgan versiya: %ls + Ruxsat ber va o‘rnat + Xato + Ushbu versiya qurilmangizda oldindan o‘rnatilgan. U qayta o‘rnatiladi + %ls o‘rnatilmoqda... + Qayta o‘rnatish + diff --git a/Installer/res/zho-CN.xml b/Installer/res/zho-CN.xml new file mode 100644 index 0000000..2e8dc69 --- /dev/null +++ b/Installer/res/zho-CN.xml @@ -0,0 +1,25 @@ + + + + 已下载版本: %ls + 许可请求 + 取消 + 该应用程序可能有害并损坏您的设备或数据 + 您的设备上已安装较新的版本。其将替换为较旧的版本 + 无法安装该文件。格式无效 + 已安装 + 更新 + 警告 + 打开 + 失败 + 无法安装。内存不足 + 您的设备上已安装有较旧的版本。其将被更新 + 已安装版本: %ls + 允许并安装 + 出错 + 您的设备上已安装有该版本。其将被重新安装 + 正在安装 %ls… + 重新安装 + diff --git a/Installer/res/zho-HK.xml b/Installer/res/zho-HK.xml new file mode 100644 index 0000000..f95d87f --- /dev/null +++ b/Installer/res/zho-HK.xml @@ -0,0 +1,25 @@ + + + + 已下載的版本: %ls + 權限請求 + 取消 + 此應用程式可能有害並可能損害您的裝置或數據 + 較新的版本已安裝在您的裝置上。將以更舊的版本取代 + 無法安裝此檔案。格式無效 + 已安裝 + 更新 + 警告 + 開啟 + 失敗 + 無法安裝。記憶體不足。 + 更舊的版本已安裝在您的裝置上。將會更新 + 已安裝的版本: %ls + 允許並安裝 + 錯誤 + 此版本已安裝在您的裝置上。將會重新安裝 + 正在安裝 %ls + 重新安裝 + diff --git a/Installer/res/zho-SG.xml b/Installer/res/zho-SG.xml new file mode 100644 index 0000000..31a9159 --- /dev/null +++ b/Installer/res/zho-SG.xml @@ -0,0 +1,25 @@ + + + + 已下载版本: %ls + 许可请求 + 取消 + 该应用程序可能有害并损坏您的设备或数据 + 您的设备上已安装较新的版本。其将替换为较旧的版本 + 无法安装该文件。格式无效 + 已安装 + 更新 + 警告 + 打开 + 失败 + 无法安装。内存不足 + 您的设备上已安装有较旧的版本。其将被更新 + 已安装版本: %ls + 允许并安装 + 错误 + 您的设备上已安装有该版本。其将被重新安装 + 正在安装 %ls… + 重新安装 + diff --git a/Installer/res/zho-TW.xml b/Installer/res/zho-TW.xml new file mode 100644 index 0000000..73c5aa7 --- /dev/null +++ b/Installer/res/zho-TW.xml @@ -0,0 +1,25 @@ + + + + 已下載的版本: %ls + 權限請求 + 取消 + 此應用程式可能有害且可能損害您的裝置或資料 + 較新的版本已安裝在您的裝置上。將以更舊的版本取代 + 無法安裝此檔案。格式無效 + 已安裝 + 更新 + 警告 + 開啟 + 失敗 + 無法安裝。沒有足夠的記憶體 + 更舊的版本已安裝在您的裝置上。將會更新 + 已安裝的版本: %ls + 允許並安裝 + 錯誤 + 此版本已安裝在您的裝置上。將會重新安裝 + 正在安裝 %ls + 重新安裝 + diff --git a/Installer/shared/data/nofile.dummy b/Installer/shared/data/nofile.dummy new file mode 100644 index 0000000..e69de29 diff --git a/Installer/shared/res/screen-density-xhigh/mainmenu.png b/Installer/shared/res/screen-density-xhigh/mainmenu.png new file mode 100644 index 0000000..9765b1b Binary files /dev/null and b/Installer/shared/res/screen-density-xhigh/mainmenu.png differ diff --git a/Installer/shared/trusted/nofile.dummy b/Installer/shared/trusted/nofile.dummy new file mode 100644 index 0000000..e69de29 diff --git a/Installer/src/AppResourceId.cpp b/Installer/src/AppResourceId.cpp new file mode 100644 index 0000000..848c4cc --- /dev/null +++ b/Installer/src/AppResourceId.cpp @@ -0,0 +1,60 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file AppResourceId.cpp + * @brief This file contains resource definition. + */ + +#include "AppResourceId.h" + +const wchar_t* IDC_BUTTON_CANCEL = L"IDC_BUTTON_CANCEL"; +const wchar_t* IDC_BUTTON_INSTALL = L"IDC_BUTTON_INSTALL"; +const wchar_t* IDC_BUTTON_LAUNCH = L"IDC_BUTTON_LAUNCH"; +const wchar_t* IDC_BUTTON_REINSTALL = L"IDC_BUTTON_REINSTALL"; +const wchar_t* IDC_LABEL = L"IDC_LABEL"; +const wchar_t* IDC_LABEL_EX = L"IDC_LABEL_EX"; +const wchar_t* IDC_LABEL_MAIN_TEXT = L"IDC_LABEL_MAIN_TEXT"; +const wchar_t* IDC_LABEL_MESSAGE = L"IDC_LABEL_MESSAGE"; +const wchar_t* IDC_LABEL_SUB_TEXT = L"IDC_LABEL_SUB_TEXT"; +const wchar_t* IDC_LABEL_VERSION = L"IDC_LABEL_VERSION"; +const wchar_t* IDC_PANEL = L"IDC_PANEL"; +const wchar_t* IDC_SECTIONTABLEVIEW = L"IDC_SECTIONTABLEVIEW"; +const wchar_t* IDF_PROGRESS = L"IDF_PROGRESS"; +const wchar_t* IDL_DETAIL_FORM = L"IDL_DETAIL_FORM"; +const wchar_t* IDL_INSTALLED_POPUP = L"IDL_INSTALLED_POPUP"; +const wchar_t* IDL_PANEL_BACKGROUND_BUTTON_ITEM = L"IDL_PANEL_BACKGROUND_BUTTON_ITEM"; +const wchar_t* IDL_PANEL_EXPANDABLE_ITEM = L"IDL_PANEL_EXPANDABLE_ITEM"; +const wchar_t* IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB = L"IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"; +const wchar_t* IDS_APINST_BODY_INSTALLED_VERSION_C_ABB = L"IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"; +const wchar_t* IDS_APINST_BODY_INSTALLING_PS_ING = L"IDS_APINST_BODY_INSTALLING_PS_ING"; +const wchar_t* IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA = L"IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"; +const wchar_t* IDS_APINST_BODY_UNABLE_TO_INSTALL_NOT_ENOUGH_MEMORY_ABB = L"IDS_APINST_BODY_UNABLE_TO_INSTALL_NOT_ENOUGH_MEMORY_ABB"; +const wchar_t* IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB = L"IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"; +const wchar_t* IDS_APINST_BUTTON_OPEN = L"IDS_APINST_BUTTON_OPEN"; +const wchar_t* IDS_APINST_BUTTON_REINSTALL = L"IDS_APINST_BUTTON_REINSTALL"; +const wchar_t* IDS_APINST_BUTTON_UPDATE = L"IDS_APINST_BUTTON_UPDATE"; +const wchar_t* IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB = L"IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"; +const wchar_t* IDS_APINST_HEADER_WARNING = L"IDS_APINST_HEADER_WARNING"; +const wchar_t* IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED = L"IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"; +const wchar_t* IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION = L"IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"; +const wchar_t* IDS_APINST_POP_FAILED = L"IDS_APINST_POP_FAILED"; +const wchar_t* IDS_APINST_POP_INSTALLED = L"IDS_APINST_POP_INSTALLED"; +const wchar_t* IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED = L"IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"; +const wchar_t* IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID = L"IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"; +const wchar_t* IDS_PB_POP_ERROR = L"IDS_PB_POP_ERROR"; +const wchar_t* IDS_ST_SK3_CANCEL = L"IDS_ST_SK3_CANCEL"; +const wchar_t* ID_SCNT_DETAIL_SCENE = L"ID_SCNT_DETAIL_SCENE"; diff --git a/Installer/src/InstallerEntry.cpp b/Installer/src/InstallerEntry.cpp new file mode 100644 index 0000000..456d066 --- /dev/null +++ b/Installer/src/InstallerEntry.cpp @@ -0,0 +1,50 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * This file contains the Tizen application entry point. + */ + +#include "IstInstallerApp.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +_EXPORT_ int +OspMain(int argc, char* pArgv[]) +{ + AppLog("Application started."); + ArrayList args(SingleObjectDeleter); + args.Construct(); + for (int i = 0; i < argc; i++) + { + args.Add(new (std::nothrow) String(pArgv[i])); + } + + result r = Tizen::App::UiApp::Execute(InstallerApp::CreateInstance, &args); + AppLogExceptionIf(IsFailed(r), "[%s] Application execution failed", GetErrorMessage(r)); + AppLog("Application finished."); + + return static_cast(r); +} +#ifdef __cplusplus +} +#endif // __cplusplus diff --git a/Installer/src/IstDetailForm.cpp b/Installer/src/IstDetailForm.cpp new file mode 100644 index 0000000..588c11f --- /dev/null +++ b/Installer/src/IstDetailForm.cpp @@ -0,0 +1,522 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file IstDetailForm.cpp + * @brief This file contains the implementation of DetailForm class, which acts as a + * application installer displaying a list of all the privilege description in the TPK file. + */ + +#include +#include +#include +#include +#include +#include +#include "AppResourceId.h" +#include "IstDetailForm.h" +#include "IstInstallerApp.h" + +using namespace Tizen::App; +using namespace Tizen::App::Package; +using namespace Tizen::Base; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Io; +using namespace Tizen::Security; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; + +class BlankTableViewItem + : public TableViewItem +{ +public: + result OnDraw(void) + { + return E_SUCCESS; + }; +}; + +DetailForm::DetailForm(void) + : __pPrivilegeList(null) + , __pExpandCloseIcon(null) + , __pExpandOpenIcon(null) + , __pExposedItemList(null) + , __fontSize(44.f) + , __childFontSize(32.f) +{ +} + +DetailForm::~DetailForm(void) +{ +} + +result +DetailForm::Initialize(void) +{ + return Construct(IDL_DETAIL_FORM); +} + +result +DetailForm::OnInitializing(void) +{ + result r = E_SUCCESS; + + SetFormBackEventListener(this); + AddOrientationEventListener(*this); + + String fontSizeString; + SettingInfo::GetValue(L"http://tizen.org/setting/font.size", fontSizeString); + __fontSize = UiConfiguration::GetFontSize(fontSizeString); + __childFontSize = __fontSize * 0.8f; + + SectionTableView* pSectionTableView = static_cast(GetControl(IDC_SECTIONTABLEVIEW)); + pSectionTableView->SetItemProviderF(this); + pSectionTableView->AddSectionTableViewItemEventListener(*this); + + AppResource* pAppResource = AppResource::GetInstance(); + __pExpandCloseIcon = pAppResource->GetBitmapN(L"00_button_expand_closed.png"); + __pExpandOpenIcon = pAppResource->GetBitmapN(L"00_button_expand_opened.png"); + + return r; +} + +result +DetailForm::OnTerminating(void) +{ + RemoveOrientationEventListener(*this); + delete __pPrivilegeList; + delete __pExpandCloseIcon; + delete __pExpandOpenIcon; + delete[] __pExposedItemList; + return E_SUCCESS; +} + +void +DetailForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + switch (actionId) + { + case IDA_BUTTON_INSTALL: + { + String filePath = static_cast(UiApp::GetInstance())->GetPackageFilePath(); + AppControl* pAc = AppManager::GetInstance()->FindAppControlN(AppId(L"D7eOJquGtL.InstallerService"), L""); + result r = pAc->Start(&filePath, null, null, null); + AppLogExceptionIf(IsFailed(r), "[%s] Failed to launch service app.", GetErrorMessage(r)); + UiApp::GetInstance()->Terminate(); + break; + } + } +} + +void +DetailForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source) +{ + UiApp::GetInstance()->Terminate(); +} + +void +DetailForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, + const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs) +{ + AppLogDebug("Enter"); + const PackageInfo* pPackageInfo = static_cast(UiApp::GetInstance())->GetPackageInfo(); + + IList* pList = pPackageInfo->GetPrivilegeListN(); + if (pList) + { + __pPrivilegeList = new (std::nothrow) ArrayList(SingleObjectDeleter); + __pPrivilegeList->Construct(*pList); + + if (__pPrivilegeList->GetCount() > 0) + { + __pExposedItemList = new (std::nothrow) bool[__pPrivilegeList->GetCount()]; + for (int i=0; i<__pPrivilegeList->GetCount(); ++i) + { + __pExposedItemList[i] = false; + } + } + } + + PackageAppInfo* pMainAppInfo = pPackageInfo->GetPackageAppInfoN(pPackageInfo->GetMainAppId()); + Bitmap* pAppIcon = pMainAppInfo->GetAppMenuIconN(); + + Header* pHeader = GetHeader(); + pHeader->SetTitleText(pPackageInfo->GetDisplayName()); + pHeader->SetTitleIcon(pAppIcon); + pHeader->Invalidate(false); + + delete pMainAppInfo; + delete pAppIcon; +} + +void +DetailForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, + const Tizen::Ui::Scenes::SceneId& nextSceneId) +{ + AppLogDebug("Enter"); + delete __pPrivilegeList; + __pPrivilegeList = null; +} + +Tizen::Ui::Controls::TableViewItem* +DetailForm::CreateItem(int sectionIndex, int itemIndex, float itemWidth) +{ + CardLayout layout; + layout.Construct(); + + TableViewItem* pItem = null; + + switch (sectionIndex) + { + case 0: + { + String message; + AppResource::GetInstance()->GetString(IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA, message); + + Font font; + font.Construct(FONT_STYLE_PLAIN, __childFontSize); + float textHeight = GetTextHeight(message, font, itemWidth - 32.f); + + BlankTableViewItem* pBlankItem = new (std::nothrow) BlankTableViewItem(); + pBlankItem->Construct(layout, FloatDimension(itemWidth, 40.f+textHeight)); + AccessibilityElement* pElement = pBlankItem->GetAccessibilityContainer()->GetElement(L"TableViewItem"); + if (pElement) + { + pElement->SetLabel(message); + } + + Label* pLabel = new (std::nothrow) Label(); + pLabel->Construct(FloatRectangle(0, 0, 0, 0), message); + pLabel->SetTextConfig(__childFontSize, LABEL_TEXT_STYLE_NORMAL); + pLabel->SetTextColor(Color(128, 128, 128)); + pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT); + pLabel->GetAccessibilityContainer()->RemoveAllElements(); + + pItem = pBlankItem; + pItem->AddControl(pLabel); + break; + } + case 1: + { + int privilegeIndex = 0; + bool isTitle = GetPrivilegeListIndex(itemIndex, privilegeIndex); + + PrivilegeInfo* pInfo = static_cast(__pPrivilegeList->GetAt(privilegeIndex)); + + if (isTitle) + { + Font font; + font.Construct(FONT_STYLE_PLAIN, __fontSize); + float textHeight = GetTextHeight(L" ", font, itemWidth - 32.f); + + pItem = new (std::nothrow) TableViewItem(); + pItem->Construct(layout, FloatDimension(itemWidth, 87.f+textHeight)); + AccessibilityElement* pElement = pItem->GetAccessibilityContainer()->GetElement(L"TableViewItem"); + if (pElement) + { + pElement->SetLabel(pInfo->GetDisplayName()); + } + + Panel* pPanel = new (std::nothrow) Panel(); + pPanel->Construct(IDL_PANEL_EXPANDABLE_ITEM); + + if (__pExposedItemList[privilegeIndex] == true) + { + pItem->SetName(L"Exposed"); + Label* pIconLabel = static_cast(pPanel->GetControl(IDC_LABEL_EX)); + pIconLabel->SetBackgroundBitmap(*__pExpandOpenIcon); + pIconLabel->GetAccessibilityContainer()->RemoveAllElements(); + + } + else + { + pItem->SetName(L"Collapsed"); + Label* pIconLabel = static_cast(pPanel->GetControl(IDC_LABEL_EX)); + pIconLabel->SetBackgroundBitmap(*__pExpandCloseIcon); + pIconLabel->GetAccessibilityContainer()->RemoveAllElements(); + } + + Label* pMainLabel = static_cast(pPanel->GetControl(IDC_LABEL_MAIN_TEXT)); + pMainLabel->SetText(pInfo->GetDisplayName()); + pMainLabel->SetTextConfig(__fontSize, LABEL_TEXT_STYLE_NORMAL); + pMainLabel->GetAccessibilityContainer()->RemoveAllElements(); + + Label* pSubLabel = static_cast(pPanel->GetControl(IDC_LABEL_SUB_TEXT)); + pSubLabel->SetText(pInfo->GetDescription()); + pSubLabel->GetAccessibilityContainer()->RemoveAllElements(); + + pItem->AddControl(pPanel); + } + else + { + String labelText = pInfo->GetDisplayName(); + labelText.Append(L"\n\n"); + labelText.Append(pInfo->GetDescription()); + Font font; + font.Construct(FONT_STYLE_PLAIN, __childFontSize); + float textHeight = GetTextHeight(labelText, font, itemWidth - 32.f); + + pItem = new (std::nothrow) TableViewItem(); + pItem->Construct(layout, FloatDimension(itemWidth, 40.f+textHeight)); + pItem->SetBackgroundColor(Color(220, 218, 211), TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL); + pItem->SetBackgroundColor(Color(220, 218, 211), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED); + AccessibilityElement* pElement = pItem->GetAccessibilityContainer()->GetElement(L"TableViewItem"); + if (pElement) + { + pElement->SetLabel(labelText); + } + + Label* pLabel = new (std::nothrow) Label(); + pLabel->Construct(FloatRectangle(0, 0, 0, 0), labelText); + pLabel->SetTextConfig(__childFontSize, LABEL_TEXT_STYLE_NORMAL); + pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT); + pLabel->GetAccessibilityContainer()->RemoveAllElements(); + + pItem->AddControl(pLabel); + } + break; + } + case 2: + { + BlankTableViewItem* pBlankItem = new (std::nothrow) BlankTableViewItem(); + pBlankItem->Construct(layout, FloatDimension(itemWidth, 144.f)); + pBlankItem->GetAccessibilityContainer()->RemoveAllElements(); + + Panel* pPanel = new (std::nothrow) Panel(); + pPanel->Construct(IDL_PANEL_BACKGROUND_BUTTON_ITEM); + + Button* pButton =static_cast(pPanel->GetControl(IDC_BUTTON_INSTALL)); + pButton->AddActionEventListener(*this); + pButton->SetActionId(IDA_BUTTON_INSTALL); + + pItem = pBlankItem; + pItem->AddControl(pPanel); + break; + } + } + + return pItem; +} + +bool +DetailForm::DeleteItem(int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem) +{ + delete pItem; + return true; +} + +float +DetailForm::GetDefaultItemHeight(void) +{ + return 0.f; +} + +int +DetailForm::GetItemCount(int sectionIndex) +{ + switch (sectionIndex) + { + case 0: + return 1; + case 1: + if (__pPrivilegeList) + { + return __pPrivilegeList->GetCount(); + } + else + { + return 0; + } + case 2: + return 1; + default: + return 0; + } +} + +int +DetailForm::GetSectionCount(void) +{ + return 3; +} + +Tizen::Base::String +DetailForm::GetSectionFooter(int sectionIndex) +{ + return L""; +} + +Tizen::Base::String +DetailForm::GetSectionHeader(int sectionIndex) +{ + String header; + switch (sectionIndex) + { + case 0: + AppResource::GetInstance()->GetString(IDS_APINST_HEADER_WARNING, header); + break; + case 1: + AppResource::GetInstance()->GetString(IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB, header); + break; + } + return header; +} + +bool +DetailForm::HasSectionFooter(int sectionIndex) +{ + return false; +} + +bool +DetailForm::HasSectionHeader(int sectionIndex) +{ + switch (sectionIndex) + { + case 1: + return (__pPrivilegeList && __pPrivilegeList->GetCount() > 0); + case 2: + return false; + default: + return true; + } +} + +void +DetailForm::UpdateItem(int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem) +{ + switch (sectionIndex) + { + case 0: + { + String message; + AppResource::GetInstance()->GetString(IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA, message); + + Font font; + font.Construct(FONT_STYLE_PLAIN, __childFontSize); + float textHeight = GetTextHeight(message, font, pItem->GetWidthF() - 32.f); + pItem->SetSize(FloatDimension(pItem->GetWidthF(), 40.f+textHeight)); + break; + } + case 1: + { + int privilegeIndex = 0; + bool isTitle = GetPrivilegeListIndex(itemIndex, privilegeIndex); + if (!isTitle) + { + PrivilegeInfo* pInfo = static_cast(__pPrivilegeList->GetAt(privilegeIndex)); + + Font font; + font.Construct(FONT_STYLE_PLAIN, __childFontSize); + + String labelText = pInfo->GetDisplayName(); + labelText.Append(L"\n\n"); + labelText.Append(pInfo->GetDescription()); + + float textHeight = GetTextHeight(labelText, font, pItem->GetWidthF() - 32.f); + pItem->SetSize(pItem->GetWidthF(), 40.f+textHeight); + } + break; + } + } +} + +void +DetailForm::OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::SectionTableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated) +{ +} + +void +DetailForm::OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::SectionTableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status) +{ + String itemName = pItem->GetName(); + AppLogDebug("item: %ls", itemName.GetPointer()); + if (itemName == L"Collapsed") + { + Label* pLabel = static_cast(pItem->GetControl(IDC_LABEL_EX, true)); + pLabel->SetBackgroundBitmap(*__pExpandOpenIcon); + pLabel->Invalidate(false); + pItem->SetName(L"Exposed"); + + int privilegeIndex = 0; + GetPrivilegeListIndex(itemIndex, privilegeIndex); + __pExposedItemList[privilegeIndex] = true; + tableView.RefreshItem(sectionIndex, itemIndex+1, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD); + } + else if (itemName == L"Exposed") + { + Label* pLabel = static_cast(pItem->GetControl(IDC_LABEL_EX, true)); + pLabel->SetBackgroundBitmap(*__pExpandCloseIcon); + pLabel->Invalidate(false); + pItem->SetName(L"Collapsed"); + + int privilegeIndex = 0; + GetPrivilegeListIndex(itemIndex, privilegeIndex); + __pExposedItemList[privilegeIndex] = false; + tableView.RefreshItem(sectionIndex, itemIndex+1, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE); + } +} + +void +DetailForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus) +{ + AppLogDebug("%d", orientationStatus); + SectionTableView* pSectionTableView = static_cast(GetControl(IDC_SECTIONTABLEVIEW)); + + pSectionTableView->RefreshItem(0, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY); + + int index = 0; + for (int i=0; iGetItemCountAt(1); ++i) + { + if (!GetPrivilegeListIndex(i, index)) + { + pSectionTableView->RefreshItem(1, i, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY); + } + } +} + +bool +DetailForm::GetPrivilegeListIndex(int actualIndex, int& privilegeIndex) +{ + privilegeIndex = actualIndex; + int i = 0; + for (; iGetCount(); ++i) + { + if (__pExposedItemList[i] == true) + { + --privilegeIndex; + } + } + + return i == privilegeIndex; +} + +float +DetailForm::GetTextHeight(const Tizen::Base::String& text, const Tizen::Graphics::Font& font, float width) +{ + TextElement textElement; + textElement.Construct(text); + textElement.SetFont(font); + + EnrichedText enrichedText; + enrichedText.Construct(FloatDimension(width, 1.f)); + enrichedText.Add(textElement); + + return enrichedText.GetTotalLineHeightF(); +} diff --git a/Installer/src/IstFormFactory.cpp b/Installer/src/IstFormFactory.cpp new file mode 100644 index 0000000..db38b7c --- /dev/null +++ b/Installer/src/IstFormFactory.cpp @@ -0,0 +1,55 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + *@file IstFormFactory.cpp + *@brief This file contains the implementation FormFactory class, which manages + * all the forms of the application. + */ + +#include +#include "AppResourceId.h" +#include "IstFormFactory.h" +#include "IstDetailForm.h" + +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +FormFactory::FormFactory(void) +{ +} + +FormFactory::~FormFactory(void) +{ +} + +Tizen::Ui::Controls::Form* +FormFactory::CreateFormN(const Tizen::Base::String& formId, const Tizen::Ui::Scenes::SceneId& sceneId) +{ + AppLogDebug("SceneId: %ls", formId.GetPointer()); + SceneManager* pSceneManager = SceneManager::GetInstance(); + Form* pNewForm = null; + + if (formId == IDL_DETAIL_FORM) + { + DetailForm* pForm = new (std::nothrow) DetailForm(); + pForm->Initialize(); + pSceneManager->AddSceneEventListener(sceneId, *pForm); + pNewForm = pForm; + } + + return pNewForm; +} diff --git a/Installer/src/IstInstalledPopup.cpp b/Installer/src/IstInstalledPopup.cpp new file mode 100644 index 0000000..bedba93 --- /dev/null +++ b/Installer/src/IstInstalledPopup.cpp @@ -0,0 +1,170 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file InstalledPopup.cpp + * @brief This is the implementation file for InstalledPopup class. + */ + +#include +#include +#include +#include "AppResourceId.h" +#include "IstInstalledPopup.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; + +InstalledPopup::InstalledPopup() + : __pTarget(null) + , __isLaunchable(true) +{ +} + +InstalledPopup::~InstalledPopup() +{ +} + +result +InstalledPopup::Initialize(Tizen::Ui::Control* pTarget) +{ + result r = Construct(IDL_INSTALLED_POPUP); + if (IsFailed(r)) + { + AppLogException("[%s] Failed to construct popup.", GetErrorMessage(r)); + return r; + } + + __pTarget = pTarget; + + return r; +} + +result +InstalledPopup::RequestPopup(const Tizen::Base::String& appName, const Tizen::Base::String& installedVersion, + const Tizen::Base::String& downloadedVersion, bool isLaunchable) +{ + AppResource* pAppResource = AppResource::GetInstance(); + int compare = downloadedVersion.CompareTo(installedVersion); + if (compare > 0) + { + pAppResource->GetString(IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED, __installMessage); + + String buttonString; + pAppResource->GetString(IDS_APINST_BUTTON_UPDATE, buttonString); + static_cast(GetControl(IDC_BUTTON_REINSTALL, true))->SetText(buttonString); + } + else if (compare < 0) + { + pAppResource->GetString(IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION, __installMessage); + } + else + { + pAppResource->GetString(IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED, __installMessage); + } + + String version; + pAppResource->GetString(IDS_APINST_BODY_INSTALLED_VERSION_C_ABB, version); + version.Format(version.GetLength() + installedVersion.GetLength(), version.GetPointer(), installedVersion.GetPointer()); + __versionMessage = version; + __versionMessage.Append(L"\n"); + + pAppResource->GetString(IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB, version); + version.Format(version.GetLength() + downloadedVersion.GetLength(), version.GetPointer(), downloadedVersion.GetPointer()); + __versionMessage.Append(version); + + __isLaunchable = isLaunchable; + + SetShowState(true); + return Show(); +} + +result +InstalledPopup::OnInitializing(void) +{ + AppLogDebug("Enter"); + SetPropagatedKeyEventListener(this); + + Label* pMessage = static_cast(GetControl(IDC_LABEL_MESSAGE)); + pMessage->SetText(__installMessage); + + Label* pVersionInfo = static_cast(GetControl(IDC_LABEL_VERSION)); + pVersionInfo->SetText(__versionMessage); + + Button* pReInstallButton = static_cast(GetControl(IDC_BUTTON_REINSTALL, true)); + pReInstallButton->SetActionId(IDA_BUTTON_REINSTALL); + pReInstallButton->AddActionEventListener(*this); + + Button* pLaunchButton = static_cast(GetControl(IDC_BUTTON_LAUNCH, true)); + pLaunchButton->SetActionId(IDA_BUTTON_LAUNCH); + pLaunchButton->AddActionEventListener(*this); + + Button* pCancelButton = static_cast(GetControl(IDC_BUTTON_CANCEL, true)); + pCancelButton->SetActionId(IDA_BUTTON_CANCEL); + pCancelButton->AddActionEventListener(*this); + + if (!__isLaunchable) + { + GridLayout* pLayout = static_cast(static_cast(GetControl(IDC_PANEL))->GetLandscapeLayoutN()); + pLayout->SetColumnCollapsed(2, true); + pLayout->Update(); + delete pLayout; + pLayout = static_cast(static_cast(GetControl(IDC_PANEL))->GetPortraitLayoutN()); + pLayout->SetColumnCollapsed(2, true); + pLayout->Update(); + delete pLayout; + } + + return E_SUCCESS; +} + +result +InstalledPopup::OnTerminating(void) +{ + AppLogDebug("Enter"); + SetPropagatedKeyEventListener(null); + return E_SUCCESS; +} + +void +InstalledPopup::OnActionPerformed(const Control& source, int actionId) +{ + SetShowState(false); + + if (__pTarget) + { + __pTarget->SendUserEvent(actionId, null); + } +} + +bool +InstalledPopup::OnKeyReleased(Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo) +{ + AppLogDebug("%d", keyEventInfo.GetKeyCode()); + if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC) + { + SetShowState(false); + if (__pTarget) + { + __pTarget->SendUserEvent(IDA_BUTTON_CANCEL, null); + } + } + + return false; +} diff --git a/Installer/src/IstInstallerApp.cpp b/Installer/src/IstInstallerApp.cpp new file mode 100644 index 0000000..0bdf19b --- /dev/null +++ b/Installer/src/IstInstallerApp.cpp @@ -0,0 +1,123 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file IstInstallerApp.cpp + * @brief This file contains the declaration of InstallerApp Class, + * which provides basic features necessary to define an UiApp. + */ + +#include "IstInstallerApp.h" +#include "IstMainFrame.h" +#include "AppResourceId.h" + +using namespace Tizen::App; +using namespace Tizen::App::Package; +using namespace Tizen::Base; +using namespace Tizen::Ui::Controls; + +InstallerApp::InstallerApp(void) + : __pPackageInfo(null) +{ +} + +InstallerApp::~InstallerApp(void) +{ +} + +Tizen::App::UiApp* +InstallerApp::CreateInstance(void) +{ + return new (std::nothrow) InstallerApp(); +} + +const Tizen::App::Package::PackageInfo* +InstallerApp::GetPackageInfo(void) const +{ + return __pPackageInfo; +} + +Tizen::Base::String +InstallerApp::GetPackageFilePath(void) const +{ + return __packageFilePath; +} + + +bool +InstallerApp::OnAppInitializing(Tizen::App::AppRegistry& appRegistry) +{ + AppControlProviderManager::GetInstance()->SetAppControlProviderEventListener(this); + + return true; +} + +bool +InstallerApp::OnAppInitialized(void) +{ + MainFrame* pMainFrame = new (std::nothrow) MainFrame(); + pMainFrame->Construct(); + result r = AddFrame(*pMainFrame); + if (IsFailed(r)) + { + return false; + } + else + { + return true; + } +} + +bool +InstallerApp::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination) +{ + return true; +} + +void +InstallerApp::OnBackground(void) +{ + AppLogDebug("Enter"); + Terminate(); +} + +void +InstallerApp::OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String& operationId, + const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData) +{ + if (pExtraData) + { + const String* pFilePath = static_cast(pExtraData->GetValue(String(L"http://tizen.org/appcontrol/data/notification"))); + if (pFilePath) + { + __packageFilePath = *pFilePath; + } + } + else if (!pUriData || !pUriData->StartsWith(L"file://", 0)) + { + AppLogException("Invalid URI date."); + return; + } + else + { + __packageFilePath = *pUriData; + __packageFilePath.Replace(L"file://", L""); + } + + AppLogDebug("file path: %ls", __packageFilePath.GetPointer()); + __pPackageInfo = PackageManager::GetInstance()->GetPackageInfoFromFileN(__packageFilePath); + AppLogExceptionIf(GetLastResult() != E_SUCCESS, "[%s] Failed to get package information - %ls", GetErrorMessage(GetLastResult()), __packageFilePath.GetPointer()); +} diff --git a/Installer/src/IstMainFrame.cpp b/Installer/src/IstMainFrame.cpp new file mode 100644 index 0000000..9aaaed0 --- /dev/null +++ b/Installer/src/IstMainFrame.cpp @@ -0,0 +1,129 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file IstMainFrame.cpp + * @brief This file contains implementation of MainFrame class, which is the main frame of the application. + */ + +#include +#include +#include +#include +#include "AppResourceId.h" +#include "IstMainFrame.h" +#include "IstInstallerApp.h" +#include "IstFormFactory.h" + +using namespace Tizen::App; +using namespace Tizen::App::Package; +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +MainFrame::MainFrame(void) + : __pInstalledPopup(null) +{ +} + +MainFrame::~MainFrame(void) +{ +} + +result +MainFrame::OnInitializing(void) +{ + AppLogDebug("Enter"); + result r = E_SUCCESS; + SetOrientation(Tizen::Ui::ORIENTATION_AUTOMATIC); + + const PackageInfo* pPackageInfo = static_cast(UiApp::GetInstance())->GetPackageInfo(); + if (!pPackageInfo) + { + SetBackgroundColor(Color(0, 0, 0, 0)); + MessageBox msgBox; + String error, errorMsg; + AppResource* pAppResource = AppResource::GetInstance(); + pAppResource->GetString(IDS_PB_POP_ERROR, error); + pAppResource->GetString(IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID, errorMsg); + + msgBox.Construct(error, errorMsg, MSGBOX_STYLE_OK, 10000); + int modal; + msgBox.ShowAndWait(modal); + return E_FAILURE; + } + + SceneManager* pSceneManager = SceneManager::GetInstance(); + pSceneManager->RegisterFormFactory(*new (std::nothrow) FormFactory()); + pSceneManager->RegisterScene("workflow"); + + __pInstalledPopup = new (std::nothrow) InstalledPopup(); + __pInstalledPopup->Initialize(this); + + PackageId packageId = pPackageInfo->GetId(); + __mainAppId = pPackageInfo->GetMainAppId(); + + PackageManager* pPackageManager = PackageManager::GetInstance(); + if (pPackageManager->IsPackageInstalled(packageId)) + { + SetBackgroundColor(Color(0, 0, 0, 0)); + String displayName = pPackageInfo->GetDisplayName(); + AppLogDebug("%ls: It has been already installed.", displayName.GetPointer()); + PackageInfo* pInstalledPackageInfo = pPackageManager->GetPackageInfoN(packageId); + r = __pInstalledPopup->RequestPopup(displayName, pInstalledPackageInfo->GetVersion(), + pPackageInfo->GetVersion(), false); + delete pInstalledPackageInfo; + } + else + { + r = pSceneManager->GoForward(SceneTransitionId(ID_SCNT_DETAIL_SCENE)); + } + + return r; +} + +result +MainFrame::OnTerminating(void) +{ + if (__pInstalledPopup) + { + __pInstalledPopup->Destroy(); + } + + return E_SUCCESS; +} + +void +MainFrame::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs) +{ + AppLogDebug("Enter"); + switch (requestId) + { + case IDA_BUTTON_REINSTALL: + SceneManager::GetInstance()->GoForward(SceneTransitionId(ID_SCNT_DETAIL_SCENE)); + break; + case IDA_BUTTON_LAUNCH: + { + result r = AppManager::GetInstance()->LaunchApplication(__mainAppId); + AppLogExceptionIf(IsFailed(r), "[%s] Failed to launch application. - %ls", GetErrorMessage(r), __mainAppId.GetPointer()); + break; + } + default: + UiApp::GetInstance()->Terminate(); + break; + } +} diff --git a/InstallerService/.cproject b/InstallerService/.cproject new file mode 100644 index 0000000..4cde1e9 --- /dev/null +++ b/InstallerService/.cproject @@ -0,0 +1,450 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/InstallerService/.project b/InstallerService/.project new file mode 100644 index 0000000..88fbacf --- /dev/null +++ b/InstallerService/.project @@ -0,0 +1,99 @@ + + + InstallerService + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + sbi-make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/InstallerService/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + true + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + + + 1360216703005 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + diff --git a/InstallerService/CMakeLists.txt b/InstallerService/CMakeLists.txt new file mode 100644 index 0000000..9811118 --- /dev/null +++ b/InstallerService/CMakeLists.txt @@ -0,0 +1,29 @@ +# Target name and AppID +SET(this_target InstallerService) +SET(PKG_ID D7eOJquGtL) + +# include directory +INCLUDE_DIRECTORIES( + /usr/include/osp + inc + ) + +# Source files +FILE(GLOB ${this_target}_SOURCE_FILES src/*.cpp) + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") + +# Create executable +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") +ADD_EXECUTABLE (${this_target} ${${this_target}_SOURCE_FILES}) + +# Set link libraries and link options +TARGET_LINK_LIBRARIES(${this_target} -L/usr/lib/osp osp-appfw osp-uifw osp-shell osp-shell-core pthread) +TARGET_LINK_LIBRARIES(${this_target} -Xlinker --allow-shlib-undefined -pthread -pie) + +# Copy info, data, res, and icons directories +INSTALL(TARGETS ${this_target} DESTINATION ../usr/apps/${PKG_ID}/bin) + +# Copy resource +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/InstallerService/res DESTINATION ../usr/apps/${PKG_ID}) + diff --git a/InstallerService/inc/AppResourceId.h b/InstallerService/inc/AppResourceId.h new file mode 100644 index 0000000..bbf865b --- /dev/null +++ b/InstallerService/inc/AppResourceId.h @@ -0,0 +1,32 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file AppResourceId.h + * @brief This is the header file for resource definition. + */ + +#ifndef _APP_RESOURCE_ID_H_ +#define _APP_RESOURCE_ID_H_ + +extern const wchar_t* IDC_LABEL_COUNT; +extern const wchar_t* IDC_LABEL_DEGREE; +extern const wchar_t* IDC_LABEL_ICON; +extern const wchar_t* IDC_LABEL_NAME; +extern const wchar_t* IDC_PROGRESS; +extern const wchar_t* IDL_QUICK_INSTALLATION; + +#endif // _APP_RESOURCE_ID_H_ diff --git a/InstallerService/inc/InstallerService.h b/InstallerService/inc/InstallerService.h new file mode 100644 index 0000000..126c76b --- /dev/null +++ b/InstallerService/inc/InstallerService.h @@ -0,0 +1,64 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file InstallerService.h + * @brief This file contains the declaration of InstallerService Class, + * which provides basic features necessary to define an ServiceApp. + */ + +#ifndef _INSTALLER_SERVICE_H_ +#define _INSTALLER_SERVICE_H_ + +#include +#include +#include +#include +#include + +class InstallerServiceApp + : public Tizen::App::ServiceApp + , public virtual Tizen::App::IAppControlProviderEventListener + , public virtual Tizen::App::Package::IPackageInstallationEventListener +{ +public: + InstallerServiceApp(void); + virtual ~InstallerServiceApp(void); + result Install(const Tizen::Base::String& filePath); + + virtual bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry); + virtual bool OnAppInitialized(void); + virtual bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false); + virtual void OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String& operationId, + const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData); + virtual void OnPackageInstallationCompleted(const Tizen::App::PackageId& packageId, Tizen::App::Package::PackageInstallationResult installationResult); + virtual void OnPackageInstallationInProgress(const Tizen::App::PackageId& packageId, int progress); + virtual void OnPackageUninstallationCompleted(const Tizen::App::PackageId& packageId, bool uninstallationResult); + + static Tizen::App::ServiceApp* CreateInstance(void); +private: + Tizen::App::PackageId __packageId; + Tizen::App::Package::PackageInfo* __pInfo; + Tizen::Ui::Controls::Label* __pDegreeLabel; + Tizen::Ui::Controls::Label* __pCountLabel; + Tizen::Ui::Controls::Progress* __pProgress; + Tizen::Shell::QuickPanelFrame* __pFrame; + Tizen::Base::Collection::ArrayList __filePathList; + Tizen::Locales::DateTimeFormatter* __pDateTimeFormatter; + int __index; +}; + +#endif // _INSTALLER_SERVICE_H_ diff --git a/InstallerService/manifest.xml b/InstallerService/manifest.xml new file mode 100644 index 0000000..aef8ef6 --- /dev/null +++ b/InstallerService/manifest.xml @@ -0,0 +1,31 @@ + + + LREqrkLatJ + 1.0.0 + C++App + + true + true + true + + + 2.2 + + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/package.info + http://tizen.org/privilege/notification + http://tizen.org/privilege/packagemanager.install + + + + + + InstallerService + + + mainmenu.png + + + + + diff --git a/InstallerService/res/screen-size-normal/IDL_QUICK_INSTALLATION.xml b/InstallerService/res/screen-size-normal/IDL_QUICK_INSTALLATION.xml new file mode 100644 index 0000000..31375cc --- /dev/null +++ b/InstallerService/res/screen-size-normal/IDL_QUICK_INSTALLATION.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + diff --git a/InstallerService/shared/res/screen-density-xhigh/mainmenu.png b/InstallerService/shared/res/screen-density-xhigh/mainmenu.png new file mode 100644 index 0000000..9765b1b Binary files /dev/null and b/InstallerService/shared/res/screen-density-xhigh/mainmenu.png differ diff --git a/InstallerService/src/AppResourceId.cpp b/InstallerService/src/AppResourceId.cpp new file mode 100644 index 0000000..2eb5dde --- /dev/null +++ b/InstallerService/src/AppResourceId.cpp @@ -0,0 +1,29 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file AppResourceId.cpp + * @brief This file contains resource definition. + */ + +#include "AppResourceId.h" + +const wchar_t* IDC_LABEL_COUNT = L"IDC_LABEL_COUNT"; +const wchar_t* IDC_LABEL_DEGREE = L"IDC_LABEL_DEGREE"; +const wchar_t* IDC_LABEL_ICON = L"IDC_LABEL_ICON"; +const wchar_t* IDC_LABEL_NAME = L"IDC_LABEL_NAME"; +const wchar_t* IDC_PROGRESS = L"IDC_PROGRESS"; +const wchar_t* IDL_QUICK_INSTALLATION = L"IDL_QUICK_INSTALLATION"; diff --git a/InstallerService/src/InstallerService.cpp b/InstallerService/src/InstallerService.cpp new file mode 100644 index 0000000..39e9b4c --- /dev/null +++ b/InstallerService/src/InstallerService.cpp @@ -0,0 +1,330 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * @file InstallerService.cpp + * @brief This file contains the declaration of InstallerService Class, + * which provides basic features necessary to define an ServiceApp. + */ + +#include +#include +#include +#include +#include +#include +#include "AppResourceId.h" +#include "InstallerService.h" + +using namespace Tizen::App::Package; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Shell; +using namespace Tizen::System; +using namespace Tizen::Ui::Controls; + +InstallerServiceApp::InstallerServiceApp(void) + : __pInfo(null) + , __pDegreeLabel(null) + , __pCountLabel(null) + , __pProgress(null) + , __pFrame(null) + , __filePathList(SingleObjectDeleter) + , __pDateTimeFormatter(null) + , __index(0) +{ +} + +InstallerServiceApp::~InstallerServiceApp(void) +{ +} + +Tizen::App::ServiceApp* +InstallerServiceApp::CreateInstance(void) +{ + return new (std::nothrow) InstallerServiceApp(); +} + +bool +InstallerServiceApp::OnAppInitializing(Tizen::App::AppRegistry& appRegistry) +{ + AppLogDebug("Enter"); + Tizen::App::AppControlProviderManager::GetInstance()->SetAppControlProviderEventListener(this); + + __filePathList.Construct(); + + __pFrame = new (std::nothrow) QuickPanelFrame(); + __pFrame->Construct(IDL_QUICK_INSTALLATION); + + return true; +} + +bool +InstallerServiceApp::OnAppInitialized(void) +{ + AppLogDebug("Enter"); + TryReturn(__filePathList.GetCount() != 0, false, "The filePath is not exist."); + + __pDateTimeFormatter = Tizen::Locales::DateTimeFormatter::CreateTimeFormatterN(Tizen::Locales::DATE_TIME_STYLE_NONE); + String pattern; + SettingInfo::GetValue(L"http://tizen.org/setting/locale.time.format", pattern); + if (pattern.Contains(L":ss")) + { + pattern.Replace(L":ss", L""); + } + else if (pattern.Contains(L":SS")) + { + pattern.Replace(L":SS", L""); + } + else if (pattern.Contains(L".ss")) + { + pattern.Replace(L".ss", L""); + } + else if (pattern.Contains(L".SS")) + { + pattern.Replace(L".SS", L""); + } + else if (pattern.Contains(L"-ss")) + { + pattern.Replace(L"-ss", L""); + } + else if (pattern.Contains(L"-SS")) + { + pattern.Replace(L"-SS", L""); + } + __pDateTimeFormatter->ApplyPattern(pattern); + + __pCountLabel = static_cast(__pFrame->GetControl(IDC_LABEL_COUNT)); + __pDegreeLabel = static_cast(__pFrame->GetControl(IDC_LABEL_DEGREE)); + __pProgress = static_cast(__pFrame->GetControl(IDC_PROGRESS)); + + result r = Install(*static_cast(__filePathList.GetAt(__index))); + if (IsFailed(r)) + { + return false; + } + + return true; +} + +bool +InstallerServiceApp::OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination) +{ + AppLogDebug("Enter"); + delete __pFrame; + delete __pInfo; + delete __pDateTimeFormatter; + return true; +} + +void +InstallerServiceApp::OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String& operationId, + const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData) +{ + AppLogDebug("Enter"); + Tizen::App::AppId clientAppId = Tizen::App::AppControlProviderManager::GetInstance()->GetClientAppId(reqId); + TryReturnVoid(clientAppId == L"D7eOJquGtL.Installer", "[%ls] This application is not allowed.", clientAppId.GetPointer()); + TryReturnVoid(pUriData && pUriData->StartsWith(L"file://", 0), "There isn't URI data."); + + String filePath = *pUriData; + filePath.Replace(L"file://", L""); + __filePathList.Add(new (std::nothrow) String(filePath)); + + if (__pFrame->IsVisible()) + { + String count; + count.Format(10, L"%d/%d", __index+1, __filePathList.GetCount()); + + __pCountLabel->SetText(count); + __pCountLabel->Invalidate(false); + } +} + +void +InstallerServiceApp::OnPackageInstallationCompleted(const Tizen::App::PackageId& packageId, + Tizen::App::Package::PackageInstallationResult installationResult) +{ + AppLogDebug("Enter"); + TryReturnVoid(packageId == __packageId, "PackageId: %ls", packageId.GetPointer()); + PackageManager::GetInstance()->RemovePackageInstallationEventListener(*this); + + Tizen::App::AppId mainAppId = __pInfo->GetMainAppId(); + PackageAppInfo* pMainAppInfo = __pInfo->GetPackageAppInfoN(mainAppId); + String appName = __pInfo->GetDisplayName(); + + NotificationManager notificationManager; + notificationManager.Construct(); + + NotificationRequest request; + result r = request.SetIconFilePath(pMainAppInfo->GetAppMenuIconPath()); + AppLogDebugIf(IsFailed(r), "[%s] Failed to set app icon.", GetErrorMessage(r)); + + if (!pMainAppInfo->IsMenuIconVisible()) + { + AppLogDebug("This app hasn't a menu icon."); + mainAppId = L""; + } + + delete pMainAppInfo; + + String installTime; + DateTime curTime; + SystemTime::GetCurrentTime(TIME_MODE_WALL, curTime); + __pDateTimeFormatter->Format(curTime, installTime); + installTime.Insert(L"\n", 0); + installTime.Insert(appName, 0); + + request.SetAlertText(installTime); + + String titleText; + + switch (installationResult) + { + case PACKAGE_INSTALLATION_RESULT_SUCCESS: + AppLogDebug("PACKAGE_INSTALLATION_RESULT_SUCCESS"); + Tizen::App::AppResource::GetInstance()->GetString(L"IDS_APINST_POP_INSTALLED", titleText); + break; + case PACKAGE_INSTALLATION_RESULT_STORAGE_FULL: + AppLogDebug("PACKAGE_INSTALLATION_RESULT_STORAGE_FULL"); + Tizen::App::AppResource::GetInstance()->GetString(L"IDS_APINST_BODY_UNABLE_TO_INSTALL_NOT_ENOUGH_MEMORY_ABB", titleText); + break; + case PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE: + AppLogDebug("PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE"); + Tizen::App::AppResource::GetInstance()->GetString(L"IDS_APINST_POP_FAILED", titleText); + break; + } + + request.SetTitleText(titleText); + + if (installationResult != PACKAGE_INSTALLATION_RESULT_SUCCESS) + { + String* pFilePath = dynamic_cast(__filePathList.GetAt(__index)); + if (pFilePath) + { + request.SetAppMessage(*pFilePath); + } + mainAppId = L"D7eOJquGtL.Installer"; + } + + if (mainAppId.IsEmpty()) + { + r = notificationManager.Notify(request); + AppLogExceptionIf(IsFailed(r), "[%s] Failed to notify message.", GetErrorMessage(r)); + } + else + { + r = notificationManager.NotifyByAppId(mainAppId, request); + AppLogExceptionIf(IsFailed(r), "[%s] Failed to notify message.", GetErrorMessage(r)); + } + + String* pFilePath = null; + do + { + pFilePath = dynamic_cast(__filePathList.GetAt(++__index)); + if (pFilePath) + { + r = Install(*pFilePath); + if (r == E_SUCCESS) + { + return; + } + } + } while (pFilePath); + + __pFrame->SetShowState(false); + Terminate(); +} + +void +InstallerServiceApp::OnPackageInstallationInProgress(const Tizen::App::PackageId& packageId, int progress) +{ + AppLogDebug("progress: %d", progress); + TryReturnVoid(packageId == __packageId, "PackageId: %ls", packageId.GetPointer()); + + if (__pProgress->GetValue() != progress) + { + __pProgress->SetValue(progress); + __pProgress->Invalidate(false); + __pDegreeLabel->SetText(Integer::ToString(progress) + L"%"); + __pDegreeLabel->Invalidate(false); + } +} + +void +InstallerServiceApp::OnPackageUninstallationCompleted(const Tizen::App::PackageId& packageId, bool uninstallationResult) +{ + AppLogDebug("Enter"); + TryReturnVoid(packageId == __packageId, "PackageId: %ls", packageId.GetPointer()); +} + +result +InstallerServiceApp::Install(const Tizen::Base::String& filePath) +{ + AppLogDebug("Enter"); + NotificationManager notificationManager; + String count; + + delete __pInfo; + __pInfo = PackageManager::GetInstance()->GetPackageInfoFromFileN(filePath); + TryReturn(__pInfo, GetLastResult(), "[%s] Failed to get the packageInfo. - %ls", GetErrorMessage(GetLastResult()), filePath.GetPointer()); + __packageId = __pInfo->GetId(); + + PackageAppInfo* pMainAppInfo = __pInfo->GetPackageAppInfoN(__pInfo->GetMainAppId()); + Bitmap* pAppIcon = pMainAppInfo->GetAppMenuIconN(); + delete pMainAppInfo; + + String appName = __pInfo->GetDisplayName(); + + if (pAppIcon) + { + Label* pIconLabel = static_cast(__pFrame->GetControl(IDC_LABEL_ICON)); + pIconLabel->SetBackgroundBitmap(*pAppIcon); + delete pAppIcon; + } + + Label* pNameLabel = static_cast(__pFrame->GetControl(IDC_LABEL_NAME)); + pNameLabel->SetText(appName); + + String notifyTextMsg; + Tizen::App::AppResource::GetInstance()->GetString(L"IDS_APINST_BODY_INSTALLING_PS_ING", notifyTextMsg); + notifyTextMsg.Format(notifyTextMsg.GetLength() + appName.GetLength(), notifyTextMsg.GetPointer(), appName.GetPointer()); + + PackageManager::GetInstance()->AddPackageInstallationEventListener(*this); + result r = PackageManager::GetInstance()->InstallPackage(__packageId, filePath, null); + TryCatch(r == E_SUCCESS, , "[%s] Failed to install package.", GetErrorMessage(r)); + + notificationManager.Construct(); + notificationManager.NotifyTextMessage(notifyTextMsg); + + count.Format(10, L"%d/%d", __index+1, __filePathList.GetCount()); + __pCountLabel->SetText(count); + __pCountLabel->Invalidate(false); + + __pProgress->SetValue(0); + __pDegreeLabel->SetText(L"0%"); + + __pFrame->Invalidate(true); + __pFrame->SetShowState(true); + __pFrame->Show(); + + return r; + +CATCH: + delete __pInfo; + __pInfo = null; + return r; +} diff --git a/InstallerService/src/InstallerServiceEntry.cpp b/InstallerService/src/InstallerServiceEntry.cpp new file mode 100644 index 0000000..61725dc --- /dev/null +++ b/InstallerService/src/InstallerServiceEntry.cpp @@ -0,0 +1,50 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// 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. +// + +/** + * This file contains the Tizen C++ application entry point. + */ + +#include "InstallerService.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +_EXPORT_ int +OspMain(int argc, char* pArgv[]) +{ + AppLog("Application started."); + ArrayList args(SingleObjectDeleter); + args.Construct(); + for (int i = 0; i < argc; i++) + { + args.Add(new (std::nothrow) String(pArgv[i])); + } + + result r = Tizen::App::ServiceApp::Execute(InstallerServiceApp::CreateInstance, &args); + AppLogExceptionIf(IsFailed(r), "[%s] Application execution failed", GetErrorMessage(r)); + AppLog("Application finished."); + + return static_cast(r); +} +#ifdef __cplusplus +} +#endif // __cplusplus diff --git a/LICENSE.Flora b/LICENSE.Flora new file mode 100755 index 0000000..571fe79 --- /dev/null +++ b/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +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. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +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 +solely as incorporated into a Tizen Certified Platform, 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 solely +as incorporated into a Tizen Certified Platform 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 pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. 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 + 4. 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 + and your own copyright statement or terms and conditions do not conflict + the conditions stated in the License including section 3. + +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 Flora License to your work + +To apply the Flora 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 Flora License, Version 1.1 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://floralicense.org/license/ + + 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 100644 index 0000000..94d56df --- /dev/null +++ b/NOTICE @@ -0,0 +1,3 @@ +Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1.1 +Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions. diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 0000000..de79cf1 --- /dev/null +++ b/manifest.xml @@ -0,0 +1,47 @@ + + + D7eOJquGtL + 1.0.0 + C++App + + + 2.2 + + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/package.info + http://tizen.org/privilege/application.launch + http://tizen.org/privilege/notification + http://tizen.org/privilege/packagemanager.install + + + + + + Installer + + + mainmenu.png + + + + application/vnd.tizen.package + application/vnd.wac.widget-sharing + application/widget + http://tizen.org/appcontrol/operation/view + + + + + + + + + InstallerService + + + mainmenu.png + + + + + diff --git a/packaging/apps.Installer.changes b/packaging/apps.Installer.changes new file mode 100644 index 0000000..4d0f66e --- /dev/null +++ b/packaging/apps.Installer.changes @@ -0,0 +1,7 @@ +* The July 5 2013 Changyong Jeon +- Supports translated languages. + +* The Jun 25 2013 Changyong Jeon +- fix issue that cutting some of description. + + diff --git a/packaging/apps.Installer.spec b/packaging/apps.Installer.spec new file mode 100755 index 0000000..7d16f38 --- /dev/null +++ b/packaging/apps.Installer.spec @@ -0,0 +1,65 @@ +Name: apps.Installer +Summary: Installer application +Version: 1.1.0 +Release: 1 +Group: TO_BE/FILLED_IN +License: Flora License, Version 1.1 +Source0: %{name}-%{version}.tar.gz +BuildRequires: cmake +BuildRequires: hash-signer +BuildRequires: pkgconfig(osp-appfw) +BuildRequires: pkgconfig(osp-uifw) +BuildRequires: pkgconfig(osp-shell) + +%description +Verification application: Installer + +%prep +%setup -q + +%build +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` +%ifarch %{ix86} +%if 0%{?simulator} +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ -D_OSP_EMUL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} +%else +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ " cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} +%endif +%else +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_ARMEL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} +%endif + +# Call make instruction with smp support +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/usr/share/license +cp LICENSE.Flora %{buildroot}/usr/share/license/%{name} +%make_install + +# Application signing +PKG_ID=D7eOJquGtL +%define tizen_sign 1 +%define tizen_sign_base /usr/apps/${PKG_ID} +%define tizen_sign_level platform +%define tizen_author_sign 1 +%define tizen_dist_sign 1 + +%post +/sbin/ldconfig +PKG_ID=D7eOJquGtL +echo "/usr/etc/package-manager/backend/tpk -i /usr/apps/"${PKG_ID} +/usr/etc/package-manager/backend/tpk -i /usr/apps/${PKG_ID} +cp -f /usr/lib/osp/osp-service-app-loader /usr/apps/${PKG_ID}/bin/Installer + +%postun +/sbin/ldconfig +PKG_ID=D7eOJquGtL +echo "/usr/etc/package-manager/backend/tpk -u "${PKG_ID} +/usr/etc/package-manager/backend/tpk -u ${PKG_ID} + +%files +%defattr(-,root,root,-) +/usr/apps/* +/usr/share/license/%{name}