Initialize Tizen 2.3 tizen_2.3 2.3a_release submit/tizen_2.3/20140531.053914
authorSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:28:59 +0000 (12:28 +0900)
committerSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:28:59 +0000 (12:28 +0900)
185 files changed:
.cproject [new file with mode: 0644]
.project [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
LICENSE.Flora [new file with mode: 0644]
NOTICE [new file with mode: 0644]
inc/CtAccountListItemProvider.h [new file with mode: 0644]
inc/CtCommonUtil.h [new file with mode: 0644]
inc/CtContactDetailsForm.h [new file with mode: 0644]
inc/CtContactEditorForm.h [new file with mode: 0644]
inc/CtContactListEditorPanel.h [new file with mode: 0644]
inc/CtContactListItem.h [new file with mode: 0644]
inc/CtContactListPanel.h [new file with mode: 0644]
inc/CtContactListPresentationModel.h [new file with mode: 0644]
inc/CtContactPresentationModel.h [new file with mode: 0644]
inc/CtContactSelectorForm.h [new file with mode: 0644]
inc/CtContactValueListItemProvider.h [new file with mode: 0644]
inc/CtContactsApp.h [new file with mode: 0644]
inc/CtFavoriteListEditorPanel.h [new file with mode: 0644]
inc/CtFavoriteListPanel.h [new file with mode: 0644]
inc/CtFavoriteListPresentationModel.h [new file with mode: 0644]
inc/CtFormFactory.h [new file with mode: 0644]
inc/CtGroupContactListEditorForm.h [new file with mode: 0644]
inc/CtGroupContactListForm.h [new file with mode: 0644]
inc/CtGroupContactListPresentationModel.h [new file with mode: 0644]
inc/CtGroupEditorForm.h [new file with mode: 0644]
inc/CtGroupListEditorPanel.h [new file with mode: 0644]
inc/CtGroupListPanel.h [new file with mode: 0644]
inc/CtGroupListPresentationModel.h [new file with mode: 0644]
inc/CtGroupPresentationModel.h [new file with mode: 0644]
inc/CtGroupSelectorForm.h [new file with mode: 0644]
inc/CtIContactEventListener.h [new file with mode: 0644]
inc/CtIContactsAppStateChangeEventListener.h [new file with mode: 0644]
inc/CtMainForm.h [new file with mode: 0644]
inc/CtMainFrame.h [new file with mode: 0644]
inc/CtPanelFactory.h [new file with mode: 0644]
inc/CtResourceManager.h [new file with mode: 0644]
inc/CtSceneRegister.h [new file with mode: 0644]
inc/CtSearchListEventListener.h [new file with mode: 0644]
inc/CtSearchListItem.h [new file with mode: 0644]
inc/CtSettingsForm.h [new file with mode: 0644]
inc/CtTypes.h [new file with mode: 0644]
manifest.xml [new file with mode: 0644]
packaging/apps.Contacts.spec [new file with mode: 0644]
res/ara-AE.xml [new file with mode: 0644]
res/aze-AZ.xml [new file with mode: 0644]
res/bul-BG.xml [new file with mode: 0644]
res/cat-ES.xml [new file with mode: 0644]
res/ces-CZ.xml [new file with mode: 0644]
res/dan-DK.xml [new file with mode: 0644]
res/deu-DE.xml [new file with mode: 0644]
res/ell-GR.xml [new file with mode: 0644]
res/eng-GB.xml [new file with mode: 0644]
res/eng-PH.xml [new file with mode: 0644]
res/eng-US.xml [new file with mode: 0644]
res/est-EE.xml [new file with mode: 0644]
res/eus-ES.xml [new file with mode: 0644]
res/fas-AF.xml [new file with mode: 0644]
res/fin-FI.xml [new file with mode: 0644]
res/fra-CA.xml [new file with mode: 0644]
res/fra-FR.xml [new file with mode: 0644]
res/gle-IE.xml [new file with mode: 0644]
res/glg-ES.xml [new file with mode: 0644]
res/hin-IN.xml [new file with mode: 0644]
res/hrv-HR.xml [new file with mode: 0644]
res/hun-HU.xml [new file with mode: 0644]
res/hye-AM.xml [new file with mode: 0644]
res/isl-IS.xml [new file with mode: 0644]
res/ita-IT.xml [new file with mode: 0644]
res/jpn-JP.xml [new file with mode: 0644]
res/kat-GE.xml [new file with mode: 0644]
res/kaz-KZ.xml [new file with mode: 0644]
res/kor-KR.xml [new file with mode: 0644]
res/lav-LV.xml [new file with mode: 0644]
res/lit-LT.xml [new file with mode: 0644]
res/mkd-MK.xml [new file with mode: 0644]
res/nld-NL.xml [new file with mode: 0644]
res/nob-NO.xml [new file with mode: 0644]
res/pol-PL.xml [new file with mode: 0644]
res/por-BR.xml [new file with mode: 0644]
res/por-PT.xml [new file with mode: 0644]
res/ron-RO.xml [new file with mode: 0644]
res/rus-RU.xml [new file with mode: 0644]
res/screen-density-xhigh/00_Nocontents_picture.png [new file with mode: 0644]
res/screen-density-xhigh/00_Nocontents_text.png [new file with mode: 0644]
res/screen-density-xhigh/00_Nocontents_unnamed.png [new file with mode: 0755]
res/screen-density-xhigh/00_button_expand_closed.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_expand_closed_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_expand_minus_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_expand_opened.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_expand_opened_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_refresh.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_refresh_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_rename.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_rename_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_circle_button.png [new file with mode: 0644]
res/screen-density-xhigh/00_circle_button_delete.png [new file with mode: 0644]
res/screen-density-xhigh/00_circle_button_delete_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_circle_button_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_icon_favorite_off.png [new file with mode: 0644]
res/screen-density-xhigh/00_icon_favorite_on.png [new file with mode: 0644]
res/screen-density-xhigh/00_icon_more.png [new file with mode: 0644]
res/screen-density-xhigh/00_icon_more_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_Icon_ICQ.png [new file with mode: 0644]
res/screen-density-xhigh/C02_Icon_others.png [new file with mode: 0644]
res/screen-density-xhigh/C02_Icon_windows_live.png [new file with mode: 0644]
res/screen-density-xhigh/C02_Icon_yahoo.png [new file with mode: 0644]
res/screen-density-xhigh/C02_button_icon_dropbox.png [new file with mode: 0755]
res/screen-density-xhigh/C02_caller_id_icon_add.png [new file with mode: 0644]
res/screen-density-xhigh/C02_caller_id_icon_add_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C02_caller_id_icon_add_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_caller_id_icon_camera.png [new file with mode: 0644]
res/screen-density-xhigh/C02_caller_id_icon_camera_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C02_caller_id_icon_camera_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_button.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_button_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_icon_call.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_icon_call_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_icon_sms.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_icon_sms_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_icon_vt-call.png [new file with mode: 0644]
res/screen-density-xhigh/C02_circle_icon_vt-call_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_created_photo_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C02_tab_icon_contacts.png [new file with mode: 0644]
res/screen-density-xhigh/C02_tab_icon_contacts_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_tab_icon_favourites.png [new file with mode: 0644]
res/screen-density-xhigh/C02_tab_icon_favourites_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_tab_icon_groups.png [new file with mode: 0644]
res/screen-density-xhigh/C02_tab_icon_groups_press.png [new file with mode: 0644]
res/screen-size-normal/IDL_CONTACT_DETAILS_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_GROUP_EDITOR_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_GROUP_SELECTOR_FORM.xml [new file with mode: 0644]
res/slk-SK.xml [new file with mode: 0644]
res/slv-SI.xml [new file with mode: 0644]
res/spa-ES.xml [new file with mode: 0644]
res/spa-MX.xml [new file with mode: 0644]
res/srp-RS.xml [new file with mode: 0644]
res/swe-SE.xml [new file with mode: 0644]
res/tha-TH.xml [new file with mode: 0644]
res/tur-TR.xml [new file with mode: 0644]
res/ukr-UA.xml [new file with mode: 0644]
res/urd-IN.xml [new file with mode: 0644]
res/uzb-UZ.xml [new file with mode: 0644]
res/zho-CN.xml [new file with mode: 0644]
res/zho-HK.xml [new file with mode: 0644]
res/zho-SG.xml [new file with mode: 0644]
res/zho-TW.xml [new file with mode: 0644]
shared/data/nofile.dummy [new file with mode: 0644]
shared/res/screen-density-xhigh/mainmenu.png [new file with mode: 0644]
shared/trusted/nofile.dummy [new file with mode: 0644]
src/CtAccountListItemProvider.cpp [new file with mode: 0644]
src/CtCommonUtil.cpp [new file with mode: 0644]
src/CtContactDetailsForm.cpp [new file with mode: 0644]
src/CtContactEditorForm.cpp [new file with mode: 0644]
src/CtContactEntry.cpp [new file with mode: 0644]
src/CtContactListEditorPanel.cpp [new file with mode: 0644]
src/CtContactListItem.cpp [new file with mode: 0644]
src/CtContactListPanel.cpp [new file with mode: 0644]
src/CtContactListPresentationModel.cpp [new file with mode: 0644]
src/CtContactPresentationModel.cpp [new file with mode: 0644]
src/CtContactSelectorForm.cpp [new file with mode: 0644]
src/CtContactValueListItemProvider.cpp [new file with mode: 0644]
src/CtContactsApp.cpp [new file with mode: 0644]
src/CtFavoriteListEditorPanel.cpp [new file with mode: 0644]
src/CtFavoriteListPanel.cpp [new file with mode: 0644]
src/CtFavoriteListPresentationModel.cpp [new file with mode: 0644]
src/CtFormFactory.cpp [new file with mode: 0644]
src/CtGroupContactListEditorForm.cpp [new file with mode: 0644]
src/CtGroupContactListForm.cpp [new file with mode: 0644]
src/CtGroupContactListPresentationModel.cpp [new file with mode: 0644]
src/CtGroupEditorForm.cpp [new file with mode: 0644]
src/CtGroupListEditorPanel.cpp [new file with mode: 0644]
src/CtGroupListPanel.cpp [new file with mode: 0644]
src/CtGroupListPresentationModel.cpp [new file with mode: 0644]
src/CtGroupPresentationModel.cpp [new file with mode: 0644]
src/CtGroupSelectorForm.cpp [new file with mode: 0644]
src/CtGroupSelectorForm.cpp~ [new file with mode: 0644]
src/CtMainForm.cpp [new file with mode: 0644]
src/CtMainFrame.cpp [new file with mode: 0644]
src/CtPanelFactory.cpp [new file with mode: 0644]
src/CtResourceManager.cpp [new file with mode: 0644]
src/CtSceneRegister.cpp [new file with mode: 0644]
src/CtSearchListEventListener.cpp [new file with mode: 0644]
src/CtSearchListItem.cpp [new file with mode: 0644]
src/CtSettingsForm.cpp [new file with mode: 0644]
src/CtTypes.cpp [new file with mode: 0644]

diff --git a/.cproject b/.cproject
new file mode 100644 (file)
index 0000000..b8c98a1
--- /dev/null
+++ b/.cproject
@@ -0,0 +1,688 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+       <storageModule moduleId="org.eclipse.cdt.core.settings">
+               <cconfiguration id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.1641263607">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.1641263607" moduleId="org.eclipse.cdt.core.settings" name="Debug-Tizen-Emulator">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactExtension="exe" artifactName="Contacts" buildArtefactType="org.tizen.nativecpp.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecpp.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.1641263607" name="Debug-Tizen-Emulator" parent="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator">
+                                       <folderInfo id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.1641263607." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.emulator.2067876693" name="Tizen Native Toolchain" superClass="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.emulator">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1103387176" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/Contacts/Debug-Tizen-Emulator}" id="org.tizen.nativecpp.target.sbi.gnu.builder.514814471" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecpp.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.gnu.archiver.1921880714" name="Archiver" superClass="org.tizen.nativecpp.tool.sbi.gnu.archiver"/>
+                                                       <tool command="i386-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.349444330" name="C++ Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.1200993717" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+                                                               <option id="gnu.cpp.compiler.option.debugging.level.954918535" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.1208626948" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-emulator-2.0.cpp.partner_gcc45.i386.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.1394955291" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp.437612442" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp.2044357148" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.cpp.1374010452" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.preprocessor.def.305639474" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1042764860" superClass="sbi.gnu.cpp.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-gcc" id="org.tizen.nativecpp.tool.sbi.gnu.c.compiler.1370741748" name="C Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.537086632" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option id="gnu.c.compiler.option.debugging.level.1675421074" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.c.compiler.option.830698819" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-emulator-2.0.cpp.partner_gcc45.i386.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.1456258304" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.cpp.589702197" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.cpp.1874085099" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.cpp.83273980" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.preprocessor.def.symbols.1030290005" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.1234877164" superClass="sbi.gnu.c.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.2103576525" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="i386-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.1340628682" name="C++ Linker" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker">
+                                                               <option id="gnu.cpp.link.option.paths.1136718191" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp.124096287" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --as-needed"/>
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=\$$ORIGIN/.. -Xlinker -rpath=\$$ORIGIN/../lib"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib/osp&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-appfw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uifw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-image"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-ime"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-net"/>
+                                                                       <listOptionValue builtIn="false" value="-lpthread"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-content"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-locations"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-telephony"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uix"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-media"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-messaging"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-web"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-social"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-wifi"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-bluetooth"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-nfc"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-face"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-tts"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-stt"/>
+                                                                       <listOptionValue builtIn="false" value="-lxml2"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2132470908" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.396737143" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.260382181" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.po.compiler.1372364636" name="PO Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.edc.compiler.1611907919" name="EDC Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.1259456537">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.1259456537" moduleId="org.eclipse.cdt.core.settings" name="Debug-Tizen-Device">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactExtension="exe" artifactName="${ProjName}" buildArtefactType="org.tizen.nativecpp.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecpp.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.1259456537" name="Debug-Tizen-Device" parent="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device">
+                                       <folderInfo id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.1259456537." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.device.794762191" name="Tizen Native Toolchain" superClass="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.device">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1886416075" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/Contacts/Debug-Tizen-Device}" id="org.tizen.nativecpp.target.sbi.gnu.builder.114373669" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecpp.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.gnu.archiver.1090102522" name="Archiver" superClass="org.tizen.nativecpp.tool.sbi.gnu.archiver"/>
+                                                       <tool command="arm-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.896732815" name="C++ Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.215979766" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+                                                               <option id="gnu.cpp.compiler.option.debugging.level.1759272737" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.1049950184" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-device-2.0.cpp.partner_gcc45.armel.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.1462254760" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp.681234351" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp.1079889405" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.cpp.1780477288" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.preprocessor.def.674971018" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.154278668" superClass="sbi.gnu.cpp.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-gcc" id="org.tizen.nativecpp.tool.sbi.gnu.c.compiler.167673593" name="C Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.461447159" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option id="gnu.c.compiler.option.debugging.level.184516183" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.c.compiler.option.1257170235" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-device-2.0.cpp.partner_gcc45.armel.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.524185425" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.cpp.995267749" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.cpp.1209783963" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.cpp.1084454403" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.preprocessor.def.symbols.882222560" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.2099083137" superClass="sbi.gnu.c.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.2033568127" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="arm-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.1791839683" name="C++ Linker" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker">
+                                                               <option id="gnu.cpp.link.option.paths.1751668066" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp.1945186424" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --as-needed"/>
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=\$$ORIGIN/.. -Xlinker -rpath=\$$ORIGIN/../lib"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib/osp&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-appfw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uifw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-image"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-ime"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-net"/>
+                                                                       <listOptionValue builtIn="false" value="-lpthread"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-content"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-locations"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-telephony"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uix"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-media"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-messaging"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-web"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-social"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-wifi"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-bluetooth"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-nfc"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-face"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-tts"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-stt"/>
+                                                                       <listOptionValue builtIn="false" value="-lxml2"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1531802899" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.771931264" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.472443606" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.po.compiler.959163426" name="PO Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.edc.compiler.415331287" name="EDC Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecpp.config.sbi.gcc45.app.release.1471180288">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecpp.config.sbi.gcc45.app.release.1471180288" moduleId="org.eclipse.cdt.core.settings" name="Release">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactExtension="exe" artifactName="${ProjName}" buildArtefactType="org.tizen.nativecpp.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecpp.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecpp.config.sbi.gcc45.app.release.1471180288" name="Release" parent="org.tizen.nativecpp.config.sbi.gcc45.app.release">
+                                       <folderInfo id="org.tizen.nativecpp.config.sbi.gcc45.app.release.1471180288." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecpp.toolchain.sbi.gcc45.app.release.2102315425" name="Tizen Native Toolchain" superClass="org.tizen.nativecpp.toolchain.sbi.gcc45.app.release">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1176531242" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/Contacts/Release}" id="org.tizen.nativecpp.target.sbi.gnu.builder.960845429" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecpp.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.gnu.archiver.69741976" name="Archiver" superClass="org.tizen.nativecpp.tool.sbi.gnu.archiver"/>
+                                                       <tool command="arm-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.754299140" name="C++ Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.863469911" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+                                                               <option id="gnu.cpp.compiler.option.debugging.level.1763512" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.1681665666" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-device-2.0.cpp.partner_gcc45.armel.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.16058996" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp.1120711182" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp.231164750" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.cpp.1799193859" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1427546111" superClass="sbi.gnu.cpp.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-gcc" id="org.tizen.nativecpp.tool.sbi.gnu.c.compiler.442301962" name="C Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.494696227" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option id="gnu.c.compiler.option.debugging.level.372952474" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.c.compiler.option.1354264482" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-device-2.0.cpp.partner_gcc45.armel.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.1475305455" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.cpp.1326575928" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.cpp.996436845" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.cpp.22923401" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.743584144" superClass="sbi.gnu.c.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1928744851" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="arm-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.462496593" name="C++ Linker" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker">
+                                                               <option id="gnu.cpp.link.option.paths.292903970" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp.1498450347" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --as-needed"/>
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=\$$ORIGIN/.. -Xlinker -rpath=\$$ORIGIN/../lib"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib/osp&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-appfw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uifw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-image"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-ime"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-net"/>
+                                                                       <listOptionValue builtIn="false" value="-lpthread"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-content"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-locations"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-telephony"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uix"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-media"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-messaging"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-web"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-social"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-wifi"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-bluetooth"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-nfc"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-face"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-tts"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-stt"/>
+                                                                       <listOptionValue builtIn="false" value="-lxml2"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1431770158" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1117464319" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1305998945" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.po.compiler.393129318" name="PO Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.edc.compiler.1109123740" name="EDC Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.da.184633764">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.da.184633764" moduleId="org.eclipse.cdt.core.settings" name="DA-Tizen-Emulator">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactExtension="exe" artifactName="${ProjName}" buildArtefactType="org.tizen.nativecpp.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecpp.buildArtefactType.app" description="" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.da.184633764" name="DA-Tizen-Emulator" parent="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.da">
+                                       <folderInfo id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.da.184633764." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.emulator.da.1437173019" name="Tizen Native Toolchain" superClass="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.emulator.da">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1939224674" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/Contacts/DA-Tizen-Emulator}" id="org.tizen.nativecpp.target.sbi.gnu.builder.1641072335" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecpp.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.gnu.archiver.1250839274" name="Archiver" superClass="org.tizen.nativecpp.tool.sbi.gnu.archiver"/>
+                                                       <tool command="i386-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.da.508156815" name="C++ Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.da">
+                                                               <option id="sbi.gnu.cpp.compiler.option.2139745048" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-emulator-2.0.cpp.partner_gcc45.i386.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.552061890" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp.1780544491" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp.708296644" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.cpp.973966144" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.preprocessor.def.630972266" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_USE_DA_"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.910375147" superClass="sbi.gnu.cpp.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-gcc" id="org.tizen.nativecpp.tool.sbi.gnu.c.compiler.1775475783" name="C Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.c.compiler">
+                                                               <option id="sbi.gnu.c.compiler.option.696443110" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-emulator-2.0.cpp.partner_gcc45.i386.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.904160799" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.cpp.965344979" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.cpp.1785329060" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.cpp.1054979047" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.preprocessor.def.symbols.1984376558" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_USE_DA_"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.1921879176" superClass="sbi.gnu.c.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1249879388" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="i386-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.da.2143148228" name="C++ Linker" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.da">
+                                                               <option id="gnu.cpp.link.option.paths.1782981009" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library/da/x86&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp.1140712344" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --as-needed"/>
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=\$$ORIGIN/.. -Xlinker -rpath=\$$ORIGIN/../lib"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib/osp&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-appfw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uifw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-image"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-ime"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-net"/>
+                                                                       <listOptionValue builtIn="false" value="-lpthread"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-content"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-locations"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-telephony"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uix"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-media"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-messaging"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-web"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-social"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-wifi"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-bluetooth"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-nfc"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-face"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-tts"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-stt"/>
+                                                                       <listOptionValue builtIn="false" value="-lxml2"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.libs.1818980245" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+                                                                       <listOptionValue builtIn="false" value="daprobe"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1934265400" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1372128175" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1921757412" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.po.compiler.1370349425" name="PO Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.edc.compiler.1344738242" name="EDC Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.da.950144939">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.da.950144939" moduleId="org.eclipse.cdt.core.settings" name="DA-Tizen-Device">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactExtension="exe" artifactName="${ProjName}" buildArtefactType="org.tizen.nativecpp.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecpp.buildArtefactType.app" description="" id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.da.950144939" name="DA-Tizen-Device" parent="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.da">
+                                       <folderInfo id="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.da.950144939." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.device.da.461623457" name="Tizen Native Toolchain" superClass="org.tizen.nativecpp.toolchain.sbi.gcc45.app.debug.device.da">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.836191378" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/Contacts/DA-Tizen-Device}" id="org.tizen.nativecpp.target.sbi.gnu.builder.657769114" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecpp.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.gnu.archiver.138682376" name="Archiver" superClass="org.tizen.nativecpp.tool.sbi.gnu.archiver"/>
+                                                       <tool command="arm-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.da.906356560" name="C++ Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler.da">
+                                                               <option id="sbi.gnu.cpp.compiler.option.1772980485" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-device-2.0.cpp.partner_gcc45.armel.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.103288954" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp.1566085490" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp.2008910311" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.cpp.1134054424" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.preprocessor.def.403654649" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_USE_DA_"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.620877569" superClass="sbi.gnu.cpp.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-gcc" id="org.tizen.nativecpp.tool.sbi.gnu.c.compiler.282300119" name="C Compiler" superClass="org.tizen.nativecpp.tool.sbi.gnu.c.compiler">
+                                                               <option id="sbi.gnu.c.compiler.option.2023916269" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="tizen-device-2.0.cpp.partner_gcc45.armel.cpp.app"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.1397237277" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.cpp.1480084836" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.cpp" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="osp"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.cpp.1593650372" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.cpp" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;/home/jeonkun2/tizen-sdk/library&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/osp&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.cpp.2028560638" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.preprocessor.def.symbols.931653870" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_USE_DA_"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.53753718" superClass="sbi.gnu.c.compiler.tizen.inputType"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1818129702" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="arm-linux-gnueabi-g++" id="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.da.1214520792" name="C++ Linker" superClass="org.tizen.nativecpp.tool.sbi.gnu.cpp.linker.da">
+                                                               <option id="gnu.cpp.link.option.paths.2111852526" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library/da/arm&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp.1281373840" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.cpp" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --as-needed"/>
+                                                                       <listOptionValue builtIn="false" value=""/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=\$$ORIGIN/.. -Xlinker -rpath=\$$ORIGIN/../lib"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib/osp&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-appfw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uifw"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-image"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-ime"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-net"/>
+                                                                       <listOptionValue builtIn="false" value="-lpthread"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-content"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-locations"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-telephony"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-uix"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-media"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-messaging"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-web"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-social"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-wifi"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-bluetooth"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-nfc"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-face"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-tts"/>
+                                                                       <listOptionValue builtIn="false" value="-losp-speech-stt"/>
+                                                                       <listOptionValue builtIn="false" value="-lxml2"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.libs.1044260223" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+                                                                       <listOptionValue builtIn="false" value="daprobe"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.228964238" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1230393612" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1323347410" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.po.compiler.890832320" name="PO Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecpp.tool.sbi.edc.compiler.1390574152" name="EDC Resource Compiler" superClass="org.tizen.nativecpp.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+       </storageModule>
+       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+               <project id="Contacts.org.tizen.nativecpp.target.sbi.gcc45.app.894784160" name="Tizen Application" projectType="org.tizen.nativecpp.target.sbi.gcc45.app"/>
+       </storageModule>
+       <storageModule moduleId="scannerConfiguration">
+               <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.1259456537">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.da.184633764">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecpp.config.sbi.gcc45.app.release.1471180288">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecpp.config.sbi.gcc45.app.debug.emulator.1641263607">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecpp.config.sbi.gcc45.app.debug.device.da.950144939">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+               </scannerConfigBuildInfo>
+       </storageModule>
+       <storageModule moduleId="com.samsung.tizen.nativeapp.projectInfo" version="1.0.0"/>
+       <storageModule moduleId="refreshScope"/>
+</cproject>
diff --git a/.project b/.project
new file mode 100644 (file)
index 0000000..4911e55
--- /dev/null
+++ b/.project
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>Contacts</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+                       <triggers>clean,full,incremental,</triggers>
+                       <arguments>
+                               <dictionary>
+                                       <key>?name?</key>
+                                       <value></value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.append_environment</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+                                       <value>all</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.buildArguments</key>
+                                       <value></value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.buildCommand</key>
+                                       <value>sbi-make</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.buildLocation</key>
+                                       <value>${workspace_loc:/Contacts/Debug-Tizen-Emulator}</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+                                       <value>clean</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.contents</key>
+                                       <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+                                       <value>false</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.enableFullBuild</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+                                       <value>all</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.stopOnError</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+                                       <value>true</value>
+                               </dictionary>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+                       <triggers>full,incremental,</triggers>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.tizen.nativecpp.apichecker.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.cdt.core.cnature</nature>
+               <nature>org.eclipse.cdt.core.ccnature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+               <nature>org.tizen.nativecpp.apichecker.core.tizenCppNature</nature>
+       </natures>
+</projectDescription>
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f7229c1
--- /dev/null
@@ -0,0 +1,32 @@
+# Target name and AppID
+## TODO : set application name and PKG_ID
+SET(this_target Contacts)
+SET(PKG_ID f9uev8hsyo)
+
+# 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
+## TODO : add more link libraries and options
+TARGET_LINK_LIBRARIES(${this_target} -L/usr/lib/osp osp-appfw osp-uifw osp-media osp-content osp-image osp-social 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}/res DESTINATION ../usr/apps/${PKG_ID})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/shared DESTINATION ../usr/apps/${PKG_ID})
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100644 (file)
index 0000000..571fe79
--- /dev/null
@@ -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 (file)
index 0000000..15571f0
--- /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.
\ No newline at end of file
diff --git a/inc/CtAccountListItemProvider.h b/inc/CtAccountListItemProvider.h
new file mode 100644 (file)
index 0000000..5fcf36e
--- /dev/null
@@ -0,0 +1,47 @@
+//
+// 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       CtAccountListItemProvider.h
+ * @brief      This is the header file for the AccountListItemProvider class.
+ */
+
+#ifndef _CT_ACCOUNT_LIST_ITEM_PROVIDER_H_
+#define _CT_ACCOUNT_LIST_ITEM_PROVIDER_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+class ContactListPresentationModel;
+
+class AccountListItemProvider
+       : public Tizen::Ui::Controls::IListViewItemProvider
+{
+public:
+       AccountListItemProvider(Tizen::Ui::Controls::ListView* pAccountListView, ContactListPresentationModel* pContactListPresentationModel);
+       virtual ~AccountListItemProvider(void);
+
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual int GetItemCount(void);
+
+private:
+       Tizen::Ui::Controls::ListView* __pAccountListView;
+       ContactListPresentationModel* __pContactListPresentationModel;
+};
+
+
+#endif /* _CT_ACCOUNT_LIST_ITEM_PROVIDER_H_ */
diff --git a/inc/CtCommonUtil.h b/inc/CtCommonUtil.h
new file mode 100644 (file)
index 0000000..33ed8e9
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// 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       CtCommonUtil.h
+ * @brief      This is the header file for the CtCommonUtil class.
+ */
+
+#ifndef _CT_COMMON_UTIL_H_
+#define _CT_COMMON_UTIL_H_
+
+#include <FApp.h>
+
+class CommonUtil
+{
+public:
+       static bool isMemoryAvailable();
+       static void showMemoryFullMessageBox();
+};
+
+#endif /* _CT_COMMON_UTIL_H_ */
diff --git a/inc/CtContactDetailsForm.h b/inc/CtContactDetailsForm.h
new file mode 100644 (file)
index 0000000..ac273b7
--- /dev/null
@@ -0,0 +1,165 @@
+//
+// 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       CtContactDetailsForm.h
+ * @brief      This is the header file for the ContactDetailsForm class.
+ */
+
+#ifndef _CT_CONTACT_DETAILS_FORM_H_
+#define _CT_CONTACT_DETAILS_FORM_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FIo.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class ContactPresentationModel;
+
+class ContactDetailsForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::App::IAppControlResponseListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IFocusEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Io::IFileEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IFormMenuEventListener
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Controls::ITableViewItemEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::System::ISettingEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+       , public Tizen::Ui::IKeyEventListener
+{
+public:
+       ContactDetailsForm(void);
+       virtual ~ContactDetailsForm(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnFormMenuRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       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 int GetItemCount(void);
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int itemIndex, int itemWidth);
+       virtual bool DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual void UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual int GetDefaultItemHeight(void);
+
+       virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+       virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated);
+       virtual void OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual void OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
+
+       virtual void OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type);
+       virtual void OnScrollPositionChanged (Tizen::Ui::Control &source, int scrollPos);
+       virtual void OnScrollStopped (Tizen::Ui::Control &source);
+
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+       virtual void OnFocusGained(const Tizen::Ui::Control& source);
+       virtual void OnFocusLost(const Tizen::Ui::Control& source);
+
+       virtual void OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+
+       virtual void OnSettingChanged(Tizen::Base::String &key);
+private:
+       void InitializeDetailItemList(void);
+       result InitializeAppControl(Tizen::Base::Collection::IList* pArgs);
+
+       void AddMainInfo(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem);
+       void AddProperty(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, int detailProperty, int itemSubIndex);
+       void AddGroup(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem);
+       void AddRingTone(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem);
+       void AddShareButtons(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem);
+
+       void CreateValueTypeItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, const Tizen::Base::String& value, const Tizen::Base::String& type);
+       void CreateTitleValueTypeItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, const Tizen::Base::String& title, const Tizen::Base::String& value, const Tizen::Base::String& type = L"", int lineCount = 1);
+       void CreateTitleValueTypeItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, int detailProperty);
+       void CreateNoteItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem);
+
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& launchType = L"", const Tizen::Base::String& value = L"");
+       result ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content);
+
+       void AddGroupStylePanel(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::GroupStyle groupStyle);
+
+       void ShowDefaultSelectorPopup(void);
+       void HideDefaultSelectorPopup(void);
+       void ShowInvalidFileMessageBox(const Tizen::Base::String errorMsg, bool showFooter = false);
+
+       void ShowDeletePopup(void);
+       void HideDeletePopup(void);
+private:
+       bool __isAppControlLaunching;
+       Tizen::App::AppControl* __pAppControl;
+       Tizen::Ui::Controls::TableView* __pTableView;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuCall;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuShare;
+       Tizen::Io::FileEventManager* __pFileEventManager;
+       Tizen::Ui::Controls::OptionMenu* __pOptionMenu;
+       Tizen::Ui::Controls::Popup* __pDefaultSelectorPopup;
+       Tizen::Ui::Controls::Popup* __pDeletePopup;
+       Tizen::Base::Collection::ArrayListT<int>* __pItemList;
+       Tizen::Base::String __appControlViewType;
+       ContactPresentationModel* __pPresentationModel;
+       int __scrolledDistance;
+       Tizen::Base::String __currentFocusedItem;
+       Tizen::Ui::Controls::Button* __pFavoriteButton;
+       Tizen::Ui::Controls::TableViewItem* __pGroupsItem;
+       Tizen::Ui::Controls::TableViewItem* __pRingtoneItem;
+       Tizen::Ui::Controls::Button* __pClearButton;
+};
+
+
+#endif /* _CT_CONTACT_DETAILS_FORM_H_ */
+
diff --git a/inc/CtContactEditorForm.h b/inc/CtContactEditorForm.h
new file mode 100644 (file)
index 0000000..2098a70
--- /dev/null
@@ -0,0 +1,225 @@
+//
+// 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       CtContactEditorForm.h
+ * @brief      This is the header file for the ContactEditorForm class.
+ */
+
+#ifndef _CT_CONTACT_EDITOR_FORM_H_
+#define _CT_CONTACT_EDITOR_FORM_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FIo.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+#include "CtTypes.h"
+
+class ContactPresentationModel;
+
+class ContactEditorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::App::IAppControlResponseListener
+       , public Tizen::Io::IFileEventListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IDateChangeEventListener
+       , public Tizen::Ui::IFocusEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::IKeyEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IExpandableEditAreaEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IGroupedTableViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedTableViewItemProvider
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::System::IDeviceEventListener
+       , public Tizen::System::ISettingEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public:
+       ContactEditorForm(void);
+       virtual ~ContactEditorForm(void);
+       void Initialize(void);
+
+       bool ValidateEmailAddress(const Tizen::Base::String& emailAddress);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       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 void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       virtual void OnDateChanged(const Tizen::Ui::Control& source, int year, int month, int day);
+       virtual void OnDateChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual void OnExpandableEditAreaLineAdded (Tizen::Ui::Controls::ExpandableEditArea &source, int newLineCount);
+       virtual void OnExpandableEditAreaLineRemoved (Tizen::Ui::Controls::ExpandableEditArea &source, int newLineCount);
+
+       virtual void OnFocusGained(const Tizen::Ui::Control& source);
+       virtual void OnFocusLost(const Tizen::Ui::Control& source);
+
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+
+       virtual void OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+
+       virtual void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
+
+       virtual Tizen::Ui::Controls::TableViewGroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual int GetDefaultGroupItemHeight(void);
+       virtual int GetDefaultItemHeight(void);
+       virtual int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual void UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem);
+       virtual void UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem);
+
+       virtual void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem *pContextItem, bool activated);
+       virtual void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+       virtual void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual void OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type);
+       virtual void OnScrollPositionChanged (Tizen::Ui::Control &source, int scrollPos);
+       virtual void OnScrollStopped (Tizen::Ui::Control &source);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       virtual void OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId);
+
+       virtual void OnDeviceStateChanged(Tizen::System::DeviceType deviceType, const Tizen::Base::String &state);
+       virtual void OnSettingChanged(Tizen::Base::String &key);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+private:
+       Tizen::Ui::Controls::TableViewItem* GetThumbnailField(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetNameFields(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetPhoneNumberFields(int itemIndex, int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetEmailFields(int itemIndex, int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetAddressFields(int itemIndex, int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetImAddressFields(int itemIndex, int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetUrlFields(int itemIndex, int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetGroupsField(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetBirthdayField(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetNoteField(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetRingtoneField(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetMoreInformationField(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetDefaultPhoneNumberItem(int itemWidth);
+       Tizen::Ui::Controls::TableViewItem* GetInputFieldN(int groupIndex, int itemIndex, int itemWidth, Tizen::Ui::Controls::EditFieldStyle style, const Tizen::Base::String& titleText, const Tizen::Base::String& guideText, const Tizen::Base::String& text = L"", bool isDeleteButton = false);
+       result DeleteInputField(int groupIndex, int itemIndex, int isUpdating = false);
+       void SetThumbnailControls(Tizen::Ui::Controls::TableViewItem& item, bool isUpdated = false);
+       void SetNameFields(Tizen::Ui::Controls::TableViewItem& item);
+
+       void AddHorizontalDivider(Tizen::Ui::Controls::TableViewItem* pItem, int positionY, int width);
+       void AddVerticalDivider(Tizen::Ui::Controls::TableViewItem* pItem, int positionX, int positionY);
+
+       result SetAsDefaultPhoneNumber(int index, bool scrollToItem = false);
+       result ChangeNameFieldStatus(void);
+       result SaveNameFields(void);
+       result SaveContactData(bool isSaved = true);
+       bool IsSaveContactValid(void);
+       void SetSaveButtonEnabled(bool enable);
+       bool IsMoreInformationButtonVisible(void);
+
+       void ShowDefaultPhoneNumberContextMenu(const Tizen::Graphics::Point& position);
+       void ShowMoreInformationContextMenu(const Tizen::Graphics::Point& position);
+       void ShowTypeContextMenu(int currentType, const Tizen::Graphics::Point& position, int itemTag);
+
+       result ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content);
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId);
+
+       void ShowDiscardChangesPopup(void);
+       void HideDiscardChangesPopup(void);
+
+private:
+       bool __isExpandable;
+       bool __isAppControl;
+       bool __isJobTitleEnabled;
+       bool __isDepartmentEnabled;
+       bool __isDefaultPhoneNumberButtonEnabled;
+       bool __isSaved;
+       bool __isMoreInformationContextMenuShowing;
+       bool __isTypeContextMenuShowing;
+       bool __isKeypadOpened;
+       bool __isScrollOccurred;
+       bool __isContactModified;
+       int __scrolledDistance;
+       int __origScrolledDistance;
+       int __itemIndex;
+       int __groupIndex;
+       int __previousItemIndex;
+       int __previousGroupIndex;
+
+       Tizen::App::AppControl* __pAppControl;
+       Tizen::Base::Collection::ArrayList* __pPhoneNumberFieldItem;
+       Tizen::Base::Collection::ArrayList* __pEmailFieldItem;
+       Tizen::Base::Collection::ArrayList* __pAddressFieldItem;
+       Tizen::Base::Collection::ArrayList* __pImAddressFieldItem;
+       Tizen::Base::Collection::ArrayList* __pUrlFieldItem;
+       Tizen::Base::Collection::ArrayList* __pDeletedItemList;
+       Tizen::Io::FileEventManager* __pFileEventManager;
+       Tizen::Ui::Controls::Popup* __pDiscardChangesPopup;
+       Tizen::Ui::Control* __pCurrentFocusedItem;
+       Tizen::Ui::Control* __pMoreInformationItem;
+       Tizen::Ui::Controls::Button* __pMoreInformationButton;
+       Tizen::Ui::Controls::ContextMenu* __pDefaultPhoneNumberContextMenu;
+       Tizen::Ui::Controls::ContextMenu* __pMoreInformationContextMenu;
+       Tizen::Ui::Controls::ContextMenu* __pThumbnailContextMenu;
+       Tizen::Ui::Controls::ContextMenu* __pTypeContextMenu;
+       Tizen::Ui::Controls::GroupedTableView* __pTableView;
+       Tizen::Ui::Controls::TableViewItem* __pNameFieldItem;
+       Tizen::Ui::Controls::TableViewItem* __pNoteFieldItem;
+       ContactPresentationModel* __pPresentationModel;
+       Tizen::Base::String __fullName;
+};
+
+#endif /* _CONTACT_EDITOR_FORM_H_ */
diff --git a/inc/CtContactListEditorPanel.h b/inc/CtContactListEditorPanel.h
new file mode 100644 (file)
index 0000000..5fb9fa2
--- /dev/null
@@ -0,0 +1,151 @@
+//
+// 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       CtContactListEditorPanel.h
+ * @brief      This is the header file for the ContactListEditorPanel class.
+ */
+
+#ifndef _CT_CONTACT_LIST_EDITOR_PANEL_H_
+#define _CT_CONTACT_LIST_EDITOR_PANEL_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FUi.h>
+#include "CtContactValueListItemProvider.h"
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class ContactListPresentationModel;
+class ContactValueListItemProvider;
+class SearchListEventListener;
+
+class ContactListEditorPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Base::Runtime::ITimerEventListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::IWindowEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::Controls::IFastScrollListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::ISearchBarEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+{
+public:
+       ContactListEditorPanel(void);
+       virtual ~ContactListEditorPanel(void);
+       void Initialize(void);
+
+       result RemoveContactList(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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 int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+
+       virtual void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode);
+
+       virtual void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state);
+       virtual void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index);
+
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+
+       virtual void OnWindowActivated(const Tizen::Ui::Window &source);
+       virtual void OnWindowDeactivated(const Tizen::Ui::Window &source);
+
+       virtual void OnTimerExpired(Tizen::Base::Runtime::Timer &timer);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+private:
+       result UpdateBottomLabel(void);
+       void ShowContactValuePopup(int groupIndex, int itemIndex);
+       void HideContactValuePopup(void);
+       void ShowDeleteConfirmationPopup(void);
+       void HideDeleteConfirmationPopup(void);
+       void ShowDeleteProgressPopup(void);
+       void HideDeleteProgressPopup(void);
+       int GetCheckedContactCounts(void);
+       void ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue);
+       void ReturnMultipleValues(void);
+       void ReturnResultFailed(void);
+
+private:
+       Tizen::Base::Collection::HashMap* __pTempContactValueHashMap;
+       Tizen::Base::Runtime::Timer __deleteContactTimer;
+       Tizen::Ui::Controls::CheckButton* __pSelectAll;
+       Tizen::Ui::Controls::GroupedListView* __pListView;
+       Tizen::Ui::Controls::GroupedListView* __pSearchListView;
+       Tizen::Ui::Controls::SearchBar* __pSearchBar;
+       Tizen::Ui::Controls::Label* __pCheckLabel;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       Tizen::Ui::Controls::Popup* __pDeleteProgressPopup;
+       Tizen::Ui::Controls::Popup* __pDeleteConfirmationPopup;
+       ContactValueListItemProvider* __pContactValueListEvent;
+       ContactListPresentationModel* __pPresentationModel;
+       SearchListEventListener* __pSearchListEvent;
+       bool __isContactRemoved;
+       int __selectedIndex;
+       int __selectedSearchIndex;
+       int __deleteGroupIndex;
+       int __deleteItemIndex;
+};
+
+#endif /* _CT_CONTACT_LIST_EDITOR_PANEL_H_ */
diff --git a/inc/CtContactListItem.h b/inc/CtContactListItem.h
new file mode 100644 (file)
index 0000000..da30214
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// 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       CtContactListItem.h
+ * @brief      This is the header file for the ContactListItem class.
+ */
+
+#ifndef _CT_CONTACT_LIST_ITEM_H_
+#define _CT_CONTACT_LIST_ITEM_H_
+
+#include <FBase.h>
+#include <FGraphics.h>
+#include <FUi.h>
+
+
+class ContactListItem
+       : public Tizen::Ui::Controls::ICustomElement
+{
+public:
+       ContactListItem(const Tizen::Base::String name, Tizen::Graphics::Bitmap* pThumbnail);
+       virtual ~ContactListItem(void);
+
+       virtual bool OnDraw(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& rect, Tizen::Ui::Controls::ListItemDrawingStatus itemStatus);
+
+private:
+       Tizen::Base::String __name;
+       Tizen::Graphics::Bitmap* __pThumbnail;
+};
+
+#endif /* _CT_CONTACT_LIST_ITEM_H_ */
diff --git a/inc/CtContactListPanel.h b/inc/CtContactListPanel.h
new file mode 100644 (file)
index 0000000..ce63b24
--- /dev/null
@@ -0,0 +1,154 @@
+//
+// 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       CtContactListPanel.h
+ * @brief      This is the header file for the ContactListPanel class.
+ */
+
+#ifndef _CT_CONTACT_LIST_PANEL_H_
+#define _CT_CONTACT_LIST_PANEL_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include "CtContactValueListItemProvider.h"
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class AccountListItemProvider;
+class ContactListPresentationModel;
+class SearchListEventListener;
+
+class ContactListPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IFastScrollListener
+       , public Tizen::Ui::IFocusEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IFormMenuEventListener
+       , public Tizen::Ui::Controls::ISearchBarEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::System::ISettingEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public:
+       ContactListPanel(void);
+       virtual ~ContactListPanel(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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 int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+
+       virtual void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode);
+
+       virtual void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state);
+       virtual void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnFastScrollIndexSelected (Tizen::Ui::Control& source, Tizen::Base::String& index);
+
+       virtual void OnFocusGained(const Tizen::Ui::Control& source);
+       virtual void OnFocusLost(const Tizen::Ui::Control& source);
+
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+
+       virtual void OnFormMenuRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+       virtual void OnSettingChanged(Tizen::Base::String &key);
+
+private:
+       void ShowDeletePopup(void);
+       void HideDeletePopup(void);
+       void ShowAccountPopup(void);
+       void HideAccountPopup(void);
+       void ShowContactValuePopup(int groupIndex, int itemIndex);
+       void HideContactValuePopup(void);
+       void ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue);
+       void AddContactValueOnList(const Tizen::Base::Collection::IList* pList, const Tizen::Base::String& keyType, int index, Tizen::Base::Collection::HashMap* pReturnValue);
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& argument, const Tizen::Base::String& type = L"");
+
+private:
+       Tizen::App::AppControl* __pAppControl;
+       Tizen::Base::Collection::ArrayList* __pArgList;
+       Tizen::Ui::Controls::GroupedListView* __pListView;
+       Tizen::Ui::Controls::GroupedListView* __pSearchListView;
+       Tizen::Ui::Controls::Popup *__pAccountPopup;
+       Tizen::Ui::Controls::Popup* __pDeletePopup;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       Tizen::Ui::Controls::SearchBar* __pSearchBar;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       Tizen::Ui::Controls::OptionMenu* __pOptionMenu;
+
+       AccountListItemProvider* __pAccountListEvent;
+       ContactListPresentationModel* __pPresentationModel;
+       ContactValueListItemProvider* __pContactValueListEvent;
+       SearchListEventListener* __pSearchListEvent;
+
+       int __sweptItemIndex;
+       int __selectedIndex;
+};
+
+#endif /* _CT_CONTACT_LIST_PANEL_H_ */
diff --git a/inc/CtContactListPresentationModel.h b/inc/CtContactListPresentationModel.h
new file mode 100644 (file)
index 0000000..f5941a8
--- /dev/null
@@ -0,0 +1,110 @@
+//
+// 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       CtContactListPresentationModel.h
+ * @brief      This is the header file for the ContactListPresentationModel class.
+ */
+
+#ifndef _CT_CONTACT_LIST_PRESENTATION_MODEL_H_
+#define _CT_CONTACT_LIST_PRESENTATION_MODEL_H_
+
+#include <FBase.h>
+#include <FGraphics.h>
+#include <FSocial.h>
+#include "CtTypes.h"
+
+class IContactEventListener;
+
+class ContactListPresentationModel
+       : public Tizen::Social::IAddressbookChangeEventListener
+{
+public:
+       result InitializeContactList(Tizen::Base::Collection::IList* pContactIdList = null);
+
+       Tizen::Base::String GetKey(int groupIndex);
+       Tizen::Base::String GetAllKeys(void);
+       int GetKeyCount(void);
+       int GetKeyIndex(const Tizen::Base::String& key);
+       result GetContactItemInfoN(int groupIndex, int itemIndex, Tizen::Base::String& name, Tizen::Graphics::Bitmap*& pThumbnail);
+       int GetContactCount(void);
+       int GetContactCount(int groupIndex);
+       result RemoveContact(int groupIndex, int itemIndex, bool isUpdated = true);
+
+       Tizen::Social::RecordId GetContactId(int groupIndex, int itemIndex);
+       virtual Tizen::Base::String GetName(int groupIndex, int itemIndex);
+       virtual Tizen::Base::Collection::IList* GetAllPhoneNumbersN(int groupIndex, int itemIndex);
+       virtual Tizen::Base::Collection::IList* GetAllEmailsN(int groupIndex, int itemIndex);
+       Tizen::Base::String GetDefaultPhoneNumber(int groupIndex, int itemIndex);
+       Tizen::Base::String GetDefaultEmail(int groupIndex, int itemIndex);
+
+       result SetSearchText(const Tizen::Base::String& searchText, SearchType searchType);
+       Tizen::Base::String GetSearchText(void);
+       result GetSearchedContactItemInfo(int index, Tizen::Base::String& name, Tizen::Graphics::Bitmap*& pThumbnail);
+       int GetSearchedContactCount(void);
+       result GetItemMainIndex(int searchedItemIndex, int& groupIndex, int& itemIndex);
+       void ResetSearchedContactList(void);
+
+       int GetAddressbookCount(void);
+       Tizen::Base::String GetAddressbookName(int index);
+       Tizen::Base::String GetCurrentAddressbook(void);
+
+       bool IsContactInCategory(int groupIndex, int itemIndex, Tizen::Social::RecordId categoryId);
+       bool IsContactInCategory(int groupIndex, Tizen::Social::RecordId categoryId);
+       bool IsSearchedContactInCategory(int index, Tizen::Social::RecordId categoryId);
+
+       Tizen::Base::String ExportToVcard(int groupIndex, int itemIndex);
+       Tizen::Base::String ExportToVcard(const Tizen::Base::Collection::IList& contactList);
+
+       void AddContactChangeListener(const IContactEventListener& listener);
+       void RemoveContactChangeListener(const IContactEventListener& listener);
+
+       virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
+       virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
+
+       static ContactListPresentationModel* GetInstance(void);
+
+protected:
+       ContactListPresentationModel(void);
+       virtual ~ContactListPresentationModel(void);
+
+       virtual Tizen::Social::Person* GetPersonAt(int groupIndex, int itemIndex);
+       virtual result Construct(void);
+       virtual result CreateContactList(void);
+       virtual Tizen::Base::Collection::IList* GetSearchedContactListN(const Tizen::Base::String& searchText, SearchType searchType);
+       virtual result TrimListForAppControl(Tizen::Base::Collection::IList*& pContactList);
+
+private:
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+protected:
+       Tizen::Base::Collection::MultiHashMap* _pContactList;
+       Tizen::Base::Collection::ArrayList* _pContactChangeListenerList;
+       Tizen::Base::Collection::ArrayList* _pGroupIndexList;
+       Tizen::Social::Addressbook* _pAddressbook;
+
+private:
+       Tizen::Base::Collection::IList* __pSearchedContactList;
+       Tizen::Base::Collection::IList* __pExcludedContactIdList;
+       Tizen::Base::String __searchedText;
+       bool __isContactChanged;
+
+       static ContactListPresentationModel* __pInstance;
+};
+
+#endif /* CONTACTS_APP_CONTACTLIST_PRESENTATION_MODEL_H_ */
+
diff --git a/inc/CtContactPresentationModel.h b/inc/CtContactPresentationModel.h
new file mode 100644 (file)
index 0000000..22a1c8f
--- /dev/null
@@ -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       CtContactPresentationModel.h
+ * @brief      This is the header file for the ContactPresentationModel class.
+ */
+
+#ifndef _CT_CONTACT_PRESENTATION_MODEL_H_
+#define _CT_CONTACT_PRESENTATION_MODEL_H_
+
+#include <FBase.h>
+#include <FIo.h>
+#include <FSocial.h>
+#include "CtTypes.h"
+
+class IContactEventListener;
+
+class ContactPresentationModel
+       : public Tizen::Social::IAddressbookChangeEventListener
+{
+public:
+       ContactPresentationModel(void);
+       virtual ~ContactPresentationModel(void);
+
+       result Construct(void);
+       result PrepareNewContact(void);
+       result SetContactId(const Tizen::Social::RecordId contactId, bool isEditing = false);
+       result SetVcfPath(const Tizen::Base::String& filePath, bool isNewContact = false);
+       Tizen::Base::String GetVcfPath(void);
+       Tizen::Social::RecordId GetContactId(void);
+       Tizen::Base::String GetValue(DetailProperty id, int index = -1);
+       result GetDisplayName(Tizen::Base::String& name);
+       result GetBirthday(Tizen::Base::DateTime& value);
+       Tizen::Base::String GetType(DetailProperty id, int index = -1);
+       Tizen::Graphics::Bitmap* GetThumbnailN(void);
+       Tizen::Graphics::Bitmap* GetAccountIconN(const Tizen::Base::String& account);
+       result SetValue(DetailProperty id, const Tizen::Base::String& value, int index = 0);
+       result SetCustomType(DetailProperty id, const Tizen::Base::String& value, int index);
+       Tizen::Base::String GetCustomType(DetailProperty id, int index);
+       result SetBirthday(const Tizen::Base::DateTime& value);
+       result RemoveBirthday(void);
+       result SetPhoneNumber(DetailPhoneNumberType type, const Tizen::Base::String& value, int index = 0);
+       result SetEmail(DetailEmailType type, const Tizen::Base::String& value, int index = 0);
+       result SetAddress(DetailAddressType type, const Tizen::Base::String& value, int index = 0, DetailProperty property = DETAIL_PROPERTY_ADDRESS_STREET);
+       result SetUrl(DetailUrlType type, const Tizen::Base::String& value, int index = 0);
+       result SetImAddress(DetailImAddressType type, const Tizen::Base::String& value, int index = 0);
+       result SetThumbnail(const Tizen::Base::String& filePath);
+       result SetOrganization(DetailProperty id, const Tizen::Base::String& value);
+       result AddAddressBook(void);
+       int GetMultiValuesCount(DetailProperty id);
+       int GetCategoryCount(void);
+       int GetDefaultNumberIndex(void);
+       Tizen::Base::Collection::IList* GetAssignedCategoryIdListN(void);
+       result AddContactToCategory(const Tizen::Social::RecordId categoryId);
+       result RemoveContactFromAllCategories(void);
+       result AddContact(void);
+       result UpdateContact(void);
+       result RemoveContact(void);
+       bool IsContactRemoved(void);
+       void AddContactChangeListener(const IContactEventListener& listener);
+       void RemoveContactChangeListener(const IContactEventListener& listener);
+
+       Tizen::Base::String GetPhoneNumberTypeString(DetailPhoneNumberType type);
+       Tizen::Base::String GetEmailTypeString(DetailEmailType type);
+       Tizen::Base::String GetAddressTypeString(DetailAddressType type);
+       Tizen::Base::String GetUrlTypeString(DetailUrlType type);
+       Tizen::Base::String GetImAddressTypeString(DetailImAddressType type);
+
+       DetailPhoneNumberType GetPhoneNumberType(int index);
+       DetailEmailType GetEmailType(int index);
+       DetailAddressType GetAddressType(DetailProperty id, int index);
+       DetailUrlType GetUrlType(int index);
+       DetailImAddressType GetImAddressType(int index);
+
+       void SetAsFavorite(bool isFavorite);
+       bool IsFavorite(void);
+
+       virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
+       virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
+
+private:
+       Tizen::Base::String GetCategory(void);
+       Tizen::Base::String GetRingtone(void);
+       Tizen::Base::String GetDefaultNumber(DetailPhoneNumberType& type);
+       Tizen::Base::String GetPhoneNumber(int index, DetailPhoneNumberType& type);
+       Tizen::Base::String GetEmail(int index, DetailEmailType& type);
+       Tizen::Base::String GetImAddress(int index, DetailImAddressType& typeIndex);
+       Tizen::Base::String GetAddress(DetailProperty id, int index, DetailAddressType& typeIndex);
+       Tizen::Base::String GetUrl(int index, DetailUrlType& typeIndex);
+       Tizen::Base::String GetDateTime(DetailProperty id);
+       result SetAddress(DetailProperty id, const Tizen::Base::String& value);
+       result GetDefaultCategoryName(Tizen::Base::String& categoryName);
+
+private:
+       Tizen::Base::Collection::ArrayList* __pAssignedCategoryList;
+       Tizen::Base::Collection::ArrayList* __pContactListenerList;
+       Tizen::Base::String __vcfPath;
+       Tizen::Social::Contact* __pContact;
+       Tizen::Social::Addressbook* __pAddressbook;
+       Tizen::Social::Address __address;
+       int __defaultNumberIndex;
+       int  __lastRemovedContactIndex;
+       int __lastRemovedEmailIndex;
+       bool __newMode;
+       bool __isEditing;
+};
+
+
+#endif /* _CT_CONTACT_PRESENTATION_MODEL_H_ */
diff --git a/inc/CtContactSelectorForm.h b/inc/CtContactSelectorForm.h
new file mode 100644 (file)
index 0000000..47f5a0e
--- /dev/null
@@ -0,0 +1,109 @@
+//
+// 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       CtContactSelectorForm.h
+ * @brief      This is the header file for the ContactSelectorForm class.
+ */
+
+#ifndef _CT_CONTACT_SELETOR_FORM_H_
+#define _CT_CONTACT_SELETOR_FORM_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+#include <FUi.h>
+#include "CtIContactEventListener.h"
+
+class ContactListPresentationModel;
+class SearchListEventListener;
+
+class ContactSelectorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IFastScrollListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::ISearchBarEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+{
+public:
+       ContactSelectorForm(void);
+       virtual ~ContactSelectorForm(void);
+
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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 void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode);
+
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+
+       virtual void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state);
+       virtual void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnFastScrollIndexSelected (Tizen::Ui::Control& source, Tizen::Base::String& index);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+private:
+       result CreateFooterButton(void);
+       void UpdateBottomLabel(void);
+
+private:
+       ContactListPresentationModel* __pPresentationModel;
+       Tizen::Ui::Controls::CheckButton* __pSelectAll;
+       Tizen::Ui::Controls::GroupedListView* __pListView;
+       Tizen::Ui::Controls::GroupedListView* __pSearchListView;
+       Tizen::Ui::Controls::Label* __pCheckLabel;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Ui::Controls::SearchBar* __pSearchBar;
+       SearchListEventListener* __pSearchListEvent;
+};
+
+#endif /* _CT_CONTACT_SELETOR_FORM_H_ */
diff --git a/inc/CtContactValueListItemProvider.h b/inc/CtContactValueListItemProvider.h
new file mode 100644 (file)
index 0000000..e35a19e
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// 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       CtContactValueListItemProvider.h
+ * @brief      This is the header file for the ContactValueListItemProvider class.
+ */
+
+#ifndef _CT_CONTACT_VALUE_LIST_ITEM_PROVIDER_H_
+#define _CT_CONTACT_VALUE_LIST_ITEM_PROVIDER_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+class ContactValueListItemProvider
+       : public Tizen::Ui::Controls::IListViewItemProvider
+{
+public:
+       ContactValueListItemProvider(Tizen::Base::Collection::IList* pContactValueList);
+       virtual ~ContactValueListItemProvider(void);
+
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual int GetItemCount(void);
+
+private:
+       Tizen::Base::Collection::IList* __pContactValueList;
+};
+
+
+#endif /* _CT_CONTACT_VALUE_LIST_ITEM_PROVIDER_H_ */
diff --git a/inc/CtContactsApp.h b/inc/CtContactsApp.h
new file mode 100644 (file)
index 0000000..facf454
--- /dev/null
@@ -0,0 +1,93 @@
+//
+// 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       CtContactsApp.h
+ * @brief      This is the header file for the ContactsApp class.
+ */
+
+#ifndef _CT_CONTACTS_APP_H_
+#define _CT_CONTACTS_APP_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FSystem.h>
+#include <FUi.h>
+#include "CtTypes.h"
+
+#define __SUPPORT_VIDEO_CALL 0
+
+class IContactsAppStateChangeEventListener;
+
+class ContactsApp
+       : public Tizen::App::UiApp
+       , public Tizen::App::IAppCheckpointEventListener
+       , public Tizen::App::IAppControlProviderEventListener
+       , public Tizen::System::IScreenEventListener
+       , public Tizen::System::ISettingEventListener
+{
+public:
+       ContactsApp(void);
+       virtual ~ContactsApp(void);
+
+       static Tizen::App::UiApp* CreateInstance(void);
+
+       Tizen::Base::String GetOperationId(void);
+       AppControlSelectionMode GetSelectionMode(void);
+       AppControlReturnType GetReturnType(void);
+       RequestId GetRequestId(void);
+       Tizen::Ui::Scenes::SceneId GetInitialSceneId(void);
+       Tizen::Base::Collection::IList* GetArguments(void);
+
+       void InitializeFontSize(void);
+       int GetFontSize(void);
+       int GetListItemSingleLineHeight(void);
+       int GetFontHeightOffset(void);
+
+       void AddContactsAppChangeEventListener(const IContactsAppStateChangeEventListener& listener);
+       void RemoveContactsAppChangeEventListener(const IContactsAppStateChangeEventListener& listener);
+
+       bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry);
+       bool OnAppInitialized(void); 
+       bool OnAppWillTerminate(void); 
+       bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false);
+       void OnForeground(void);
+       void OnBackground(void);
+       void OnLowMemory(void);
+       void OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel);
+       void OnScreenOn(void);
+       void OnScreenOff(void);
+       void OnAppCheckpointing(Tizen::App::AppRegistry& appRegistry);
+
+       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 OnSettingChanged(Tizen::Base::String& key);
+
+private:
+       result InitializeAppControl(Tizen::Base::Collection::IList* pArg);
+       result ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content);
+
+private:
+       Tizen::Ui::Scenes::SceneId __initialSceneId;
+       Tizen::Base::Collection::ArrayList __listenerList;
+       Tizen::Base::Collection::IList* __pArgs;
+       Tizen::Base::String __operationId;
+       AppControlSelectionMode __selectionMode;
+       AppControlReturnType __returnType;
+       RequestId __requestId;
+       int             __fontSize;
+};
+
+#endif  //_CT_CONTACTS_APP_H_
diff --git a/inc/CtFavoriteListEditorPanel.h b/inc/CtFavoriteListEditorPanel.h
new file mode 100644 (file)
index 0000000..b838b9d
--- /dev/null
@@ -0,0 +1,96 @@
+//
+// 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       CtFavoriteListEditorPanel.h
+ * @brief      This is the header file for the FavoriteListEditorPanel class.
+ */
+
+#ifndef _CT_FAVORITE_LIST_EDITOR_PANEL_H_
+#define _CT_FAVORITE_LIST_EDITOR_PANEL_H_
+
+#include <FUi.h>
+#include "CtContactValueListItemProvider.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+#include "CtIContactEventListener.h"
+
+class FavoriteListPresentationModel;
+
+class FavoriteListEditorPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+{
+public:
+       FavoriteListEditorPanel(void);
+       virtual ~FavoriteListEditorPanel(void);
+       void Initialize(void);
+
+       void RemoveFavorites(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       virtual void OnIconListViewItemReordered(Tizen::Ui::Controls::IconListView &iconListView, int indexFrom, int indexTo);
+       virtual void OnIconListViewItemStateChanged(Tizen::Ui::Controls::IconListView &iconListView, int index, Tizen::Ui::Controls::IconListViewItemStatus status);
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual Tizen::Ui::Controls::IconListViewItem* CreateItem(int index);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::IconListViewItem *pItem);
+       virtual int GetItemCount(void);
+
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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 void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+private:
+       void ReturnValues(RequestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue);
+       void ReturnMultipleValues(void);
+       void ShowContactValuePopup(int index);
+       void HideContactValuePopup(void);
+       void UpdateBottomLabel(void);
+
+private:
+       Tizen::Ui::Controls::IconListView* __pFavoriteListView;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Base::Collection::HashMap* __pTempContactValueHashMap;
+
+       FavoriteListPresentationModel* __pPresentationModel;
+       ContactValueListItemProvider* __pContactValueListProvider;
+};
+
+#endif /* _CT_FAVORITE_LIST_EDITOR_PANEL_H_ */
diff --git a/inc/CtFavoriteListPanel.h b/inc/CtFavoriteListPanel.h
new file mode 100644 (file)
index 0000000..45a3af9
--- /dev/null
@@ -0,0 +1,111 @@
+//
+// 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       CtFavoriteListPanel.h
+ * @brief      This is the header file for the FavoriteListPanel class.
+ */
+
+#ifndef _CT_FAVORITE_LIST_PANEL_H_
+#define _CT_FAVORITE_LIST_PANEL_H_
+
+#include <FApp.h>
+#include <FUi.h>
+#include "CtIContactsAppStateChangeEventListener.h"
+#include "CtIContactEventListener.h"
+
+class ContactValueListItemProvider;
+class FavoriteListPresentationModel;
+
+class FavoriteListPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IFormMenuEventListener
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactsAppStateChangeEventListener
+       , public IContactEventListener
+{
+public:
+       FavoriteListPanel(void);
+       virtual ~FavoriteListPanel(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       virtual void OnIconListViewItemReordered(Tizen::Ui::Controls::IconListView &iconListView, int indexFrom, int indexTo);
+       virtual void OnIconListViewItemStateChanged(Tizen::Ui::Controls::IconListView &iconListView, int index, Tizen::Ui::Controls::IconListViewItemStatus status);
+       virtual void OnIconListViewOverlayBitmapSelected(Tizen::Ui::Controls::IconListView& iconListView, int index, int overlayBitmapId);
+
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual Tizen::Ui::Controls::IconListViewItem* CreateItem(int index);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::IconListViewItem *pItem);
+       virtual int GetItemCount(void);
+
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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 void OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type);
+       virtual void OnScrollPositionChanged (Tizen::Ui::Control &source, int scrollPos);
+       virtual void OnScrollStopped (Tizen::Ui::Control &source);
+
+       virtual void OnFormMenuRequested(Tizen::Ui::Controls::Form& source);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+private:
+       void ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue);
+       void ShowContactValuePopup(int index);
+       void HideContactValuePopup(void);
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& argument, const Tizen::Base::String& type = L"");
+
+private:
+       bool __isAppControlLaunching;
+       int __scrolledDistance;
+       int __selectedItemIndex;
+       Tizen::App::AppControl* __pAppControl;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuAction;
+       Tizen::Ui::Controls::OptionMenu* __pOptionMenu;
+       Tizen::Ui::Controls::IconListView* __pFavoriteListView;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       FavoriteListPresentationModel* __pPresentationModel;
+       ContactValueListItemProvider* __pContactValueListProvider;
+};
+
+#endif /* _CT_FAVORITE_LIST_PANEL_H_ */
diff --git a/inc/CtFavoriteListPresentationModel.h b/inc/CtFavoriteListPresentationModel.h
new file mode 100644 (file)
index 0000000..f232812
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// 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       CtFavoriteListPresentationModel.h
+ * @brief      This is the header file for the FavoriteListPresentationModel class.
+ */
+
+#ifndef _CT_FAVORITE_LIST_PRESENTATION_MODEL_H_
+#define _CT_FAVORITE_LIST_PRESENTATION_MODEL_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+#include "CtTypes.h"
+
+class IContactEventListener;
+
+class FavoriteListPresentationModel
+: public Tizen::Social::IAddressbookChangeEventListener
+{
+public:
+       FavoriteListPresentationModel(void);
+       virtual ~FavoriteListPresentationModel(void);
+
+       result Construct(void);
+       result InitializeFavoriteList(AppControlReturnType returnType = APP_CONTROL_RETURN_TYPE_NONE);
+       int GetFavoriteCount(void);
+       int GetContactCount(void);
+       result GetFavoriteItemInfo(int index, Tizen::Base::String& name, Tizen::Graphics::Bitmap*& pThumbnail);
+       Tizen::Base::Collection::IList* GetMultiValuesN(AppControlReturnType returnType, int index);
+       Tizen::Social::RecordId GetContactId(int index);
+       result SetAsFavorite(Tizen::Social::RecordId contactId, bool isFavorite);
+       Tizen::Base::String GetDefaultPhoneNumber(int index);
+       Tizen::Base::String GetDefaultEmail(int index);
+       Tizen::Base::String ExportToVcard(int index);
+       Tizen::Base::String ExportToVcard(const Tizen::Base::Collection::IList& contactList);
+       void AddContactChangeListener(const IContactEventListener& listener);
+       void RemoveContactChangeListener(const IContactEventListener& listener);
+
+       static FavoriteListPresentationModel* GetInstance(void);
+
+       virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
+       virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
+
+private:
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+private:
+       Tizen::Base::Collection::IList* __pFavoriteList;
+       Tizen::Base::Collection::ArrayList* __pContactListenerList;
+       Tizen::Social::Addressbook* __pAddressbook;
+
+       static FavoriteListPresentationModel* __pInstance;
+};
+
+
+#endif /* _CT_FAVORITE_LIST_PRESENTATION_MODEL_H_ */
diff --git a/inc/CtFormFactory.h b/inc/CtFormFactory.h
new file mode 100644 (file)
index 0000000..6acb56f
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// 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       CtFormFactory.h
+ * @brief      This is the header file for the FormFactory class.
+ */
+
+#ifndef _CT_FORM_FACTORY_H_
+#define _CT_FORM_FACTORY_H_
+
+class FormFactory
+       : public 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 //_CT_FORM_FACTORY_H_
diff --git a/inc/CtGroupContactListEditorForm.h b/inc/CtGroupContactListEditorForm.h
new file mode 100644 (file)
index 0000000..e0b1186
--- /dev/null
@@ -0,0 +1,135 @@
+//
+// 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       CtGroupContactListEditorForm.h
+ * @brief      This is the header file for the GroupContactListEditorForm class.
+ */
+
+#ifndef _CT_GROUP_CONTACT_LIST_EDITOR_FORM_H_
+#define _CT_GROUP_CONTACT_LIST_EDITOR_FORM_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FSocial.h>
+#include <FUi.h>
+#include "CtContactValueListItemProvider.h"
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class ContactValueListItemProvider;
+class GroupContactListPresentationModel;
+class SearchListEventListener;
+
+class GroupContactListEditorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IFastScrollListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::ISearchBarEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public:
+       GroupContactListEditorForm(void);
+       virtual ~GroupContactListEditorForm(void);
+
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       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 void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode);
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+       virtual int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+       virtual void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state);
+       virtual void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction);
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+       virtual void OnFastScrollIndexSelected (Tizen::Ui::Control& source, Tizen::Base::String& index);
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+private:
+       result RemoveSelectedContacts(void);
+       result UpdateBottomLabel(void);
+       void ShowContactValuePopup(int groupIndex, int itemIndex);
+       void HideContactValuePopup(void);
+       void ReturnValues(RequestId requestId,  Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue);
+       void ReturnMultipleValues(void);
+       void ReturnResultFailed(void);
+       result LaunchAppControl(void);
+
+private:
+       ContactValueListItemProvider* __pContactValueListEvent;
+       GroupContactListPresentationModel* __pPresentationModel;
+       SearchListEventListener* __pSearchListEvent;
+       Tizen::App::AppControl* __pAppControl;
+       Tizen::Base::Collection::HashMap* __pTempContactValueHashMap;
+       Tizen::Ui::Controls::SearchBar* __pSearchBar;
+       Tizen::Ui::Controls::CheckButton* __pSelectAllButton;
+       Tizen::Ui::Controls::GroupedListView* __pListView;
+       Tizen::Ui::Controls::GroupedListView* __pSearchListView;
+       Tizen::Ui::Controls::Label* __pCheckLabel;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       long long __launchType;
+       int __selectedIndex;
+       int __selectedSearchIndex;
+};
+
+#endif /* _CT_GROUP_CONTACT_LIST_EDITOR_FORM_H_ */
diff --git a/inc/CtGroupContactListForm.h b/inc/CtGroupContactListForm.h
new file mode 100644 (file)
index 0000000..b648581
--- /dev/null
@@ -0,0 +1,149 @@
+//
+// 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       CtGroupContactListForm.h
+ * @brief      This is the header file for the GroupContactListForm class.
+ */
+
+#ifndef _CT_GROUP_CONTACT_LIST_FORM_H_
+#define _CT_GROUP_CONTACT_LIST_FORM_H_
+
+#include <FApp.h>
+#include <FUi.h>
+#include <FSocial.h>
+#include "CtContactValueListItemProvider.h"
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class ContactValueListItemProvider;
+class GroupContactListPresentationModel;
+class SearchListEventListener;
+
+class GroupContactListForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IFastScrollListener
+       , public Tizen::Ui::IFocusEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IFormMenuEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::ISearchBarEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public:
+       GroupContactListForm(void);
+       virtual ~GroupContactListForm(void);
+
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnFormMenuRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       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 int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+
+       virtual void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode);
+
+       virtual void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state);
+       virtual void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual void OnFastScrollIndexSelected (Tizen::Ui::Control& source, Tizen::Base::String& index);
+
+       virtual void OnFocusGained(const Tizen::Ui::Control& source);
+       virtual void OnFocusLost(const Tizen::Ui::Control& source);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+       virtual void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList * pArgs);
+private:
+       void ShowDeletePopup(void);
+       void HideDeletePopup(void);
+       void ShowContactValuePopup(int groupIndex, int itemIndex);
+       void HideContactValuePopup(void);
+       result ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content);
+       void ReturnValues(RequestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue);
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& argument, const Tizen::Base::String& type = L"");
+
+private:
+       Tizen::App::AppControl* __pAppControl;
+       Tizen::Ui::Controls::GroupedListView* __pListView;
+       Tizen::Ui::Controls::GroupedListView* __pSearchListView;
+       Tizen::Ui::Controls::SearchBar* __pSearchBar;
+       Tizen::Ui::Controls::Popup* __pDeletePopup;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       Tizen::Ui::Controls::OptionMenu* __pOptionMenu;
+       Tizen::Social::RecordId __categoryId;
+       ContactValueListItemProvider* __pContactValueListEvent;
+       GroupContactListPresentationModel* __pPresentationModel;
+       SearchListEventListener* __pSearchListEvent;
+       bool __isCategoryUpdating;
+       int __sweptItemIndex;
+       int __selectedIndex;
+};
+
+
+#endif /* _CT_GROUP_CONTACT_LIST_FORM_H_ */
diff --git a/inc/CtGroupContactListPresentationModel.h b/inc/CtGroupContactListPresentationModel.h
new file mode 100644 (file)
index 0000000..5e1e4b7
--- /dev/null
@@ -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       CtGroupContactListPresentationModel.h
+ * @brief      This is the header file for the GroupContactListPresentationModel class.
+ */
+
+#ifndef _CT_GROUP_CONTACT_LIST_PRESENTATION_MODEL_H_
+#define _CT_GROUP_CONTACT_LIST_PRESENTATION_MODEL_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+#include "CtContactListPresentationModel.h"
+#include "CtTypes.h"
+
+class IContactEventListener;
+
+class GroupContactListPresentationModel
+       : public ContactListPresentationModel
+{
+public:
+       virtual ~GroupContactListPresentationModel(void);
+       result InitializeGroupContactList(Tizen::Social::RecordId categoryId, GroupContactLaunchType launchType = GROUP_CONTACT_LAUNCH_TYPE_NONE);
+
+       Tizen::Base::String GetName(int groupIndex, int itemIndex);
+       Tizen::Base::Collection::IList* GetAllPhoneNumbersN(int groupIndex, int itemIndex);
+       Tizen::Base::Collection::IList* GetAllEmailsN(int groupIndex, int itemIndex);
+
+       Tizen::Base::String GetCategoryName(void);
+       int GetAllContactsCount(void);
+
+       bool IsCategoryValid(void);
+
+       result AddContactToCategory(Tizen::Base::Collection::IList* pList);
+       result RemoveContactFromCategory(int groupIndex, int itemIndex);
+
+       virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
+       virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
+
+       virtual Tizen::Base::Collection::IList* GetSearchedContactListN(const Tizen::Base::String& searchText, SearchType searchType);
+
+       static GroupContactListPresentationModel* GetInstance(void);
+
+private:
+       GroupContactListPresentationModel(void);
+       virtual Tizen::Social::Person* GetPersonAt(int groupIndex, int itemIndex);
+       virtual result Construct(void);
+       virtual result CreateContactList(void);
+       virtual result TrimListForAppControl(Tizen::Base::Collection::IList*& pContactList);
+       result TrimListForLaunch(Tizen::Base::Collection::IList*& pContactList);
+
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+private:
+       Tizen::Social::RecordId __categoryId;
+       GroupContactLaunchType __groupContactLaunchType;
+
+       static GroupContactListPresentationModel* __pInstance;
+};
+
+#endif /* _CT_GROUP_CONTACT_LIST_PRESENTATION_MODEL_H_ */
diff --git a/inc/CtGroupEditorForm.h b/inc/CtGroupEditorForm.h
new file mode 100644 (file)
index 0000000..137e8b5
--- /dev/null
@@ -0,0 +1,132 @@
+//
+// 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       CtGroupEditorForm.h
+ * @brief      This is the header file for the GroupEditorForm class.
+ */
+
+#ifndef _CT_GROUP_EDITOR_FORM_H_
+#define _CT_GROUP_EDITOR_FORM_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FIo.h>
+#include <FSocial.h>
+#include <FSystem.h>
+#include <FUi.h>
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class GroupPresentationModel;
+
+class GroupEditorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::App::IAppControlResponseListener
+       , public Tizen::Io::IFileEventListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::IKeyEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::ITableViewItemEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::System::IDeviceEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public :
+       GroupEditorForm(void);
+       virtual ~GroupEditorForm(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       virtual int GetItemCount(void);
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int itemIndex, int itemWidth);
+       virtual bool DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual void UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual int GetDefaultItemHeight(void);
+
+       virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+       virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated);
+       virtual void OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo);
+
+       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 void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual void OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+
+       virtual void OnKeypadWillOpen(Tizen::Ui::Control& source);
+       virtual void OnKeypadOpened(Tizen::Ui::Control& source);
+       virtual void OnKeypadClosed(Tizen::Ui::Control& source);
+       virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction);
+       virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source);
+
+       virtual void OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId);
+
+       virtual void OnDeviceStateChanged(Tizen::System::DeviceType deviceType, const Tizen::Base::String &state);
+
+       virtual void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+private:
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId);
+
+       virtual bool OnKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyPressed(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnPreviewKeyReleased(Tizen::Ui::Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+
+       void ShowDiscardChangesPopup(void);
+       void HideDiscardChangesPopup(void);
+
+private:
+       GroupPresentationModel* __pPresentationModel;
+       Tizen::Ui::Controls::TableView* __pTableView;
+       Tizen::Ui::Controls::Popup* __pDiscardChangesPopup;
+       Tizen::Io::FileEventManager* __pFileEventManager;
+       bool __isEditMode;
+       bool __isSaved;
+       bool __isGroupsChanged;
+};
+
+#endif /* _CT_GROUP_EDITOR_FORM_H_ */
diff --git a/inc/CtGroupListEditorPanel.h b/inc/CtGroupListEditorPanel.h
new file mode 100644 (file)
index 0000000..2157b55
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// 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       CtGroupListEditorPanel.h
+ * @brief      This is the header file for the GroupListEditorPanel class.
+ */
+
+#ifndef _CT_GROUP_LIST_EDITOR_PANEL_H_
+#define _CT_GROUP_LIST_EDITOR_PANEL_H_
+
+#include <FBase.h>
+#include <FUi.h>
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class GroupListPresentationModel;
+
+class GroupListEditorPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::Controls::IGroupedTableViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedTableViewItemProvider
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public:
+       GroupListEditorPanel(void);
+       virtual ~GroupListEditorPanel(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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::TableViewGroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual int GetDefaultGroupItemHeight(void);
+       virtual int GetDefaultItemHeight(void);
+       virtual int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual void UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem);
+       virtual void UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem);
+
+       virtual void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem *pContextItem, bool activated);
+       virtual void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+       virtual void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+       void SaveCategoryList(void);
+
+private:
+       result UpdateBottomLabel(void);
+       void ResetSelectedItems(void);
+
+private:
+       Tizen::Ui::Controls::CheckButton* __pSelectAll;
+       Tizen::Ui::Controls::GroupedTableView* __pTableView;
+       Tizen::Ui::Controls::Label* __pCheckLabel;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       GroupListPresentationModel* __pPresentationModel;
+       Tizen::Base::Collection::ArrayList* __pSavedCategoryList;
+};
+
+#endif /* _CT_GROUP_LIST_EDITOR_PANEL_H_ */
diff --git a/inc/CtGroupListPanel.h b/inc/CtGroupListPanel.h
new file mode 100644 (file)
index 0000000..f26ec07
--- /dev/null
@@ -0,0 +1,78 @@
+//
+// 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       CtGroupListPanel.h
+ * @brief      This is the header file for the GroupListPanel class.
+ */
+
+#ifndef _CT_GROUP_LIST_PANEL_H_
+#define _CT_GROUP_LIST_PANEL_H_
+
+#include <FBase.h>
+#include <FUi.h>
+#include "CtIContactEventListener.h"
+
+class GroupListPresentationModel;
+
+class GroupListPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::IFormMenuEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+{
+public:
+       GroupListPanel(void);
+       virtual ~GroupListPanel(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       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 int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+
+       virtual void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state);
+       virtual void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnFormMenuRequested(Tizen::Ui::Controls::Form& source);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+private:
+       int __sweptItemIndex;
+       Tizen::Ui::Controls::GroupedListView* __pListView;
+       Tizen::Ui::Controls::OptionMenu* __pOptionMenu;
+       Tizen::Ui::Controls::Label* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       GroupListPresentationModel* __pPresentationModel;
+};
+
+#endif /* _CT_GROUP_LIST_PANEL_H_ */
diff --git a/inc/CtGroupListPresentationModel.h b/inc/CtGroupListPresentationModel.h
new file mode 100644 (file)
index 0000000..a480f49
--- /dev/null
@@ -0,0 +1,74 @@
+//
+// 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       CtGroupListPresentationModel.h
+ * @brief      This is the header file for the GroupListPresentationModel class.
+ */
+
+#ifndef _CT_GROUP_LIST_PRESENTATION_MODEL_H_
+#define _CT_GROUP_LIST_PRESENTATION_MODEL_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+#include "CtTypes.h"
+
+class IContactEventListener;
+
+class GroupListPresentationModel
+       : public Tizen::Social::IAddressbookChangeEventListener
+{
+public:
+       virtual ~GroupListPresentationModel(void);
+       result Construct(void);
+       result RemoveCategory(int index);
+       Tizen::Base::String GetCategoryName(int index);
+       Tizen::Base::Collection::IList* GetContactIdListInCategory(int index);
+       bool IsContactInCategory(const Tizen::Base::Collection::IList& categoryIdList, int categoryIndex);
+       bool IsDefaultCategory(int index);
+       Tizen::Social::RecordId GetCategoryId(int index);
+       int GetContactCountInCategoryN(int index, Tizen::Base::Collection::IList*& pList, AppControlReturnType returnType = APP_CONTROL_RETURN_TYPE_NONE);
+       int GetContactCountInNotAssignedCategory(AppControlReturnType returnType = APP_CONTROL_RETURN_TYPE_NONE);
+       int GetCategoryCount(void);
+       int GetContactCount(void);
+       Tizen::Graphics::Bitmap* GetThumbnailN(int index, Tizen::Base::Collection::IList* pList);
+       result UpdatePersonList(int categoryIndex);
+       result UpdateCategoryList(void);
+       result AddContactToCategory(int index, Tizen::Base::Collection::IList* pList);
+       void AddGroupChangeListener(const IContactEventListener& listener);
+       void RemoveGroupChangeListener(const IContactEventListener& listener);
+
+       virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
+       virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
+
+       static GroupListPresentationModel* GetInstance(void);
+
+private:
+       GroupListPresentationModel(void);
+
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+private:
+       Tizen::Social::Addressbook* __pAddressbook;
+       Tizen::Base::Collection::IList* __pCategoryList;
+       Tizen::Base::Collection::IList* __pPersonList;
+       Tizen::Base::Collection::ArrayList* __pCategoryChangeListener;
+
+       static GroupListPresentationModel* __pInstance;
+};
+
+#endif /* _CT_GROUP_LIST_PRESENTATION_MODEL_H_ */
diff --git a/inc/CtGroupPresentationModel.h b/inc/CtGroupPresentationModel.h
new file mode 100644 (file)
index 0000000..492986a
--- /dev/null
@@ -0,0 +1,63 @@
+//
+// 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       CtGroupPresentationModel.h
+ * @brief      This is the header file for the GroupPresentationModel class.
+ */
+
+#ifndef _CT_GROUP_PRESENTATION_MODEL_H_
+#define _CT_GROUP_PRESENTATION_MODEL_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+
+class IContactEventListener;
+
+class GroupPresentationModel
+       : public Tizen::Social::IAddressbookChangeEventListener
+{
+public:
+       GroupPresentationModel(void);
+       virtual ~GroupPresentationModel(void);
+
+       result Construct(Tizen::Social::RecordId categoryId);
+
+       bool IsDuplicatedCategory(void);
+       bool IsDefaultCategory(void);
+       result SetCategoryName(const Tizen::Base::String& groupName);
+       result SetRingtone(const Tizen::Base::String& ringtonePath);
+       result AddCategory(void);
+       result UpdateCategory(void);
+       result SetThumbnailPath(const Tizen::Base::String& filePath);
+       Tizen::Base::String GetThumbnailPath(void);
+       Tizen::Base::String GetCategoryName(void);
+       Tizen::Base::String GetRingtone(void);
+       int GetCategoryCount(void);
+       Tizen::Social::RecordId GetCategoryId(void);
+       void AddContactChangeListener(const IContactEventListener& listener);
+       void RemoveContactChangeListener(const IContactEventListener& listener);
+
+       virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
+       virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
+
+private:
+       Tizen::Base::Collection::ArrayList* __pContactChangeListenerList;
+       Tizen::Social::Addressbook* __pAddressbook;
+       Tizen::Social::Category* __pCategory;
+};
+
+#endif /* _CT_GROUP_PRESENTATION_MODEL_H_ */
diff --git a/inc/CtGroupSelectorForm.h b/inc/CtGroupSelectorForm.h
new file mode 100644 (file)
index 0000000..c5deeea
--- /dev/null
@@ -0,0 +1,88 @@
+//
+// 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       CtGroupSelectorForm.h
+ * @brief      This is the header file for the GroupSelectorForm class.
+ */
+
+#ifndef _CT_GROUP_SELECTOR_FORM_H_
+#define _CT_GROUP_SELECTOR_FORM_H_
+
+#include <FApp.h>
+#include <FSocial.h>
+#include <FUi.h>
+#include "CtIContactEventListener.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+
+class GroupListPresentationModel;
+
+class GroupSelectorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IListViewItemProvider
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IFormMenuEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+       , public IContactsAppStateChangeEventListener
+{
+public:
+       GroupSelectorForm(void);
+       virtual ~GroupSelectorForm(void);
+
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       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::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual int GetItemCount(void);
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+
+       virtual void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(void);
+
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnFormMenuRequested(Tizen::Ui::Controls::Form& source);
+
+       virtual void OnForeground(void);
+       virtual void OnBackground(void);
+
+
+private:
+       result UpdateBottomLabel(void);
+
+private:
+       bool __isDonePressed;
+       GroupListPresentationModel* __pGroupListPresentationModel;
+       Tizen::Ui::Controls::ListView* __pListView;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Ui::Controls::OptionMenu* __pOptionMenu;
+       Tizen::Base::Collection::HashMapT<int, bool>* __pGroupIndexMap;
+       Tizen::Base::Collection::IList* __pGroupIdList;
+};
+
+#endif /* _CT_GROUP_SELECTOR_FORM_H_ */
+
diff --git a/inc/CtIContactEventListener.h b/inc/CtIContactEventListener.h
new file mode 100644 (file)
index 0000000..98b7a37
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// 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       CtIContactEventListener.h
+ * @brief      This is the header file for the IContactEventListener class.
+ */
+
+#ifndef _CT_ICONTACT_EVENT_LISTENER_H_
+#define _CT_ICONTACT_EVENT_LISTENER_H_
+
+#include <FBase.h>
+
+class IContactEventListener
+       : public Tizen::Base::Object
+{
+public:
+       virtual ~IContactEventListener(void) {}
+
+       virtual void OnContactsChanged(void) = 0;
+       virtual void OnCategoriesChanged(void) = 0;
+};
+
+#endif /* _CT_ICONTACT_EVENT_LISTENER_H_ */
diff --git a/inc/CtIContactsAppStateChangeEventListener.h b/inc/CtIContactsAppStateChangeEventListener.h
new file mode 100644 (file)
index 0000000..6c2cc38
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// 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       CtIContactsAppStateChangeEventListener.h
+ * @brief      This is the header file for the IContactsAppStateChangeEventListener class.
+ */
+
+#ifndef _CT_ICONTACTS_APP_STATE_CHANGE_EVENT_LISTENER_H_
+#define _CT_ICONTACTS_APP_STATE_CHANGE_EVENT_LISTENER_H_
+
+#include <FBase.h>
+
+class IContactsAppStateChangeEventListener
+       : public Tizen::Base::Object
+{
+public:
+       virtual ~IContactsAppStateChangeEventListener(void) {}
+
+       virtual void OnForeground(void) = 0;
+       virtual void OnBackground(void) = 0;
+};
+
+#endif /* _CT_ICONTACTS_APP_STATE_CHANGE_EVENT_LISTENER_H_ */
diff --git a/inc/CtMainForm.h b/inc/CtMainForm.h
new file mode 100644 (file)
index 0000000..351c269
--- /dev/null
@@ -0,0 +1,48 @@
+//
+// 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       CtMainForm.h
+ * @brief      This is the header file for the MainForm class.
+ */
+
+#ifndef _CT_MAIN_FORM_H_
+#define _CT_MAIN_FORM_H_
+
+#include <FUi.h>
+
+class MainForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::Controls::IFormBackEventListener
+{
+public:
+       MainForm(void);
+       virtual ~MainForm(void);
+
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+
+       Tizen::Graphics::FloatRectangle GetClientBounds();
+
+private:
+       Tizen::Graphics::FloatRectangle __clientBounds;
+};
+
+#endif /* _CT_MAIN_FORM_H_ */
diff --git a/inc/CtMainFrame.h b/inc/CtMainFrame.h
new file mode 100644 (file)
index 0000000..711e6f9
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// 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       CtMainFrame.h
+ * @brief      This is the header file for the MainFrame class.
+ */
+
+#ifndef _CT_MAIN_FRAME_H_
+#define _CT_MAIN_FRAME_H_
+
+class MainFrame
+       : public Tizen::Ui::Controls::Frame
+{
+public:
+       MainFrame(void);
+       virtual ~MainFrame(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+};
+
+#endif //_CT_MAIN_FRAME_H_
diff --git a/inc/CtPanelFactory.h b/inc/CtPanelFactory.h
new file mode 100644 (file)
index 0000000..d6f0e4d
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// 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       CtPanelFactory.h
+ * @brief      This is the header file for the PanelFactory class.
+ */
+
+#ifndef _CT_PANEL_FACTORY_H_
+#define _CT_PANEL_FACTORY_H_
+
+class PanelFactory
+       : public Tizen::Ui::Scenes::IPanelFactory
+{
+public:
+       PanelFactory(void);
+       virtual ~PanelFactory(void);
+
+       virtual Tizen::Ui::Controls::Panel* CreatePanelN(const Tizen::Base::String& panelId, const Tizen::Ui::Scenes::SceneId& sceneId);
+};
+
+#endif //_CT_PANEL_FACTORY_H_
diff --git a/inc/CtResourceManager.h b/inc/CtResourceManager.h
new file mode 100644 (file)
index 0000000..aa70729
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// 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       CtResourceManager.h
+ * @brief      This is the header file for the ResourceManager class.
+ */
+
+#ifndef _CT_RESOURCE_MANAGER_H_
+#define _CT_RESOURCE_MANAGER_H_
+
+#include <FBase.h>
+#include <FGraphics.h>
+
+class ResourceManager
+{
+public:
+       static Tizen::Graphics::Bitmap* GetBitmapN(const Tizen::Base::String& id);
+       static Tizen::Base::String GetString(const Tizen::Base::String& id);
+
+private:
+       ResourceManager(void);
+       virtual ~ResourceManager(void);
+};
+
+#endif /* _CT_RESOURCE_MANAGER_H_ */
diff --git a/inc/CtSceneRegister.h b/inc/CtSceneRegister.h
new file mode 100644 (file)
index 0000000..c9fb5eb
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// 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       CtSceneRegister.h
+ * @brief      This is the header file for the SceneRegister class.
+ */
+
+#ifndef _CT_SCENE_REGISTER_H_
+#define _CT_SCENE_REGISTER_H_
+
+class SceneRegister
+{
+public:
+       static result RegisterAllScenes(void);
+
+private:
+       SceneRegister();
+       ~SceneRegister();
+};
+
+#endif /* _CT_SCENE_REGISTER_H_ */
diff --git a/inc/CtSearchListEventListener.h b/inc/CtSearchListEventListener.h
new file mode 100644 (file)
index 0000000..88c5cf7
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// 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       CtSearchListEventListener.h
+ * @brief      This is the header file for the SearchListEventListener class.
+ */
+
+#ifndef _CT_SEARCH_LIST_EVENT_LISTENER_H_
+#define _CT_SEARCH_LIST_EVENT_LISTENER_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+class ContactListPresentationModel;
+
+class SearchListEventListener
+       : public Tizen::Ui::Controls::IGroupedListViewItemProvider
+{
+public:
+       SearchListEventListener(Tizen::Ui::Controls::ListAnnexStyle itemAnnexStyle, ContactListPresentationModel* pContactListPresentationModel);
+       virtual ~SearchListEventListener(void);
+
+       virtual int GetGroupCount(void);
+       virtual int GetItemCount(int groupIndex);
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth);
+       virtual Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth);
+       virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth);
+
+       void SetShowDeleteOption(bool showDeleteOption);
+private:
+       ContactListPresentationModel* __pContactListPresentationModel;
+       Tizen::Ui::Controls::ListAnnexStyle __itemAnnexStyle;
+
+       bool __showDeleteOption;
+};
+
+
+#endif /* _CT_SEARCH_LIST_EVENT_LISTENER_H_ */
diff --git a/inc/CtSearchListItem.h b/inc/CtSearchListItem.h
new file mode 100644 (file)
index 0000000..e2e2e05
--- /dev/null
@@ -0,0 +1,46 @@
+//
+// 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       CtSearchListItem.h
+ * @brief      This is the header file for the SearchListItem class.
+ */
+
+#ifndef _CT_SEARCH_LIST_ITEM_H_
+#define _CT_SEARCH_LIST_ITEM_H_
+
+#include <FBase.h>
+#include <FGraphics.h>
+#include <FUi.h>
+
+class SearchListItem
+       : public Tizen::Ui::Controls::ICustomElement
+{
+public:
+       SearchListItem(const Tizen::Base::String& name, Tizen::Graphics::Bitmap* pThumbnail, const Tizen::Base::String& searchedText);
+       virtual ~SearchListItem(void);
+
+       Tizen::Graphics::EnrichedText* GetDisplayEnrichedTextN(const Tizen::Graphics::Rectangle& rect, const Tizen::Base::String& text, Tizen::Ui::Controls::ListItemDrawingStatus itemStatus, bool isSearchingTextVisible = true);
+
+       virtual bool OnDraw(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& rect, Tizen::Ui::Controls::ListItemDrawingStatus itemStatus);
+
+private:
+       Tizen::Base::String __name;
+       Tizen::Base::String __searchedText;
+       Tizen::Graphics::Bitmap* __pThumbnail;
+};
+
+#endif /* _CT_SEARCH_LIST_ITEM_H_ */
diff --git a/inc/CtSettingsForm.h b/inc/CtSettingsForm.h
new file mode 100644 (file)
index 0000000..70a41d9
--- /dev/null
@@ -0,0 +1,79 @@
+//
+// 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       CtSettingsForm.h
+ * @brief      This is the header file for the SettingsForm class.
+ */
+
+#ifndef _CT_SETTINGS_FORM_H_
+#define _CT_SETTINGS_FORM_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+class SettingsForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::ITableViewItemEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::System::ISettingEventListener
+       , public Tizen::Ui::IKeyEventListener
+{
+public:
+       SettingsForm(void);
+       virtual ~SettingsForm(void);
+       void Initialize(void);
+
+       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 int GetItemCount(void);
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int itemIndex, int itemWidth);
+       virtual bool DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual void UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual int GetDefaultItemHeight(void);
+
+       virtual void OnSettingChanged(Tizen::Base::String &key);
+
+       virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
+       virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated);
+       virtual void OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo);
+
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       virtual void OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+       virtual void OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode);
+
+private:
+       Tizen::Ui::Controls::TableView* __pTableView;
+       bool __isExpanded;
+       bool __isFirstNameFirst;
+};
+
+
+#endif /* _CT_SETTINGS_FORM_H_ */
diff --git a/inc/CtTypes.h b/inc/CtTypes.h
new file mode 100644 (file)
index 0000000..8feb46a
--- /dev/null
@@ -0,0 +1,265 @@
+//
+// 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       CtTypes.h
+ * @brief      This is the header file for the Contacts application types.
+ */
+
+#ifndef _CT_TYPES_H_
+#define _CT_TYPES_H_
+
+enum DetailProperty
+{
+       DETAIL_PROPERTY_PHONE_NUMBER = 0x1000,
+       DETAIL_PROPERTY_EMAIL = 0x2000,
+       DETAIL_PROPERTY_IM_ADDRESS = 0x3000,
+       DETAIL_PROPERTY_MAIN_INFO = 0x4000,
+       DETAIL_PROPERTY_ADDRESS = 0x5000,
+       DETAIL_PROPERTY_URL = 0x6000,
+       DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER = 0x7000,
+       DETAIL_PROPERTY_ADDRESS_POSTAL_CODE,
+       DETAIL_PROPERTY_ADDRESS_COUNTRY,
+       DETAIL_PROPERTY_ADDRESS_PROVINCE,
+       DETAIL_PROPERTY_ADDRESS_CITY,
+       DETAIL_PROPERTY_ADDRESS_STREET,
+       DETAIL_PROPERTY_GROUP,
+       DETAIL_PROPERTY_RINGTONE,
+       DETAIL_PROPERTY_BIRTHDAY,
+       DETAIL_PROPERTY_NOTE,
+       DETAIL_PROPERTY_SHARE_BUTTONS,
+       DETAIL_PROPERTY_THUMBNAIL,
+       DETAIL_PROPERTY_DISPLAY_NAME,
+       DETAIL_PROPERTY_FIRST_NAME,
+       DETAIL_PROPERTY_LAST_NAME,
+       DETAIL_PROPERTY_MIDDLE_NAME,
+       DETAIL_PROPERTY_NAME_SUFFIX,
+       DETAIL_PROPERTY_NICK_NAME,
+       DETAIL_PROPERTY_JOB_TITLE,
+       DETAIL_PROPERTY_DEPARTMENT,
+       DETAIL_PROPERTY_COMPANY,
+       DETAIL_PROPERTY_EMPTY,
+       DETAIL_PROPERTY_MAX
+};
+
+enum DetailPhoneNumberType
+{
+       DETAIL_PHONENUMBER_TYPE_HOME,
+       DETAIL_PHONENUMBER_TYPE_WORK,
+       DETAIL_PHONENUMBER_TYPE_MOBILE,
+       DETAIL_PHONENUMBER_TYPE_HOME_FAX,
+       DETAIL_PHONENUMBER_TYPE_WORK_FAX,
+       DETAIL_PHONENUMBER_TYPE_PAGER,
+       DETAIL_PHONENUMBER_TYPE_OTHER,
+       DETAIL_PHONENUMBER_TYPE_NONE
+};
+
+enum DetailEmailType
+{
+       DETAIL_EMAIL_TYPE_HOME,
+       DETAIL_EMAIL_TYPE_WORK,
+       DETAIL_EMAIL_TYPE_OTHER,
+       DETAIL_EMAIL_TYPE_NONE
+};
+
+enum DetailAddressType
+{
+       DETAIL_ADDRESS_TYPE_HOME,
+       DETAIL_ADDRESS_TYPE_WORK,
+       DETAIL_ADDRESS_TYPE_OTHER,
+       DETAIL_ADDRESS_TYPE_NONE
+};
+
+enum DetailImAddressType
+{
+       DETAIL_IM_ADDRESS_TYPE_AIM,
+       DETAIL_IM_ADDRESS_TYPE_MSN,
+       DETAIL_IM_ADDRESS_TYPE_YAHOO,
+       DETAIL_IM_ADDRESS_TYPE_SKYPE,
+       DETAIL_IM_ADDRESS_TYPE_QQ,
+       DETAIL_IM_ADDRESS_TYPE_GOOGLE_TALK,
+       DETAIL_IM_ADDRESS_TYPE_ICQ,
+       DETAIL_IM_ADDRESS_TYPE_JABBER,
+       DETAIL_IM_ADDRESS_TYPE_OTHER,
+       DETAIL_IM_ADDRESS_TYPE_NONE
+};
+
+enum DetailUrlType
+{
+       DETAIL_URL_TYPE_HOME,
+       DETAIL_URL_TYPE_WORK,
+       DETAIL_URL_TYPE_OTHER,
+       DETAIL_URL_TYPE_NONE
+};
+
+enum GroupContactLaunchType
+{
+       GROUP_CONTACT_LAUNCH_TYPE_NONE,
+       GROUP_CONTACT_LAUNCH_TYPE_EMAIL,
+       GROUP_CONTACT_LAUNCH_TYPE_MESSAGE
+};
+
+enum AppControlSelectionMode
+{
+       APP_CONTROL_SELECTION_MODE_NONE,
+       APP_CONTROL_SELECTION_MODE_SINGLE,
+       APP_CONTROL_SELECTION_MODE_MULTI
+};
+
+enum AppControlReturnType
+{
+       APP_CONTROL_RETURN_TYPE_NONE,
+       APP_CONTROL_RETURN_TYPE_PHONE,
+       APP_CONTROL_RETURN_TYPE_EMAIL,
+       APP_CONTROL_RETURN_TYPE_ITEM_ID,
+       APP_CONTROL_RETURN_TYPE_VCARD
+};
+
+enum SearchType
+{
+       SEARCH_TYPE_NORMAL,
+       SEARCH_TYPE_HAS_PHONE_ONLY,
+       SEARCH_TYPE_HAS_EMAIL_ONLY
+};
+
+// form, panel ids
+extern const wchar_t* IDC_FORM_CONTACT_DETAILS;
+extern const wchar_t* IDC_FORM_CONTACT_EDITOR;
+extern const wchar_t* IDC_FORM_CONTACT_SELECTOR;
+extern const wchar_t* IDC_FORM_GROUP_SELECTOR;
+extern const wchar_t* IDC_FORM_GROUP_EDITOR;
+extern const wchar_t* IDC_FORM_GROUP_CONTACT_LIST;
+extern const wchar_t* IDC_FORM_GROUP_CONTACT_LIST_EDITOR;
+extern const wchar_t* IDC_FORM_SETTINGS;
+extern const wchar_t* IDC_FORM_MAIN;
+
+extern const wchar_t* IDC_PANEL_CONTACT_LIST;
+extern const wchar_t* IDC_PANEL_CONTACT_LIST_EDITOR;
+extern const wchar_t* IDC_PANEL_GROUP_LIST;
+extern const wchar_t* IDC_PANEL_GROUP_LIST_EDITOR;
+extern const wchar_t* IDC_PANEL_FAVORITE_LIST;
+extern const wchar_t* IDC_PANEL_FAVORITE_LIST_EDITOR;
+
+// scene ids
+extern const wchar_t* IDSCN_CONTACT_LIST;
+extern const wchar_t* IDSCN_CONTACT_LIST_EDITOR;
+extern const wchar_t* IDSCN_CONTACT_DETAILS;
+extern const wchar_t* IDSCN_CONTACT_EDITOR;
+extern const wchar_t* IDSCN_CONTACT_SELECTOR;
+extern const wchar_t* IDSCN_GROUP_LIST;
+extern const wchar_t* IDSCN_GROUP_LIST_EDITOR;
+extern const wchar_t* IDSCN_GROUP_SELECTOR;
+extern const wchar_t* IDSCN_GROUP_EDITOR;
+extern const wchar_t* IDSCN_GROUP_CONTACT_LIST;
+extern const wchar_t* IDSCN_GROUP_CONTACT_LIST_EDITOR;
+extern const wchar_t* IDSCN_FAVORITE_LIST;
+extern const wchar_t* IDSCN_FAVORITE_LIST_EDITOR;
+extern const wchar_t* IDSCN_SETTINGS;
+
+extern const wchar_t* OPERATION_ID_MAIN;
+extern const wchar_t* OPERATION_ID_PICK;
+extern const wchar_t* OPERATION_ID_VIEW;
+extern const wchar_t* OPERATION_ID_ADD;
+extern const wchar_t* OPERATION_ID_EDIT;
+extern const wchar_t* OPERATION_ID_CONFIGURE;
+extern const wchar_t* OPERATION_ID_CREATE_CONTENT;
+extern const wchar_t* OPERATION_ID_CALL;
+extern const wchar_t* OPERATION_ID_COMPOSE;
+extern const wchar_t* OPERATION_ID_CROP;
+
+extern const wchar_t* CONTACT_OPERATION_ID_MAIN;
+extern const wchar_t* CONTACT_OPERATION_ID_ADD;
+extern const wchar_t* CONTACT_OPERATION_ID_VIEW;
+extern const wchar_t* CONTACT_OPERATION_ID_PICK;
+extern const wchar_t* CONTACT_OPERATION_ID_EDIT;
+extern const wchar_t* CONTACT_OPERATION_ID_CHOOSE;
+
+extern const wchar_t* RETURN_KEY_TYPE;
+extern const wchar_t* RETURN_KEY_VALUE;
+extern const wchar_t* RETURN_TYPE_PHONE;
+extern const wchar_t* RETURN_TYPE_EMAIL;
+extern const wchar_t* RETURN_TYPE_VCARD;
+extern const wchar_t* RETURN_TYPE_ITEM_ID;
+
+extern const wchar_t* CONTACT_KEY_ITEM_TYPE;
+extern const wchar_t* CONTACT_KEY_PHONE;
+extern const wchar_t* CONTACT_KEY_EMAIL;
+extern const wchar_t* CONTACT_KEY_URL;
+extern const wchar_t* CONTACT_KEY_ITEM_ID;
+extern const wchar_t* CONTACT_KEY_SELECTION_MODE;
+extern const wchar_t* CONTACT_KEY_RESULT_TYPE;
+extern const wchar_t* CONTACT_KEY_PATH;
+
+extern const wchar_t* ITEM_TYPE_PERSON;
+extern const wchar_t* ITEM_TYPE_CONTACT;
+
+extern const wchar_t* PROVIDER_ID_CAMERA;
+extern const wchar_t* PROVIDER_ID_GALLERY;
+extern const wchar_t* PROVIDER_ID_PHONE;
+extern const wchar_t* PROVIDER_ID_MESSAGE;
+extern const wchar_t* PROVIDER_ID_EMAIL;
+extern const wchar_t* PROVIDER_ID_FILEMANAGER;
+extern const wchar_t* PROVIDER_ID_IMAGEVIEWER;
+
+extern const wchar_t* SETTING_KEY_LANGUAGE;
+extern const wchar_t* SETTING_KEY_COUNTRY;
+extern const wchar_t* SETTING_KEY_FONTSIZE;
+extern const wchar_t* SETTING_KEY_NAME_ORDER;
+
+extern const wchar_t* RUNTIMEINFO_INTERNAL_MEMORY_KEY;
+
+extern const wchar_t* CHARACTER_SPACE;
+extern const wchar_t* DELIMITER;
+extern const wchar_t* DELIMITER_SEMICOLON;
+extern const wchar_t* DELIMITER_COMMA;
+extern const wchar_t* INITIAL_SELECTED_COUNT;
+extern const wchar_t* DEFAULT_GROUP_FAMILY;
+extern const wchar_t* DEFAULT_GROUP_FRIENDS;
+extern const wchar_t* DEFAULT_GROUP_COWORKERS;
+
+extern const int ID_GROUP_CONTACT_NOT_ASSIGNED;
+extern const int ID_GROUP_CONTACT_SELECT_MESSAGE;
+extern const int ID_GROUP_CONTACT_SELECT_EMAIL;
+
+extern const int W_SAVE_POPUP;
+extern const int H_SAVE_POPUP;
+extern const int W_SAVE_LABEL;
+extern const int H_SAVE_LABEL;
+extern const int X_SAVE_LABEL;
+extern const int Y_SAVE_LABEL;
+extern const int Y_SAVE_BUTTON;
+extern const int H_SAVE_BUTTON;
+extern const int W_SAVE_BUTTON;
+extern const int W_POPUP_ITEM_GAP;
+extern const int W_DELETE_POPUP;
+extern const int H_DELETE_POPUP;
+extern const int W_DELETE_LABEL;
+extern const int H_DELETE_LABEL;
+extern const int X_DELETE_LABEL;
+extern const int Y_DELETE_LABEL;
+extern const int Y_DELETE_BUTTON;
+extern const int H_DELETE_BUTTON;
+extern const int W_DELETE_BUTTON;
+
+extern const int FONT_SIZE_SAVE_CONFIRM;
+extern const int FONT_SIZE_SAVE_BUTTON;
+extern const int FONT_SIZE_DELETE_CONFIRM;
+extern const int FONT_SIZE_DELETE_BUTTON;
+
+extern const int BIRTHDAY_MIN_YEAR_DIFF;
+extern const int BIRTHDAY_MAX_YEAR_DIFF;
+
+#endif /* _CT_TYPES_H_ */
diff --git a/manifest.xml b/manifest.xml
new file mode 100644 (file)
index 0000000..ce7d005
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<Manifest xmlns="http://schemas.tizen.org/2012/12/manifest">
+    <Id>f9uev8hsyo</Id>
+    <Version>1.0.0</Version>
+    <Type>C++App</Type>
+    <Requirements/>
+    <Apps>
+        <ApiVersion>2.2</ApiVersion>
+        <Privileges>
+            <Privilege>http://tizen.org/privilege/application.launch</Privilege>
+            <Privilege>http://tizen.org/privilege/contact.write</Privilege>
+            <Privilege>http://tizen.org/privilege/setting</Privilege>
+            <Privilege>http://tizen.org/privilege/contact.read</Privilege>
+        </Privileges>
+        <UiApp LaunchingHistoryVisible="True" Main="True" MenuIconVisible="True" Name="Contacts" SubMode="True">
+            <UiScalability BaseScreenSize="Normal" CoordinateSystem="Logical" LogicalCoordinate="720"/>
+            <UiTheme SystemTheme="White"/>
+            <DisplayNames>
+                <DisplayName Locale="ara-AE">الأسماء</DisplayName>
+                <DisplayName Locale="aze-AZ">Adlar</DisplayName>
+                <DisplayName Locale="bul-BG">Телефонен указател</DisplayName>
+                <DisplayName Locale="cat-ES">Contactes</DisplayName>
+                <DisplayName Locale="ces-CZ">Kontakty</DisplayName>
+                <DisplayName Locale="dan-DK">Kontakter</DisplayName>
+                <DisplayName Locale="deu-DE">Kontakte</DisplayName>
+                <DisplayName Locale="ell-GR">Επαφές</DisplayName>
+                <DisplayName Locale="eng-GB">Contacts</DisplayName>
+                <DisplayName Locale="eng-PH">Contacts</DisplayName>
+                <DisplayName Locale="eng-US">Contacts</DisplayName>
+                <DisplayName Locale="est-EE">Kontaktid</DisplayName>
+                <DisplayName Locale="eus-ES">Kontaktuak</DisplayName>
+                <DisplayName Locale="fas-AF">دفتر تلفن</DisplayName>
+                <DisplayName Locale="fin-FI">Yhteystiedot</DisplayName>
+                <DisplayName Locale="fra-CA">Contacts</DisplayName>
+                <DisplayName Locale="fra-FR">Contacts</DisplayName>
+                <DisplayName Locale="gle-IE">Teagmhálaithe</DisplayName>
+                <DisplayName Locale="glg-ES">Contactos</DisplayName>
+                <DisplayName Locale="hin-IN">संपर्क</DisplayName>
+                <DisplayName Locale="hrv-HR">Imenik</DisplayName>
+                <DisplayName Locale="hun-HU">Névjegyek</DisplayName>
+                <DisplayName Locale="hye-AM">Կոնտակտներ</DisplayName>
+                <DisplayName Locale="isl-IS">Tengiliðir</DisplayName>
+                <DisplayName Locale="ita-IT">Rubrica</DisplayName>
+                <DisplayName Locale="jpn-JP">電話帳</DisplayName>
+                <DisplayName Locale="kat-GE">კონტაქტები</DisplayName>
+                <DisplayName Locale="kaz-KZ">Контактілер</DisplayName>
+                <DisplayName Locale="kor-KR">연락처</DisplayName>
+                <DisplayName Locale="lav-LV">Kontakti</DisplayName>
+                <DisplayName Locale="lit-LT">Adresatai</DisplayName>
+                <DisplayName Locale="mkd-MK">Именик</DisplayName>
+                <DisplayName Locale="nld-NL">Contacten</DisplayName>
+                <DisplayName Locale="nob-NO">Kontakter</DisplayName>
+                <DisplayName Locale="pol-PL">Kontakty</DisplayName>
+                <DisplayName Locale="por-BR">Contatos</DisplayName>
+                <DisplayName Locale="por-PT">Contactos</DisplayName>
+                <DisplayName Locale="ron-RO">Contacte</DisplayName>
+                <DisplayName Locale="rus-RU">Контакты</DisplayName>
+                <DisplayName Locale="slk-SK">Kontakty</DisplayName>
+                <DisplayName Locale="slv-SI">Imenik</DisplayName>
+                <DisplayName Locale="spa-ES">Contactos</DisplayName>
+                <DisplayName Locale="spa-MX">Contactos</DisplayName>
+                <DisplayName Locale="srp-RS">Kontakti</DisplayName>
+                <DisplayName Locale="swe-SE">Kontakter</DisplayName>
+                <DisplayName Locale="tha-TH">รายชื่อ</DisplayName>
+                <DisplayName Locale="tur-TR">Rehber</DisplayName>
+                <DisplayName Locale="ukr-UA">Контакти</DisplayName>
+                <DisplayName Locale="urd-IN">رابطے</DisplayName>
+                <DisplayName Locale="uzb-UZ">Kontaktlar</DisplayName>
+                <DisplayName Locale="zho-CN">联系人</DisplayName>
+                <DisplayName Locale="zho-HK">聯絡人</DisplayName>
+                <DisplayName Locale="zho-SG">联系人</DisplayName>
+                <DisplayName Locale="zho-TW">聯絡人</DisplayName>
+            </DisplayNames>
+            <Icons>
+                <Icon Section="MainMenu" Type="Xhigh">mainmenu.png</Icon>
+            </Icons>
+            <AppControls>
+                <AppControl>
+                    <MimeType>vnd.tizen.item.type/vnd.tizen.contact</MimeType>
+                    <Operation>http://tizen.org/appcontrol/operation/social/add</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/social/choose</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/social/edit</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/social/pick</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/social/view</Operation>
+                </AppControl>
+                <AppControl>
+                    <MimeType>text/x-vcard</MimeType>
+                    <MimeType>text/vcard</MimeType>
+                    <Operation>http://tizen.org/appcontrol/operation/view</Operation>
+                </AppControl>
+            </AppControls>
+            <LaunchConditions/>
+            <Notifications>
+                <Notification Name="Ticker">On</Notification>
+                <Notification Name="Sound">On</Notification>
+                <Notification Name="Contents">Off</Notification>
+                <Notification Name="Badge">On</Notification>
+            </Notifications>
+        </UiApp>
+    </Apps>
+</Manifest>
diff --git a/packaging/apps.Contacts.spec b/packaging/apps.Contacts.spec
new file mode 100644 (file)
index 0000000..137d53b
--- /dev/null
@@ -0,0 +1,69 @@
+Name:       apps.Contacts
+Summary:    Contacts application
+Version:    1.0.0.0
+Release:    1
+Group:      TO_BE/FILLED_IN
+License:    Flora-1.1
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires:  cmake
+BuildRequires:  pkgconfig(osp-content)
+BuildRequires:  pkgconfig(osp-appfw)
+BuildRequires:  pkgconfig(osp-uifw)
+BuildRequires:  pkgconfig(osp-media)
+BuildRequires:  pkgconfig(osp-image)
+BuildRequires:  pkgconfig(osp-image-core)
+BuildRequires:  pkgconfig(osp-social)
+BuildRequires:  hash-signer
+
+%description
+Verification application: Contacts
+
+%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
+###### for package signing step ######
+PKG_ID=f9uev8hsyo
+%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=f9uev8hsyo
+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-ui-app-loader /usr/apps/${PKG_ID}/bin/Contacts
+
+%postun
+/sbin/ldconfig
+PKG_ID=f9uev8hsyo
+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}
diff --git a/res/ara-AE.xml b/res/ara-AE.xml
new file mode 100644 (file)
index 0000000..99fad9c
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">الموقع</text>
+    <text id="IDS_PB_BODY_GROUPS">مجموعات</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">الاسم الأول</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">الوظيفة</text>
+    <text id="IDS_PB_BODY_COMPANY">الشركة</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">ذكرى سنوية</text>
+    <text id="IDS_COM_POP_CLOSE">إغلاق</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">اختيار الكل</text>
+    <text id="IDS_COM_POP_DELETE_Q">مسح؟</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">إضافة إلى المفضلة</text>
+    <text id="IDS_PB_BODY_PHONE">الهاتف</text>
+    <text id="IDS_COM_BODY_MESSAGE">رسالة</text>
+    <text id="IDS_PB_BODY_LAST_NAME">اسم العائلة</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">حفظ الاسم في</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">هاتف محمول (العمل)</text>
+    <text id="IDS_PB_SK_CANCEL">إلغاء</text>
+    <text id="IDS_COM_SK_NEW">جديدة</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">الاسم الأوسط</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">تحديد كبريد إلكتروني افتراضي</text>
+    <text id="IDS_PB_BODY_OTHER">آخر</text>
+    <text id="IDS_COM_POP_REMOVED">تم الحذف</text>
+    <text id="IDS_PB_BODY_COUNTRY">الدولة</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">زملاء العمل</text>
+    <text id="IDS_COM_POP_SUCCESS">نجاح</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">عيد ميلاد</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">كل الأسماء</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">غير محددة</text>
+    <text id="IDS_COM_SK_DONE">تمت</text>
+    <text id="IDS_PB_BODY_MOBILE">الجوال</text>
+    <text id="IDS_COM_BODY_EMAIL">بريد إلكتروني</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">‏‫ذاكرة التخزين بالجهاز ممتلئة</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">تحديد مجموعة</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">رقم غير صالح</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">إضافة عضو</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">لا توجد جهات اتصال</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">إزالة صورة</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">اسم العائلة أولا</text>
+    <text id="IDS_PB_OPT_VIEW">عرض</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">تاريخ ميلاد غير صالح</text>
+    <text id="IDS_PB_BODY_WORK">العمل</text>
+    <text id="IDS_COM_SK_EDIT">تعديل</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">عنوان البريد الإلكتروني غير صالح</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">لا توجد مجموعة</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">إضافة إلى جهات الاتصال</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">تحديد كرقم افتراضي</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">معلومات أخرى</text>
+    <text id="IDS_COM_POP_SELECTED">تم التحديد</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">خالي</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">التقاط صورة</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">مجموعة جديدة</text>
+    <text id="IDS_COM_SK_DELETE">مسح</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">فاكس (العمل)</text>
+    <text id="IDS_PB_BODY_RINGTONE">نغمة الرنين</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">الأصدقاء</text>
+    <text id="IDS_PB_BODY_ADDRESS">العنوان</text>
+    <text id="IDS_COM_BODY_COPY">نسخ</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">لا توجد مفضلة</text>
+    <text id="IDS_COM_BODY_CONTACTS">جهات الاتصال</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">تحديد جهات الاتصال</text>
+    <text id="IDS_PB_BODY_PAGER">جهاز المناداة</text>
+    <text id="IDS_MP_POP_INVALID_FILE">ملف غير صالح</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">المرسل الفوري</text>
+    <text id="IDS_COM_BODY_GALLERY">استوديو</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">الجوال (المنزل)</text>
+    <text id="IDS_COM_BODY_SEARCH">بحث</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">اسم المجموعة مستخدم مسبقا</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">العائلة</text>
+    <text id="IDS_PB_BODY_CITY">المدينة</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">الاسم</text>
+    <text id="IDS_COM_BODY_CREATE">إنشاء</text>
+    <text id="IDS_PB_BODY_NICKNAME">اللقب</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">القسم</text>
+    <text id="IDS_PB_BODY_SUFFIX">اللاحقة</text>
+    <text id="IDS_COM_BODY_CALL">اتصال</text>
+    <text id="IDS_COM_BODY_SETTINGS">الضبط</text>
+    <text id="IDS_COM_POP_UNKNOWN">غير معروف</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">حفظ الاسم؟</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">المفضلة</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">تحرير مجموعات</text>
+    <text id="IDS_COM_SK_SAVE">حفظ</text>
+    <text id="IDS_PB_BODY_PROVINCE">إقليم</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">إرسال بطاقة اسم</text>
+    <text id="IDS_COM_POP_ADDED">تمت الإضافة</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">مكالمة فيديو</text>
+    <text id="IDS_PB_BODY_HOME">منزل</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">هيئة غير صحيحة</text>
+    <text id="IDS_PB_BODY_NOTE">ملاحظة</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">ضبط الأسماء</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">ترتيب عرض الاسم</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">جار حذف جهات الاتصال...</text>
+    <text id="IDS_PB_BODY_STREET">الشارع</text>
+    <text id="IDS_PB_BODY_NUMBER">الرقم</text>
+    <text id="IDS_PB_HEADER_DETAILS">التفاصيل</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">تجاهل التغييرات؟</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">الرمز البريدي</text>
+    <text id="IDS_COM_BODY_REMOVE">حذف</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">الفاكس (المنزل)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">الاسم الأول أولا</text>
+    <text id="IDS_PB_BODY_DEFAULT">إفتراضي</text>
+    <text id="IDS_COM_SK_OK">موافق</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">اسم المجموعة</text>
+</string_table>
diff --git a/res/aze-AZ.xml b/res/aze-AZ.xml
new file mode 100644 (file)
index 0000000..1d5aa36
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Qruplar</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ad</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Məşğuliyyət adı</text>
+    <text id="IDS_PB_BODY_COMPANY">Şirkət</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">İldönümü</text>
+    <text id="IDS_COM_POP_CLOSE">Bağla</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Hamısını seç</text>
+    <text id="IDS_COM_POP_DELETE_Q">Silinsin?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Sevimlilərə əlavə edin</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mesaj</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Yekun ad</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Kontaktı ...da saxla</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (İş)</text>
+    <text id="IDS_PB_SK_CANCEL">Ləğv et</text>
+    <text id="IDS_COM_SK_NEW">Yeni</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">İkinci ad</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Susmaya görə e-poçt kimi qeyd et</text>
+    <text id="IDS_PB_BODY_OTHER">Başqa</text>
+    <text id="IDS_COM_POP_REMOVED">Silindi</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ölkə</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Həmkarlar</text>
+    <text id="IDS_COM_POP_SUCCESS">Uğur</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Doğum günü</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Bütün adlar</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Təyin olunmamışdır</text>
+    <text id="IDS_COM_SK_DONE">Bitdi</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">Elektron poçtlar</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Cihaz yaddaşı doludur</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Qrup seç</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Nömrə səhvdir</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Üzv əlavə et</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Kontakt yoxdur</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Şəkli sil</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Əvvəlcə soyad</text>
+    <text id="IDS_PB_OPT_VIEW">Bax</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Doğum tarixi səhvdir</text>
+    <text id="IDS_PB_BODY_WORK">İş</text>
+    <text id="IDS_COM_SK_EDIT">Redaktə et</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Yanlış E-poçt ünvanı</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Qrup yoxdur</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Kontaktlara əlavə et</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">İlkin təyin edilmiş nömrə kimi işarələ</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Daha çox məlumat</text>
+    <text id="IDS_COM_POP_SELECTED">Seçildi</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Boşdur</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Foto şəkil çək</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Yeni qrup</text>
+    <text id="IDS_COM_SK_DELETE">Sil</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (İş)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Zəng tonu</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Dostlar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Ünvan</text>
+    <text id="IDS_COM_BODY_COPY">Köçür</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Sevimli yoxdur</text>
+    <text id="IDS_COM_BODY_CONTACTS">Adlar</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Kontaktları seç</text>
+    <text id="IDS_PB_BODY_PAGER">Peycer</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Yanlış fayl</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Ani mesencer</text>
+    <text id="IDS_COM_BODY_GALLERY">Qalereya</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (Ev)</text>
+    <text id="IDS_COM_BODY_SEARCH">Axtarış</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Qrup adı hazırda istifadə edilir</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Ailə</text>
+    <text id="IDS_PB_BODY_CITY">Şəhər</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Ad</text>
+    <text id="IDS_COM_BODY_CREATE">Yarat</text>
+    <text id="IDS_PB_BODY_NICKNAME">Təxəllüs</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departament</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffiks</text>
+    <text id="IDS_COM_BODY_CALL">Zəng</text>
+    <text id="IDS_COM_BODY_SETTINGS">Parametrlər</text>
+    <text id="IDS_COM_POP_UNKNOWN">Naməlum</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Kontaktlar saxlanılsın?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Sevimlilər</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Qrupları redaktə et</text>
+    <text id="IDS_COM_SK_SAVE">Yaddaşa yaz</text>
+    <text id="IDS_PB_BODY_PROVINCE">Rayon</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Vizit kartı göndər</text>
+    <text id="IDS_COM_POP_ADDED">Əlavə edildi</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video zəng</text>
+    <text id="IDS_PB_BODY_HOME">Ev</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Yanlış format</text>
+    <text id="IDS_PB_BODY_NOTE">Qeyd</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontakt parametrləri</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Displey adı sırası</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Kontaktlar silinir...</text>
+    <text id="IDS_PB_BODY_STREET">Küçə</text>
+    <text id="IDS_PB_BODY_NUMBER">Nömrə</text>
+    <text id="IDS_PB_HEADER_DETAILS">Təfsilatlar</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Dəyişikliklərdən imtina edilsin?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poçt kodu</text>
+    <text id="IDS_COM_BODY_REMOVE">Sil</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (Ev)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Əvvəlcə ad</text>
+    <text id="IDS_PB_BODY_DEFAULT">İlkin təyin olunan</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Qrup adı</text>
+</string_table>
diff --git a/res/bul-BG.xml b/res/bul-BG.xml
new file mode 100644 (file)
index 0000000..4ca5aab
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Групи</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Малко име</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Длъжност</text>
+    <text id="IDS_PB_BODY_COMPANY">Фирма</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Годишнина</text>
+    <text id="IDS_COM_POP_CLOSE">Затваряне</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Избери всички</text>
+    <text id="IDS_COM_POP_DELETE_Q">Изтриване?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Добавяне в Предпочитани</text>
+    <text id="IDS_PB_BODY_PHONE">Телефон</text>
+    <text id="IDS_COM_BODY_MESSAGE">Съобщение</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Фамилно име</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Запиши данните в</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Мобилен (служебен)</text>
+    <text id="IDS_PB_SK_CANCEL">Отмени</text>
+    <text id="IDS_COM_SK_NEW">Ново</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Бащино име</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Маркирай като email по подразбиране</text>
+    <text id="IDS_PB_BODY_OTHER">Друго</text>
+    <text id="IDS_COM_POP_REMOVED">Премахнат</text>
+    <text id="IDS_PB_BODY_COUNTRY">Страна</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Колеги</text>
+    <text id="IDS_COM_POP_SUCCESS">Успешно</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Рожден ден</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Всички записи</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Незададен</text>
+    <text id="IDS_COM_SK_DONE">Готово</text>
+    <text id="IDS_PB_BODY_MOBILE">Мобилен</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Паметта на устройството е пълна</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Изберете група</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Невалиден номер</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Доб. член</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Няма записи</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Махни снимката</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Първо фамилното име</text>
+    <text id="IDS_PB_OPT_VIEW">Преглед</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Невалидна рождена дата</text>
+    <text id="IDS_PB_BODY_WORK">Служебен</text>
+    <text id="IDS_COM_SK_EDIT">Редактиране</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Невалиден имейл адрес</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Няма група</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Добави към Тел. Указ.</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Маркиране като номер по подразбиране</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Още информация</text>
+    <text id="IDS_COM_POP_SELECTED">Избран</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Празен</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Направи снимка</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Нова група</text>
+    <text id="IDS_COM_SK_DELETE">Изтрий</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Факс (служебен)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Тон позвъняване</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Приятели</text>
+    <text id="IDS_PB_BODY_ADDRESS">Адрес</text>
+    <text id="IDS_COM_BODY_COPY">Копиране</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Няма предпочитани</text>
+    <text id="IDS_COM_BODY_CONTACTS">Телефонен указател</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Избор на записи</text>
+    <text id="IDS_PB_BODY_PAGER">Пейджър</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Невалиден файл</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Програма за чат</text>
+    <text id="IDS_COM_BODY_GALLERY">Галерия</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Мобилен (домашен)</text>
+    <text id="IDS_COM_BODY_SEARCH">Търси</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Името на групата вече се използва</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Семейство</text>
+    <text id="IDS_PB_BODY_CITY">Град</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Име</text>
+    <text id="IDS_COM_BODY_CREATE">Създай</text>
+    <text id="IDS_PB_BODY_NICKNAME">Псевдоним</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Отдел</text>
+    <text id="IDS_PB_BODY_SUFFIX">Обръщение</text>
+    <text id="IDS_COM_BODY_CALL">Повикване</text>
+    <text id="IDS_COM_BODY_SETTINGS">Настройки</text>
+    <text id="IDS_COM_POP_UNKNOWN">Няма информация</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Запаметяване на записа?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Предпочитани</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Редактиране\nна групи</text>
+    <text id="IDS_COM_SK_SAVE">Запази</text>
+    <text id="IDS_PB_BODY_PROVINCE">Област</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Изпращане на визитка</text>
+    <text id="IDS_COM_POP_ADDED">Добавен</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Видео разговор</text>
+    <text id="IDS_PB_BODY_HOME">Дом</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Невалиден формат</text>
+    <text id="IDS_PB_BODY_NOTE">Бележка</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Настройки за тел. указател</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ред за показване на имената</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Изтриване на записи...</text>
+    <text id="IDS_PB_BODY_STREET">Улица</text>
+    <text id="IDS_PB_BODY_NUMBER">Номер</text>
+    <text id="IDS_PB_HEADER_DETAILS">Детайли</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Отхвърляне на промените?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Пощенски код</text>
+    <text id="IDS_COM_BODY_REMOVE">Премаxване</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Факс (домашен)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Първо собственото име</text>
+    <text id="IDS_PB_BODY_DEFAULT">По подразбиране</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Име на група</text>
+</string_table>
diff --git a/res/cat-ES.xml b/res/cat-ES.xml
new file mode 100644 (file)
index 0000000..a155a08
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grups</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nom</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Càrrec</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Aniversari</text>
+    <text id="IDS_COM_POP_CLOSE">Tancar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccioni-ho tot</text>
+    <text id="IDS_COM_POP_DELETE_Q">Esborrar?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Afegir als preferits</text>
+    <text id="IDS_PB_BODY_PHONE">Telèfon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Missatge</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Cognoms</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Desar contacte a</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Telèfon (Feina)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel·lar</text>
+    <text id="IDS_COM_SK_NEW">Nou</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Segon nom</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcar com a correu electrònic predeterminat</text>
+    <text id="IDS_PB_BODY_OTHER">Altres</text>
+    <text id="IDS_COM_POP_REMOVED">Eliminat</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Companys de feina</text>
+    <text id="IDS_COM_POP_SUCCESS">Correcte</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Natalici</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Tots els contactes</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">No assignat</text>
+    <text id="IDS_COM_SK_DONE">Finalit.</text>
+    <text id="IDS_PB_BODY_MOBILE">Mòbil</text>
+    <text id="IDS_COM_BODY_EMAIL">Correu electrònic</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Emmagatzematge de dispositiu ple</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Seleccionar grup</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Número no vàlid</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Af membre</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">No hi ha contactes</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Eliminar foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Abans el cognom</text>
+    <text id="IDS_PB_OPT_VIEW">Veure</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Data de naixement no vàlida</text>
+    <text id="IDS_PB_BODY_WORK">Feina</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adreça correu electrònic no vàlida</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Sense Grup</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Afegir a contactes</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcar com a número predeterminat</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Més informació</text>
+    <text id="IDS_COM_POP_SELECTED">Seleccionat</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Buit</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fer una foto</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nou grup</text>
+    <text id="IDS_COM_SK_DELETE">Esborrar</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Feina)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Melodia</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amics</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adreça</text>
+    <text id="IDS_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Sense preferits</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contactes</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Seleccionar contactes</text>
+    <text id="IDS_PB_BODY_PAGER">Cercapersones</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Fitxer no vàlid</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Missatgeria instantània</text>
+    <text id="IDS_COM_BODY_GALLERY">Galeria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mòbil (Casa)</text>
+    <text id="IDS_COM_BODY_SEARCH">Cercar</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Ja s'està utilitzant aquest nom de grup</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Família</text>
+    <text id="IDS_PB_BODY_CITY">Ciutat</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_NICKNAME">Sobrenom</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departament</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufix</text>
+    <text id="IDS_COM_BODY_CALL">Trucar</text>
+    <text id="IDS_COM_BODY_SETTINGS">Ajustaments</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconegut</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Desar contacte?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Preferits</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editar grups</text>
+    <text id="IDS_COM_SK_SAVE">Desar</text>
+    <text id="IDS_PB_BODY_PROVINCE">Província</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Enviar targeta de visita</text>
+    <text id="IDS_COM_POP_ADDED">Afegit</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videotrucada</text>
+    <text id="IDS_PB_BODY_HOME">Pers.</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Format no vàlid</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Ajustaments de contactes</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordre de nom que apareixerà a la pantalla</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">S'estan esborrant els contactes...</text>
+    <text id="IDS_PB_BODY_STREET">Carrer</text>
+    <text id="IDS_PB_BODY_NUMBER">Número</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalls</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Descartar els canvis?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Codi postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (Casa)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Primer el nom</text>
+    <text id="IDS_PB_BODY_DEFAULT">Predeterminat</text>
+    <text id="IDS_COM_SK_OK">Acceptar</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nom de grup</text>
+</string_table>
diff --git a/res/ces-CZ.xml b/res/ces-CZ.xml
new file mode 100644 (file)
index 0000000..e07ef31
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Skupiny</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Jméno</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Pracovní zařazení</text>
+    <text id="IDS_PB_BODY_COMPANY">Společnost</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Výročí</text>
+    <text id="IDS_COM_POP_CLOSE">Zavřít</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vybrat vše</text>
+    <text id="IDS_COM_POP_DELETE_Q">Odstranit?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Přidat do oblíbených položek</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Zpráva</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Příjmení</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Uložit kontakt do</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (práce)</text>
+    <text id="IDS_PB_SK_CANCEL">Zrušit</text>
+    <text id="IDS_COM_SK_NEW">Nový</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Druhé jméno</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Označit jako výchozí e-mail</text>
+    <text id="IDS_PB_BODY_OTHER">Další</text>
+    <text id="IDS_COM_POP_REMOVED">Odstraněno</text>
+    <text id="IDS_PB_BODY_COUNTRY">Země</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Spolupracovníci</text>
+    <text id="IDS_COM_POP_SUCCESS">Dokončeno</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Narozeniny</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Všechny kontakty</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nepřiřazeno</text>
+    <text id="IDS_COM_SK_DONE">Hotovo</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Paměť zařízení je plná</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Vyberte skupinu</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Neplatné číslo</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Př. člena</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Žádné kontakty</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Odstranit fotografii</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Napřed příjmení</text>
+    <text id="IDS_PB_OPT_VIEW">Zobrazit</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Neplatné datum narození</text>
+    <text id="IDS_PB_BODY_WORK">Práce</text>
+    <text id="IDS_COM_SK_EDIT">Upravit</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neplatná e-mailová adresa</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Žádná skupina</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Přidat do Kontaktů</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Označit jako výchozí číslo</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Další informace</text>
+    <text id="IDS_COM_POP_SELECTED">Vybráno</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Prázdné</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotografovat</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nová skupina</text>
+    <text id="IDS_COM_SK_DELETE">Odstranit</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (práce)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Zvonění</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Přátelé</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</text>
+    <text id="IDS_COM_BODY_COPY">Kopírovat</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Žádné oblíbené</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakty</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Vybrat kontakty</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Neplatný soubor</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Rychlé zasílání zpráv</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerie</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (domů)</text>
+    <text id="IDS_COM_BODY_SEARCH">Hledat</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Název skupiny již existuje</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Rodina</text>
+    <text id="IDS_PB_BODY_CITY">Město</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Jméno</text>
+    <text id="IDS_COM_BODY_CREATE">Vytvořit</text>
+    <text id="IDS_PB_BODY_NICKNAME">Přezdívka</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Oddělení</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titul za jménem</text>
+    <text id="IDS_COM_BODY_CALL">Volat</text>
+    <text id="IDS_COM_BODY_SETTINGS">Nastavení</text>
+    <text id="IDS_COM_POP_UNKNOWN">Neznámé</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Uložit kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Oblíbené</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Upravit skupiny</text>
+    <text id="IDS_COM_SK_SAVE">Uložit</text>
+    <text id="IDS_PB_BODY_PROVINCE">Kraj</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Odeslat vizitku</text>
+    <text id="IDS_COM_POP_ADDED">Přidáno</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videohovor</text>
+    <text id="IDS_PB_BODY_HOME">Domů</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Chybný formát</text>
+    <text id="IDS_PB_BODY_NOTE">Poznámka</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Nastavení kontaktů</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Pořadí zobrazení jména</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Odstraňování kontaktů...</text>
+    <text id="IDS_PB_BODY_STREET">Ulice</text>
+    <text id="IDS_PB_BODY_NUMBER">Číslo</text>
+    <text id="IDS_PB_HEADER_DETAILS">Podrobnosti</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Zrušit změny?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">PSČ</text>
+    <text id="IDS_COM_BODY_REMOVE">Odstranit</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (domů)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Napřed křestní jméno</text>
+    <text id="IDS_PB_BODY_DEFAULT">Výchozí</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Název skupiny</text>
+</string_table>
diff --git a/res/dan-DK.xml b/res/dan-DK.xml
new file mode 100644 (file)
index 0000000..1376ee5
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupper</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Fornavn</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Jobtitel</text>
+    <text id="IDS_PB_BODY_COMPANY">Firma</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Mærkedag</text>
+    <text id="IDS_COM_POP_CLOSE">Luk</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vælg alle</text>
+    <text id="IDS_COM_POP_DELETE_Q">Slet?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Føj til favoritter</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Meddelelse</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Efternavn</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Gem kontakt på</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (arbejde)</text>
+    <text id="IDS_PB_SK_CANCEL">Annullér</text>
+    <text id="IDS_COM_SK_NEW">Ny</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Mellemnavn</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Markér som standard-e-mail</text>
+    <text id="IDS_PB_BODY_OTHER">Anden</text>
+    <text id="IDS_COM_POP_REMOVED">Fjernet</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Kolleger</text>
+    <text id="IDS_COM_POP_SUCCESS">Fuldført</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Fødselsdag</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Alle kontakter</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Ikke tildelt</text>
+    <text id="IDS_COM_SK_DONE">Udført</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Enhedslager fuldt</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Vælg gruppe</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Ugyldigt nummer</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Tilf medl</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ingen kontakter</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Fjern billede</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Først efternavn</text>
+    <text id="IDS_PB_OPT_VIEW">Vis</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ugyldig fødselsdato</text>
+    <text id="IDS_PB_BODY_WORK">Arbejde</text>
+    <text id="IDS_COM_SK_EDIT">Redigér</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ugyldig e-mailadresse</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ingen gruppe</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Føj til kontakter</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Markér som standardnummer</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Flere oplysninger</text>
+    <text id="IDS_COM_POP_SELECTED">Valgte</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tom</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Tag et billede</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Ny gruppe</text>
+    <text id="IDS_COM_SK_DELETE">Slet</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (arbejde)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ringetone</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Venner</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</text>
+    <text id="IDS_COM_BODY_COPY">Kopiér</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ingen favoritter</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakter</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Vælg kontakter</text>
+    <text id="IDS_PB_BODY_PAGER">Personsøger</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Ugyldig fil</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Chat</text>
+    <text id="IDS_COM_BODY_GALLERY">Galleri</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (privat)</text>
+    <text id="IDS_COM_BODY_SEARCH">Søg</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Gruppenavnet bruges allerede</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familie</text>
+    <text id="IDS_PB_BODY_CITY">By</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Navn</text>
+    <text id="IDS_COM_BODY_CREATE">Opret</text>
+    <text id="IDS_PB_BODY_NICKNAME">Kaldenavn</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Afdeling</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titel</text>
+    <text id="IDS_COM_BODY_CALL">Opkald</text>
+    <text id="IDS_COM_BODY_SETTINGS">Indstillinger</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ukendt</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Gem kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoritter</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Redigér grupper</text>
+    <text id="IDS_COM_SK_SAVE">Gem</text>
+    <text id="IDS_PB_BODY_PROVINCE">Region</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Send visitkort</text>
+    <text id="IDS_COM_POP_ADDED">Tilføjet</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videoopkald</text>
+    <text id="IDS_PB_BODY_HOME">Hjem</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Ugyldigt format</text>
+    <text id="IDS_PB_BODY_NOTE">Bemærkning</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontaktindstillinger</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Rækkefølge for visningsnavn</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Sletter kontakter...</text>
+    <text id="IDS_PB_BODY_STREET">Vej</text>
+    <text id="IDS_PB_BODY_NUMBER">Nummer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detaljer</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Annullér ændringer?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postnummer</text>
+    <text id="IDS_COM_BODY_REMOVE">Fjern</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (privat)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Først fornavn</text>
+    <text id="IDS_PB_BODY_DEFAULT">Standard</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Gruppenavn</text>
+</string_table>
diff --git a/res/deu-DE.xml b/res/deu-DE.xml
new file mode 100644 (file)
index 0000000..d739a9f
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Gruppen</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Vorname</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Beruf</text>
+    <text id="IDS_PB_BODY_COMPANY">Firma</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Jahrestag</text>
+    <text id="IDS_COM_POP_CLOSE">Schließen</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Alle auswählen</text>
+    <text id="IDS_COM_POP_DELETE_Q">Löschen?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Zu Favoriten hinzufügen</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Nachricht</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Nachname</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Kontakt speichern in</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (Arbeit)</text>
+    <text id="IDS_PB_SK_CANCEL">Abbrechen</text>
+    <text id="IDS_COM_SK_NEW">Neu</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Zweiter Vorname</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Als Standard-E-Mail markieren</text>
+    <text id="IDS_PB_BODY_OTHER">Andere</text>
+    <text id="IDS_COM_POP_REMOVED">Entfernt</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Arbeitskollege</text>
+    <text id="IDS_COM_POP_SUCCESS">Abgeschlossen</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Geburtstag</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Alle Kontakte</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nicht zugewiesen</text>
+    <text id="IDS_COM_SK_DONE">OK</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-Mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Der Gerätespeicher ist voll.</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Gruppe auswählen</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Ungültige Nummer</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Mitglied hzfg.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Keine Kontakte</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Foto entfernen</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Nachname zuerst</text>
+    <text id="IDS_PB_OPT_VIEW">Anzeigen</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ungültiges Geburtsdatum</text>
+    <text id="IDS_PB_BODY_WORK">Arbeit</text>
+    <text id="IDS_COM_SK_EDIT">Bearbeiten</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ungültige E-Mail-Adresse</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Keine Gruppe</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Zu Kontakten hinzufügen</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Als Standardnummer markieren</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Weitere Informationen</text>
+    <text id="IDS_COM_POP_SELECTED">Ausgewählt</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Leer</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Foto aufnehmen</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Neue Gruppe</text>
+    <text id="IDS_COM_SK_DELETE">Löschen</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Arbeit)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Klingelton</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Freunde</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</text>
+    <text id="IDS_COM_BODY_COPY">Kopieren</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Keine Favoriten</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakte</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Kontakte auswählen</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Datei ungültig</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant Messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerie</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (Privat)</text>
+    <text id="IDS_COM_BODY_SEARCH">Suche</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Gruppenname wird bereits verwendet</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familie</text>
+    <text id="IDS_PB_BODY_CITY">Stadt</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_COM_BODY_CREATE">Erstellen</text>
+    <text id="IDS_PB_BODY_NICKNAME">Spitzname</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Abteilung</text>
+    <text id="IDS_PB_BODY_SUFFIX">Namenszusatz</text>
+    <text id="IDS_COM_BODY_CALL">Anruf</text>
+    <text id="IDS_COM_BODY_SETTINGS">Einstellungen</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unbekannt</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Kontakt speichern?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoriten</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Gruppen\nbearbeiten</text>
+    <text id="IDS_COM_SK_SAVE">Speichern</text>
+    <text id="IDS_PB_BODY_PROVINCE">Region</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Visitenkarte senden</text>
+    <text id="IDS_COM_POP_ADDED">Hinzugefügt</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videoanruf</text>
+    <text id="IDS_PB_BODY_HOME">Privat</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Ungültiges Format</text>
+    <text id="IDS_PB_BODY_NOTE">Memo</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontakteinstellungen</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Reihenfolge des Anzeigenamens</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Kontakte werden gelöscht...</text>
+    <text id="IDS_PB_BODY_STREET">Straße</text>
+    <text id="IDS_PB_BODY_NUMBER">Nummer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Details</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Änderungen verwerfen?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postleitzahl</text>
+    <text id="IDS_COM_BODY_REMOVE">Entfernen</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (Privat)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Vorname zuerst</text>
+    <text id="IDS_PB_BODY_DEFAULT">Standard</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Gruppenname</text>
+</string_table>
diff --git a/res/ell-GR.xml b/res/ell-GR.xml
new file mode 100644 (file)
index 0000000..4cd410a
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Ομάδες</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Όνομα</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Τίτλος εργασίας</text>
+    <text id="IDS_PB_BODY_COMPANY">Εταιρεία</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Επέτειος</text>
+    <text id="IDS_COM_POP_CLOSE">Κλείσιμο</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Επιλογή όλων</text>
+    <text id="IDS_COM_POP_DELETE_Q">Διαγραφή;</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Προσθήκη στα αγαπημένα</text>
+    <text id="IDS_PB_BODY_PHONE">Τηλέφωνο</text>
+    <text id="IDS_COM_BODY_MESSAGE">Μήνυμα</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Επώνυμο</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Αποθήκευση επαφής σε</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Κινητό (Εργασία)</text>
+    <text id="IDS_PB_SK_CANCEL">Άκυρο</text>
+    <text id="IDS_COM_SK_NEW">Νέο</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Πατρώνυμο</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Σήμανση ως προεπιλεγμένης διεύθυνσης ηλεκτρονικού ταχυδρομείου</text>
+    <text id="IDS_PB_BODY_OTHER">Άλλο</text>
+    <text id="IDS_COM_POP_REMOVED">Αφαιρέθηκε</text>
+    <text id="IDS_PB_BODY_COUNTRY">Χώρα</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Συνεργάτες</text>
+    <text id="IDS_COM_POP_SUCCESS">Ολοκληρώθηκε</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Γενέθλια</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Όλες οι επαφές</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Δεν έχει αντιστοιχηθεί</text>
+    <text id="IDS_COM_SK_DONE">Ok</text>
+    <text id="IDS_PB_BODY_MOBILE">Κινητό</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Ο χώρος αποθήκευσης της συσκευής είναι πλήρης</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Επιλογή ομάδας</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Μη έγκυρος αριθμός</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Πρ.μέλους</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Καμία επαφή</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Κατάργηση φωτογραφίας</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Πρώτα το επίθετο</text>
+    <text id="IDS_PB_OPT_VIEW">Προβολή</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Μη έγκυρη ημερομηνία γέννησης</text>
+    <text id="IDS_PB_BODY_WORK">Εργασία</text>
+    <text id="IDS_COM_SK_EDIT">Επεξεργ.</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Μη έγκυρη διεύθυνση email</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Καμία ομάδα</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Προσθήκη στις Επαφές</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Ορισμός ως προεπιλεγμένου αριθμού</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Περισσότερες πληροφορίες</text>
+    <text id="IDS_COM_POP_SELECTED">Επιλεγμένο</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Κενό</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Λήψη φωτογραφίας</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Νέα ομάδα</text>
+    <text id="IDS_COM_SK_DELETE">Διαγραφή</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Φαξ (Εργασία)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ήχος κλήσης</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Φίλοι</text>
+    <text id="IDS_PB_BODY_ADDRESS">Διεύθυνση</text>
+    <text id="IDS_COM_BODY_COPY">Αντιγραφή</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Δεν υπάρχουν αγαπημένα</text>
+    <text id="IDS_COM_BODY_CONTACTS">Επαφές</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Επιλογή επαφών</text>
+    <text id="IDS_PB_BODY_PAGER">Συσκευή τηλεειδοποίησης</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Άκυρο αρχείο</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Άμεσα μηνύματα</text>
+    <text id="IDS_COM_BODY_GALLERY">Συλλογή</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Προσωπικό κινητό</text>
+    <text id="IDS_COM_BODY_SEARCH">Αναζήτηση</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Το όνομα ομάδας υπάρχει ήδη</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Οικογένεια</text>
+    <text id="IDS_PB_BODY_CITY">Πόλη</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Όνομα</text>
+    <text id="IDS_COM_BODY_CREATE">Δημ/ργία</text>
+    <text id="IDS_PB_BODY_NICKNAME">Υποκοριστικό</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Τμήμα</text>
+    <text id="IDS_PB_BODY_SUFFIX">Επίθημα</text>
+    <text id="IDS_COM_BODY_CALL">Κλήση</text>
+    <text id="IDS_COM_BODY_SETTINGS">Ρυθμίσεις</text>
+    <text id="IDS_COM_POP_UNKNOWN">Άγνωστο</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Αποθήκευση επαφής;</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Αγαπημένα</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Επεξεργασία\n ομάδων</text>
+    <text id="IDS_COM_SK_SAVE">Αποθ/ση</text>
+    <text id="IDS_PB_BODY_PROVINCE">Επαρχία</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Αποστολή επαγγελματικής κάρτας</text>
+    <text id="IDS_COM_POP_ADDED">Προστέθηκε</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Κλήση βίντεο</text>
+    <text id="IDS_PB_BODY_HOME">Σπίτι</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Μη έγκυρη μορφή</text>
+    <text id="IDS_PB_BODY_NOTE">Σημείωση</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Ρυθμίσεις επαφών</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Σειρά εμφανιζόμενου ονόματος</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Διαγραφή επαφών...</text>
+    <text id="IDS_PB_BODY_STREET">Οδός</text>
+    <text id="IDS_PB_BODY_NUMBER">Αριθμός</text>
+    <text id="IDS_PB_HEADER_DETAILS">Λεπτομέρειες</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Απόρριψη αλλαγών;</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Ταχυδρομικός κώδικας</text>
+    <text id="IDS_COM_BODY_REMOVE">Κατάργηση</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Φαξ (Οικίας)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Πρώτα το όνομα</text>
+    <text id="IDS_PB_BODY_DEFAULT">Προεπιλογή</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Όνομα ομάδας</text>
+</string_table>
diff --git a/res/eng-GB.xml b/res/eng-GB.xml
new file mode 100644 (file)
index 0000000..fd3bd8c
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Groups</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">First name</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Job title</text>
+    <text id="IDS_PB_BODY_COMPANY">Company</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Anniversary</text>
+    <text id="IDS_COM_POP_CLOSE">Close</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Select all</text>
+    <text id="IDS_COM_POP_DELETE_Q">Delete?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Add to favorites</text>
+    <text id="IDS_PB_BODY_PHONE">Phone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Message</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Last name</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Save contact to</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobile (work)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel</text>
+    <text id="IDS_COM_SK_NEW">New</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Middle name</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Mark as default email</text>
+    <text id="IDS_PB_BODY_OTHER">Other</text>
+    <text id="IDS_COM_POP_REMOVED">Removed</text>
+    <text id="IDS_PB_BODY_COUNTRY">Country</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Co-workers</text>
+    <text id="IDS_COM_POP_SUCCESS">Success</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Birthday</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">All contacts</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Not assigned</text>
+    <text id="IDS_COM_SK_DONE">Done</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobile</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Device storage full</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Select group</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Invalid number</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Add member</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">No contacts</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Remove photo</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Last name first</text>
+    <text id="IDS_PB_OPT_VIEW">View</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Invalid date of birth</text>
+    <text id="IDS_PB_BODY_WORK">Work</text>
+    <text id="IDS_COM_SK_EDIT">Edit</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Invalid email address</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">No group</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Add to Contacts</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Mark as default number</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">More information</text>
+    <text id="IDS_COM_POP_SELECTED">Selected</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Empty</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Take a photo</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">New group</text>
+    <text id="IDS_COM_SK_DELETE">Delete</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (work)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ringtone</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Friends</text>
+    <text id="IDS_PB_BODY_ADDRESS">Address</text>
+    <text id="IDS_COM_BODY_COPY">Copy</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">No favourites</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacts</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Select contacts</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Invalid file</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Gallery</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobile (home)</text>
+    <text id="IDS_COM_BODY_SEARCH">Search</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Group name already in use</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Family</text>
+    <text id="IDS_PB_BODY_CITY">City</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_COM_BODY_CREATE">Create</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nickname</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Department</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_BODY_CALL">Call</text>
+    <text id="IDS_COM_BODY_SETTINGS">Settings</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unknown</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Save contact?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favourites</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Edit groups</text>
+    <text id="IDS_COM_SK_SAVE">Save</text>
+    <text id="IDS_PB_BODY_PROVINCE">Province</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Send namecard</text>
+    <text id="IDS_COM_POP_ADDED">Added</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video call</text>
+    <text id="IDS_PB_BODY_HOME">Home</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Invalid format</text>
+    <text id="IDS_PB_BODY_NOTE">Note</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Contact settings</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Order of display name</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Deleting contacts...</text>
+    <text id="IDS_PB_BODY_STREET">Street</text>
+    <text id="IDS_PB_BODY_NUMBER">Number</text>
+    <text id="IDS_PB_HEADER_DETAILS">Details</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Discard changes?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postal code</text>
+    <text id="IDS_COM_BODY_REMOVE">Remove</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (home)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">First name first</text>
+    <text id="IDS_PB_BODY_DEFAULT">Default</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Group name</text>
+</string_table>
diff --git a/res/eng-PH.xml b/res/eng-PH.xml
new file mode 100644 (file)
index 0000000..a1d2e1d
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Groups</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">First name</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Job title</text>
+    <text id="IDS_PB_BODY_COMPANY">Company</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Anniversary</text>
+    <text id="IDS_COM_POP_CLOSE">Close</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Select all</text>
+    <text id="IDS_COM_POP_DELETE_Q">Delete?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Add to favorites</text>
+    <text id="IDS_PB_BODY_PHONE">Phone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Message</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Last name</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Save contact to</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobile (Work)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel</text>
+    <text id="IDS_COM_SK_NEW">New</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Middle name</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Mark as default email</text>
+    <text id="IDS_PB_BODY_OTHER">Other</text>
+    <text id="IDS_COM_POP_REMOVED">Removed</text>
+    <text id="IDS_PB_BODY_COUNTRY">Country</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Co-workers</text>
+    <text id="IDS_COM_POP_SUCCESS">Success</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Birthday</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">All contacts</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Not assigned</text>
+    <text id="IDS_COM_SK_DONE">Done</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobile</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Device storage full</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Select group</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Invalid number</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Add member</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">No contacts</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Remove photo</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Last name first</text>
+    <text id="IDS_PB_OPT_VIEW">View</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Invalid date of birth</text>
+    <text id="IDS_PB_BODY_WORK">Work</text>
+    <text id="IDS_COM_SK_EDIT">Edit</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Invalid Email address</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">No Group</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Add to contacts</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Mark as default number</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">More information</text>
+    <text id="IDS_COM_POP_SELECTED">Selected</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Empty</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Take a photo</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">New group</text>
+    <text id="IDS_COM_SK_DELETE">Delete</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Work)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ringtone</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Friends</text>
+    <text id="IDS_PB_BODY_ADDRESS">Address</text>
+    <text id="IDS_COM_BODY_COPY">Copy</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">No favorites</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacts</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Select contacts</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Invalid file</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Gallery</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobile (Home)</text>
+    <text id="IDS_COM_BODY_SEARCH">Search</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Group name already in use</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Family</text>
+    <text id="IDS_PB_BODY_CITY">City</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_COM_BODY_CREATE">Create</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nickname</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Department</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_BODY_CALL">Call</text>
+    <text id="IDS_COM_BODY_SETTINGS">Settings</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unknown</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Save contact?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favorites</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Edit groups</text>
+    <text id="IDS_COM_SK_SAVE">Save</text>
+    <text id="IDS_PB_BODY_PROVINCE">Province</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Send namecard</text>
+    <text id="IDS_COM_POP_ADDED">Added</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video call</text>
+    <text id="IDS_PB_BODY_HOME">Home</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Invalid format</text>
+    <text id="IDS_PB_BODY_NOTE">Note</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Contact settings</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Order of display name</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Deleting contacts...</text>
+    <text id="IDS_PB_BODY_STREET">Street</text>
+    <text id="IDS_PB_BODY_NUMBER">Number</text>
+    <text id="IDS_PB_HEADER_DETAILS">Details</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Discard changes?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postal code</text>
+    <text id="IDS_COM_BODY_REMOVE">Remove</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (Home)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">First name first</text>
+    <text id="IDS_PB_BODY_DEFAULT">Default</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Group name</text>
+</string_table>
diff --git a/res/eng-US.xml b/res/eng-US.xml
new file mode 100644 (file)
index 0000000..2ae1926
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">Web address</text>
+    <text id="IDS_PB_BODY_GROUPS">Groups</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">First name</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Job title</text>
+    <text id="IDS_PB_BODY_COMPANY">Company</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Anniversary</text>
+    <text id="IDS_COM_POP_CLOSE">Close</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Select all</text>
+    <text id="IDS_COM_POP_DELETE_Q">Delete?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Add to Favorites</text>
+    <text id="IDS_PB_BODY_PHONE">Phone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Message</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Last name</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Save contact to</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobile (Work)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel</text>
+    <text id="IDS_COM_SK_NEW">New</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Middle name</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Mark as default email</text>
+    <text id="IDS_PB_BODY_OTHER">Other</text>
+    <text id="IDS_COM_POP_REMOVED">Removed</text>
+    <text id="IDS_PB_BODY_COUNTRY">Country</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Co-workers</text>
+    <text id="IDS_COM_POP_SUCCESS">Success</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Birthday</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">All contacts</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Not assigned</text>
+    <text id="IDS_COM_SK_DONE">Done</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobile</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Device storage full</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Select group</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Invalid number</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Add member</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">No contacts</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Remove photo</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Last name first</text>
+    <text id="IDS_PB_OPT_VIEW">View</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Invalid date of birth</text>
+    <text id="IDS_PB_BODY_WORK">Work</text>
+    <text id="IDS_COM_SK_EDIT">Edit</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Invalid email address</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">No group</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Add to contacts</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Mark as default number</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">More information</text>
+    <text id="IDS_COM_POP_SELECTED">Selected</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Empty</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Take a photo</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">New group</text>
+    <text id="IDS_COM_SK_DELETE">Delete</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Work)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ringtone</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Friends</text>
+    <text id="IDS_PB_BODY_ADDRESS">Address</text>
+    <text id="IDS_COM_BODY_COPY">Copy</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">No favorites</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacts</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Select contacts</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Invalid file</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Gallery</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobile (Home)</text>
+    <text id="IDS_COM_BODY_SEARCH">Search</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Group name already in use</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Family</text>
+    <text id="IDS_PB_BODY_CITY">city</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_COM_BODY_CREATE">Create</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nickname</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Department</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_BODY_CALL">Call</text>
+    <text id="IDS_COM_BODY_SETTINGS">Settings</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unknown</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Save contact?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favorites</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Edit groups</text>
+    <text id="IDS_COM_SK_SAVE">Save</text>
+    <text id="IDS_PB_BODY_PROVINCE">Province</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Send namecard</text>
+    <text id="IDS_COM_POP_ADDED">Added</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video call</text>
+    <text id="IDS_PB_BODY_HOME">Home</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Invalid format</text>
+    <text id="IDS_PB_BODY_NOTE">Note</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Contact settings</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Order of display name</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Deleting contacts...</text>
+    <text id="IDS_PB_BODY_STREET">Street</text>
+    <text id="IDS_PB_BODY_NUMBER">Number</text>
+    <text id="IDS_PB_HEADER_DETAILS">Details</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Discard changes?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postal code</text>
+    <text id="IDS_COM_BODY_REMOVE">Remove</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (Home)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">First name first</text>
+    <text id="IDS_PB_BODY_DEFAULT">Default</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Group name</text>
+</string_table>
diff --git a/res/est-EE.xml b/res/est-EE.xml
new file mode 100644 (file)
index 0000000..730be69
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Rühmad</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Eesnimi</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Ametinimetus</text>
+    <text id="IDS_PB_BODY_COMPANY">Ettevõte</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Tähtpäev</text>
+    <text id="IDS_COM_POP_CLOSE">Sulge</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vali kõik</text>
+    <text id="IDS_COM_POP_DELETE_Q">Kustutada?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Lisa lemmikutesse</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Sõnum</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Perekonnanimi</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Kontakti salvestuskoht:</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobiil (töö)</text>
+    <text id="IDS_PB_SK_CANCEL">Tühista</text>
+    <text id="IDS_COM_SK_NEW">Uus</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Keskmine nimi</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Märgi vaikimisi e-postiks</text>
+    <text id="IDS_PB_BODY_OTHER">Muu</text>
+    <text id="IDS_COM_POP_REMOVED">Eemaldatud</text>
+    <text id="IDS_PB_BODY_COUNTRY">Riik</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Kaastöötajad</text>
+    <text id="IDS_COM_POP_SUCCESS">Õnnestus</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Sünnipäev</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Kõik kontaktid</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Pole määratud</text>
+    <text id="IDS_COM_SK_DONE">Valmis</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobiil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-post</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Seadme mälu on täis</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Vali rühm</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Kehtetu number</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Lisa lii.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Kontaktid puuduvad</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Eemalda foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Perekonnanimi ees</text>
+    <text id="IDS_PB_OPT_VIEW">Kuva</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Vale sünniaeg</text>
+    <text id="IDS_PB_BODY_WORK">Töö</text>
+    <text id="IDS_COM_SK_EDIT">Muuda</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Vale e-posti aadress</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Rühm puudub</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Lisa kontaktidesse</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Märgi vaikimisi numbriks</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Lisateave</text>
+    <text id="IDS_COM_POP_SELECTED">Valitud</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tühi</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Pildista</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Uus rühm</text>
+    <text id="IDS_COM_SK_DELETE">Kustuta</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (töö)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Helin</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Sõbrad</text>
+    <text id="IDS_PB_BODY_ADDRESS">Aadress</text>
+    <text id="IDS_COM_BODY_COPY">Kopeeri</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Lemmikuid ei ole</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontaktid</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Vali kontaktid</text>
+    <text id="IDS_PB_BODY_PAGER">Piipar</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Lubamatu fail</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Vahetu sõnumside</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerii</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobiil (kodu)</text>
+    <text id="IDS_COM_BODY_SEARCH">Otsi</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Rühma nimi on juba kasutusel</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Perekond</text>
+    <text id="IDS_PB_BODY_CITY">Linn</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nimi</text>
+    <text id="IDS_COM_BODY_CREATE">Loo</text>
+    <text id="IDS_PB_BODY_NICKNAME">Hüüdnimi</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Osakond</text>
+    <text id="IDS_PB_BODY_SUFFIX">Järelliide</text>
+    <text id="IDS_COM_BODY_CALL">Helista</text>
+    <text id="IDS_COM_BODY_SETTINGS">Seaded</text>
+    <text id="IDS_COM_POP_UNKNOWN">Tundmatu</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Salvestada kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Lemmikud</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Muuda rühmasid</text>
+    <text id="IDS_COM_SK_SAVE">Salvesta</text>
+    <text id="IDS_PB_BODY_PROVINCE">Maakond</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Saada nimekaart</text>
+    <text id="IDS_COM_POP_ADDED">Lisatud</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videokõne</text>
+    <text id="IDS_PB_BODY_HOME">Kodu</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Kehtetu vorming</text>
+    <text id="IDS_PB_BODY_NOTE">Märkus</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontakti seaded</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Kuvanime järjekord</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Kontaktide kustutamine...</text>
+    <text id="IDS_PB_BODY_STREET">Tänav</text>
+    <text id="IDS_PB_BODY_NUMBER">Number</text>
+    <text id="IDS_PB_HEADER_DETAILS">Üksikasjad</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Kas tühistada muudatused?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postiindeks</text>
+    <text id="IDS_COM_BODY_REMOVE">Eemalda</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (kodu)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Eesnimi esimesena</text>
+    <text id="IDS_PB_BODY_DEFAULT">Vaikimisi</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Rühma nimi</text>
+</string_table>
diff --git a/res/eus-ES.xml b/res/eus-ES.xml
new file mode 100644 (file)
index 0000000..31dacf0
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URLa</text>
+    <text id="IDS_PB_BODY_GROUPS">Taldeak</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Izena</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Kargua</text>
+    <text id="IDS_PB_BODY_COMPANY">Enpresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Urteurrena</text>
+    <text id="IDS_COM_POP_CLOSE">Itxi</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Denak aukeratu</text>
+    <text id="IDS_COM_POP_DELETE_Q">Ezabatu?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Gehitu gogokoetara</text>
+    <text id="IDS_PB_BODY_PHONE">Telefonoa</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mezua</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Abizena</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Kontaktua hemen gorde</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mugikorra (lanekoa)</text>
+    <text id="IDS_PB_SK_CANCEL">Ezeztatu</text>
+    <text id="IDS_COM_SK_NEW">Berria</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Bigarren izena</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Markatu lehenetsitako helbide elektroniko gisa</text>
+    <text id="IDS_PB_BODY_OTHER">Besterik</text>
+    <text id="IDS_COM_POP_REMOVED">Kenduta</text>
+    <text id="IDS_PB_BODY_COUNTRY">Herrialdea</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Lankideak</text>
+    <text id="IDS_COM_POP_SUCCESS">Behar bezala</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Urtebetetzea</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Kontaktu guztiak</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Esleitu gabe</text>
+    <text id="IDS_COM_SK_DONE">Amaituta</text>
+    <text id="IDS_PB_BODY_MOBILE">Mugikorra</text>
+    <text id="IDS_COM_BODY_EMAIL">Posta elektroniko mezuak</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Gailuaren memoria beteta</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Taldea aukeratu</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Zenbakiak ez du balio</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Kide geh.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ez dago kontakturik</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Kendu argazkia</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Abizena aurrena</text>
+    <text id="IDS_PB_OPT_VIEW">Ikusi</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Jaiotegun baliogabea</text>
+    <text id="IDS_PB_BODY_WORK">Lana</text>
+    <text id="IDS_COM_SK_EDIT">Editatu</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Helbide elektroniko baliogabea</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Talderik ez</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Kontaktuetara gehitu</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Lehenetsitako zenbakia moduan markatu</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Informazio gehiago</text>
+    <text id="IDS_COM_POP_SELECTED">Aukeratutakoa(k)</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Hutsik</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Argazkia atera</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Talde berria</text>
+    <text id="IDS_COM_SK_DELETE">Ezabatu</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faxa (lanekoa)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Dei doinua</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Lagunak</text>
+    <text id="IDS_PB_BODY_ADDRESS">Helbidea</text>
+    <text id="IDS_COM_BODY_COPY">Kopiatu</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Gogokorik ez</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontaktuak</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Hautatu kontaktuak</text>
+    <text id="IDS_PB_BODY_PAGER">Bilagailua</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Fitxategi baliogabea</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instanteko mezularitza</text>
+    <text id="IDS_COM_BODY_GALLERY">Galeria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mugikorra (etxekoa)</text>
+    <text id="IDS_COM_BODY_SEARCH">Bilatu</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Taldearen izena dagoenek erabileran</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familia</text>
+    <text id="IDS_PB_BODY_CITY">Hiria</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Izena</text>
+    <text id="IDS_COM_BODY_CREATE">Sortu</text>
+    <text id="IDS_PB_BODY_NICKNAME">Ezizena</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Saila</text>
+    <text id="IDS_PB_BODY_SUFFIX">Atzizkia</text>
+    <text id="IDS_COM_BODY_CALL">Deitu</text>
+    <text id="IDS_COM_BODY_SETTINGS">Ezarpenak</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ezezaguna</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Kontaktua gorde?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Gogokoak</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editatu taldeak</text>
+    <text id="IDS_COM_SK_SAVE">Gorde</text>
+    <text id="IDS_PB_BODY_PROVINCE">Probintzia</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Izen txartela bidali</text>
+    <text id="IDS_COM_POP_ADDED">Gehituta</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Bideo-deia</text>
+    <text id="IDS_PB_BODY_HOME">Etxea</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formatu baliogabea</text>
+    <text id="IDS_PB_BODY_NOTE">Oharra</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontaktuen konfigurazioa</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ezizenen antolaketa</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Kontaktuak ezabatzen...</text>
+    <text id="IDS_PB_BODY_STREET">Kalea</text>
+    <text id="IDS_PB_BODY_NUMBER">Zenbakia</text>
+    <text id="IDS_PB_HEADER_DETAILS">Xehetasunak</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Aldaketaz ezeztatzea nahi duzu?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Posta kodea</text>
+    <text id="IDS_COM_BODY_REMOVE">Kendu</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faxa (etxekoa)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Izena lehenago</text>
+    <text id="IDS_PB_BODY_DEFAULT">Lehenetsia</text>
+    <text id="IDS_COM_SK_OK">Ados</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Talde izena</text>
+</string_table>
diff --git a/res/fas-AF.xml b/res/fas-AF.xml
new file mode 100644 (file)
index 0000000..43238e1
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201305162056" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">آدرس</text>
+    <text id="IDS_PB_BODY_GROUPS">گروه ها</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">اسم کوچک</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">سالگرد</text>
+    <text id="IDS_PB_BODY_COMPANY">شرکت</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">عنوان کاری</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">انتخاب همه</text>
+    <text id="IDS_COM_POP_CLOSE">بسته</text>
+    <text id="IDS_COM_POP_DELETE_Q">حذف شود؟</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">افزودن به موارد دلخواه</text>
+    <text id="IDS_PB_BODY_PHONE">دستگاه</text>
+    <text id="IDS_COM_BODY_MESSAGE">پيام</text>
+    <text id="IDS_PB_BODY_LAST_NAME">نام خانوادگی</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">ثبت تماس در</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">موبایل (محل کار)</text>
+    <text id="IDS_COM_SK_NEW">جدید</text>
+    <text id="IDS_PB_SK_CANCEL">لغو</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">نام میانی</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">علامتگذاری به عنوان ایمیل پیش فرض</text>
+    <text id="IDS_PB_BODY_OTHER">متفرقه</text>
+    <text id="IDS_COM_POP_REMOVED">حذف شد</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">همکاران</text>
+    <text id="IDS_COM_POP_SUCCESS">موفقیت</text>
+    <text id="IDS_PB_BODY_COUNTRY">کشور</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">تولد</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">همه تماس ها</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">تعیین نشده</text>
+    <text id="IDS_COM_SK_DONE">انجام</text>
+    <text id="IDS_PB_BODY_MOBILE">موبايل</text>
+    <text id="IDS_COM_BODY_EMAIL">ایمیل</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">حافظه دستگاه پر است</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">انتخاب گروه</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">شماره نامعتبر است</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">افزودن عضو</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">فاقد مخاطب</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">حذف عکس</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">ابتدا نام خانوادگی</text>
+    <text id="IDS_PB_OPT_VIEW">نمايش</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">تاریخ تولد اشتباه است</text>
+    <text id="IDS_PB_BODY_WORK">کار</text>
+    <text id="IDS_COM_SK_EDIT">تصحيح</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">آدرس ایمیل نامعتبر</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">گروهی موجود نیست</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">افزودن به مخاطبین</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">انتخاب برای شماره پیش فرض</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">اطلاعات بيشتر</text>
+    <text id="IDS_COM_POP_SELECTED">انتخاب شد</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">خالی</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">گرفتن عکس</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">گروه جدید</text>
+    <text id="IDS_COM_SK_DELETE">حذف</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">نمابر (محل کار)</text>
+    <text id="IDS_PB_BODY_RINGTONE">زنگ تماس</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">دوستان</text>
+    <text id="IDS_COM_BODY_COPY">کپی</text>
+    <text id="IDS_PB_BODY_ADDRESS">آدرس</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">موارد علاقه وجود ندارد</text>
+    <text id="IDS_COM_BODY_CONTACTS">دفتر تلفن</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">انتخاب مخاطبین</text>
+    <text id="IDS_PB_BODY_PAGER">پیجو</text>
+    <text id="IDS_MP_POP_INVALID_FILE">فايل اشتباه</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">پيام رسان فوری</text>
+    <text id="IDS_COM_BODY_GALLERY">گالری</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">تلفن همراه (منزل)</text>
+    <text id="IDS_COM_BODY_SEARCH">جستجو</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">نام گروه موجود است</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">خانواده</text>
+    <text id="IDS_PB_BODY_CITY">شهر</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">نام</text>
+    <text id="IDS_COM_BODY_CREATE">ايجاد</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">اداره</text>
+    <text id="IDS_PB_BODY_NICKNAME">نام مستعار</text>
+    <text id="IDS_COM_BODY_CALL">تماس</text>
+    <text id="IDS_PB_BODY_SUFFIX">پسوند</text>
+    <text id="IDS_COM_BODY_SETTINGS">تنظيمات</text>
+    <text id="IDS_COM_POP_UNKNOWN">ناشناس</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">موارد دلخواه</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">ذخیره تماس؟</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">ویرایش گروه ها</text>
+    <text id="IDS_COM_SK_SAVE">ثبت</text>
+    <text id="IDS_PB_BODY_PROVINCE">استان</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">مکالمه تصویری</text>
+    <text id="IDS_COM_POP_ADDED">اضافه شد</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">ارسال کارت نام</text>
+    <text id="IDS_PB_BODY_HOME">منزل</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">تركيب اشتباه</text>
+    <text id="IDS_PB_BODY_NOTE">یادداشت</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">تنظيمات نام</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">ترتیب نمایش نام</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">در حال حذف مخاطبین...</text>
+    <text id="IDS_PB_BODY_NUMBER">شماره</text>
+    <text id="IDS_PB_BODY_STREET">خیابان</text>
+    <text id="IDS_PB_HEADER_DETAILS">جزئيات</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">کدپستی</text>
+    <text id="IDS_COM_BODY_REMOVE">حذف</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">نمابر (منزل)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">ابتدا نام</text>
+    <text id="IDS_COM_SK_OK">تاييد</text>
+    <text id="IDS_PB_BODY_DEFAULT">پيش فرض</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">نام گروه</text>
+</string_table>
diff --git a/res/fin-FI.xml b/res/fin-FI.xml
new file mode 100644 (file)
index 0000000..a506d64
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL-osoite</text>
+    <text id="IDS_PB_BODY_GROUPS">Ryhmät</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Etunimi</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Työtehtävä</text>
+    <text id="IDS_PB_BODY_COMPANY">Yritys</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Vuosipäivä</text>
+    <text id="IDS_COM_POP_CLOSE">Sulje</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Valitse kaikki</text>
+    <text id="IDS_COM_POP_DELETE_Q">Poistetaanko?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Lisää suosikkeihin</text>
+    <text id="IDS_PB_BODY_PHONE">Puhelin</text>
+    <text id="IDS_COM_BODY_MESSAGE">Viesti</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Sukunimi</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Tallenna yhteystieto kohteeseen</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Matkapuhelin (työ)</text>
+    <text id="IDS_PB_SK_CANCEL">Peruuta</text>
+    <text id="IDS_COM_SK_NEW">Uusi</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Toinen nimi</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Merkitse oletussähköpostiksi</text>
+    <text id="IDS_PB_BODY_OTHER">Muu</text>
+    <text id="IDS_COM_POP_REMOVED">Poistettu</text>
+    <text id="IDS_PB_BODY_COUNTRY">Maa</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Työtoverit</text>
+    <text id="IDS_COM_POP_SUCCESS">Valmis</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Syntymäpäivä</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Kaikki yhteystiedot</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Ei määritelty</text>
+    <text id="IDS_COM_SK_DONE">Valmis</text>
+    <text id="IDS_PB_BODY_MOBILE">Matkapuhelin</text>
+    <text id="IDS_COM_BODY_EMAIL">Sähköposti</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Laitteen muisti on täynnä</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Valitse ryhmä</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Virheellinen numero</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">L. jäsen</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ei yhteystietoja</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Poista valokuva</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Sukunimi ensin</text>
+    <text id="IDS_PB_OPT_VIEW">Näytä</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Virheellinen syntymäaika</text>
+    <text id="IDS_PB_BODY_WORK">Työ</text>
+    <text id="IDS_COM_SK_EDIT">Muokkaa</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Virheellinen sähköpostiosoite</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ei ryhmää</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Lisää yhteystietoihin</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Merkitse oletusnumeroksi</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Lisätietoja</text>
+    <text id="IDS_COM_POP_SELECTED">Valittu</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tyhjä</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Ota valokuva</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Uusi ryhmä</text>
+    <text id="IDS_COM_SK_DELETE">Poista</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faksi (työ)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Soittoääni</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Ystävät</text>
+    <text id="IDS_PB_BODY_ADDRESS">Osoite</text>
+    <text id="IDS_COM_BODY_COPY">Kopioi</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ei suosikkeja</text>
+    <text id="IDS_COM_BODY_CONTACTS">Yhteystiedot</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Valitse yhteystiedot</text>
+    <text id="IDS_PB_BODY_PAGER">Hakulaite</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Virheellinen tiedosto</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Pikaviestin</text>
+    <text id="IDS_COM_BODY_GALLERY">Galleria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Matkapuhelin (koti)</text>
+    <text id="IDS_COM_BODY_SEARCH">Etsi</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Ryhmän nimi on jo käytössä</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Perhe</text>
+    <text id="IDS_PB_BODY_CITY">Kaupunki</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nimi</text>
+    <text id="IDS_COM_BODY_CREATE">Luo</text>
+    <text id="IDS_PB_BODY_NICKNAME">Lempinimi</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Osasto</text>
+    <text id="IDS_PB_BODY_SUFFIX">Pääte</text>
+    <text id="IDS_COM_BODY_CALL">Puhelu</text>
+    <text id="IDS_COM_BODY_SETTINGS">Asetukset</text>
+    <text id="IDS_COM_POP_UNKNOWN">Tuntematon</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Tallennetaanko yhteystieto?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Suosikit</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Muokkaa\nryhmiä</text>
+    <text id="IDS_COM_SK_SAVE">Tallenna</text>
+    <text id="IDS_PB_BODY_PROVINCE">Maakunta</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Lähetä käyntikortti</text>
+    <text id="IDS_COM_POP_ADDED">Lisätty</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videopuhelu</text>
+    <text id="IDS_PB_BODY_HOME">Koti</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Virheellinen muoto</text>
+    <text id="IDS_PB_BODY_NOTE">Huomautus</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Yhteystietoasetukset</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Nimen näyttöjärjestys</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Poistetaan yhteystietoja...</text>
+    <text id="IDS_PB_BODY_STREET">Katu</text>
+    <text id="IDS_PB_BODY_NUMBER">Numero</text>
+    <text id="IDS_PB_HEADER_DETAILS">Yksityiskohdat</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Hylätäänkö muutokset?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postinumero</text>
+    <text id="IDS_COM_BODY_REMOVE">Poista</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faksi (koti)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Etunimi ensin</text>
+    <text id="IDS_PB_BODY_DEFAULT">Oletus</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Ryhmän nimi</text>
+</string_table>
diff --git a/res/fra-CA.xml b/res/fra-CA.xml
new file mode 100644 (file)
index 0000000..4cb2a17
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Groupes</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Prénom</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Profession</text>
+    <text id="IDS_PB_BODY_COMPANY">Société</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Occasion</text>
+    <text id="IDS_COM_POP_CLOSE">Fermer</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Sélectionner tout</text>
+    <text id="IDS_COM_POP_DELETE_Q">Supprimer ?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Ajouter aux favoris</text>
+    <text id="IDS_PB_BODY_PHONE">Téléphone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Message</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Nom de famille</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Enregistrer le contact dans</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobile (Professionnel)</text>
+    <text id="IDS_PB_SK_CANCEL">Annuler</text>
+    <text id="IDS_COM_SK_NEW">Nouveau</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Deuxième prénom</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marquer comme courriel par défaut</text>
+    <text id="IDS_PB_BODY_OTHER">Autre</text>
+    <text id="IDS_COM_POP_REMOVED">Retiré</text>
+    <text id="IDS_PB_BODY_COUNTRY">Pays</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Collègues</text>
+    <text id="IDS_COM_POP_SUCCESS">Terminé</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Anniversaire</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Tous les contacts</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Non affecté</text>
+    <text id="IDS_COM_SK_DONE">OK</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobile</text>
+    <text id="IDS_COM_BODY_EMAIL">Courriel</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Stockage du périphérique saturé</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Sélectionner groupe</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Numéro non valide</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Aj. membre</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Aucun contact</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Supprimer la photo</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Nom en premier</text>
+    <text id="IDS_PB_OPT_VIEW">Afficher</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Date de naissance non valide</text>
+    <text id="IDS_PB_BODY_WORK">Professionnel</text>
+    <text id="IDS_COM_SK_EDIT">Modifier</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adresse courriel incorrecte</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Aucun groupe</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Ajouter aux contacts</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Définir comme numéro par défaut</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Plus d'informations</text>
+    <text id="IDS_COM_POP_SELECTED">Sélectionné</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vide</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Photographier</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nouveau groupe</text>
+    <text id="IDS_COM_SK_DELETE">Supprimer</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Professionnel)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Sonnerie</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amis</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</text>
+    <text id="IDS_COM_BODY_COPY">Copier</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Aucun favori</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacts</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Sélectionner les contacts</text>
+    <text id="IDS_PB_BODY_PAGER">Téléav.</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Fichier non valide</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Messagerie instantanée</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerie</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobile - perso</text>
+    <text id="IDS_COM_BODY_SEARCH">Recherche</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nom de groupe déjà utilisé</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Famille</text>
+    <text id="IDS_PB_BODY_CITY">Ville</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_COM_BODY_CREATE">Créer</text>
+    <text id="IDS_PB_BODY_NICKNAME">Surnom</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Service</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffixe</text>
+    <text id="IDS_COM_BODY_CALL">Appeler</text>
+    <text id="IDS_COM_BODY_SETTINGS">Paramètres</text>
+    <text id="IDS_COM_POP_UNKNOWN">Inconnu</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Enregistrer ce contact ?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoris</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Modifier les groupes</text>
+    <text id="IDS_COM_SK_SAVE">Sauv.</text>
+    <text id="IDS_PB_BODY_PROVINCE">Province</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Envoyer la carte de visite</text>
+    <text id="IDS_COM_POP_ADDED">Ajouté</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Appel vidéo</text>
+    <text id="IDS_PB_BODY_HOME">Domicile</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Format non valide</text>
+    <text id="IDS_PB_BODY_NOTE">Note</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Paramètres des contacts</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordre d'affichage des noms</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Suppression des contacts...</text>
+    <text id="IDS_PB_BODY_STREET">Rue</text>
+    <text id="IDS_PB_BODY_NUMBER">Numéro</text>
+    <text id="IDS_PB_HEADER_DETAILS">Détails</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Ignorer les modifications?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Code postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Supprimer</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax - perso</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Prénom d'abord</text>
+    <text id="IDS_PB_BODY_DEFAULT">Par défaut</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nom de groupe</text>
+</string_table>
diff --git a/res/fra-FR.xml b/res/fra-FR.xml
new file mode 100644 (file)
index 0000000..5617ef1
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Groupes</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Prénom</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Profession</text>
+    <text id="IDS_PB_BODY_COMPANY">Société</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Occasion</text>
+    <text id="IDS_COM_POP_CLOSE">Fermer</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Sélect. tout</text>
+    <text id="IDS_COM_POP_DELETE_Q">Supprimer ?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Ajouter aux favoris</text>
+    <text id="IDS_PB_BODY_PHONE">Téléphone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Message</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Nom</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Enregistrer n° dans</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobile (Pro)</text>
+    <text id="IDS_PB_SK_CANCEL">Annuler</text>
+    <text id="IDS_COM_SK_NEW">Nouveau</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Deuxième prénom</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marquer comme e-mail par défaut</text>
+    <text id="IDS_PB_BODY_OTHER">Autre</text>
+    <text id="IDS_COM_POP_REMOVED">Supprimé</text>
+    <text id="IDS_PB_BODY_COUNTRY">Pays</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Collaborateurs</text>
+    <text id="IDS_COM_POP_SUCCESS">Terminé</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Anniversaire</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Tous les contacts</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Non affecté</text>
+    <text id="IDS_COM_SK_DONE">Effectué</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobile</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Stockage du périphérique saturé</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Sélectionner groupe</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Numéro non valide</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Aj. membre</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Aucun contact</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Supprimer la photo</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Nom en premier</text>
+    <text id="IDS_PB_OPT_VIEW">Afficher</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Date de naissance non valide</text>
+    <text id="IDS_PB_BODY_WORK">Pro.</text>
+    <text id="IDS_COM_SK_EDIT">Modifier</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adresse mail incorrecte.</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Aucun groupe</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Ajouter aux contacts</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Définir comme n° par défaut</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Plus d'informations</text>
+    <text id="IDS_COM_POP_SELECTED">Sélectionné</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vide</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Prendre une photo</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nouveau groupe</text>
+    <text id="IDS_COM_SK_DELETE">Supprimer</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax - Pro</text>
+    <text id="IDS_PB_BODY_RINGTONE">Sonnerie</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amis</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</text>
+    <text id="IDS_COM_BODY_COPY">Copier</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Aucun favori</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacts</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Sélectionner les contacts</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Fichier non valide</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Messagerie instantanée</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerie</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobile - perso</text>
+    <text id="IDS_COM_BODY_SEARCH">Rechercher</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nom de groupe déjà utilisé</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Thème</text>
+    <text id="IDS_PB_BODY_CITY">Ville</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_COM_BODY_CREATE">Créer</text>
+    <text id="IDS_PB_BODY_NICKNAME">Surnom</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Service</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffixe</text>
+    <text id="IDS_COM_BODY_CALL">Appel</text>
+    <text id="IDS_COM_BODY_SETTINGS">Paramètres</text>
+    <text id="IDS_COM_POP_UNKNOWN">Inconnu</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Enregistrer ce contact ?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoris</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Modifier groupes</text>
+    <text id="IDS_COM_SK_SAVE">Sauveg.</text>
+    <text id="IDS_PB_BODY_PROVINCE">Province</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Envoyer carte de visite</text>
+    <text id="IDS_COM_POP_ADDED">Ajouté</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Appel visio</text>
+    <text id="IDS_PB_BODY_HOME">Domicile</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Format non valide</text>
+    <text id="IDS_PB_BODY_NOTE">Note</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Contacts</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordre d'affichage des noms et prénoms</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Suppression des contacts...</text>
+    <text id="IDS_PB_BODY_STREET">Rue</text>
+    <text id="IDS_PB_BODY_NUMBER">Numéro</text>
+    <text id="IDS_PB_HEADER_DETAILS">Détails</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Ignorer les modifications ?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Code postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Supprimer</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax - perso</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Prénom d'abord</text>
+    <text id="IDS_PB_BODY_DEFAULT">Par défaut</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nom de groupe</text>
+</string_table>
diff --git a/res/gle-IE.xml b/res/gle-IE.xml
new file mode 100644 (file)
index 0000000..694c31f
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grúpaí</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Céadainm</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Teideal poist</text>
+    <text id="IDS_PB_BODY_COMPANY">Cuideachta</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Lá cinn bliana</text>
+    <text id="IDS_COM_POP_CLOSE">Dún</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Roghnaigh gach</text>
+    <text id="IDS_COM_POP_DELETE_Q">Scrios?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Cuir le ceanáin</text>
+    <text id="IDS_PB_BODY_PHONE">Fón</text>
+    <text id="IDS_COM_BODY_MESSAGE">Teachtaireacht</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Sloinne</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Sábháil teagmhálaí chuig</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Fón póca (Obair)</text>
+    <text id="IDS_PB_SK_CANCEL">Cuir ar ceal</text>
+    <text id="IDS_COM_SK_NEW">Nua</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Dara ainm</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcáil mar r-phost réamhshocraithe</text>
+    <text id="IDS_PB_BODY_OTHER">Eile</text>
+    <text id="IDS_COM_POP_REMOVED">Bainte</text>
+    <text id="IDS_PB_BODY_COUNTRY">Tír</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Comhoibrithe</text>
+    <text id="IDS_COM_POP_SUCCESS">D’éirigh leis</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Breithlá</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Gach teagmhálaí</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Neamhsannta</text>
+    <text id="IDS_COM_SK_DONE">Déanta</text>
+    <text id="IDS_PB_BODY_MOBILE">Fón Póca</text>
+    <text id="IDS_COM_BODY_EMAIL">R-phost</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Stóras an ghléis lán</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Roghnaigh grúpa</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Uimhir neamhbhailí</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Cuir ball</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Níl teagmhálaithe ann</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Bain grianghraf</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Sloinne ar dtús</text>
+    <text id="IDS_PB_OPT_VIEW">Amharc air</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Dáta breithe neamhbhailí</text>
+    <text id="IDS_PB_BODY_WORK">Obair</text>
+    <text id="IDS_COM_SK_EDIT">Eagraigh</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Seoladh r-phoist neamhbhailí</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Níl grúpa ann</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Cuir le Teagmhálaithe</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcáil mar uimhir réamhshocraithe</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Tuilleadh eolais</text>
+    <text id="IDS_COM_POP_SELECTED">Roghnaithe</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Folamh</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Glac grianghraf</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Grúpa nua</text>
+    <text id="IDS_COM_SK_DELETE">Scrios</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Facs (Obair)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Clingthon</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Cairde</text>
+    <text id="IDS_PB_BODY_ADDRESS">Seoladh</text>
+    <text id="IDS_COM_BODY_COPY">Cóipeáil</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Níl ceanáin ann</text>
+    <text id="IDS_COM_BODY_CONTACTS">Teagmhálaithe</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Roghnaigh teagmhálaithe</text>
+    <text id="IDS_PB_BODY_PAGER">Glaoire</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Comhad neamhbhailí</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Teachtaire meandrach</text>
+    <text id="IDS_COM_BODY_GALLERY">Gailearaí</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Fón póca (Baile)</text>
+    <text id="IDS_COM_BODY_SEARCH">Cuardaigh</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Ainm an ghrúpa in úsáid cheana</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Teaghlach</text>
+    <text id="IDS_PB_BODY_CITY">Cathair</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Ainm</text>
+    <text id="IDS_COM_BODY_CREATE">Cruthaigh</text>
+    <text id="IDS_PB_BODY_NICKNAME">Leasainm</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Roinn</text>
+    <text id="IDS_PB_BODY_SUFFIX">Iarmhír</text>
+    <text id="IDS_COM_BODY_CALL">Glaoigh</text>
+    <text id="IDS_COM_BODY_SETTINGS">Socruithe</text>
+    <text id="IDS_COM_POP_UNKNOWN">Anaithnid</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Sábháil teagmhálaí?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Ceanáin</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Cuir grúpaí in eagar</text>
+    <text id="IDS_COM_SK_SAVE">Sábháil</text>
+    <text id="IDS_PB_BODY_PROVINCE">Cúige</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Seol ainmchárta</text>
+    <text id="IDS_COM_POP_ADDED">Curtha leis</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Glao físe</text>
+    <text id="IDS_PB_BODY_HOME">Baile</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formáid neamhbhailí</text>
+    <text id="IDS_PB_BODY_NOTE">Nóta</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Socruithe teagmhálaithe</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ord an ainm taispeána</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Teagmhálaithe á scriosadh...</text>
+    <text id="IDS_PB_BODY_STREET">Sráid</text>
+    <text id="IDS_PB_BODY_NUMBER">Uimhir</text>
+    <text id="IDS_PB_HEADER_DETAILS">Sonraí</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Cuileáil athruithe?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Cód poist</text>
+    <text id="IDS_COM_BODY_REMOVE">Bain</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Facs (Baile)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Céadainm ar dtús</text>
+    <text id="IDS_PB_BODY_DEFAULT">Réamhshocrú</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Ainm an ghrúpa</text>
+</string_table>
diff --git a/res/glg-ES.xml b/res/glg-ES.xml
new file mode 100644 (file)
index 0000000..6b01b1f
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupos</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nome</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Cargo</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Aniversario</text>
+    <text id="IDS_COM_POP_CLOSE">Pechar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccionar todo</text>
+    <text id="IDS_COM_POP_DELETE_Q">Eliminar?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Engadir a favoritos</text>
+    <text id="IDS_PB_BODY_PHONE">Teléfono</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mensaxe</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Apelido</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Gardar contacto en</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Móbil (Traballo)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</text>
+    <text id="IDS_COM_SK_NEW">Novo</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Segundo nome</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcar como correo electrónico predeterminado</text>
+    <text id="IDS_PB_BODY_OTHER">Outro</text>
+    <text id="IDS_COM_POP_REMOVED">Eliminado</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Compañeiros de traballo</text>
+    <text id="IDS_COM_POP_SUCCESS">Éxito</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Aniversario</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Todos os contactos</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Non asignado</text>
+    <text id="IDS_COM_SK_DONE">Finalizado</text>
+    <text id="IDS_PB_BODY_MOBILE">Móbil</text>
+    <text id="IDS_COM_BODY_EMAIL">Correo electrónico</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Almacenamento do dispositivo cheo</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Seleccionar grupo</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Número non válido</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Eng. mem</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Sen contactos</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Eliminar foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Apelido en primeiro lugar</text>
+    <text id="IDS_PB_OPT_VIEW">Ver</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Data de nacemento incorrecta</text>
+    <text id="IDS_PB_BODY_WORK">Traballo</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Enderezo de correo electrónico non válido</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Sen grupo</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Engadir a Contactos</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcar como número predeterminado</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Máis información</text>
+    <text id="IDS_COM_POP_SELECTED">Seleccionado</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Baleira</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Capturar unha foto</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Novo grupo</text>
+    <text id="IDS_COM_SK_DELETE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Traballo)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Melodía</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amigos</text>
+    <text id="IDS_PB_BODY_ADDRESS">Enderezo</text>
+    <text id="IDS_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Non hai favoritos</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contactos</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Seleccionar contactos</text>
+    <text id="IDS_PB_BODY_PAGER">Busca</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Arquivo non válido</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Mensaxería instantánea</text>
+    <text id="IDS_COM_BODY_GALLERY">Galería</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Móbil (particular)</text>
+    <text id="IDS_COM_BODY_SEARCH">Buscar</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nome de grupo xa en uso</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familia</text>
+    <text id="IDS_PB_BODY_CITY">Cidade</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_NICKNAME">Alcume</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufixo</text>
+    <text id="IDS_COM_BODY_CALL">Chamar</text>
+    <text id="IDS_COM_BODY_SETTINGS">Axustes</text>
+    <text id="IDS_COM_POP_UNKNOWN">Descoñecido</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Gardar contacto?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoritos</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editar grupos</text>
+    <text id="IDS_COM_SK_SAVE">Gardar</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincia</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Enviar tarxeta de visita</text>
+    <text id="IDS_COM_POP_ADDED">Engadido</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videochamada</text>
+    <text id="IDS_PB_BODY_HOME">Particular</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">formato non válido</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Axustes de contactos</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Orde de nome de pantalla</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Eliminando contactos...</text>
+    <text id="IDS_PB_BODY_STREET">Rúa</text>
+    <text id="IDS_PB_BODY_NUMBER">Número</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalles</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Descartar cambios?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (particular)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Primeiro o nome</text>
+    <text id="IDS_PB_BODY_DEFAULT">Predeterminada</text>
+    <text id="IDS_COM_SK_OK">Aceptar</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nome do grupo</text>
+</string_table>
diff --git a/res/hin-IN.xml b/res/hin-IN.xml
new file mode 100644 (file)
index 0000000..26b8cb3
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">समूह</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">पहला नाम</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">कार्य शीर्षक</text>
+    <text id="IDS_PB_BODY_COMPANY">कंपनी</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">वर्षगाँठ</text>
+    <text id="IDS_COM_POP_CLOSE">बंद करें</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">सभी चुनें</text>
+    <text id="IDS_COM_POP_DELETE_Q">हटाएँ?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">पसंदीदा में जोड़ें</text>
+    <text id="IDS_PB_BODY_PHONE">फोन</text>
+    <text id="IDS_COM_BODY_MESSAGE">सन्देश</text>
+    <text id="IDS_PB_BODY_LAST_NAME">अंतिम नाम</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">में संपर्क सुरक्षित करें</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">मोबाइल (कार्यस्थल)</text>
+    <text id="IDS_PB_SK_CANCEL">रद्द</text>
+    <text id="IDS_COM_SK_NEW">नया</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">मध्य का नाम</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">डिफ़ॉल्‍ट ईमेल के रूप में चिह्नित करें</text>
+    <text id="IDS_PB_BODY_OTHER">अन्य</text>
+    <text id="IDS_COM_POP_REMOVED">हटाया</text>
+    <text id="IDS_PB_BODY_COUNTRY">देश</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">सहयोगी</text>
+    <text id="IDS_COM_POP_SUCCESS">सफलता</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">जन्मदिन</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">सभी संपर्क</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">सौंपा नहीं गया</text>
+    <text id="IDS_COM_SK_DONE">हुआ</text>
+    <text id="IDS_PB_BODY_MOBILE">मोबाइल</text>
+    <text id="IDS_COM_BODY_EMAIL">ईमेल</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">डिवाइस स्टोरेज भर गया</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">समूह चुनें</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">अमान्‍य नंबर</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">सदस्‍य जोड़ें</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">कोई संपर्क नहीं</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">फ़ोटो निकालें</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">पहले अंतिम नाम</text>
+    <text id="IDS_PB_OPT_VIEW">देखें</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">अमान्‍य जन्म तिथि</text>
+    <text id="IDS_PB_BODY_WORK">काम</text>
+    <text id="IDS_COM_SK_EDIT">संपादन</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">अमान्य ईमेल पता</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">कोई समूह नहीं</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">संपर्को में जोड़ें</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">डिफॉल्ट नंबर के रूप में चिन्हित करें</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">अधिक सूचना</text>
+    <text id="IDS_COM_POP_SELECTED">चयनित</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">खाली</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">एक फोटो लें</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">नया समूह</text>
+    <text id="IDS_COM_SK_DELETE">हटाएँ</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">फ़ैक्स (कार्यस्थल)</text>
+    <text id="IDS_PB_BODY_RINGTONE">रिंगटोन</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">मित्र</text>
+    <text id="IDS_PB_BODY_ADDRESS">पता</text>
+    <text id="IDS_COM_BODY_COPY">कॉपी करें</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">कोई पसंदीदा नहीं</text>
+    <text id="IDS_COM_BODY_CONTACTS">संपर्क</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">संपर्क चुनें</text>
+    <text id="IDS_PB_BODY_PAGER">पेजर</text>
+    <text id="IDS_MP_POP_INVALID_FILE">अमान्य फाइल</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">तत्काल मैसेंजर</text>
+    <text id="IDS_COM_BODY_GALLERY">गैलरी</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">मोबाइल (घर)</text>
+    <text id="IDS_COM_BODY_SEARCH">खोजें</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">समूह नाम पहले से उपयोग में</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">परिवार</text>
+    <text id="IDS_PB_BODY_CITY">शहर</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">नाम</text>
+    <text id="IDS_COM_BODY_CREATE">बनाएँ</text>
+    <text id="IDS_PB_BODY_NICKNAME">उपनाम</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">विभाग</text>
+    <text id="IDS_PB_BODY_SUFFIX">प्रत्यय</text>
+    <text id="IDS_COM_BODY_CALL">कॉल</text>
+    <text id="IDS_COM_BODY_SETTINGS">सेटिंग्स</text>
+    <text id="IDS_COM_POP_UNKNOWN">अज्ञात</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">कांटेक्ट सेव करें?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">पसंदीदा</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">समूह संपादित करें</text>
+    <text id="IDS_COM_SK_SAVE">सुरक्षित</text>
+    <text id="IDS_PB_BODY_PROVINCE">प्रांत</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">नामकार्ड भेजें</text>
+    <text id="IDS_COM_POP_ADDED">जोड़ा गया</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">वीडियो कॉल</text>
+    <text id="IDS_PB_BODY_HOME">घर</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">अमान्य फॉर्मेट</text>
+    <text id="IDS_PB_BODY_NOTE">टिप्पणी</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">संपर्क सेटिंग्स</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">प्रदर्शित नाम का क्रम</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">संपर्क हटाए जा रहे हैं...</text>
+    <text id="IDS_PB_BODY_STREET">गली</text>
+    <text id="IDS_PB_BODY_NUMBER">नंबर</text>
+    <text id="IDS_PB_HEADER_DETAILS">विवरण</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">बदलाव निरस्त करें?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">डाक का कोड</text>
+    <text id="IDS_COM_BODY_REMOVE">हटाएँ</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">फैक्स (घर)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">प्रथम नाम पहले</text>
+    <text id="IDS_PB_BODY_DEFAULT">डिफॉल्ट</text>
+    <text id="IDS_COM_SK_OK">ओके</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">समूह का नाम</text>
+</string_table>
diff --git a/res/hrv-HR.xml b/res/hrv-HR.xml
new file mode 100644 (file)
index 0000000..e495ea0
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">Adresa</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupe</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ime</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Radno mjesto</text>
+    <text id="IDS_PB_BODY_COMPANY">Tvrtka</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Godišnjica</text>
+    <text id="IDS_COM_POP_CLOSE">Prekid</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Odaberi sve</text>
+    <text id="IDS_COM_POP_DELETE_Q">Obrisati?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Dodaj u Favorite</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Poruka</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Prezime</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Spremiti kontakt u?</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobitel (posao)</text>
+    <text id="IDS_PB_SK_CANCEL">Prekid</text>
+    <text id="IDS_COM_SK_NEW">Nova</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Srednje ime</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Označi kao zadani email</text>
+    <text id="IDS_PB_BODY_OTHER">Ostalo</text>
+    <text id="IDS_COM_POP_REMOVED">Uklonjeno</text>
+    <text id="IDS_PB_BODY_COUNTRY">Država</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Kolege</text>
+    <text id="IDS_COM_POP_SUCCESS">Uspješno</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Rođendan</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Svi kontakti</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nedodijeljeno</text>
+    <text id="IDS_COM_SK_DONE">OK</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobitel</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Memorija uređaja puna</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Odaberite grupu</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Neispravan broj</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Dod. čl.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Nema kontakata</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Obriši fotografiju</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Prvo prezime</text>
+    <text id="IDS_PB_OPT_VIEW">Prikaz</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Datum rođenja neispravan</text>
+    <text id="IDS_PB_BODY_WORK">Posao</text>
+    <text id="IDS_COM_SK_EDIT">Uredi</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neispravna email adresa</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nema grupe</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Dodaj u Imenik</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Označi kao postavljeni</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Detalji</text>
+    <text id="IDS_COM_POP_SELECTED">Odabrano</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Prazno</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotografiranje</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nova grupa</text>
+    <text id="IDS_COM_SK_DELETE">Obriši</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (posao)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ton zvona</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Prijatelji</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</text>
+    <text id="IDS_COM_BODY_COPY">Kopiraj</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nema favorita</text>
+    <text id="IDS_COM_BODY_CONTACTS">Imenik</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Odaberite kontakte</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Neispravna datoteka</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Album</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobitel - kućni</text>
+    <text id="IDS_COM_BODY_SEARCH">Traži</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Naziv grupe se već koristi</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Obitelj</text>
+    <text id="IDS_PB_BODY_CITY">Grad</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Naziv</text>
+    <text id="IDS_COM_BODY_CREATE">Novi</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nadimak</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Odjel</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufiks</text>
+    <text id="IDS_COM_BODY_CALL">Poziv</text>
+    <text id="IDS_COM_BODY_SETTINGS">Postavke</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nepoznato</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Spremiti kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoriti</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Uredi grupe</text>
+    <text id="IDS_COM_SK_SAVE">Spremi</text>
+    <text id="IDS_PB_BODY_PROVINCE">Županija</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Pošalji posjetnicu</text>
+    <text id="IDS_COM_POP_ADDED">Dodano</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video poziv</text>
+    <text id="IDS_PB_BODY_HOME">Kuća</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Neispravan format</text>
+    <text id="IDS_PB_BODY_NOTE">Bilješka</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Postavke kontakta</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Prikaz unosa</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Brisanje kontakata...</text>
+    <text id="IDS_PB_BODY_STREET">Ulica</text>
+    <text id="IDS_PB_BODY_NUMBER">Broj</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalji</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Odbaciti promjene?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poštanski broj</text>
+    <text id="IDS_COM_BODY_REMOVE">Ukloni</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks - kućni</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Prvo ime</text>
+    <text id="IDS_PB_BODY_DEFAULT">Zadano</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Naziv grupe</text>
+</string_table>
diff --git a/res/hun-HU.xml b/res/hun-HU.xml
new file mode 100644 (file)
index 0000000..85e56fa
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Csoportok</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Keresztnév</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Beosztás</text>
+    <text id="IDS_PB_BODY_COMPANY">Cég</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Évforduló</text>
+    <text id="IDS_COM_POP_CLOSE">Bezárás</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Összes kijelölése</text>
+    <text id="IDS_COM_POP_DELETE_Q">Törli?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Kedvencekhez adás</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Üzenet</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Vezetéknév</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Név mentése ide</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (munkahelyi)</text>
+    <text id="IDS_PB_SK_CANCEL">Mégse</text>
+    <text id="IDS_COM_SK_NEW">Új</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Középső név</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Megjelölés alapértelmezett e-mail címként</text>
+    <text id="IDS_PB_BODY_OTHER">Egyéb</text>
+    <text id="IDS_COM_POP_REMOVED">Törölve</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ország</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Munkatársak</text>
+    <text id="IDS_COM_POP_SUCCESS">Sikeres</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Születésnap</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Összes névjegy</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nincs hozzárendelve</text>
+    <text id="IDS_COM_SK_DONE">Kész</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Az eszköz tárhelye megtelt</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Válasszon csoportot</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Érvénytelen szám</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Tagfelv.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Nincs névjegy</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Fénykép eltávolítása</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Vezetéknév áll elöl</text>
+    <text id="IDS_PB_OPT_VIEW">Megnéz</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Érvénytelen születési dátum</text>
+    <text id="IDS_PB_BODY_WORK">Munkahelyi</text>
+    <text id="IDS_COM_SK_EDIT">Szerkeszt</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Érvénytelen e-mail cím</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nincs csoport</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Kapcsolatokhoz ad</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Megjelölés alapértelmezett számként</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">További információ</text>
+    <text id="IDS_COM_POP_SELECTED">Kiválasztva</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Kiürítés</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fénykép készítése</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Új csoport</text>
+    <text id="IDS_COM_SK_DELETE">Töröl</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (munkahelyi)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Csengőhang</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Barátok</text>
+    <text id="IDS_PB_BODY_ADDRESS">Cím</text>
+    <text id="IDS_COM_BODY_COPY">Másol</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nincsenek kedvencek</text>
+    <text id="IDS_COM_BODY_CONTACTS">Névjegyek</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Névjegyet hozzáad</text>
+    <text id="IDS_PB_BODY_PAGER">Személyhívó</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Érvénytelen fájl</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant Messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Galéria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (otthoni)</text>
+    <text id="IDS_COM_BODY_SEARCH">Keresés</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">A csoportnév már létezik</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Család</text>
+    <text id="IDS_PB_BODY_CITY">Város</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Név</text>
+    <text id="IDS_COM_BODY_CREATE">Létrehoz</text>
+    <text id="IDS_PB_BODY_NICKNAME">Becenév</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Osztály</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titulus</text>
+    <text id="IDS_COM_BODY_CALL">Hívás</text>
+    <text id="IDS_COM_BODY_SETTINGS">Beállítások</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ismeretlen</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Menti a névjegyet?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Kedven-cek</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Csoportok\nszerkesztése</text>
+    <text id="IDS_COM_SK_SAVE">Ment</text>
+    <text id="IDS_PB_BODY_PROVINCE">Tartomány</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">hanghívás</text>
+    <text id="IDS_COM_POP_ADDED">Hozzáadva</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videohívás</text>
+    <text id="IDS_PB_BODY_HOME">Otthoni</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Érvénytelen formátum</text>
+    <text id="IDS_PB_BODY_NOTE">Jegyzet</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Névbeállítások</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Név megjelenési sorrendje</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Névjegyek törlése...</text>
+    <text id="IDS_PB_BODY_STREET">Utca</text>
+    <text id="IDS_PB_BODY_NUMBER">Szám</text>
+    <text id="IDS_PB_HEADER_DETAILS">Részletek</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Elveti a változtatásokat?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Irányítószám</text>
+    <text id="IDS_COM_BODY_REMOVE">Eltávolít</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (otthoni)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Utónév áll elöl</text>
+    <text id="IDS_PB_BODY_DEFAULT">Alapértelmezett</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Csoport neve</text>
+</string_table>
diff --git a/res/hye-AM.xml b/res/hye-AM.xml
new file mode 100644 (file)
index 0000000..5a6fec7
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Խմբեր</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Անուն</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Աշխատանքի վերնագիր</text>
+    <text id="IDS_PB_BODY_COMPANY">Ընկերություն</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Տարեդարձ</text>
+    <text id="IDS_COM_POP_CLOSE">Փակել</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Ընտրել բոլորը</text>
+    <text id="IDS_COM_POP_DELETE_Q">Ջնջե՞լ</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Հավելել Ընտրյալներին</text>
+    <text id="IDS_PB_BODY_PHONE">Հեռախոս</text>
+    <text id="IDS_COM_BODY_MESSAGE">Հաղորդագրություն</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Ազգանուն</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Պահել կոնտակտը</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Շարժական (աշխատանքային)</text>
+    <text id="IDS_PB_SK_CANCEL">Չեղարկել</text>
+    <text id="IDS_COM_SK_NEW">Նոր</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Հայրանունը</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Նշել որպես կանխադրված էլփոստ</text>
+    <text id="IDS_PB_BODY_OTHER">Այլ</text>
+    <text id="IDS_COM_POP_REMOVED">Հեռացված է</text>
+    <text id="IDS_PB_BODY_COUNTRY">Երկիր</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Աշխատակիցներ</text>
+    <text id="IDS_COM_POP_SUCCESS">Հաջողված է</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Ծննդյան օր</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Բոլոր կոնտակտները</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Նշանակված չէ</text>
+    <text id="IDS_COM_SK_DONE">Պատրաստ</text>
+    <text id="IDS_PB_BODY_MOBILE">Բջջային</text>
+    <text id="IDS_COM_BODY_EMAIL">Էլ.փոստ</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Սարքի պահոցը լիքն է</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Ընտրեք խումբը</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Անվավեր համար</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Ավց անդամ</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Կոնտակտներ չկան</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Հեռացնել լուսանկարը</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Նախ ազգանունը</text>
+    <text id="IDS_PB_OPT_VIEW">Դիտել</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ծննդյան անվավեր ամսաթիվ</text>
+    <text id="IDS_PB_BODY_WORK">Աշխատանք</text>
+    <text id="IDS_COM_SK_EDIT">Խմբագրել</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Անվավեր էլ. փոստի հասցե</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Խումբ չկա</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Ավելացնել Կոնտակտներում</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Նշել որպես լռելյայն համար</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Այլ տեղեկություններ</text>
+    <text id="IDS_COM_POP_SELECTED">Ընտրված</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Դատարկ է</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Լուսանկարել</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Նոր խումբ</text>
+    <text id="IDS_COM_SK_DELETE">Ջնջել</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Ֆաքս (աշխատանքային)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Մեղեդի</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Ընկերներ</text>
+    <text id="IDS_PB_BODY_ADDRESS">Հասցե</text>
+    <text id="IDS_COM_BODY_COPY">Պատճենել</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Սիրվածներ չկան</text>
+    <text id="IDS_COM_BODY_CONTACTS">Կոնտակտներ</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Ընտրել կոնտակտներ</text>
+    <text id="IDS_PB_BODY_PAGER">Հեռատող</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Անվավեր ֆայլ</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Ակնթարթային հաղորդագրող</text>
+    <text id="IDS_COM_BODY_GALLERY">Պատկերասրահ</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Բջջայինը (Տան)</text>
+    <text id="IDS_COM_BODY_SEARCH">Որոնել</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Խմբի անունն արդեն օգտագործված է</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Ընտանիք</text>
+    <text id="IDS_PB_BODY_CITY">Քաղաք</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Անուն</text>
+    <text id="IDS_COM_BODY_CREATE">Ստեղծել</text>
+    <text id="IDS_PB_BODY_NICKNAME">Մականուն</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Բաժին</text>
+    <text id="IDS_PB_BODY_SUFFIX">Ածանց</text>
+    <text id="IDS_COM_BODY_CALL">Զանգ</text>
+    <text id="IDS_COM_BODY_SETTINGS">Պարամետրեր</text>
+    <text id="IDS_COM_POP_UNKNOWN">Անհայտ</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Պահպանե՞լ  կոնտակտը</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Սիրվածներ</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Խմբագրել խմբեր</text>
+    <text id="IDS_COM_SK_SAVE">Պահել</text>
+    <text id="IDS_PB_BODY_PROVINCE">Գավառ</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Ուղարկել անվանաքարտը</text>
+    <text id="IDS_COM_POP_ADDED">Ավելացված է</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Վիդեո կանչ</text>
+    <text id="IDS_PB_BODY_HOME">Տուն</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Անվավեր ձևաչափ</text>
+    <text id="IDS_PB_BODY_NOTE">Նշում</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Կոնտակտի կայանքներ</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Անվան ցուցադրման հերթականությունը</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Վերացվում են կոնտակտներ...</text>
+    <text id="IDS_PB_BODY_STREET">Փողոց</text>
+    <text id="IDS_PB_BODY_NUMBER">Համար</text>
+    <text id="IDS_PB_HEADER_DETAILS">Մանրամասներ</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Մերժե՞լ փոփոխությունները:</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Փոստային ինդեքս</text>
+    <text id="IDS_COM_BODY_REMOVE">Հեռացնել</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Հեռապատճենը (Տան)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Նախ անունը</text>
+    <text id="IDS_PB_BODY_DEFAULT">Լռելյայն</text>
+    <text id="IDS_COM_SK_OK">Ընդունել</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Խմբի անվանումը</text>
+</string_table>
diff --git a/res/isl-IS.xml b/res/isl-IS.xml
new file mode 100644 (file)
index 0000000..c9214ba
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">Vefslóð</text>
+    <text id="IDS_PB_BODY_GROUPS">Hópar</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Fornafn</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Starfsheiti</text>
+    <text id="IDS_PB_BODY_COMPANY">Fyrirtæki</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Afmæli</text>
+    <text id="IDS_COM_POP_CLOSE">Loka</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Velja allt</text>
+    <text id="IDS_COM_POP_DELETE_Q">Á að eyða?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Bæta við uppáhald</text>
+    <text id="IDS_PB_BODY_PHONE">Sími</text>
+    <text id="IDS_COM_BODY_MESSAGE">Skilaboð</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Eftirnafn</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Vista tengilið í</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Farsími (Vinna)</text>
+    <text id="IDS_PB_SK_CANCEL">Hætta við</text>
+    <text id="IDS_COM_SK_NEW">Nýr</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Millinafn</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Merkja sem sjálfgefinn póst</text>
+    <text id="IDS_PB_BODY_OTHER">Annað</text>
+    <text id="IDS_COM_POP_REMOVED">Fjarlægt</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Samstarfsmenn</text>
+    <text id="IDS_COM_POP_SUCCESS">Árangur</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Afmælisdagur</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Allir tengiliðir</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Óúthlutað</text>
+    <text id="IDS_COM_SK_DONE">Lokið</text>
+    <text id="IDS_PB_BODY_MOBILE">Farsími</text>
+    <text id="IDS_COM_BODY_EMAIL">Tölvupóstur</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Minni tækis er fullt</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Velja hóp</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Ógilt númer</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Bæta við meðlim</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Engir tengiliðir</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Fjarlægja mynd</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Fyrst eftirnafn</text>
+    <text id="IDS_PB_OPT_VIEW">Skoða</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ógildur fæðingardagur</text>
+    <text id="IDS_PB_BODY_WORK">Vinna</text>
+    <text id="IDS_COM_SK_EDIT">Breyta</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ógilt netfang</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Enginn hópur</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Bæta við tengiliði</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Merkja sem sjálfgefið númer</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Frekari upplýsingar</text>
+    <text id="IDS_COM_POP_SELECTED">Valið</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tómt</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Taka ljósmynd</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nýr hópur</text>
+    <text id="IDS_COM_SK_DELETE">Eyða</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (vinna)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Hringitónn</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Vinir</text>
+    <text id="IDS_PB_BODY_ADDRESS">Heimilisfang</text>
+    <text id="IDS_COM_BODY_COPY">Afrita</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ekkert uppáhald</text>
+    <text id="IDS_COM_BODY_CONTACTS">Tengiliðir</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Velja tengiliði</text>
+    <text id="IDS_PB_BODY_PAGER">Símboði</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Ógild skrá</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Spjallforrit</text>
+    <text id="IDS_COM_BODY_GALLERY">Gallerí</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Farsími (heima)</text>
+    <text id="IDS_COM_BODY_SEARCH">Leit</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Heitið er þegar í notkun</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Fjölskylda</text>
+    <text id="IDS_PB_BODY_CITY">Borg</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Heiti</text>
+    <text id="IDS_COM_BODY_CREATE">Búa til</text>
+    <text id="IDS_PB_BODY_NICKNAME">Gælunafn</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Deild</text>
+    <text id="IDS_PB_BODY_SUFFIX">Viðskeyti</text>
+    <text id="IDS_COM_BODY_CALL">Símtal</text>
+    <text id="IDS_COM_BODY_SETTINGS">Stillingar</text>
+    <text id="IDS_COM_POP_UNKNOWN">Óþekkt</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Vista tengilið?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Uppáhalds</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Breyta hópum</text>
+    <text id="IDS_COM_SK_SAVE">Vista</text>
+    <text id="IDS_PB_BODY_PROVINCE">Hérað</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Senda nafnspjald</text>
+    <text id="IDS_COM_POP_ADDED">Bætt við</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Vídeósímtal</text>
+    <text id="IDS_PB_BODY_HOME">Heima</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Ógilt snið</text>
+    <text id="IDS_PB_BODY_NOTE">Athugasemd</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Tengiliðastillingar</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Röð birtra nafna</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Eyði tengiliðum...</text>
+    <text id="IDS_PB_BODY_STREET">Gata</text>
+    <text id="IDS_PB_BODY_NUMBER">Númer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Upplýsingar</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Hætta við breytingar?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Póstnúmer</text>
+    <text id="IDS_COM_BODY_REMOVE">Fjarlægja</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (heima)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Fornafn fyrst</text>
+    <text id="IDS_PB_BODY_DEFAULT">Sjálfgefið</text>
+    <text id="IDS_COM_SK_OK">Í lagi</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Heiti hóps</text>
+</string_table>
diff --git a/res/ita-IT.xml b/res/ita-IT.xml
new file mode 100644 (file)
index 0000000..c0f0ccc
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Gruppi</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nome</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Mansione</text>
+    <text id="IDS_PB_BODY_COMPANY">Azienda</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Anniversario</text>
+    <text id="IDS_COM_POP_CLOSE">Chiudi</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleziona tutto</text>
+    <text id="IDS_COM_POP_DELETE_Q">Eliminare?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Aggiungi a preferiti</text>
+    <text id="IDS_PB_BODY_PHONE">Telefono</text>
+    <text id="IDS_COM_BODY_MESSAGE">Messaggio</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Cognome</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Salva contatto in</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Cellulare (Ufficio)</text>
+    <text id="IDS_PB_SK_CANCEL">Annulla</text>
+    <text id="IDS_COM_SK_NEW">Nuovo</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Secondo nome</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Segna come e-mail predefinita</text>
+    <text id="IDS_PB_BODY_OTHER">Altri</text>
+    <text id="IDS_COM_POP_REMOVED">Rimosso</text>
+    <text id="IDS_PB_BODY_COUNTRY">Paese</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Colleghi</text>
+    <text id="IDS_COM_POP_SUCCESS">Operazione eseguita</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Compleanno</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Tutti i contatti</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Non assegnato</text>
+    <text id="IDS_COM_SK_DONE">Fatto</text>
+    <text id="IDS_PB_BODY_MOBILE">Cellulare</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Memoria dispositivo piena</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Seleziona gruppo</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Numero non valido</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Agg.membro</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Nessun contatto</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Rimuovi foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Prima cognome</text>
+    <text id="IDS_PB_OPT_VIEW">Visualizza</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Data di nascita non valida</text>
+    <text id="IDS_PB_BODY_WORK">Ufficio</text>
+    <text id="IDS_COM_SK_EDIT">Modifica</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Indirizzo e-mail non valido</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nessun gruppo</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Aggiungi a Rubrica</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Segna come numero predefinito</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Altre informazioni</text>
+    <text id="IDS_COM_POP_SELECTED">Selezionato</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vuoto</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Scatta foto</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nuovo gruppo</text>
+    <text id="IDS_COM_SK_DELETE">Elimina</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Ufficio)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Suoneria</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amici</text>
+    <text id="IDS_PB_BODY_ADDRESS">Indirizzo</text>
+    <text id="IDS_COM_BODY_COPY">Copia</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nessun preferito</text>
+    <text id="IDS_COM_BODY_CONTACTS">Rubrica</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Seleziona contatti</text>
+    <text id="IDS_PB_BODY_PAGER">Cercapersone</text>
+    <text id="IDS_MP_POP_INVALID_FILE">File non valido</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant Messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Galleria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Cellulare (Casa)</text>
+    <text id="IDS_COM_BODY_SEARCH">Cerca</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nome gruppo già in uso</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Famiglia</text>
+    <text id="IDS_PB_BODY_CITY">Città</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_COM_BODY_CREATE">Crea</text>
+    <text id="IDS_PB_BODY_NICKNAME">Soprannome</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Reparto</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffisso</text>
+    <text id="IDS_COM_BODY_CALL">Chiama</text>
+    <text id="IDS_COM_BODY_SETTINGS">Impostazioni</text>
+    <text id="IDS_COM_POP_UNKNOWN">Sconosciuto</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Salvare contatto?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Preferiti</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Modifica gruppi</text>
+    <text id="IDS_COM_SK_SAVE">Salva</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincia</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Invia biglietto da visita</text>
+    <text id="IDS_COM_POP_ADDED">Aggiunto</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videochiamata</text>
+    <text id="IDS_PB_BODY_HOME">Casa</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formato non valido</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Impostazioni rubrica</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordine visualizzazione nome</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Eliminazione contatti in corso...</text>
+    <text id="IDS_PB_BODY_STREET">Indirizzo</text>
+    <text id="IDS_PB_BODY_NUMBER">Numero</text>
+    <text id="IDS_PB_HEADER_DETAILS">Dettagli</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Annullare le modifiche?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">CAP</text>
+    <text id="IDS_COM_BODY_REMOVE">Rimuovi</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (Casa)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Prima nome</text>
+    <text id="IDS_PB_BODY_DEFAULT">Predefinito</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nome gruppo</text>
+</string_table>
diff --git a/res/jpn-JP.xml b/res/jpn-JP.xml
new file mode 100644 (file)
index 0000000..0e51fe0
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">グループ</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">名</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">役職</text>
+    <text id="IDS_PB_BODY_COMPANY">会社</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">記念日</text>
+    <text id="IDS_COM_POP_CLOSE">閉じる</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全て選択</text>
+    <text id="IDS_COM_POP_DELETE_Q">削除しますか?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">お気に入りに追加</text>
+    <text id="IDS_PB_BODY_PHONE">本体</text>
+    <text id="IDS_COM_BODY_MESSAGE">メッセージ</text>
+    <text id="IDS_PB_BODY_LAST_NAME">姓</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">連絡先の保存先</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">携帯(仕事)</text>
+    <text id="IDS_PB_SK_CANCEL">キャンセル</text>
+    <text id="IDS_COM_SK_NEW">新規</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">ミドルネーム</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">基本Eメールとして指定</text>
+    <text id="IDS_PB_BODY_OTHER">その他</text>
+    <text id="IDS_COM_POP_REMOVED">削除しました。</text>
+    <text id="IDS_PB_BODY_COUNTRY">国</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">同僚</text>
+    <text id="IDS_COM_POP_SUCCESS">正常に完了しました。</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">誕生日</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">全ての連絡先</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">指定なし</text>
+    <text id="IDS_COM_SK_DONE">完了</text>
+    <text id="IDS_PB_BODY_MOBILE">モバイル</text>
+    <text id="IDS_COM_BODY_EMAIL">Eメール</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">システムメモリ(本体)がいっぱいです。</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">グループを選択</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">番号が無効です。</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">メンバーを追加</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">連絡先がありません。</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">画像を削除</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">姓を先に表示</text>
+    <text id="IDS_PB_OPT_VIEW">表示</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">無効な生年月日です。</text>
+    <text id="IDS_PB_BODY_WORK">勤務先</text>
+    <text id="IDS_COM_SK_EDIT">編集</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Eメールアドレスが正しくありません。</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">グループなし</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">連絡先に追加</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">メインの番号に設定</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">その他の情報</text>
+    <text id="IDS_COM_POP_SELECTED">選択しました。</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">未入力</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">カメラを起動</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">新規グループ</text>
+    <text id="IDS_COM_SK_DELETE">削除</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">FAX(仕事)</text>
+    <text id="IDS_PB_BODY_RINGTONE">着信音</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">友だち</text>
+    <text id="IDS_PB_BODY_ADDRESS">住所</text>
+    <text id="IDS_COM_BODY_COPY">コピー</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">お気に入りがありません。</text>
+    <text id="IDS_COM_BODY_CONTACTS">電話帳</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">連絡先を選択</text>
+    <text id="IDS_PB_BODY_PAGER">ポケベル</text>
+    <text id="IDS_MP_POP_INVALID_FILE">無効なファイルです。</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">インスタントメッセンジャー</text>
+    <text id="IDS_COM_BODY_GALLERY">ギャラリー</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">携帯(自宅)</text>
+    <text id="IDS_COM_BODY_SEARCH">検索</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">グループ名は既に使用されています。</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">家族</text>
+    <text id="IDS_PB_BODY_CITY">都市</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">名前</text>
+    <text id="IDS_COM_BODY_CREATE">作成</text>
+    <text id="IDS_PB_BODY_NICKNAME">ニックネーム</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">部門</text>
+    <text id="IDS_PB_BODY_SUFFIX">敬称(名前の後)</text>
+    <text id="IDS_COM_BODY_CALL">発信</text>
+    <text id="IDS_COM_BODY_SETTINGS">設定</text>
+    <text id="IDS_COM_POP_UNKNOWN">不明</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">連絡先を保存しますか?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">お気に入り</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">グループを編集</text>
+    <text id="IDS_COM_SK_SAVE">保存</text>
+    <text id="IDS_PB_BODY_PROVINCE">都道府県</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">名刺を送信</text>
+    <text id="IDS_COM_POP_ADDED">追加しました。</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">テレビ電話</text>
+    <text id="IDS_PB_BODY_HOME">自宅</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">無効な形式</text>
+    <text id="IDS_PB_BODY_NOTE">ノート</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">電話帳設定</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">表示名順</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">連絡先を削除中...</text>
+    <text id="IDS_PB_BODY_STREET">番地</text>
+    <text id="IDS_PB_BODY_NUMBER">番号</text>
+    <text id="IDS_PB_HEADER_DETAILS">詳細</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">変更を破棄しますか?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">郵便番号</text>
+    <text id="IDS_COM_BODY_REMOVE">削除</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">FAX(自宅)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">名前を先に表示</text>
+    <text id="IDS_PB_BODY_DEFAULT">標準</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">グループ名</text>
+</string_table>
diff --git a/res/kat-GE.xml b/res/kat-GE.xml
new file mode 100644 (file)
index 0000000..398985f
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">ჯგუფები</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">სახელი</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">დავალების სათაური</text>
+    <text id="IDS_PB_BODY_COMPANY">კომპანია</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">იუბილე</text>
+    <text id="IDS_COM_POP_CLOSE">დახურვა</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">ყველას არჩევა</text>
+    <text id="IDS_COM_POP_DELETE_Q">წაიშალოს?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">ფავორიტებში დამატება</text>
+    <text id="IDS_PB_BODY_PHONE">ტელეფონი</text>
+    <text id="IDS_COM_BODY_MESSAGE">შეტყობინება</text>
+    <text id="IDS_PB_BODY_LAST_NAME">გვარი</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">კონტაქტის შენახვა ადგილზე:</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">მობილური (სამსახურის)</text>
+    <text id="IDS_PB_SK_CANCEL">გაუქმება</text>
+    <text id="IDS_COM_SK_NEW">ახალი</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">მამის სახელი</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">აღნიშვნა ნაგულისხმევ ელ.ფოსტად</text>
+    <text id="IDS_PB_BODY_OTHER">სხვა</text>
+    <text id="IDS_COM_POP_REMOVED">წაშლილია</text>
+    <text id="IDS_PB_BODY_COUNTRY">ქვეყანა</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">თანამშრომლები</text>
+    <text id="IDS_COM_POP_SUCCESS">წარმატება</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">დაბადების დღე</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">ყველა კონტაქტი</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">არ არის მინიჭებული</text>
+    <text id="IDS_COM_SK_DONE">შესრულდა</text>
+    <text id="IDS_PB_BODY_MOBILE">მობილური</text>
+    <text id="IDS_COM_BODY_EMAIL">ელ-ფოსტა</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">აპარატის მეხსიერება სავსეა</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">ჯგუფის შერჩევა</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">ნომერი არასწორია</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">წევრ.დამ.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">კონტაქტი ვერ მოიძებნა</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">ფოტოს მოცილება</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">ჯერ გვარი</text>
+    <text id="IDS_PB_OPT_VIEW">ნახვა</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">დაბადების თარიღი არასწორია</text>
+    <text id="IDS_PB_BODY_WORK">სამსახური</text>
+    <text id="IDS_COM_SK_EDIT">რედაქტ.</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">ელ.ფოსტა არასწორია</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">ჯგუფი არ არის</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">კონტაქტებში დამატება</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">ნაგულისხმევ ნომრად აღნიშვნა</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">დამატებითი ინფორმაცია</text>
+    <text id="IDS_COM_POP_SELECTED">შერჩეულია</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">ცარიელია</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">ფოტოს გადაღება</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">ახალი ჯგუფი</text>
+    <text id="IDS_COM_SK_DELETE">წაშლა</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">ფაქსი (სამსახურის)</text>
+    <text id="IDS_PB_BODY_RINGTONE">ზარის მელოდია</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">მეგობრები</text>
+    <text id="IDS_PB_BODY_ADDRESS">მისამართი</text>
+    <text id="IDS_COM_BODY_COPY">ასლი</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">ფავორიტები არ არის</text>
+    <text id="IDS_COM_BODY_CONTACTS">კონტაქტები</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">აირჩიეთ კონტაქტები</text>
+    <text id="IDS_PB_BODY_PAGER">პეიჯერი</text>
+    <text id="IDS_MP_POP_INVALID_FILE">ფაილი არასწორია</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">მესინჯერი</text>
+    <text id="IDS_COM_BODY_GALLERY">გალერეა</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">მობილური (სახლის)</text>
+    <text id="IDS_COM_BODY_SEARCH">ძიება</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">ჯგუფის სახელი უკვე გამოყენებულია</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">ოჯახი</text>
+    <text id="IDS_PB_BODY_CITY">ქალაქი</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">სახელი</text>
+    <text id="IDS_COM_BODY_CREATE">შექმნა</text>
+    <text id="IDS_PB_BODY_NICKNAME">მეტსახელი</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">განყოფილება</text>
+    <text id="IDS_PB_BODY_SUFFIX">სუფიქსი</text>
+    <text id="IDS_COM_BODY_CALL">დარეკვა</text>
+    <text id="IDS_COM_BODY_SETTINGS">პარამეტრები</text>
+    <text id="IDS_COM_POP_UNKNOWN">უცნობი</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">შეინახავთ კონტაქტს?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">ფავორიტები</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">ჯგუფების შესწორება</text>
+    <text id="IDS_COM_SK_SAVE">შენახვა</text>
+    <text id="IDS_PB_BODY_PROVINCE">პროვინცია</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">სავიზიტო ბარათის გაგზავნა</text>
+    <text id="IDS_COM_POP_ADDED">დამატებულია</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">ვიდეოზარი</text>
+    <text id="IDS_PB_BODY_HOME">საწყისი გვერდი</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">ფორმატი არასწორია</text>
+    <text id="IDS_PB_BODY_NOTE">შენიშვნა</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">კონტაქტის პარამეტრები</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">ეკრანზე საჩვენებლად სახელის შერჩევა</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">სრულდება კონტაქტების წაშლა...</text>
+    <text id="IDS_PB_BODY_STREET">ქუჩა</text>
+    <text id="IDS_PB_BODY_NUMBER">რიცხვი</text>
+    <text id="IDS_PB_HEADER_DETAILS">დეტალები</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">უარყოფთ ცვლილებებს?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">საფოსტო კოდი</text>
+    <text id="IDS_COM_BODY_REMOVE">წაშლა</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">ფაქსი (სახლის)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">ჯერ სახელი</text>
+    <text id="IDS_PB_BODY_DEFAULT">ნაგულისხმევი</text>
+    <text id="IDS_COM_SK_OK">კი</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">ჯგუფის სახელი</text>
+</string_table>
diff --git a/res/kaz-KZ.xml b/res/kaz-KZ.xml
new file mode 100644 (file)
index 0000000..9aa49d6
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Топтар</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Есімі</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Лауазым</text>
+    <text id="IDS_PB_BODY_COMPANY">Компания</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Жылдық</text>
+    <text id="IDS_COM_POP_CLOSE">Жабу</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Бәрін бөлектеу</text>
+    <text id="IDS_COM_POP_DELETE_Q">Өшіресіз бе?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Сүйіктілер қатарына қосу</text>
+    <text id="IDS_PB_BODY_PHONE">Телефон</text>
+    <text id="IDS_COM_BODY_MESSAGE">Хабарлама</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Тегі</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Кітапшаға сақтау</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Ұялы (жұмыс)</text>
+    <text id="IDS_PB_SK_CANCEL">Тоқтату</text>
+    <text id="IDS_COM_SK_NEW">Жаңа</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Әкесінің аты</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Әдепкі электрондық пошта деп белгілеу</text>
+    <text id="IDS_PB_BODY_OTHER">Басқа</text>
+    <text id="IDS_COM_POP_REMOVED">Жойылған</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ел</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Әріптес</text>
+    <text id="IDS_COM_POP_SUCCESS">Жетістік</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Туған күн</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Барлық контактілер</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Қойылған жоқ</text>
+    <text id="IDS_COM_SK_DONE">Дайын</text>
+    <text id="IDS_PB_BODY_MOBILE">Ұялы телефон</text>
+    <text id="IDS_COM_BODY_EMAIL">Эл. пошта</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Құрылғы жады толы</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Топты таңдау</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Жарамсыз нөмір</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Мүше қосу</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Контакттар жоқ</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Фотоны жою</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Алдымен тегі</text>
+    <text id="IDS_PB_OPT_VIEW">Көрініс</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Туған күн дұрыс емес</text>
+    <text id="IDS_PB_BODY_WORK">Жұмыс</text>
+    <text id="IDS_COM_SK_EDIT">Өзгер.</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Электрондық пошта мекен-жайы жарамсыз</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Топ жоқ</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Кітапшаға қосыңыз</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Өздігінен нөмірдің белгіленуі</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Көбірек ақпарат</text>
+    <text id="IDS_COM_POP_SELECTED">Таңдалған</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Бос</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Суретке алыңыз</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Жаңа топ</text>
+    <text id="IDS_COM_SK_DELETE">Жою</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Факс (жұмыс)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Әуен</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Достар</text>
+    <text id="IDS_PB_BODY_ADDRESS">Мекен-жай</text>
+    <text id="IDS_COM_BODY_COPY">Көшіру</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Сүйіктілер жоқ</text>
+    <text id="IDS_COM_BODY_CONTACTS">Контактілер</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Контактілерді таңдау</text>
+    <text id="IDS_PB_BODY_PAGER">Пейджер</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Файл қате</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Жедел хабаршы</text>
+    <text id="IDS_COM_BODY_GALLERY">Галерея</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Ұялы (үй)</text>
+    <text id="IDS_COM_BODY_SEARCH">Іздеу</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Мұндай топ аты қолданыста бар</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Отбасы</text>
+    <text id="IDS_PB_BODY_CITY">Қала</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Аты</text>
+    <text id="IDS_COM_BODY_CREATE">Құру</text>
+    <text id="IDS_PB_BODY_NICKNAME">Жасырын ат</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Бөлім</text>
+    <text id="IDS_PB_BODY_SUFFIX">Лауазым</text>
+    <text id="IDS_COM_BODY_CALL">Қоңырау</text>
+    <text id="IDS_COM_BODY_SETTINGS">Қондырғылар</text>
+    <text id="IDS_COM_POP_UNKNOWN">Белгісіз</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Байланыс сақталсын ба?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Таңдаулылар</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Топтарды өзгерту</text>
+    <text id="IDS_COM_SK_SAVE">Сақтау</text>
+    <text id="IDS_PB_BODY_PROVINCE">Облыс</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Атау картасын жіберу</text>
+    <text id="IDS_COM_POP_ADDED">Қосылды</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Бейне қоңырау</text>
+    <text id="IDS_PB_BODY_HOME">Үй парағы</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Жарамсыз формат</text>
+    <text id="IDS_PB_BODY_NOTE">Ескерту</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Контакт  қондырғылары</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Дисплей  есімі  жасату</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Контактілер жойылуда...</text>
+    <text id="IDS_PB_BODY_STREET">Көше</text>
+    <text id="IDS_PB_BODY_NUMBER">Нөмір</text>
+    <text id="IDS_PB_HEADER_DETAILS">Өзгешеліктері</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Өзгерістерді алып тастау керек пе?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Пошта индексі</text>
+    <text id="IDS_COM_BODY_REMOVE">Жоғалту</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Факс (үй)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Алдымен аты</text>
+    <text id="IDS_PB_BODY_DEFAULT">Өздігінен</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Топ атауы</text>
+</string_table>
diff --git a/res/kor-KR.xml b/res/kor-KR.xml
new file mode 100644 (file)
index 0000000..b38e8e1
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">그룹</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">이름</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">직위</text>
+    <text id="IDS_PB_BODY_COMPANY">회사</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">기념일</text>
+    <text id="IDS_COM_POP_CLOSE">닫기</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">모두 선택</text>
+    <text id="IDS_COM_POP_DELETE_Q">삭제할까요?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">즐겨찾기에 추가</text>
+    <text id="IDS_PB_BODY_PHONE">전화</text>
+    <text id="IDS_COM_BODY_MESSAGE">메시지</text>
+    <text id="IDS_PB_BODY_LAST_NAME">성</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">연락처 저장</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">휴대폰(회사)</text>
+    <text id="IDS_PB_SK_CANCEL">취소</text>
+    <text id="IDS_COM_SK_NEW">추가</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">중간 이름</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">대표 이메일로 지정</text>
+    <text id="IDS_PB_BODY_OTHER">기타</text>
+    <text id="IDS_COM_POP_REMOVED">제거되었습니다</text>
+    <text id="IDS_PB_BODY_COUNTRY">국가</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">동료</text>
+    <text id="IDS_COM_POP_SUCCESS">완료되었습니다</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">생일</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">모든 연락처</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">미지정</text>
+    <text id="IDS_COM_SK_DONE">완료</text>
+    <text id="IDS_PB_BODY_MOBILE">휴대폰</text>
+    <text id="IDS_COM_BODY_EMAIL">이메일</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">내장 메모리에 저장 공간이 없습니다</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">그룹 선택</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">전화번호가 바르지 않습니다</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">구성원 추가</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">연락처가 없습니다</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">사진 삭제</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">성 먼저</text>
+    <text id="IDS_PB_OPT_VIEW">보기</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">생년월일이 바르지 않습니다</text>
+    <text id="IDS_PB_BODY_WORK">회사</text>
+    <text id="IDS_COM_SK_EDIT">편집</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">이메일 주소가 바르지 않습니다</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">모둠이 없습니다</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">연락처에 추가</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">대표 번호로 지정</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">추가 정보</text>
+    <text id="IDS_COM_POP_SELECTED">선택되었습니다</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">비어 있음</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">사진 촬영</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">그룹 추가</text>
+    <text id="IDS_COM_SK_DELETE">삭제</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">팩스(회사)</text>
+    <text id="IDS_PB_BODY_RINGTONE">벨소리</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">친구</text>
+    <text id="IDS_PB_BODY_ADDRESS">주소</text>
+    <text id="IDS_COM_BODY_COPY">복사</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">자주 사용하는 연락처 목록이 없습니다</text>
+    <text id="IDS_COM_BODY_CONTACTS">연락처</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">연락처 선택</text>
+    <text id="IDS_PB_BODY_PAGER">호출기</text>
+    <text id="IDS_MP_POP_INVALID_FILE">바르지 않은 파일입니다</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">메신저</text>
+    <text id="IDS_COM_BODY_GALLERY">갤러리</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">휴대폰(집)</text>
+    <text id="IDS_COM_BODY_SEARCH">검색</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">사용 중인 이름입니다</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">가족</text>
+    <text id="IDS_PB_BODY_CITY">도시</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">이름</text>
+    <text id="IDS_COM_BODY_CREATE">추가</text>
+    <text id="IDS_PB_BODY_NICKNAME">별명</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">부서</text>
+    <text id="IDS_PB_BODY_SUFFIX">호칭</text>
+    <text id="IDS_COM_BODY_CALL">통화</text>
+    <text id="IDS_COM_BODY_SETTINGS">설정</text>
+    <text id="IDS_COM_POP_UNKNOWN">알 수 없음</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">연락처를 저장할까요?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">즐겨찾기</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">그룹 편집</text>
+    <text id="IDS_COM_SK_SAVE">저장</text>
+    <text id="IDS_PB_BODY_PROVINCE">지역</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">명함 전송</text>
+    <text id="IDS_COM_POP_ADDED">추가되었습니다</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">영상통화</text>
+    <text id="IDS_PB_BODY_HOME">집</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">형식이 바르지 않습니다</text>
+    <text id="IDS_PB_BODY_NOTE">노트</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">연락처 설정</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">이름 표기 순서</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">연락처 삭제 중...</text>
+    <text id="IDS_PB_BODY_STREET">거리</text>
+    <text id="IDS_PB_BODY_NUMBER">번호</text>
+    <text id="IDS_PB_HEADER_DETAILS">상세 정보</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">변경사항을 저장하지 않고 종료할까요?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">우편번호</text>
+    <text id="IDS_COM_BODY_REMOVE">제거</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">팩스(집)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">이름 먼저</text>
+    <text id="IDS_PB_BODY_DEFAULT">기본</text>
+    <text id="IDS_COM_SK_OK">확인</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">그룹 이름</text>
+</string_table>
diff --git a/res/lav-LV.xml b/res/lav-LV.xml
new file mode 100644 (file)
index 0000000..93f1693
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupas</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Vārds</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Amata nosaukums</text>
+    <text id="IDS_PB_BODY_COMPANY">Uzņēmums</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Jubileja</text>
+    <text id="IDS_COM_POP_CLOSE">Aizvērt</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Izv. visu</text>
+    <text id="IDS_COM_POP_DELETE_Q">Vai dzēst?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Pievienot izlasēm</text>
+    <text id="IDS_PB_BODY_PHONE">Tālrunis</text>
+    <text id="IDS_COM_BODY_MESSAGE">Ziņa</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Uzvārds</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Saglabāt kontaktu</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobilā tālruņa numurs (darba)</text>
+    <text id="IDS_PB_SK_CANCEL">Atcelt</text>
+    <text id="IDS_COM_SK_NEW">Jauns</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Otrs vārds</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Atzīmēt kā noklusējuma e-pastu</text>
+    <text id="IDS_PB_BODY_OTHER">Cits</text>
+    <text id="IDS_COM_POP_REMOVED">Noņemts</text>
+    <text id="IDS_PB_BODY_COUNTRY">Valsts</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Darba biedri</text>
+    <text id="IDS_COM_POP_SUCCESS">Veiksmīgi</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Dzimšanas diena</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Visi kontakti</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nav piešķirts</text>
+    <text id="IDS_COM_SK_DONE">Gatavs</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobilais</text>
+    <text id="IDS_COM_BODY_EMAIL">E-pasts</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Ierīces krātuve ir pilna</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Atlasīt grupu</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Nederīgs numurs</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Piev.dal.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Kontaktu nav</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Noņemt fotoattēlu</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Vispirms uzvārds</text>
+    <text id="IDS_PB_OPT_VIEW">Skatīt</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Nederīgs dzimšanas datums</text>
+    <text id="IDS_PB_BODY_WORK">Darbā</text>
+    <text id="IDS_COM_SK_EDIT">Rediģēt</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Nederīga e-pasta adrese</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nav grupas</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Pievienot kontaktiem</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Atzīmēt kā noklusējuma numuru</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Papildinformācija</text>
+    <text id="IDS_COM_POP_SELECTED">Izvēlēts</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tukšs</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotografēt</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Jauna grupa</text>
+    <text id="IDS_COM_SK_DELETE">Dzēst</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faksa numurs (darba)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Zvana signāls</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Draugi</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adrese</text>
+    <text id="IDS_COM_BODY_COPY">Kopēt</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nav izlašu</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakti</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Kontaktu izvēle</text>
+    <text id="IDS_PB_BODY_PAGER">Peidžera numurs</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Nederīgs fails</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Tūlītējā ziņapmaiņa</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerija</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobilā tālruņa numurs (mājas)</text>
+    <text id="IDS_COM_BODY_SEARCH">Meklēt</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Grupas nosaukums jau tiek lietots</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Ģimene</text>
+    <text id="IDS_PB_BODY_CITY">Pilsēta</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nosaukums</text>
+    <text id="IDS_COM_BODY_CREATE">Izveidot</text>
+    <text id="IDS_PB_BODY_NICKNAME">Segvārds</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Nodaļa</text>
+    <text id="IDS_PB_BODY_SUFFIX">Piedēklis</text>
+    <text id="IDS_COM_BODY_CALL">Zvans</text>
+    <text id="IDS_COM_BODY_SETTINGS">Iestatījumi</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nezināms</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Vai saglabāt kontaktu?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Izlase</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Rediģēt grupas</text>
+    <text id="IDS_COM_SK_SAVE">Saglabāt</text>
+    <text id="IDS_PB_BODY_PROVINCE">Province</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Sūtīt vizītkarti</text>
+    <text id="IDS_COM_POP_ADDED">Pievienots</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videozvans</text>
+    <text id="IDS_PB_BODY_HOME">Mājas</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Nederīgs formāts</text>
+    <text id="IDS_PB_BODY_NOTE">Piezīme</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontakta iestatījumi</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Parādāmā vārda secība</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Dzēš kontaktus...</text>
+    <text id="IDS_PB_BODY_STREET">Iela</text>
+    <text id="IDS_PB_BODY_NUMBER">Numurs</text>
+    <text id="IDS_PB_HEADER_DETAILS">Dati</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Vai atmest izmaiņas?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Pasta indekss</text>
+    <text id="IDS_COM_BODY_REMOVE">Noņemt</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faksa numurs (mājas)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Vispirms vārds</text>
+    <text id="IDS_PB_BODY_DEFAULT">Noklusējums</text>
+    <text id="IDS_COM_SK_OK">Labi</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Grupas nosaukums</text>
+</string_table>
diff --git a/res/lit-LT.xml b/res/lit-LT.xml
new file mode 100644 (file)
index 0000000..38c63db
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupės</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Vardas</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Pareigos</text>
+    <text id="IDS_PB_BODY_COMPANY">Įmonė</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Sukaktis</text>
+    <text id="IDS_COM_POP_CLOSE">Uždaryti</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Pasirinkti viską</text>
+    <text id="IDS_COM_POP_DELETE_Q">Ar trinti?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Įtraukti į parankinius</text>
+    <text id="IDS_PB_BODY_PHONE">Telefonas</text>
+    <text id="IDS_COM_BODY_MESSAGE">Žinutė</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Pavardė</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Išsaugoti adresatą</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobilusis (darbo)</text>
+    <text id="IDS_PB_SK_CANCEL">Atšaukti</text>
+    <text id="IDS_COM_SK_NEW">Naujas</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Antras vardas</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Pažymėti kaip numatytąjį el. paštą</text>
+    <text id="IDS_PB_BODY_OTHER">Kiti</text>
+    <text id="IDS_COM_POP_REMOVED">Pašalinta</text>
+    <text id="IDS_PB_BODY_COUNTRY">Šalis</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Bendradarbiai</text>
+    <text id="IDS_COM_POP_SUCCESS">Pavyko</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Gimtadienis</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Visi adresatai</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nepriskirta</text>
+    <text id="IDS_COM_SK_DONE">Atlikta</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobilusis</text>
+    <text id="IDS_COM_BODY_EMAIL">El. paštas</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Įrenginio atmintis pilna</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Pasirinkti grupę</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Neteisingas numeris</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Prid.narį</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Nėra adresatų</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Šalinti nuotrauką</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Pirmiausia pavardė</text>
+    <text id="IDS_PB_OPT_VIEW">Rodyti</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Neteisinga gimimo data</text>
+    <text id="IDS_PB_BODY_WORK">Darbas</text>
+    <text id="IDS_COM_SK_EDIT">Redaguoti</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neteisingas el. pašto adresas</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nėra grupės</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Įtraukti į adresatus</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Pažymėti kaip numatytąjį skaičių</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Daugiau informacijos</text>
+    <text id="IDS_COM_POP_SELECTED">Pasirinkta</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tuščia</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotografuoti</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nauja grupė</text>
+    <text id="IDS_COM_SK_DELETE">Trinti</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faksas (darbo)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Skambėjimo tonas</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Draugai</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresas</text>
+    <text id="IDS_COM_BODY_COPY">Kopijuoti</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nėra parankinių</text>
+    <text id="IDS_COM_BODY_CONTACTS">Adresatai</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Pasirinkite adresatus</text>
+    <text id="IDS_PB_BODY_PAGER">Pranešimų gaviklis</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Netinkamas failas</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Tiesioginis pranešiklis</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerija</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobilusis telefonas (namų)</text>
+    <text id="IDS_COM_BODY_SEARCH">Ieškoti</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Grupės pavadinimas jau naudojamas</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Šeima</text>
+    <text id="IDS_PB_BODY_CITY">Miestas</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Pavadinimas</text>
+    <text id="IDS_COM_BODY_CREATE">Kurti</text>
+    <text id="IDS_PB_BODY_NICKNAME">Slapyvardis</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Skyrius</text>
+    <text id="IDS_PB_BODY_SUFFIX">Priesaga</text>
+    <text id="IDS_COM_BODY_CALL">Skambutis</text>
+    <text id="IDS_COM_BODY_SETTINGS">Nustat.</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nežinomas</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Išsaugoti adresatą?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Parankiniai</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Redaguoti grupes</text>
+    <text id="IDS_COM_SK_SAVE">Išsaug.</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincija</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Siųsti vardo kortelę</text>
+    <text id="IDS_COM_POP_ADDED">Pridėta</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Vaizdo skambutis</text>
+    <text id="IDS_PB_BODY_HOME">Namų</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Netinkamas formatas</text>
+    <text id="IDS_PB_BODY_NOTE">Pastaba</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Adresatų nustatymai</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Vardų rodymo tvarka</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Trinami adresatai...</text>
+    <text id="IDS_PB_BODY_STREET">Gatvė</text>
+    <text id="IDS_PB_BODY_NUMBER">Numeris</text>
+    <text id="IDS_PB_HEADER_DETAILS">Išsami informacija</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Naikinti pakeitimus?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Pašto kodas</text>
+    <text id="IDS_COM_BODY_REMOVE">Šalinti</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faksas (namų)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Pirmiausia vardas</text>
+    <text id="IDS_PB_BODY_DEFAULT">Numatytoji</text>
+    <text id="IDS_COM_SK_OK">Gerai</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Grupės pavadinimas</text>
+</string_table>
diff --git a/res/mkd-MK.xml b/res/mkd-MK.xml
new file mode 100644 (file)
index 0000000..f70f958
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Групи</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Име</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Работно место</text>
+    <text id="IDS_PB_BODY_COMPANY">Фирма</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Годишнина</text>
+    <text id="IDS_COM_POP_CLOSE">Затвори</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Избери ги сите</text>
+    <text id="IDS_COM_POP_DELETE_Q">Да се избрише?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Додај во омилени</text>
+    <text id="IDS_PB_BODY_PHONE">Телефон</text>
+    <text id="IDS_COM_BODY_MESSAGE">Порака</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Презиме</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Сочувај запис во</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Мобилен (Работа)</text>
+    <text id="IDS_PB_SK_CANCEL">Откажи</text>
+    <text id="IDS_COM_SK_NEW">Нова</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Татково име</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Означи како основен email</text>
+    <text id="IDS_PB_BODY_OTHER">Друго</text>
+    <text id="IDS_COM_POP_REMOVED">Отстрането</text>
+    <text id="IDS_PB_BODY_COUNTRY">Држава</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Колеги</text>
+    <text id="IDS_COM_POP_SUCCESS">Успешно</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Роденден</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Сите записи</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Не е назначено</text>
+    <text id="IDS_COM_SK_DONE">Готово</text>
+    <text id="IDS_PB_BODY_MOBILE">Мобилен</text>
+    <text id="IDS_COM_BODY_EMAIL">Е-пошта</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Меморијата на уредот е полна</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Избери група</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Погрешен број</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Дод. член</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Нема записи</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Избриши фотографија</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Прво презимето</text>
+    <text id="IDS_PB_OPT_VIEW">Прикажи</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Неправилен датум на раѓање</text>
+    <text id="IDS_PB_BODY_WORK">Работа</text>
+    <text id="IDS_COM_SK_EDIT">Измени</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Погрешна email адреса</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Без група</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Додај во Контакти</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Означи како основен број</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Повеќе информации</text>
+    <text id="IDS_COM_POP_SELECTED">Избрано</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Празно</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Фотографирај</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Нова група</text>
+    <text id="IDS_COM_SK_DELETE">Избриши</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Факс (Работа)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Тон на ѕвонење</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Пријатели</text>
+    <text id="IDS_PB_BODY_ADDRESS">Адреса</text>
+    <text id="IDS_COM_BODY_COPY">Копирај</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Нема омилени</text>
+    <text id="IDS_COM_BODY_CONTACTS">Именик</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Избери контакти</text>
+    <text id="IDS_PB_BODY_PAGER">Пејџер</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Неправилен фајл</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Инстант пораки</text>
+    <text id="IDS_COM_BODY_GALLERY">Галерија</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Мобилен телефон (домашен)</text>
+    <text id="IDS_COM_BODY_SEARCH">Пребарување</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Името на групата веќе се користи</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Семејство</text>
+    <text id="IDS_PB_BODY_CITY">Град</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Име</text>
+    <text id="IDS_COM_BODY_CREATE">Ново</text>
+    <text id="IDS_PB_BODY_NICKNAME">Прекар</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Оддел</text>
+    <text id="IDS_PB_BODY_SUFFIX">Наставка</text>
+    <text id="IDS_COM_BODY_CALL">Повик</text>
+    <text id="IDS_COM_BODY_SETTINGS">Опции</text>
+    <text id="IDS_COM_POP_UNKNOWN">Непознато</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Да се сними контактот?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Омилени</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Измени групи</text>
+    <text id="IDS_COM_SK_SAVE">Сочувај</text>
+    <text id="IDS_PB_BODY_PROVINCE">Подрачје</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Прати картичка со име</text>
+    <text id="IDS_COM_POP_ADDED">Додадено</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Видео повик</text>
+    <text id="IDS_PB_BODY_HOME">Дома</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Погрешен формат</text>
+    <text id="IDS_PB_BODY_NOTE">Забелешка</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Параметри за контактот</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Редослед за прикажување на имињата</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Се бришат контакти...</text>
+    <text id="IDS_PB_BODY_STREET">Улица</text>
+    <text id="IDS_PB_BODY_NUMBER">Број</text>
+    <text id="IDS_PB_HEADER_DETAILS">Детали</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Отфрли промени?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Поштенски број</text>
+    <text id="IDS_COM_BODY_REMOVE">Отстрани</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Факс (домашен)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Првo името</text>
+    <text id="IDS_PB_BODY_DEFAULT">Основно</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Име на група</text>
+</string_table>
diff --git a/res/nld-NL.xml b/res/nld-NL.xml
new file mode 100644 (file)
index 0000000..3a7e7ee
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Groepen</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Voornaam</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Functie</text>
+    <text id="IDS_PB_BODY_COMPANY">Bedrijf</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Verjaardag</text>
+    <text id="IDS_COM_POP_CLOSE">Sluiten</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Alles selecteren</text>
+    <text id="IDS_COM_POP_DELETE_Q">Verwijderen?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Toevoegen aan favorieten</text>
+    <text id="IDS_PB_BODY_PHONE">Telefoon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Bericht</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Achternaam</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Contact opslaan in</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobiel (werk)</text>
+    <text id="IDS_PB_SK_CANCEL">Annuleren</text>
+    <text id="IDS_COM_SK_NEW">Nieuw</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Tweede naam</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Markeren als standaard e-mailadres</text>
+    <text id="IDS_PB_BODY_OTHER">Overig</text>
+    <text id="IDS_COM_POP_REMOVED">Verwijderd</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Medewerkers</text>
+    <text id="IDS_COM_POP_SUCCESS">Voltooid</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Verjaardag</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Alle contacten</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Niet toegewezen</text>
+    <text id="IDS_COM_SK_DONE">Gereed</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobiel</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Apparaatopslag is vol</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Groep selecteren</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Ongeldig getal</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Nw lid</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Geen contactpersonen</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Foto verwijderen</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Achternaam eerst</text>
+    <text id="IDS_PB_OPT_VIEW">Weergeven</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ongeldige geboortedatum</text>
+    <text id="IDS_PB_BODY_WORK">Zakelijk</text>
+    <text id="IDS_COM_SK_EDIT">Bewerken</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ongeldig e-mailadres</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Geen groep</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Voeg toe aan contacten</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Markeren als standaardnummer</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Meer informatie</text>
+    <text id="IDS_COM_POP_SELECTED">Geselecteerd</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Leeg</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Foto maken</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nieuwe groep</text>
+    <text id="IDS_COM_SK_DELETE">Wissen</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (werk)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Beltoon</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Vrienden</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adres</text>
+    <text id="IDS_COM_BODY_COPY">Kopiëren</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Geen favorieten</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacten</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Contacten selecteren</text>
+    <text id="IDS_PB_BODY_PAGER">Pieper</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Ongeldig bestand</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant Messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerij</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobiel (privé)</text>
+    <text id="IDS_COM_BODY_SEARCH">Zoeken</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Groepsnaam bestaat al</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familie</text>
+    <text id="IDS_PB_BODY_CITY">Plaats</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Naam</text>
+    <text id="IDS_COM_BODY_CREATE">Nieuw</text>
+    <text id="IDS_PB_BODY_NICKNAME">Bijnaam</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Afdeling</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_BODY_CALL">Oproep</text>
+    <text id="IDS_COM_BODY_SETTINGS">Instellingen</text>
+    <text id="IDS_COM_POP_UNKNOWN">Onbekend</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Contact opslaan?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favo- rieten</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Groepen bewerken</text>
+    <text id="IDS_COM_SK_SAVE">Opslaan</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincie</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Visitekaartje verzenden</text>
+    <text id="IDS_COM_POP_ADDED">Toegevoegd</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video-oproep</text>
+    <text id="IDS_PB_BODY_HOME">Privé</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Ongeldige indeling</text>
+    <text id="IDS_PB_BODY_NOTE">Notitie</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Instellingen contacten</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Weergavevolgorde</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Contacten verwijderen...</text>
+    <text id="IDS_PB_BODY_STREET">Straat</text>
+    <text id="IDS_PB_BODY_NUMBER">Nummer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Gegevens</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Wilt u de wijzigingen negeren?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postcode</text>
+    <text id="IDS_COM_BODY_REMOVE">Verwijderen</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (privé)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Voornaam eerst</text>
+    <text id="IDS_PB_BODY_DEFAULT">Standaard</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Groepsnaam</text>
+</string_table>
diff --git a/res/nob-NO.xml b/res/nob-NO.xml
new file mode 100644 (file)
index 0000000..a069f6b
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupper</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Fornavn</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Jobbtittel</text>
+    <text id="IDS_PB_BODY_COMPANY">Selskap</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Årsdag</text>
+    <text id="IDS_COM_POP_CLOSE">Lukk</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Merk alt</text>
+    <text id="IDS_COM_POP_DELETE_Q">Slette?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Legg til i favoritter</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Melding</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Etternavn</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Lagre kontakt i</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (arbeid)</text>
+    <text id="IDS_PB_SK_CANCEL">Avbryt</text>
+    <text id="IDS_COM_SK_NEW">Ny</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Mellomnavn</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Merk som standard e-post</text>
+    <text id="IDS_PB_BODY_OTHER">Annet</text>
+    <text id="IDS_COM_POP_REMOVED">Fjernet</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Medarbeidere</text>
+    <text id="IDS_COM_POP_SUCCESS">Fullført</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Fødselsdag</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Alle kontakter</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Ikke tilordnet</text>
+    <text id="IDS_COM_SK_DONE">Utført</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-post</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Enhetsminnet er fullt</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Velg gruppe</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Ugyldig nummer</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Tilf. medl.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ingen kontakter</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Fjern bilde</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Etternavn først</text>
+    <text id="IDS_PB_OPT_VIEW">Vis</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ugyldig fødselsdato</text>
+    <text id="IDS_PB_BODY_WORK">Arbeid</text>
+    <text id="IDS_COM_SK_EDIT">Rediger</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ugyldig e-postadresse</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ingen grupper</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Legg til i Kontakter</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Merk som standardnummer</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Mer informasjon</text>
+    <text id="IDS_COM_POP_SELECTED">Valgt</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tom</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Ta et bilde</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Ny gruppe</text>
+    <text id="IDS_COM_SK_DELETE">Slett</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (arbeid)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ringetone</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Venner</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</text>
+    <text id="IDS_COM_BODY_COPY">Kopier</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ingen favoritter</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakter</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Velg kontakter</text>
+    <text id="IDS_PB_BODY_PAGER">Personsøker</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Ugyldig fil</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Direktemeldinger</text>
+    <text id="IDS_COM_BODY_GALLERY">Galleri</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (hjem)</text>
+    <text id="IDS_COM_BODY_SEARCH">Søk</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Gruppenavn allerede i bruk</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familie</text>
+    <text id="IDS_PB_BODY_CITY">Sted</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Navn</text>
+    <text id="IDS_COM_BODY_CREATE">Opprett</text>
+    <text id="IDS_PB_BODY_NICKNAME">Kallenavn</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Avdeling</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffiks</text>
+    <text id="IDS_COM_BODY_CALL">Ring</text>
+    <text id="IDS_COM_BODY_SETTINGS">Innstillinger</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ukjent</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Lagre kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favor.</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Rediger grupper</text>
+    <text id="IDS_COM_SK_SAVE">Lagre</text>
+    <text id="IDS_PB_BODY_PROVINCE">Region</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Send visittkort</text>
+    <text id="IDS_COM_POP_ADDED">Lagt til</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videoanrop</text>
+    <text id="IDS_PB_BODY_HOME">Hjem</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Ugyldig format</text>
+    <text id="IDS_PB_BODY_NOTE">Merknad</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontaktinnstillinger</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Rekkefølge på visningsnavn</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Sletter kontakter ...</text>
+    <text id="IDS_PB_BODY_STREET">Gate</text>
+    <text id="IDS_PB_BODY_NUMBER">Nummer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detaljer</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Forkaste endringer?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postnummer</text>
+    <text id="IDS_COM_BODY_REMOVE">Fjern</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (hjem)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Fornavn først</text>
+    <text id="IDS_PB_BODY_DEFAULT">Standard</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Gruppenavn</text>
+</string_table>
diff --git a/res/pol-PL.xml b/res/pol-PL.xml
new file mode 100644 (file)
index 0000000..06db113
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">Adres URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupy</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Imię</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Stanowisko</text>
+    <text id="IDS_PB_BODY_COMPANY">Firma</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Rocznica</text>
+    <text id="IDS_COM_POP_CLOSE">Zamknij</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Zaznacz wszystko</text>
+    <text id="IDS_COM_POP_DELETE_Q">Usunąć?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Dodaj do Ulubionych</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Wiadomość</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Nazwisko</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Zapisz kontakt w</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Telefon komórkowy (praca)</text>
+    <text id="IDS_PB_SK_CANCEL">Anuluj</text>
+    <text id="IDS_COM_SK_NEW">Nowy</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Drugie imię</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Zaznacz jako domyślny adres e-mail</text>
+    <text id="IDS_PB_BODY_OTHER">Inne</text>
+    <text id="IDS_COM_POP_REMOVED">Usunięto</text>
+    <text id="IDS_PB_BODY_COUNTRY">Kraj</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Współpracownicy</text>
+    <text id="IDS_COM_POP_SUCCESS">Zakończono</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Urodziny</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Wszystkie kontakty</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nieprzypisane</text>
+    <text id="IDS_COM_SK_DONE">Gotowe</text>
+    <text id="IDS_PB_BODY_MOBILE">Komórkowy</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Pamięć urządzenia pełna</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Wybierz grupę</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Nieprawidłowy numer</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Dod. czł.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Brak kontaktów</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Usuń zdjęcie</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Najpierw nazwisko</text>
+    <text id="IDS_PB_OPT_VIEW">Podgląd</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Nieprawidłowa data urodzenia</text>
+    <text id="IDS_PB_BODY_WORK">Praca</text>
+    <text id="IDS_COM_SK_EDIT">Edytuj</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Nieprawidłowy adres e-mail</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Brak grupy</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Dodaj do kontaktów</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Zaznacz jako numer domyślny</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Więcej informacji</text>
+    <text id="IDS_COM_POP_SELECTED">Wybrane</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Pusta</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Zrób zdjęcie</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nowa grupa</text>
+    <text id="IDS_COM_SK_DELETE">Usuń</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (praca)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Dzwonek</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Przyjaciele</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adres</text>
+    <text id="IDS_COM_BODY_COPY">Kopiuj</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Brak ulubionych</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakty</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Wybierz kontakty</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Nieprawidłowy plik</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Komunikator błyskawiczny</text>
+    <text id="IDS_COM_BODY_GALLERY">Galeria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Komórkowy (prywatny)</text>
+    <text id="IDS_COM_BODY_SEARCH">Szukaj</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nazwa grupy już istnieje</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Rodzina</text>
+    <text id="IDS_PB_BODY_CITY">Miasto</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nazwa</text>
+    <text id="IDS_COM_BODY_CREATE">Utwórz</text>
+    <text id="IDS_PB_BODY_NICKNAME">Pseudonim</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Dział</text>
+    <text id="IDS_PB_BODY_SUFFIX">Nick</text>
+    <text id="IDS_COM_BODY_CALL">Połączenie</text>
+    <text id="IDS_COM_BODY_SETTINGS">Ustawienia</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nieznana</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Zapisać kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Ulubione</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Edytuj grupy</text>
+    <text id="IDS_COM_SK_SAVE">Zapisz</text>
+    <text id="IDS_PB_BODY_PROVINCE">Okręg</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Wyślij wizytówkę</text>
+    <text id="IDS_COM_POP_ADDED">Dodano</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Połączenie wideo</text>
+    <text id="IDS_PB_BODY_HOME">Domowy</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Nieprawidłowy format</text>
+    <text id="IDS_PB_BODY_NOTE">Notatka</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Ustawienia kontaktów</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Kolejność wyświetlania nazw</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Usuwanie kontaktów...</text>
+    <text id="IDS_PB_BODY_STREET">Ulica</text>
+    <text id="IDS_PB_BODY_NUMBER">Numer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Szczegóły</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Odrzucić zmiany?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Kod pocztowy</text>
+    <text id="IDS_COM_BODY_REMOVE">Usuń</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (prywatny)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Najpierw imię</text>
+    <text id="IDS_PB_BODY_DEFAULT">Domyślna</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nazwa grupy</text>
+</string_table>
diff --git a/res/por-BR.xml b/res/por-BR.xml
new file mode 100644 (file)
index 0000000..7ef9a57
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupos</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Primeiro nome</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Título do trabalho</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Data comemorativa</text>
+    <text id="IDS_COM_POP_CLOSE">Fechar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Selecionar tudo</text>
+    <text id="IDS_COM_POP_DELETE_Q">Apagar?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Adicionar aos favoritos</text>
+    <text id="IDS_PB_BODY_PHONE">Telefone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mensagem</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Sobrenome</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Salvar contatos no</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Celular (Trabalho)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</text>
+    <text id="IDS_COM_SK_NEW">Novo</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Segundo nome</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcar como e-mail padrão</text>
+    <text id="IDS_PB_BODY_OTHER">Outros</text>
+    <text id="IDS_COM_POP_REMOVED">Removido</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Colegas de trabalho</text>
+    <text id="IDS_COM_POP_SUCCESS">Sucesso</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Aniversário</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Todos os contatos</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Não atribuído</text>
+    <text id="IDS_COM_SK_DONE">Concluído</text>
+    <text id="IDS_PB_BODY_MOBILE">Celular</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Armazenamento do dispositivo cheio</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Selecionar grupo</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Número inválido</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Adic. membro</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Sem contatos</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Remover foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Sobrenome primeiro</text>
+    <text id="IDS_PB_OPT_VIEW">Ver</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Data de nascimento inválida</text>
+    <text id="IDS_PB_BODY_WORK">Trabalho</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Endereço de e-mail inválido</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nenhum grupo</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Adicionar aos Contatos</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcar como número padrão</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Mais informações</text>
+    <text id="IDS_COM_POP_SELECTED">Selecionado</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vazio</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Tirar uma foto</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Novo grupo</text>
+    <text id="IDS_COM_SK_DELETE">Apagar</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Trabalho)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Toque</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amigos</text>
+    <text id="IDS_PB_BODY_ADDRESS">Endereço</text>
+    <text id="IDS_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nenhum favorito</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contatos</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Selecionar contatos</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Arquivo inválido</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Mensagens instantâneas</text>
+    <text id="IDS_COM_BODY_GALLERY">Galeria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Celular (casa)</text>
+    <text id="IDS_COM_BODY_SEARCH">Pesquisar</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nome de grupo já utilizado</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Família</text>
+    <text id="IDS_PB_BODY_CITY">Cidade</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_COM_BODY_CREATE">Criar</text>
+    <text id="IDS_PB_BODY_NICKNAME">Apelido</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufixo</text>
+    <text id="IDS_COM_BODY_CALL">Chamada</text>
+    <text id="IDS_COM_BODY_SETTINGS">Config.</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconhecido</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Salvar contato?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoritos</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editar grupos</text>
+    <text id="IDS_COM_SK_SAVE">Salvar</text>
+    <text id="IDS_PB_BODY_PROVINCE">Província</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Enviar cartão de visita</text>
+    <text id="IDS_COM_POP_ADDED">Adicionado</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videochamada</text>
+    <text id="IDS_PB_BODY_HOME">Casa</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formato inválido</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Contatos</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordem de exibição</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Apagando contatos...</text>
+    <text id="IDS_PB_BODY_STREET">Rua</text>
+    <text id="IDS_PB_BODY_NUMBER">Número</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalhes</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Excluir alterações?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Remover</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (casa)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Nome próprio primeiro</text>
+    <text id="IDS_PB_BODY_DEFAULT">Padrão</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nome do grupo</text>
+</string_table>
diff --git a/res/por-PT.xml b/res/por-PT.xml
new file mode 100644 (file)
index 0000000..3ff3c95
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupos</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nome próprio</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Título</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Aniversário</text>
+    <text id="IDS_COM_POP_CLOSE">Fechar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccionar tudo</text>
+    <text id="IDS_COM_POP_DELETE_Q">Eliminar?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Adicionar aos favoritos</text>
+    <text id="IDS_PB_BODY_PHONE">Telefone</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mensagem</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Apelido</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Guardar contacto em</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Telemóvel (Trabalho)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</text>
+    <text id="IDS_COM_SK_NEW">Nova</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Segundo nome</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcar como e-mail padrão</text>
+    <text id="IDS_PB_BODY_OTHER">Outro</text>
+    <text id="IDS_COM_POP_REMOVED">Removido</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Colegas de trabalho</text>
+    <text id="IDS_COM_POP_SUCCESS">Concluído</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Data de nascimento</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Todos os contactos</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Não atribuído</text>
+    <text id="IDS_COM_SK_DONE">Concluído</text>
+    <text id="IDS_PB_BODY_MOBILE">Telemóvel</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Armazenamento do dispositivo cheio</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Seleccionar grupo</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Número inválido</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Adicionar</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Sem contactos</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Remover foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Apelido primeiro</text>
+    <text id="IDS_PB_OPT_VIEW">Ver</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Data de nascimento inválida</text>
+    <text id="IDS_PB_BODY_WORK">Empresa</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Endereço de e-mail inválido</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nenhum grupo</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Adicionar aos contactos</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcar como número padrão</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Mais informações</text>
+    <text id="IDS_COM_POP_SELECTED">Seleccionado</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vazio</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Tirar uma fotografia</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Novo grupo</text>
+    <text id="IDS_COM_SK_DELETE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Trabalho)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Tom de toque</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amigos</text>
+    <text id="IDS_PB_BODY_ADDRESS">Endereço</text>
+    <text id="IDS_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nenhuns favoritos</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contactos</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Seleccionar contactos</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Ficheiro inválido</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Mensagens instantâneas</text>
+    <text id="IDS_COM_BODY_GALLERY">Galeria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Telemóvel (casa)</text>
+    <text id="IDS_COM_BODY_SEARCH">Procurar</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Nome do grupo já existente</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Família</text>
+    <text id="IDS_PB_BODY_CITY">Cidade</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_COM_BODY_CREATE">Criar</text>
+    <text id="IDS_PB_BODY_NICKNAME">Pseudónimo</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufixo</text>
+    <text id="IDS_COM_BODY_CALL">Ligar</text>
+    <text id="IDS_COM_BODY_SETTINGS">Definições</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconhecido</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Guardar contacto?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favorit.</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editar\ngrupos</text>
+    <text id="IDS_COM_SK_SAVE">Guardar</text>
+    <text id="IDS_PB_BODY_PROVINCE">Província</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Enviar cartão de visita</text>
+    <text id="IDS_COM_POP_ADDED">Adicionado</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Vídeochamada</text>
+    <text id="IDS_PB_BODY_HOME">Pessoal</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formato inválido</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Definições dos contactos</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordem do nome de apresentação</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">A eliminar contactos...</text>
+    <text id="IDS_PB_BODY_STREET">Rua</text>
+    <text id="IDS_PB_BODY_NUMBER">Número</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalhes</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Eliminar alterações?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Remover</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (casa)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Nome próprio primeiro</text>
+    <text id="IDS_PB_BODY_DEFAULT">Padrão</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nome do grupo</text>
+</string_table>
diff --git a/res/ron-RO.xml b/res/ron-RO.xml
new file mode 100644 (file)
index 0000000..2793a40
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupuri</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nume</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Funcţie</text>
+    <text id="IDS_PB_BODY_COMPANY">Firmă</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Aniversare</text>
+    <text id="IDS_COM_POP_CLOSE">Închidere</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Selectare toate</text>
+    <text id="IDS_COM_POP_DELETE_Q">Ştergeţi?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Adăugare la favorite</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mesaj</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Prenume</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Salvare contact în</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (Serviciu)</text>
+    <text id="IDS_PB_SK_CANCEL">Anulare</text>
+    <text id="IDS_COM_SK_NEW">Nou</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Al doilea nume</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcare ca e-mail implicit</text>
+    <text id="IDS_PB_BODY_OTHER">Alte</text>
+    <text id="IDS_COM_POP_REMOVED">Eliminat</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ţară</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Colegi de muncă</text>
+    <text id="IDS_COM_POP_SUCCESS">Succes</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Zi de naştere</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Toate contactele</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Neatribuit</text>
+    <text id="IDS_COM_SK_DONE">Gata</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Spaţiu de stocare pe dispozitiv plin</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Selectare grup</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Număr incorect</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Ad. memb.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Niciun contact</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Eliminare foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Mai întâi numele</text>
+    <text id="IDS_PB_OPT_VIEW">Vizualizare</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Data naşterii nevalidă</text>
+    <text id="IDS_PB_BODY_WORK">Serviciu</text>
+    <text id="IDS_COM_SK_EDIT">Editare</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adresă e-mail invalidă</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Niciun grup</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Adăugare la Contacte</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcare ca număr implicit</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Mai multe informaţii</text>
+    <text id="IDS_COM_POP_SELECTED">Selectat</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Liber</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotografiere</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Grup nou</text>
+    <text id="IDS_COM_SK_DELETE">Ştergere</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (Serviciu)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ton sonerie</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Prieteni</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresă</text>
+    <text id="IDS_COM_BODY_COPY">Copiere</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Niciun element favorit</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contacte</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Selectare contacte</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Fişier incorect</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Instant Messenger</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerie</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (Domiciliu)</text>
+    <text id="IDS_COM_BODY_SEARCH">Căutare</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Numele grupului deja în uz</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familie</text>
+    <text id="IDS_PB_BODY_CITY">Oraş</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nume</text>
+    <text id="IDS_COM_BODY_CREATE">Creare</text>
+    <text id="IDS_PB_BODY_NICKNAME">Pseudonim</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departament</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufix</text>
+    <text id="IDS_COM_BODY_CALL">Apel</text>
+    <text id="IDS_COM_BODY_SETTINGS">Setări</text>
+    <text id="IDS_COM_POP_UNKNOWN">Necunoscut</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Salvaţi contactul?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favorite</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editare grupuri</text>
+    <text id="IDS_COM_SK_SAVE">Salvare</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincie</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Trimitere carte de vizită</text>
+    <text id="IDS_COM_POP_ADDED">Adăugat</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Apel video</text>
+    <text id="IDS_PB_BODY_HOME">Acasă</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Format incorect</text>
+    <text id="IDS_PB_BODY_NOTE">Notă</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Setări contact</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Ordine afişare nume</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Se şterg contactele...</text>
+    <text id="IDS_PB_BODY_STREET">Stradă</text>
+    <text id="IDS_PB_BODY_NUMBER">Număr</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalii</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Renunţare la modificări?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Cod poştal</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminare</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (Domiciliu)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Mai întâi prenumele</text>
+    <text id="IDS_PB_BODY_DEFAULT">Implicit</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nume grup</text>
+</string_table>
diff --git a/res/rus-RU.xml b/res/rus-RU.xml
new file mode 100644 (file)
index 0000000..8c042ed
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Группы</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Имя</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Должность</text>
+    <text id="IDS_PB_BODY_COMPANY">Компания</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Годовщина</text>
+    <text id="IDS_COM_POP_CLOSE">Закрыть</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Выделить все</text>
+    <text id="IDS_COM_POP_DELETE_Q">Удалить?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Добавить в избранное</text>
+    <text id="IDS_PB_BODY_PHONE">Телефон</text>
+    <text id="IDS_COM_BODY_MESSAGE">Сообщение</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Фамилия</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Место сохранения контакта</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Мобильный (рабочий)</text>
+    <text id="IDS_PB_SK_CANCEL">Отмена</text>
+    <text id="IDS_COM_SK_NEW">Создать</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Отчество</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Сделать адресом по умолчан.</text>
+    <text id="IDS_PB_BODY_OTHER">Другое</text>
+    <text id="IDS_COM_POP_REMOVED">Удалено</text>
+    <text id="IDS_PB_BODY_COUNTRY">Страна</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Коллеги</text>
+    <text id="IDS_COM_POP_SUCCESS">Успешно</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">День рождения</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Все контакты</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Не назначено</text>
+    <text id="IDS_COM_SK_DONE">Готово</text>
+    <text id="IDS_PB_BODY_MOBILE">Мобильный</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Память устройства заполнена</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Выберите группу</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Неправильный номер</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Добавить</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Нет контактов</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Удалить фото</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Сначала фамилия</text>
+    <text id="IDS_PB_OPT_VIEW">Просмотреть</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Недопустимая дата рождения</text>
+    <text id="IDS_PB_BODY_WORK">Рабочий</text>
+    <text id="IDS_COM_SK_EDIT">Изменить</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Неправильный адрес эл. почты</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Группа отсутствует</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Добавить в Контакты</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Сделать номером по умолчанию</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Подробнее</text>
+    <text id="IDS_COM_POP_SELECTED">Выбрано</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Пусто</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Сделать фото</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Новая группа</text>
+    <text id="IDS_COM_SK_DELETE">Удалить</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Факс (рабочий)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Мелодия звонка</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Друзья</text>
+    <text id="IDS_PB_BODY_ADDRESS">Адрес</text>
+    <text id="IDS_COM_BODY_COPY">Копировать</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Нет избранных</text>
+    <text id="IDS_COM_BODY_CONTACTS">Контакты</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Выберите контакты</text>
+    <text id="IDS_PB_BODY_PAGER">Пейджер</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Недопустимый файл</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Чат</text>
+    <text id="IDS_COM_BODY_GALLERY">Галерея</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Мобильный (домашний)</text>
+    <text id="IDS_COM_BODY_SEARCH">Поиск</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Имя группы уже используется</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Семья</text>
+    <text id="IDS_PB_BODY_CITY">Город</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Имя</text>
+    <text id="IDS_COM_BODY_CREATE">Создать</text>
+    <text id="IDS_PB_BODY_NICKNAME">Псевдоним</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Отдел</text>
+    <text id="IDS_PB_BODY_SUFFIX">Суффикс</text>
+    <text id="IDS_COM_BODY_CALL">Вызов</text>
+    <text id="IDS_COM_BODY_SETTINGS">Настройки</text>
+    <text id="IDS_COM_POP_UNKNOWN">Неизвестно</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Сохранить контакт?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Избранное</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Изменить группы</text>
+    <text id="IDS_COM_SK_SAVE">Соxранить</text>
+    <text id="IDS_PB_BODY_PROVINCE">Область</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Отправить визитку</text>
+    <text id="IDS_COM_POP_ADDED">Добавлено</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Видеовызов</text>
+    <text id="IDS_PB_BODY_HOME">Домашний</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Неверный формат</text>
+    <text id="IDS_PB_BODY_NOTE">Заметка</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Настройки контактов</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Сортировка контактов</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Удаление контактов...</text>
+    <text id="IDS_PB_BODY_STREET">Улица</text>
+    <text id="IDS_PB_BODY_NUMBER">Число</text>
+    <text id="IDS_PB_HEADER_DETAILS">Свойства</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Отменить изменения?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Почтовый индекс</text>
+    <text id="IDS_COM_BODY_REMOVE">Удалить</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Факс (домашний)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Сначала имя</text>
+    <text id="IDS_PB_BODY_DEFAULT">По умолчанию</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Имя группы</text>
+</string_table>
diff --git a/res/screen-density-xhigh/00_Nocontents_picture.png b/res/screen-density-xhigh/00_Nocontents_picture.png
new file mode 100644 (file)
index 0000000..f848bcb
Binary files /dev/null and b/res/screen-density-xhigh/00_Nocontents_picture.png differ
diff --git a/res/screen-density-xhigh/00_Nocontents_text.png b/res/screen-density-xhigh/00_Nocontents_text.png
new file mode 100644 (file)
index 0000000..97a1ad4
Binary files /dev/null and b/res/screen-density-xhigh/00_Nocontents_text.png differ
diff --git a/res/screen-density-xhigh/00_Nocontents_unnamed.png b/res/screen-density-xhigh/00_Nocontents_unnamed.png
new file mode 100755 (executable)
index 0000000..52648e5
Binary files /dev/null and b/res/screen-density-xhigh/00_Nocontents_unnamed.png differ
diff --git a/res/screen-density-xhigh/00_button_expand_closed.png b/res/screen-density-xhigh/00_button_expand_closed.png
new file mode 100644 (file)
index 0000000..01e9686
Binary files /dev/null and b/res/screen-density-xhigh/00_button_expand_closed.png differ
diff --git a/res/screen-density-xhigh/00_button_expand_closed_press.png b/res/screen-density-xhigh/00_button_expand_closed_press.png
new file mode 100644 (file)
index 0000000..61efa1a
Binary files /dev/null and b/res/screen-density-xhigh/00_button_expand_closed_press.png differ
diff --git a/res/screen-density-xhigh/00_button_expand_minus_press.png b/res/screen-density-xhigh/00_button_expand_minus_press.png
new file mode 100644 (file)
index 0000000..9a85015
Binary files /dev/null and b/res/screen-density-xhigh/00_button_expand_minus_press.png differ
diff --git a/res/screen-density-xhigh/00_button_expand_opened.png b/res/screen-density-xhigh/00_button_expand_opened.png
new file mode 100644 (file)
index 0000000..8202492
Binary files /dev/null and b/res/screen-density-xhigh/00_button_expand_opened.png differ
diff --git a/res/screen-density-xhigh/00_button_expand_opened_press.png b/res/screen-density-xhigh/00_button_expand_opened_press.png
new file mode 100644 (file)
index 0000000..25add12
Binary files /dev/null and b/res/screen-density-xhigh/00_button_expand_opened_press.png differ
diff --git a/res/screen-density-xhigh/00_button_refresh.png b/res/screen-density-xhigh/00_button_refresh.png
new file mode 100644 (file)
index 0000000..b30ed58
Binary files /dev/null and b/res/screen-density-xhigh/00_button_refresh.png differ
diff --git a/res/screen-density-xhigh/00_button_refresh_press.png b/res/screen-density-xhigh/00_button_refresh_press.png
new file mode 100644 (file)
index 0000000..4fb20ca
Binary files /dev/null and b/res/screen-density-xhigh/00_button_refresh_press.png differ
diff --git a/res/screen-density-xhigh/00_button_rename.png b/res/screen-density-xhigh/00_button_rename.png
new file mode 100644 (file)
index 0000000..1ffbfd7
Binary files /dev/null and b/res/screen-density-xhigh/00_button_rename.png differ
diff --git a/res/screen-density-xhigh/00_button_rename_press.png b/res/screen-density-xhigh/00_button_rename_press.png
new file mode 100644 (file)
index 0000000..b3916d0
Binary files /dev/null and b/res/screen-density-xhigh/00_button_rename_press.png differ
diff --git a/res/screen-density-xhigh/00_circle_button.png b/res/screen-density-xhigh/00_circle_button.png
new file mode 100644 (file)
index 0000000..cb91a99
Binary files /dev/null and b/res/screen-density-xhigh/00_circle_button.png differ
diff --git a/res/screen-density-xhigh/00_circle_button_delete.png b/res/screen-density-xhigh/00_circle_button_delete.png
new file mode 100644 (file)
index 0000000..794397c
Binary files /dev/null and b/res/screen-density-xhigh/00_circle_button_delete.png differ
diff --git a/res/screen-density-xhigh/00_circle_button_delete_press.png b/res/screen-density-xhigh/00_circle_button_delete_press.png
new file mode 100644 (file)
index 0000000..d58cef6
Binary files /dev/null and b/res/screen-density-xhigh/00_circle_button_delete_press.png differ
diff --git a/res/screen-density-xhigh/00_circle_button_press.png b/res/screen-density-xhigh/00_circle_button_press.png
new file mode 100644 (file)
index 0000000..cb12641
Binary files /dev/null and b/res/screen-density-xhigh/00_circle_button_press.png differ
diff --git a/res/screen-density-xhigh/00_icon_favorite_off.png b/res/screen-density-xhigh/00_icon_favorite_off.png
new file mode 100644 (file)
index 0000000..a4a799a
Binary files /dev/null and b/res/screen-density-xhigh/00_icon_favorite_off.png differ
diff --git a/res/screen-density-xhigh/00_icon_favorite_on.png b/res/screen-density-xhigh/00_icon_favorite_on.png
new file mode 100644 (file)
index 0000000..876bea3
Binary files /dev/null and b/res/screen-density-xhigh/00_icon_favorite_on.png differ
diff --git a/res/screen-density-xhigh/00_icon_more.png b/res/screen-density-xhigh/00_icon_more.png
new file mode 100644 (file)
index 0000000..49a6d06
Binary files /dev/null and b/res/screen-density-xhigh/00_icon_more.png differ
diff --git a/res/screen-density-xhigh/00_icon_more_press.png b/res/screen-density-xhigh/00_icon_more_press.png
new file mode 100644 (file)
index 0000000..3a13509
Binary files /dev/null and b/res/screen-density-xhigh/00_icon_more_press.png differ
diff --git a/res/screen-density-xhigh/C02_Icon_ICQ.png b/res/screen-density-xhigh/C02_Icon_ICQ.png
new file mode 100644 (file)
index 0000000..0006b70
Binary files /dev/null and b/res/screen-density-xhigh/C02_Icon_ICQ.png differ
diff --git a/res/screen-density-xhigh/C02_Icon_others.png b/res/screen-density-xhigh/C02_Icon_others.png
new file mode 100644 (file)
index 0000000..2d4941c
Binary files /dev/null and b/res/screen-density-xhigh/C02_Icon_others.png differ
diff --git a/res/screen-density-xhigh/C02_Icon_windows_live.png b/res/screen-density-xhigh/C02_Icon_windows_live.png
new file mode 100644 (file)
index 0000000..61ebd19
Binary files /dev/null and b/res/screen-density-xhigh/C02_Icon_windows_live.png differ
diff --git a/res/screen-density-xhigh/C02_Icon_yahoo.png b/res/screen-density-xhigh/C02_Icon_yahoo.png
new file mode 100644 (file)
index 0000000..dc37859
Binary files /dev/null and b/res/screen-density-xhigh/C02_Icon_yahoo.png differ
diff --git a/res/screen-density-xhigh/C02_button_icon_dropbox.png b/res/screen-density-xhigh/C02_button_icon_dropbox.png
new file mode 100755 (executable)
index 0000000..8ac3cce
Binary files /dev/null and b/res/screen-density-xhigh/C02_button_icon_dropbox.png differ
diff --git a/res/screen-density-xhigh/C02_caller_id_icon_add.png b/res/screen-density-xhigh/C02_caller_id_icon_add.png
new file mode 100644 (file)
index 0000000..9ea8e99
Binary files /dev/null and b/res/screen-density-xhigh/C02_caller_id_icon_add.png differ
diff --git a/res/screen-density-xhigh/C02_caller_id_icon_add_dim.png b/res/screen-density-xhigh/C02_caller_id_icon_add_dim.png
new file mode 100644 (file)
index 0000000..01c8b98
Binary files /dev/null and b/res/screen-density-xhigh/C02_caller_id_icon_add_dim.png differ
diff --git a/res/screen-density-xhigh/C02_caller_id_icon_add_press.png b/res/screen-density-xhigh/C02_caller_id_icon_add_press.png
new file mode 100644 (file)
index 0000000..2c3b5a9
Binary files /dev/null and b/res/screen-density-xhigh/C02_caller_id_icon_add_press.png differ
diff --git a/res/screen-density-xhigh/C02_caller_id_icon_camera.png b/res/screen-density-xhigh/C02_caller_id_icon_camera.png
new file mode 100644 (file)
index 0000000..5cd5f03
Binary files /dev/null and b/res/screen-density-xhigh/C02_caller_id_icon_camera.png differ
diff --git a/res/screen-density-xhigh/C02_caller_id_icon_camera_dim.png b/res/screen-density-xhigh/C02_caller_id_icon_camera_dim.png
new file mode 100644 (file)
index 0000000..91fe3f1
Binary files /dev/null and b/res/screen-density-xhigh/C02_caller_id_icon_camera_dim.png differ
diff --git a/res/screen-density-xhigh/C02_caller_id_icon_camera_press.png b/res/screen-density-xhigh/C02_caller_id_icon_camera_press.png
new file mode 100644 (file)
index 0000000..7050a24
Binary files /dev/null and b/res/screen-density-xhigh/C02_caller_id_icon_camera_press.png differ
diff --git a/res/screen-density-xhigh/C02_circle_button.png b/res/screen-density-xhigh/C02_circle_button.png
new file mode 100644 (file)
index 0000000..5e58d0d
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_button.png differ
diff --git a/res/screen-density-xhigh/C02_circle_button_press.png b/res/screen-density-xhigh/C02_circle_button_press.png
new file mode 100644 (file)
index 0000000..8ea6881
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_button_press.png differ
diff --git a/res/screen-density-xhigh/C02_circle_icon_call.png b/res/screen-density-xhigh/C02_circle_icon_call.png
new file mode 100644 (file)
index 0000000..3df40d6
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_icon_call.png differ
diff --git a/res/screen-density-xhigh/C02_circle_icon_call_press.png b/res/screen-density-xhigh/C02_circle_icon_call_press.png
new file mode 100644 (file)
index 0000000..c1bed80
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_icon_call_press.png differ
diff --git a/res/screen-density-xhigh/C02_circle_icon_sms.png b/res/screen-density-xhigh/C02_circle_icon_sms.png
new file mode 100644 (file)
index 0000000..a9d0ad6
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_icon_sms.png differ
diff --git a/res/screen-density-xhigh/C02_circle_icon_sms_press.png b/res/screen-density-xhigh/C02_circle_icon_sms_press.png
new file mode 100644 (file)
index 0000000..ff6b712
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_icon_sms_press.png differ
diff --git a/res/screen-density-xhigh/C02_circle_icon_vt-call.png b/res/screen-density-xhigh/C02_circle_icon_vt-call.png
new file mode 100644 (file)
index 0000000..0acd851
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_icon_vt-call.png differ
diff --git a/res/screen-density-xhigh/C02_circle_icon_vt-call_press.png b/res/screen-density-xhigh/C02_circle_icon_vt-call_press.png
new file mode 100644 (file)
index 0000000..8a8a2d2
Binary files /dev/null and b/res/screen-density-xhigh/C02_circle_icon_vt-call_press.png differ
diff --git a/res/screen-density-xhigh/C02_created_photo_bg.png b/res/screen-density-xhigh/C02_created_photo_bg.png
new file mode 100644 (file)
index 0000000..2d4921d
Binary files /dev/null and b/res/screen-density-xhigh/C02_created_photo_bg.png differ
diff --git a/res/screen-density-xhigh/C02_tab_icon_contacts.png b/res/screen-density-xhigh/C02_tab_icon_contacts.png
new file mode 100644 (file)
index 0000000..b509c40
Binary files /dev/null and b/res/screen-density-xhigh/C02_tab_icon_contacts.png differ
diff --git a/res/screen-density-xhigh/C02_tab_icon_contacts_press.png b/res/screen-density-xhigh/C02_tab_icon_contacts_press.png
new file mode 100644 (file)
index 0000000..41667d0
Binary files /dev/null and b/res/screen-density-xhigh/C02_tab_icon_contacts_press.png differ
diff --git a/res/screen-density-xhigh/C02_tab_icon_favourites.png b/res/screen-density-xhigh/C02_tab_icon_favourites.png
new file mode 100644 (file)
index 0000000..3a4b2c0
Binary files /dev/null and b/res/screen-density-xhigh/C02_tab_icon_favourites.png differ
diff --git a/res/screen-density-xhigh/C02_tab_icon_favourites_press.png b/res/screen-density-xhigh/C02_tab_icon_favourites_press.png
new file mode 100644 (file)
index 0000000..b8828ab
Binary files /dev/null and b/res/screen-density-xhigh/C02_tab_icon_favourites_press.png differ
diff --git a/res/screen-density-xhigh/C02_tab_icon_groups.png b/res/screen-density-xhigh/C02_tab_icon_groups.png
new file mode 100644 (file)
index 0000000..96cc001
Binary files /dev/null and b/res/screen-density-xhigh/C02_tab_icon_groups.png differ
diff --git a/res/screen-density-xhigh/C02_tab_icon_groups_press.png b/res/screen-density-xhigh/C02_tab_icon_groups_press.png
new file mode 100644 (file)
index 0000000..19fc737
Binary files /dev/null and b/res/screen-density-xhigh/C02_tab_icon_groups_press.png differ
diff --git a/res/screen-size-normal/IDL_CONTACT_DETAILS_FORM.xml b/res/screen-size-normal/IDL_CONTACT_DETAILS_FORM.xml
new file mode 100644 (file)
index 0000000..da40084
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="3.0.0.201209071526" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_CONTACT_DETAILS_FORM">
+        <property backgroundColor="" backgroundColorOpacity="100" orientation="Portrait" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR|FORM_STYLE_FOOTER" type="NONE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR|FORM_STYLE_FOOTER" type="NONE"/>
+    </Form>
+    <Footer>
+        <property backgroundBitmapPath="" color="" colorOpacity="100" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" footerStyle="FOOTER_STYLE_BUTTON_TEXT" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" showBackButton="true"/>
+        <itemSet>
+            <footerItem actionId="10" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_COM_SK_EDIT"/>
+            <footerItem actionId="11" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_COM_SK_DELETE"/>
+        </itemSet>
+    </Footer>
+</Scene>
diff --git a/res/screen-size-normal/IDL_GROUP_EDITOR_FORM.xml b/res/screen-size-normal/IDL_GROUP_EDITOR_FORM.xml
new file mode 100644 (file)
index 0000000..d8fc14b
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+<Scene Bversion="3.0.0.201212051713" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_GROUP_EDITOR_FORM">
+        <property backgroundColor="" backgroundColorOpacity="100" orientation="Portrait" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR|FORM_STYLE_HEADER|FORM_STYLE_FOOTER" type="NONE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR|FORM_STYLE_HEADER|FORM_STYLE_FOOTER" type="NONE"/>
+    </Form>
+    <Header>
+        <property backgroundBitmapPath="" color="" colorOpacity="100" descriptionText="" descriptionTextColor="" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" headerStyle="HEADER_STYLE_TITLE" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" titleIconPath="" titleText="" titleTextColor=""/>
+        <itemSet/>
+    </Header>
+    <Footer>
+        <property backgroundBitmapPath="" color="" colorOpacity="100" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" footerStyle="FOOTER_STYLE_BUTTON_TEXT" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" showBackButton="true"/>
+        <itemSet>
+            <footerItem actionId="0" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_COM_SK_SAVE"/>
+        </itemSet>
+    </Footer>
+</Scene>
diff --git a/res/screen-size-normal/IDL_GROUP_SELECTOR_FORM.xml b/res/screen-size-normal/IDL_GROUP_SELECTOR_FORM.xml
new file mode 100644 (file)
index 0000000..b9d840f
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201307161751" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_GROUP_SELECTOR_FORM">
+        <property backgroundColor="" backgroundColorOpacity="100" notificationTrayOpenEnabled="false" orientation="Portrait" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_PORTRAIT_INDICATOR|FORM_STYLE_HEADER|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_PORTRAIT_INDICATOR|FORM_STYLE_HEADER|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Footer>
+        <property backgroundBitmapPath="" color="" colorOpacity="100" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" footerStyle="FOOTER_STYLE_BUTTON_TEXT" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" showBackButton="false" showMenuButton="false"/>
+        <itemSet>
+            <footerItem accessibilityHint="" actionId="12" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_PB_SK_CANCEL"/>
+            <footerItem accessibilityHint="" actionId="11" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_COM_SK_DONE"/>
+        </itemSet>
+    </Footer>
+    <Header>
+        <property accessibilityHint="" backgroundBitmapPath="" color="" colorOpacity="100" descriptionText="" descriptionTextColor="" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" headerStyle="HEADER_STYLE_TITLE" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" showBackButton="false" titleIconPath="" titleText="::IDS_PB_HEADER_SELECT_GROUP" titleTextColor=""/>
+        <itemSet/>
+    </Header>
+    <ListView id="IDC_LISTVIEW" parent="IDL_GROUP_SELECTOR_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" bitmapPathOfEmptyList="" colorOfEmptyListText="" itemDivider="true" itemDividerColor="" listScrollStyle="SCROLL_STYLE_FADE_OUT" scrollInputMode="SCROLL_INPUT_MODE_ALLOW_ANY_DIRECTION" sweepEnabled="false" textOfEmptyList="::IDS_PB_HEADER_NO_GROUP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="963.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="720.0" x="0.0" y="0.0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="124.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="730.0" x="218.0" y="205.0"/>
+    </ListView>
+    <Label id="IDC_LABEL" parent="IDL_GROUP_SELECTOR_FORM">
+        <property accessibilityHint="" backgroundBitmapPath="" backgroundColor="#444444" backgroundColorOpacity="100" horizontalAlign="ALIGN_LEFT" leftMargin="16" text="::IDS_COM_POP_SELECTED" textColor="#FFFFFF" textSize="32.0" textStyle="LABEL_TEXT_STYLE_BOLD" topMargin="0" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_GROUP_SELECTOR_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="48.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="720.0" x="0.0" y="978.0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533.0" x="190.0" y="411.0"/>
+    </Label>
+</Scene>
diff --git a/res/slk-SK.xml b/res/slk-SK.xml
new file mode 100644 (file)
index 0000000..7c7999b
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Skupiny</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Meno</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Pracovná funkcia</text>
+    <text id="IDS_PB_BODY_COMPANY">Spoločnosť</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Výročie</text>
+    <text id="IDS_COM_POP_CLOSE">Zavrieť</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vybrať všetky</text>
+    <text id="IDS_COM_POP_DELETE_Q">Odstrániť?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Pridať do obľúbených položiek</text>
+    <text id="IDS_PB_BODY_PHONE">Telefón</text>
+    <text id="IDS_COM_BODY_MESSAGE">Správa</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Priezvisko</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Uložiť kontakt do</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (práca)</text>
+    <text id="IDS_PB_SK_CANCEL">Zrušiť</text>
+    <text id="IDS_COM_SK_NEW">Nové</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Druhé krstné meno</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Označiť ako predvolený e-mail</text>
+    <text id="IDS_PB_BODY_OTHER">Ďalšie</text>
+    <text id="IDS_COM_POP_REMOVED">Odstránené</text>
+    <text id="IDS_PB_BODY_COUNTRY">Krajina</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Spolupracovníci</text>
+    <text id="IDS_COM_POP_SUCCESS">Dokončené</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Narodeniny</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Všetky kontakty</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nepriradené</text>
+    <text id="IDS_COM_SK_DONE">Hotovo</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobilné</text>
+    <text id="IDS_COM_BODY_EMAIL">E-mail</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Ukladací priestor zariadenia je plný</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Vyberte skupinu</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Neplatné číslo</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Pr. člena</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Žiadne kontakty</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Odstrániť fotografiu</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Najprv priezvisko</text>
+    <text id="IDS_PB_OPT_VIEW">Zobraziť</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Neplatný dátum narodenia</text>
+    <text id="IDS_PB_BODY_WORK">Práca</text>
+    <text id="IDS_COM_SK_EDIT">Upraviť</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neplatná e-mailová adresa</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Žiadna skupina</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Pridať do kontaktov</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Označiť ako predvolené číslo</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Ďalšie informácie</text>
+    <text id="IDS_COM_POP_SELECTED">Vybrané</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Prázdne</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotografovať</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nová skupina</text>
+    <text id="IDS_COM_SK_DELETE">Odstrániť</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (práca)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Zvonenie</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Priatelia</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</text>
+    <text id="IDS_COM_BODY_COPY">Kopírovať</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Žiadne obľúbené položky</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakty</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Vybrať kontakty</text>
+    <text id="IDS_PB_BODY_PAGER">Pager</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Neplatný súbor</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Odosielanie okamž. správ</text>
+    <text id="IDS_COM_BODY_GALLERY">Galéria</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (domov)</text>
+    <text id="IDS_COM_BODY_SEARCH">Hľadať</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Názov skupiny už existuje</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Rodina</text>
+    <text id="IDS_PB_BODY_CITY">Mesto</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Meno</text>
+    <text id="IDS_COM_BODY_CREATE">Vytvoriť</text>
+    <text id="IDS_PB_BODY_NICKNAME">Prezývka</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Oddelenie</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titul za menom</text>
+    <text id="IDS_COM_BODY_CALL">Hovor</text>
+    <text id="IDS_COM_BODY_SETTINGS">Nastavenia</text>
+    <text id="IDS_COM_POP_UNKNOWN">Neznáme</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Uložiť kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Obľúbené</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Upraviť skupiny</text>
+    <text id="IDS_COM_SK_SAVE">Uložiť</text>
+    <text id="IDS_PB_BODY_PROVINCE">Kraj</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Odoslať vizitku</text>
+    <text id="IDS_COM_POP_ADDED">Pridané</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videohovor</text>
+    <text id="IDS_PB_BODY_HOME">Domov</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Neplatný formát</text>
+    <text id="IDS_PB_BODY_NOTE">Poznámka</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Nastavenia kontaktov</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Poradie zobrazovania mien</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Odstraňujú sa kontakty...</text>
+    <text id="IDS_PB_BODY_STREET">Ulica</text>
+    <text id="IDS_PB_BODY_NUMBER">Číslo</text>
+    <text id="IDS_PB_HEADER_DETAILS">Podrobnosti</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Zrušiť zmeny?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">PSČ</text>
+    <text id="IDS_COM_BODY_REMOVE">Odstrániť</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (domov)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Najprv krstné meno</text>
+    <text id="IDS_PB_BODY_DEFAULT">Predvolený</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Názov skupiny</text>
+</string_table>
diff --git a/res/slv-SI.xml b/res/slv-SI.xml
new file mode 100644 (file)
index 0000000..8672e3a
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Skupine</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ime</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Službeni naziv</text>
+    <text id="IDS_PB_BODY_COMPANY">Podjetje</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Obletnica</text>
+    <text id="IDS_COM_POP_CLOSE">Zapri</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Izberi vse</text>
+    <text id="IDS_COM_POP_DELETE_Q">Izbrišem?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Dodaj med priljubljene</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Sporočilo</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Priimek</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Stik shrani v</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobilni telefon (služba)</text>
+    <text id="IDS_PB_SK_CANCEL">Prekliči</text>
+    <text id="IDS_COM_SK_NEW">Novo</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Srednje ime</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Označi kot privzeto e-pošto</text>
+    <text id="IDS_PB_BODY_OTHER">Drugo</text>
+    <text id="IDS_COM_POP_REMOVED">Odstranjeno</text>
+    <text id="IDS_PB_BODY_COUNTRY">Država</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Sodelavci</text>
+    <text id="IDS_COM_POP_SUCCESS">Uspeh</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Rojstni dan</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Vse vizitke</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Ni dodeljeno</text>
+    <text id="IDS_COM_SK_DONE">Končano</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobilni</text>
+    <text id="IDS_COM_BODY_EMAIL">E-pošta</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Pomnilnik naprave je poln</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Izberite skupino</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Neveljavna številka</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Dod.člana</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ni stikov</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Odstrani fotografijo</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Najprej priimek</text>
+    <text id="IDS_PB_OPT_VIEW">Prikaži</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Neveljaven datum rojstva</text>
+    <text id="IDS_PB_BODY_WORK">Službeni</text>
+    <text id="IDS_COM_SK_EDIT">Uredi</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neveljaven e-poštni naslov</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ni skupine</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Dodaj nov stik</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Označi kot privzeto številko</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Več informacij</text>
+    <text id="IDS_COM_POP_SELECTED">Izbrano</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Izprazni</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Naredi fotografijo</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nova skupina</text>
+    <text id="IDS_COM_SK_DELETE">Izbriši</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (služba)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Melodija zvonjenja</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Prijatelji</text>
+    <text id="IDS_PB_BODY_ADDRESS">Naslov</text>
+    <text id="IDS_COM_BODY_COPY">Kopiraj</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ni priljubljenih</text>
+    <text id="IDS_COM_BODY_CONTACTS">Imenik</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Izberi stike</text>
+    <text id="IDS_PB_BODY_PAGER">Pozivnik</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Neveljavna datoteka</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Neposredno sporočanje</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerija</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobilni telefon (doma)</text>
+    <text id="IDS_COM_BODY_SEARCH">Iskanje</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Ime skupine že obstaja</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Družina</text>
+    <text id="IDS_PB_BODY_CITY">Mesto</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Ime</text>
+    <text id="IDS_COM_BODY_CREATE">Ustvari</text>
+    <text id="IDS_PB_BODY_NICKNAME">Vzdevek</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Oddelek</text>
+    <text id="IDS_PB_BODY_SUFFIX">Pripona</text>
+    <text id="IDS_COM_BODY_CALL">Klic</text>
+    <text id="IDS_COM_BODY_SETTINGS">Nastavitve</text>
+    <text id="IDS_COM_POP_UNKNOWN">Neznano</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Shranim stik?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Priljub.</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Uredi skupine</text>
+    <text id="IDS_COM_SK_SAVE">Shrani</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provinca</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Pošlji vizitko</text>
+    <text id="IDS_COM_POP_ADDED">Dodano</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video klic</text>
+    <text id="IDS_PB_BODY_HOME">Domači</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Neveljaven zapis</text>
+    <text id="IDS_PB_BODY_NOTE">Beležka</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Nastavitve stika</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Zaporedje prikazanega imena</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Brisanje stikov ...</text>
+    <text id="IDS_PB_BODY_STREET">Ulica</text>
+    <text id="IDS_PB_BODY_NUMBER">Številka</text>
+    <text id="IDS_PB_HEADER_DETAILS">Podrobnosti</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Želite zavreči spremembe?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poštna številka</text>
+    <text id="IDS_COM_BODY_REMOVE">Odstrani</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (doma)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Najprej ime</text>
+    <text id="IDS_PB_BODY_DEFAULT">Privzeto</text>
+    <text id="IDS_COM_SK_OK">V redu</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Ime skupine</text>
+</string_table>
diff --git a/res/spa-ES.xml b/res/spa-ES.xml
new file mode 100644 (file)
index 0000000..21eb4cc
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupos</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nombre</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Cargo</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Aniversario</text>
+    <text id="IDS_COM_POP_CLOSE">Cerrar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccionar todo</text>
+    <text id="IDS_COM_POP_DELETE_Q">¿Eliminar?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Añadir a favoritos</text>
+    <text id="IDS_PB_BODY_PHONE">Teléfono</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mensajes</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Apellidos</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Guardar contacto en</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Móvil (trabajo)</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</text>
+    <text id="IDS_COM_SK_NEW">Nuevo</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Segundo nombre</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcar como correo electrónico predeterminado</text>
+    <text id="IDS_PB_BODY_OTHER">Otro</text>
+    <text id="IDS_COM_POP_REMOVED">Eliminado</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Compañeros de trabajo</text>
+    <text id="IDS_COM_POP_SUCCESS">Finalizado</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Cumpleaños</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Todos los contactos</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">No asignado</text>
+    <text id="IDS_COM_SK_DONE">Hecho</text>
+    <text id="IDS_PB_BODY_MOBILE">Móvil</text>
+    <text id="IDS_COM_BODY_EMAIL">Correo electrónico</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Almacenamiento de dispositivo lleno</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Seleccionar grupo</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Número no válido</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Añ miembr</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ningún contacto</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Eliminar foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Apellido en primer lugar</text>
+    <text id="IDS_PB_OPT_VIEW">Ver</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Fecha de nacimiento incorrecta</text>
+    <text id="IDS_PB_BODY_WORK">Profesional</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Dirección de correo electrónico no válida</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ningún grupo</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Agregar a Contactos</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcar como número predeterminado</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Más información</text>
+    <text id="IDS_COM_POP_SELECTED">Seleccionado</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vacío</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Hacer foto</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Grupo nuevo</text>
+    <text id="IDS_COM_SK_DELETE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (trabajo)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Melodía</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amigos</text>
+    <text id="IDS_PB_BODY_ADDRESS">Dirección</text>
+    <text id="IDS_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ningún favorito</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contactos</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Seleccionar contactos</text>
+    <text id="IDS_PB_BODY_PAGER">Buscapersonas</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Archivo no válido</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Mensajería instantánea</text>
+    <text id="IDS_COM_BODY_GALLERY">Galería</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Móvil (casa)</text>
+    <text id="IDS_COM_BODY_SEARCH">Buscar</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">El nombre del grupo ya existe</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familia</text>
+    <text id="IDS_PB_BODY_CITY">Ciudad</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nombre</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_NICKNAME">Alias</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufijo</text>
+    <text id="IDS_COM_BODY_CALL">Llamar</text>
+    <text id="IDS_COM_BODY_SETTINGS">Ajustes</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconocido</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">¿Guardar contacto?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoritos</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editar grupos</text>
+    <text id="IDS_COM_SK_SAVE">Guardar</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincia</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Enviar tarjeta de presentación</text>
+    <text id="IDS_COM_POP_ADDED">Añadido</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videollamada</text>
+    <text id="IDS_PB_BODY_HOME">Casa</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formato no válido</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Ajustes de contactos</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Orden de mostrar nombre</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Eliminando contactos...</text>
+    <text id="IDS_PB_BODY_STREET">Calle</text>
+    <text id="IDS_PB_BODY_NUMBER">Número</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalles</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">¿Descartar los cambios?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (casa)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Nombre en primer lugar</text>
+    <text id="IDS_PB_BODY_DEFAULT">Predeterminado</text>
+    <text id="IDS_COM_SK_OK">Aceptar</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nombre de grupo</text>
+</string_table>
diff --git a/res/spa-MX.xml b/res/spa-MX.xml
new file mode 100644 (file)
index 0000000..11de2d6
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupos</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Nombre</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Puesto</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Aniversario</text>
+    <text id="IDS_COM_POP_CLOSE">Cerrar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Todo</text>
+    <text id="IDS_COM_POP_DELETE_Q">¿Eliminar?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Añadir a favoritos</text>
+    <text id="IDS_PB_BODY_PHONE">Dispositivo</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mensaje</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Apellido</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Guardar contacto en</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Móvil - Trabajo</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</text>
+    <text id="IDS_COM_SK_NEW">Nuevo</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Segundo nombre</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Marcar como correo predeterminado</text>
+    <text id="IDS_PB_BODY_OTHER">Otro</text>
+    <text id="IDS_COM_POP_REMOVED">Eliminado</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Compañeros de trabajo</text>
+    <text id="IDS_COM_POP_SUCCESS">Exitoso</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Cumpleaños</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Todos los contactos</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">No asignado</text>
+    <text id="IDS_COM_SK_DONE">Realizado</text>
+    <text id="IDS_PB_BODY_MOBILE">Móvil</text>
+    <text id="IDS_COM_BODY_EMAIL">Correo</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Almacenamiento de dispositivo completo</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Seleccionar grupo</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Número no válido</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Añ miembr</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Ningún contacto</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Eliminar imagen</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Apellido primero</text>
+    <text id="IDS_PB_OPT_VIEW">Ver</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Fecha de nacimiento no válida</text>
+    <text id="IDS_PB_BODY_WORK">Trabajo</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Dirección de correo no válida</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ningún grupo</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Añadir a Contactos</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Marcar como número predeterminado</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Más información</text>
+    <text id="IDS_COM_POP_SELECTED">Seleccionado</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Vacío</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Capturar imagen</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Añadir grupo</text>
+    <text id="IDS_COM_SK_DELETE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax - Trabajo</text>
+    <text id="IDS_PB_BODY_RINGTONE">Tono de llamada</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Amigos</text>
+    <text id="IDS_PB_BODY_ADDRESS">Dirección</text>
+    <text id="IDS_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ningún favorito</text>
+    <text id="IDS_COM_BODY_CONTACTS">Contactos</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Seleccionar contactos</text>
+    <text id="IDS_PB_BODY_PAGER">Localizador</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Archivo no válido</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Mensaje instantáneo</text>
+    <text id="IDS_COM_BODY_GALLERY">Galería</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Móvil - Privado</text>
+    <text id="IDS_COM_BODY_SEARCH">Buscar</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Ya existe ese nombre de grupo</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familia</text>
+    <text id="IDS_PB_BODY_CITY">Ciudad</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nombre</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_NICKNAME">Alias</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufijo</text>
+    <text id="IDS_COM_BODY_CALL">Llamada</text>
+    <text id="IDS_COM_BODY_SETTINGS">Configuración</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconocido</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">¿Guardar contacto?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoritos</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Editar grupos</text>
+    <text id="IDS_COM_SK_SAVE">Guardar</text>
+    <text id="IDS_PB_BODY_PROVINCE">Provincia</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Enviar tarjeta de presentación</text>
+    <text id="IDS_COM_POP_ADDED">Añadido</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videollam.</text>
+    <text id="IDS_PB_BODY_HOME">Casa</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Formato no válido</text>
+    <text id="IDS_PB_BODY_NOTE">Nota</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Contactos</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Mostrar por</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Eliminando contactos...</text>
+    <text id="IDS_PB_BODY_STREET">Calle</text>
+    <text id="IDS_PB_BODY_NUMBER">Número</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalles</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">¿Descartar los cambios?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax - Privado</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Nombre primero</text>
+    <text id="IDS_PB_BODY_DEFAULT">Predeterminado</text>
+    <text id="IDS_COM_SK_OK">Aceptar</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Nombre de grupo</text>
+</string_table>
diff --git a/res/srp-RS.xml b/res/srp-RS.xml
new file mode 100644 (file)
index 0000000..bc7aa8d
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupe</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ime</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Radno mesto</text>
+    <text id="IDS_PB_BODY_COMPANY">Kompanija</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Godišnjica</text>
+    <text id="IDS_COM_POP_CLOSE">Zatvori</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Izaberi sve</text>
+    <text id="IDS_COM_POP_DELETE_Q">Obriši?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Dodaj u Omiljene</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Poruka</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Prezime</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Sačuvaj kontakt u</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobilni (poslovni)</text>
+    <text id="IDS_PB_SK_CANCEL">Poništi</text>
+    <text id="IDS_COM_SK_NEW">Nova</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Srednje ime</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Označi kao podrazumevanu e-poruku</text>
+    <text id="IDS_PB_BODY_OTHER">Ostalo</text>
+    <text id="IDS_COM_POP_REMOVED">Uklonjeno</text>
+    <text id="IDS_PB_BODY_COUNTRY">Zemlja</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Saradnici</text>
+    <text id="IDS_COM_POP_SUCCESS">Uspeh</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Rođendan</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Svi kontakti</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Nedodeljeno</text>
+    <text id="IDS_COM_SK_DONE">Gotovo</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobilni</text>
+    <text id="IDS_COM_BODY_EMAIL">E-pošta</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Memorija uređaja je popunjena</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Izaberi grupu</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Neispravan broj</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Dodaj čl.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Nema kontakata</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Ukloni fotografiju</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Prvo ide prezime</text>
+    <text id="IDS_PB_OPT_VIEW">Prikaži</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Neispravan datum rođenja</text>
+    <text id="IDS_PB_BODY_WORK">Posao</text>
+    <text id="IDS_COM_SK_EDIT">Izmeni</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neispravna adresa e-pošte</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nema grupe</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Dodaj u kontakte</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Označi kao podrazumevani broj</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Više informacija</text>
+    <text id="IDS_COM_POP_SELECTED">Izabrano</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Prazno</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Snimi fotografiju</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Nova grupa</text>
+    <text id="IDS_COM_SK_DELETE">Obriši</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (poslovni)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ton zvona</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Prijatelji</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</text>
+    <text id="IDS_COM_BODY_COPY">Kopiraj</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Nema omiljenih</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakti</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Izaberi kontakte</text>
+    <text id="IDS_PB_BODY_PAGER">Pejdžer</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Neispravan fajl</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Trenutne poruke</text>
+    <text id="IDS_COM_BODY_GALLERY">Galerija</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobilni telefon (privatni)</text>
+    <text id="IDS_COM_BODY_SEARCH">Pretraži</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Ime grupe se već koristi</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Porodica</text>
+    <text id="IDS_PB_BODY_CITY">Grad</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Ime</text>
+    <text id="IDS_COM_BODY_CREATE">Kreiraj</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nadimak</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Odeljenje</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufiks</text>
+    <text id="IDS_COM_BODY_CALL">Poziv</text>
+    <text id="IDS_COM_BODY_SETTINGS">Podešavanja</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nepoznato</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Sačuvaj kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Omiljeni</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Izmeni grupe</text>
+    <text id="IDS_COM_SK_SAVE">Sačuvaj</text>
+    <text id="IDS_PB_BODY_PROVINCE">Regija</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Pošalji vizitkartu</text>
+    <text id="IDS_COM_POP_ADDED">Dodato</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video poziv</text>
+    <text id="IDS_PB_BODY_HOME">Kuća</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Neispravan format</text>
+    <text id="IDS_PB_BODY_NOTE">Beleška</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Podešavanja kontakata</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Redosled prikaza imena</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Brisanje kontakata...</text>
+    <text id="IDS_PB_BODY_STREET">Ulica</text>
+    <text id="IDS_PB_BODY_NUMBER">Broj</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detalji</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Odbaciti promene?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poštanski broj</text>
+    <text id="IDS_COM_BODY_REMOVE">Ukloni</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (privatni)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Prvo ide ime</text>
+    <text id="IDS_PB_BODY_DEFAULT">Podrazumevano</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Naziv grupe</text>
+</string_table>
diff --git a/res/swe-SE.xml b/res/swe-SE.xml
new file mode 100644 (file)
index 0000000..b0c245e
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Grupper</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Förnamn</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Befattning</text>
+    <text id="IDS_PB_BODY_COMPANY">Företag</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Årsdag</text>
+    <text id="IDS_COM_POP_CLOSE">Stäng</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Välj alla</text>
+    <text id="IDS_COM_POP_DELETE_Q">Radera?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Lägg till i favoriter</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Meddelande</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Efternamn</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Spara kontakt i</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil (arbetet)</text>
+    <text id="IDS_PB_SK_CANCEL">Avbryt</text>
+    <text id="IDS_COM_SK_NEW">Nytt</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Mellannamn</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Markera som standard-e-post</text>
+    <text id="IDS_PB_BODY_OTHER">Annat</text>
+    <text id="IDS_COM_POP_REMOVED">Borttagen</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Kollegor</text>
+    <text id="IDS_COM_POP_SUCCESS">Slutfört</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Födelsedag</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Alla kontakter</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Inte tilldelad</text>
+    <text id="IDS_COM_SK_DONE">Klar</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-post</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Enhetslagringen är full</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Välj grupp</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Ogiltigt nummer</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Ny medlem</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Inga kontakter</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Ta bort foto</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Efternamn först</text>
+    <text id="IDS_PB_OPT_VIEW">Visa</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Ogiltigt födelsedatum</text>
+    <text id="IDS_PB_BODY_WORK">Arbete</text>
+    <text id="IDS_COM_SK_EDIT">Redigera</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ogiltig e-postadress</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ingen grupp</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Lägg till i Kontakter</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Markera som huvudnummer</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Mer information</text>
+    <text id="IDS_COM_POP_SELECTED">Vald</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Tom</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Ta ett foto</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Ny grupp</text>
+    <text id="IDS_COM_SK_DELETE">Radera</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Fax (arbetet)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Ringsignal</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Vänner</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adress</text>
+    <text id="IDS_COM_BODY_COPY">Kopiera</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Inga favoriter</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontakter</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Välj kontakter</text>
+    <text id="IDS_PB_BODY_PAGER">Personsökare</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Ogiltig fil</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Snabbmeddelande</text>
+    <text id="IDS_COM_BODY_GALLERY">Galleri</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil (hem)</text>
+    <text id="IDS_COM_BODY_SEARCH">Sök</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Gruppnamnet används redan</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Familj</text>
+    <text id="IDS_PB_BODY_CITY">Ort</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Namn</text>
+    <text id="IDS_COM_BODY_CREATE">Skapa</text>
+    <text id="IDS_PB_BODY_NICKNAME">Smeknamn</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Avdelning</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_BODY_CALL">Samtal</text>
+    <text id="IDS_COM_BODY_SETTINGS">Inställningar</text>
+    <text id="IDS_COM_POP_UNKNOWN">Okänd</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Spara kontakt?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favorit.</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Redigera grupper</text>
+    <text id="IDS_COM_SK_SAVE">Spara</text>
+    <text id="IDS_PB_BODY_PROVINCE">Region</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Skicka visitkort</text>
+    <text id="IDS_COM_POP_ADDED">Tillagd</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Videosamtal</text>
+    <text id="IDS_PB_BODY_HOME">Hem</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Ogiltigt format</text>
+    <text id="IDS_PB_BODY_NOTE">Notering</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontaktinställningar</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Namnordning</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Raderar kontakter...</text>
+    <text id="IDS_PB_BODY_STREET">Gata</text>
+    <text id="IDS_PB_BODY_NUMBER">Nummer</text>
+    <text id="IDS_PB_HEADER_DETAILS">Detaljer</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Ta bort ändringar?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postnr</text>
+    <text id="IDS_COM_BODY_REMOVE">Ta bort</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Fax (hem)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Förnamn först</text>
+    <text id="IDS_PB_BODY_DEFAULT">Standard</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Gruppnamn</text>
+</string_table>
diff --git a/res/tha-TH.xml b/res/tha-TH.xml
new file mode 100644 (file)
index 0000000..48aa20d
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201305162056" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">กลุ่ม</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">ชื่อ</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">การ​ครบ​รอบ</text>
+    <text id="IDS_PB_BODY_COMPANY">บริษัท</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">ชื่อ​งาน</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">เลือก​ทั้ง​หมด</text>
+    <text id="IDS_COM_POP_CLOSE">ปิด</text>
+    <text id="IDS_COM_POP_DELETE_Q">ลบ?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">เพิ่ม​ใน​รายชื่อที่ชอบ</text>
+    <text id="IDS_PB_BODY_PHONE">โทรศัพท์</text>
+    <text id="IDS_COM_BODY_MESSAGE">ข้อ​ความ</text>
+    <text id="IDS_PB_BODY_LAST_NAME">นาม​สกุล</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">บันทึก​ราย​ชื่อ​ไป​ยัง</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">มือ​ถือ (​ที่​ทำ​งาน)</text>
+    <text id="IDS_COM_SK_NEW">ใหม่</text>
+    <text id="IDS_PB_SK_CANCEL">ยก​เลิก</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">ชื่อ​กลาง</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">เลือก​เป็น​อี​เมล์​พื้น​ฐาน</text>
+    <text id="IDS_PB_BODY_OTHER">อื่นๆ</text>
+    <text id="IDS_COM_POP_REMOVED">ลบเรียบร้อย</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">เพื่อน​ร่วม​งาน</text>
+    <text id="IDS_COM_POP_SUCCESS">เสร็จสิ้น</text>
+    <text id="IDS_PB_BODY_COUNTRY">ประเทศ</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">วัน​เกิด</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">ราย​ชื่อ​ทั้ง​หมด</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">ไม่ได้กำหนด</text>
+    <text id="IDS_COM_SK_DONE">เรียบร้อย</text>
+    <text id="IDS_PB_BODY_MOBILE">มือ​ถือ</text>
+    <text id="IDS_COM_BODY_EMAIL">อีเมล์</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">พื้นที่​จัด​เก็บ​ภาย​ใน​อุปกรณ์​เต็ม</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">เลือก​กลุ่ม</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">ตัว​เลข​ไม่​ถูก​ต้อง</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">ใส่​สมาชิก</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">ไม่​มี\n​ราย​ชื่อ</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">ลบ​รูป​ถ่าย</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">นาม​สกุล​ก่อน</text>
+    <text id="IDS_PB_OPT_VIEW">แสดง</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">วัน​เกิด​ไม่​ถูก​ต้อง</text>
+    <text id="IDS_PB_BODY_WORK">ที่​ทำ​งาน</text>
+    <text id="IDS_COM_SK_EDIT">แก้ไข</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">ที่​อยู่​อี​เมล์​ไม่​ถูก​ต้อง</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">ไม่​มี​กลุ่ม</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">เพิ่มในรายชื่อ</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">ระบุ​เป็น​เบอร์​พื้น​ฐาน</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">ข้อมูล​เพิ่ม​เติม</text>
+    <text id="IDS_COM_POP_SELECTED">เลือกแล้ว</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">ว่าง</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">ถ่าย​รูป</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">กลุ่ม​ใหม่</text>
+    <text id="IDS_COM_SK_DELETE">ลบ</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">แฟกซ์ (​ที่​ทำ​งาน)</text>
+    <text id="IDS_PB_BODY_RINGTONE">เสียง​เรียก​เข้า</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">เพื่อนๆ</text>
+    <text id="IDS_COM_BODY_COPY">คัด​ลอก</text>
+    <text id="IDS_PB_BODY_ADDRESS">ที่อยู่</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">ไม่​มี​รายชื่อที่ชอบ</text>
+    <text id="IDS_COM_BODY_CONTACTS">รายชื่อ</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">เลือก​ราย​ชื่อ</text>
+    <text id="IDS_PB_BODY_PAGER">วิทยุ​ติดตาม​ตัว</text>
+    <text id="IDS_MP_POP_INVALID_FILE">ไฟล์​ใช้​ไม่​ได้</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">โปรแกรม​ส่ง​ข้อ​ความ​ทัน​ใจ</text>
+    <text id="IDS_COM_BODY_GALLERY">แกลเลอรี่</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">มือ​ถือ (​บ้าน)</text>
+    <text id="IDS_COM_BODY_SEARCH">ค้น​หา</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">ชื่อ​กลุ่ม​ใช้\n​อยู่​แล้ว</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">ครอบ​ครัว</text>
+    <text id="IDS_PB_BODY_CITY">เมือง</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">ชื่อ</text>
+    <text id="IDS_COM_BODY_CREATE">สร้าง</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">แผนก</text>
+    <text id="IDS_PB_BODY_NICKNAME">ชื่อ​เล่น</text>
+    <text id="IDS_COM_BODY_CALL">โทร</text>
+    <text id="IDS_PB_BODY_SUFFIX">คำ​ต่อ​ท้าย</text>
+    <text id="IDS_COM_BODY_SETTINGS">การตั้งค่า</text>
+    <text id="IDS_COM_POP_UNKNOWN">ไม่​รู้จัก</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">รายการ\nที่ชอบ</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">บันทึก​ราย​ชื่อ?</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">แก้ไข​กลุ่ม</text>
+    <text id="IDS_COM_SK_SAVE">บันทึก</text>
+    <text id="IDS_PB_BODY_PROVINCE">จังหวัด</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">การโทรวี​ดี​โอ</text>
+    <text id="IDS_COM_POP_ADDED">เพิ่ม​แล้ว</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">ส่ง​นาม​บัตร</text>
+    <text id="IDS_PB_BODY_HOME">บ้าน</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">ฟอร์​แมต​ไม่​ถูก​ต้อง</text>
+    <text id="IDS_PB_BODY_NOTE">บันทึก</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">การ​ตั้ง​ค่า​ราย​ชื่อ</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">เรียง​ตาม​ชื่อ​ที่​แสดง</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">กำลัง​ลบ​ราย​ชื่อ...</text>
+    <text id="IDS_PB_BODY_NUMBER">หมาย​เลข</text>
+    <text id="IDS_PB_BODY_STREET">ถนน</text>
+    <text id="IDS_PB_HEADER_DETAILS">ข้อมูล</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">รหัส​ไปรษณีย์</text>
+    <text id="IDS_COM_BODY_REMOVE">ลบ</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">แฟกซ์ (​บ้าน)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">ชื่อ​ก่อน</text>
+    <text id="IDS_COM_SK_OK">ตกลง</text>
+    <text id="IDS_PB_BODY_DEFAULT">พื้นฐาน</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">ชื่อ​กลุ่ม</text>
+</string_table>
diff --git a/res/tur-TR.xml b/res/tur-TR.xml
new file mode 100644 (file)
index 0000000..7dcfcaa
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Gruplar</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ad</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">İş ünvanı</text>
+    <text id="IDS_PB_BODY_COMPANY">Şirket</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Yıl dönümü</text>
+    <text id="IDS_COM_POP_CLOSE">Kapat</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Hepsini seç</text>
+    <text id="IDS_COM_POP_DELETE_Q">Sil?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Favorilere ekle</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Mesaj</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Soyad</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Kişinin kaydedileceği yer</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Cep telefonu (İş)</text>
+    <text id="IDS_PB_SK_CANCEL">İptal</text>
+    <text id="IDS_COM_SK_NEW">Yeni</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">İkinci ad</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Varsayılan e-posta olarak işaretle</text>
+    <text id="IDS_PB_BODY_OTHER">Diğer</text>
+    <text id="IDS_COM_POP_REMOVED">Kaldırıldı</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ülke</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Meslektaşlar</text>
+    <text id="IDS_COM_POP_SUCCESS">Başarılı</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Doğum günü</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Tüm kişiler</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Atanmadı</text>
+    <text id="IDS_COM_SK_DONE">Kaydet</text>
+    <text id="IDS_PB_BODY_MOBILE">Cep Telefonu</text>
+    <text id="IDS_COM_BODY_EMAIL">E-posta</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Cihaz belleği dolu</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Grup seç</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Geçersiz numara</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Üye ekle</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Kişi yok</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Fotoyu kaldır</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Önce soyadı</text>
+    <text id="IDS_PB_OPT_VIEW">Göster</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Geçersiz doğum tarihi</text>
+    <text id="IDS_PB_BODY_WORK">İş</text>
+    <text id="IDS_COM_SK_EDIT">Düzenle</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Geçersiz e-posta adresi</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Grup yok</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Rehbere ekle</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Varsayılan numara olarak işaretle</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Daha fazla bilgi</text>
+    <text id="IDS_COM_POP_SELECTED">Seçili</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Boş</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Fotoğraf çek</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Yeni grup</text>
+    <text id="IDS_COM_SK_DELETE">Sil</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (İş)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Zil sesi</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Arkadaşlar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adres</text>
+    <text id="IDS_COM_BODY_COPY">Kopyala</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Favori yok</text>
+    <text id="IDS_COM_BODY_CONTACTS">Rehber</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Kişileri seç</text>
+    <text id="IDS_PB_BODY_PAGER">Çağrı cihazı</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Geçersiz dosya</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Anlık mesajlaşma</text>
+    <text id="IDS_COM_BODY_GALLERY">Galeri</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Cep telefonu (Ev)</text>
+    <text id="IDS_COM_BODY_SEARCH">Arama</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Grup ismi zaten var</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Aile</text>
+    <text id="IDS_PB_BODY_CITY">Şehir</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">İsim</text>
+    <text id="IDS_COM_BODY_CREATE">Oluştur</text>
+    <text id="IDS_PB_BODY_NICKNAME">Takma ad</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departman</text>
+    <text id="IDS_PB_BODY_SUFFIX">Son ek</text>
+    <text id="IDS_COM_BODY_CALL">Arama</text>
+    <text id="IDS_COM_BODY_SETTINGS">Ayarlar</text>
+    <text id="IDS_COM_POP_UNKNOWN">Bilinmeyen</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Kişiyi kaydet?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Favoriler</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Grupları düzenle</text>
+    <text id="IDS_COM_SK_SAVE">Kaydet</text>
+    <text id="IDS_PB_BODY_PROVINCE">Bölge</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Kartvizit gönder</text>
+    <text id="IDS_COM_POP_ADDED">Eklendi</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video arama</text>
+    <text id="IDS_PB_BODY_HOME">Ev</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Geçersiz biçim</text>
+    <text id="IDS_PB_BODY_NOTE">Not</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kişi ayarları</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">İsim görünümü</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Kişiler siliniyor...</text>
+    <text id="IDS_PB_BODY_STREET">Cadde</text>
+    <text id="IDS_PB_BODY_NUMBER">Numara:</text>
+    <text id="IDS_PB_HEADER_DETAILS">Ayrıntılar</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Değişikliklerden vazgeç?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Posta kodu</text>
+    <text id="IDS_COM_BODY_REMOVE">Kaldır</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (Ev)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Önce ilk adı</text>
+    <text id="IDS_PB_BODY_DEFAULT">Varsayılan</text>
+    <text id="IDS_COM_SK_OK">Tamam</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Grup ismi</text>
+</string_table>
diff --git a/res/ukr-UA.xml b/res/ukr-UA.xml
new file mode 100644 (file)
index 0000000..cc23c56
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">Групи</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ім'я</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Посада</text>
+    <text id="IDS_PB_BODY_COMPANY">Організація</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Річниця</text>
+    <text id="IDS_COM_POP_CLOSE">Закрити</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Вибрати всі</text>
+    <text id="IDS_COM_POP_DELETE_Q">Видалити?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Додати до обраного</text>
+    <text id="IDS_PB_BODY_PHONE">Телефон</text>
+    <text id="IDS_COM_BODY_MESSAGE">Повідомлення</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Прізвище</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Зберегти контакт до</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Мобільний (робочий)</text>
+    <text id="IDS_PB_SK_CANCEL">Скасувати</text>
+    <text id="IDS_COM_SK_NEW">Нове</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Друге ім’я</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Позначити як стандартну адресу Email</text>
+    <text id="IDS_PB_BODY_OTHER">Інші</text>
+    <text id="IDS_COM_POP_REMOVED">Видалено</text>
+    <text id="IDS_PB_BODY_COUNTRY">Країна</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Співробітники</text>
+    <text id="IDS_COM_POP_SUCCESS">Успішно</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">День народження</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Всі контакти</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Не призначено</text>
+    <text id="IDS_COM_SK_DONE">Готово</text>
+    <text id="IDS_PB_BODY_MOBILE">Мобільний</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Місце збереження на пристрої заповнено</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Вибрати групу</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Хибний номер</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Дод.учас.</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Немає контактів</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Видалити фотографію</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Спочатку прізвище</text>
+    <text id="IDS_PB_OPT_VIEW">Переглянути</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Некоректна дата народження</text>
+    <text id="IDS_PB_BODY_WORK">Робота</text>
+    <text id="IDS_COM_SK_EDIT">Редагув.</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Невірна адреса Email</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Немає групи</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Додати в контакти</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Позначити як стандартний номер</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Подробиці</text>
+    <text id="IDS_COM_POP_SELECTED">Вибрано</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Пусто</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Зробити фото</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Нова група</text>
+    <text id="IDS_COM_SK_DELETE">Видалити</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Факс (робочий)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Звук дзвінка</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Друзі</text>
+    <text id="IDS_PB_BODY_ADDRESS">Адреса</text>
+    <text id="IDS_COM_BODY_COPY">Копіювати</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Немає обраних</text>
+    <text id="IDS_COM_BODY_CONTACTS">Контакти</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Вибір контактів</text>
+    <text id="IDS_PB_BODY_PAGER">Пейджер</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Хибний файл</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Обмін повідомленнями</text>
+    <text id="IDS_COM_BODY_GALLERY">Галерея</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Мобільний (домашній)</text>
+    <text id="IDS_COM_BODY_SEARCH">Пошук</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Назва групи вже використовується</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Сім'я</text>
+    <text id="IDS_PB_BODY_CITY">Місто</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Iм'я</text>
+    <text id="IDS_COM_BODY_CREATE">Створити</text>
+    <text id="IDS_PB_BODY_NICKNAME">Псевдонім</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Відділ</text>
+    <text id="IDS_PB_BODY_SUFFIX">Суфікс</text>
+    <text id="IDS_COM_BODY_CALL">Виклик</text>
+    <text id="IDS_COM_BODY_SETTINGS">Установки</text>
+    <text id="IDS_COM_POP_UNKNOWN">Невідомо</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Зберегти контакт?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Обране</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Редагувати групи</text>
+    <text id="IDS_COM_SK_SAVE">Зберегти</text>
+    <text id="IDS_PB_BODY_PROVINCE">Провінція</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Надіслати візитівку</text>
+    <text id="IDS_COM_POP_ADDED">Додано</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Відеовиклик</text>
+    <text id="IDS_PB_BODY_HOME">Домашній</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Недійсний формат</text>
+    <text id="IDS_PB_BODY_NOTE">Нотатка</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Установки контакту</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Порядок відображення імен</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Видалення контактів...</text>
+    <text id="IDS_PB_BODY_STREET">Вулиця</text>
+    <text id="IDS_PB_BODY_NUMBER">Цифри</text>
+    <text id="IDS_PB_HEADER_DETAILS">Деталі</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">Скасувати зміни?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Поштовий індекс</text>
+    <text id="IDS_COM_BODY_REMOVE">Видалити</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Факс (домашній)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Спочатку ім’я</text>
+    <text id="IDS_PB_BODY_DEFAULT">За замовчуванням</text>
+    <text id="IDS_COM_SK_OK">ОК</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Ім’я групи</text>
+</string_table>
diff --git a/res/urd-IN.xml b/res/urd-IN.xml
new file mode 100644 (file)
index 0000000..deb4cdb
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201305162056" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">گروپ</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">پہلا نام</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">سالگرہ</text>
+    <text id="IDS_PB_BODY_COMPANY">کمپنی</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">نوکری کا نام</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">تمام منتخب کریں</text>
+    <text id="IDS_COM_POP_CLOSE">بند کرنا</text>
+    <text id="IDS_COM_POP_DELETE_Q">مٹانا؟</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">پسندیدہ میں اضافہ کریں</text>
+    <text id="IDS_PB_BODY_PHONE">فون</text>
+    <text id="IDS_COM_BODY_MESSAGE">پیغام</text>
+    <text id="IDS_PB_BODY_LAST_NAME">آخری نام</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">کو محفوظ کریں</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">موبائل (کاروبار)</text>
+    <text id="IDS_COM_SK_NEW">نیا</text>
+    <text id="IDS_PB_SK_CANCEL">منسوخ</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">وسطی نام</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">بطور طے شدہ ای میل نشان لگائیں</text>
+    <text id="IDS_PB_BODY_OTHER">مزید</text>
+    <text id="IDS_COM_POP_REMOVED">ہٹا دیا</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">شریک کارندے</text>
+    <text id="IDS_COM_POP_SUCCESS">کامیابی</text>
+    <text id="IDS_PB_BODY_COUNTRY">ملک</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">یوم پیدائش</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">تمام کانٹیکٹس</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">غیر متعلقہ</text>
+    <text id="IDS_COM_SK_DONE">ٹھیک ہے</text>
+    <text id="IDS_PB_BODY_MOBILE">موبائل</text>
+    <text id="IDS_COM_BODY_EMAIL">ای میل</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">آلے کا ذخیرہ بھر چکا ہے</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">گروپ منتخب کریں</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">ناجائز نمبر</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">رکن شامل</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">رابطے نہیں</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">فوٹوز ہٹائیں</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">آخری نام پہلے</text>
+    <text id="IDS_PB_OPT_VIEW">نظارہ</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">غیر مجاز تاریخ پیدائش</text>
+    <text id="IDS_PB_BODY_WORK">کام</text>
+    <text id="IDS_COM_SK_EDIT">تبدیلی</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">ناجائز ای میل پتہ</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">کوئی گروپ نہیں</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">کانٹیکٹس کا اضافہ کریں</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">بطور ڈیفالٹ مارک کیں</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">اور معلومات</text>
+    <text id="IDS_COM_POP_SELECTED">انتخاب ہوگیا</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">خالی</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">تصویر لیں</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">نیا گروہ</text>
+    <text id="IDS_COM_SK_DELETE">مٹانا</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">فیکس (کاروبار)</text>
+    <text id="IDS_PB_BODY_RINGTONE">رنگ ٹون</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">فرینڈز</text>
+    <text id="IDS_COM_BODY_COPY">کاپی</text>
+    <text id="IDS_PB_BODY_ADDRESS">ایڈریس</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">کوئی پسندیدہ نہیں ہیں</text>
+    <text id="IDS_COM_BODY_CONTACTS">رابطے</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">رابطہ افراد منتخب کریں</text>
+    <text id="IDS_PB_BODY_PAGER">پیجر</text>
+    <text id="IDS_MP_POP_INVALID_FILE">فایل ویلڈ نہیں</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">انسٹنٹ میسنجر</text>
+    <text id="IDS_COM_BODY_GALLERY">گیلری</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">موبائل (گھر)</text>
+    <text id="IDS_COM_BODY_SEARCH">سرچ</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">گروپ کا نام پہلے سے استعمال میں</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">خاندان</text>
+    <text id="IDS_PB_BODY_CITY">شہر</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">نام</text>
+    <text id="IDS_COM_BODY_CREATE">تخلیق</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">محکمہ</text>
+    <text id="IDS_PB_BODY_NICKNAME">نک نام</text>
+    <text id="IDS_COM_BODY_CALL">کال</text>
+    <text id="IDS_PB_BODY_SUFFIX">لاحقہ</text>
+    <text id="IDS_COM_BODY_SETTINGS">سیٹنگز</text>
+    <text id="IDS_COM_POP_UNKNOWN">نامعلوم</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">پسندیدہ اشیا</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">کانٹیکٹ محفوظ کریں؟</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">گروپس تدوین کریں</text>
+    <text id="IDS_COM_SK_SAVE">محفوظ</text>
+    <text id="IDS_PB_BODY_PROVINCE">صُوبہ</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">ویڈیو کال</text>
+    <text id="IDS_COM_POP_ADDED">اضافہ ہو گیا</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">نام کارڈ بھیجیں</text>
+    <text id="IDS_PB_BODY_HOME">ہوم</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">غلط فارمیٹ</text>
+    <text id="IDS_PB_BODY_NOTE">نوٹ</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">کانٹیکٹ کی سیٹینگز</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">ڈسپلے نام کی ترتیب</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">رابطہ افراد حذف کررہا ہے...</text>
+    <text id="IDS_PB_BODY_NUMBER">نمبر</text>
+    <text id="IDS_PB_BODY_STREET">سٹریٹ</text>
+    <text id="IDS_PB_HEADER_DETAILS">تفصیل</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">پوسٹل کوڈ</text>
+    <text id="IDS_COM_BODY_REMOVE">ہٹانا</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">فیکس (گھر)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">پہلا نام پہلے</text>
+    <text id="IDS_COM_SK_OK">ٹھیک ہے</text>
+    <text id="IDS_PB_BODY_DEFAULT">ڈیفالٹ</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">گروپ کا نام</text>
+</string_table>
diff --git a/res/uzb-UZ.xml b/res/uzb-UZ.xml
new file mode 100644 (file)
index 0000000..e56fafb
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL-manzil</text>
+    <text id="IDS_PB_BODY_GROUPS">Guruhlar</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">Ismi</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Lavozim nomi</text>
+    <text id="IDS_PB_BODY_COMPANY">Kompaniya</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">Yubiley</text>
+    <text id="IDS_COM_POP_CLOSE">Yopish</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Barchasini tanlash</text>
+    <text id="IDS_COM_POP_DELETE_Q">O'chirilsinmi?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Tanlanganlarga qo‘shish</text>
+    <text id="IDS_PB_BODY_PHONE">Telefon</text>
+    <text id="IDS_COM_BODY_MESSAGE">Xabar</text>
+    <text id="IDS_PB_BODY_LAST_NAME">Familiya</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">Kontaktni saqla</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">Mobil telefon (ish)</text>
+    <text id="IDS_PB_SK_CANCEL">Bekor q.</text>
+    <text id="IDS_COM_SK_NEW">Yangi</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">Otasining ismi</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">Asosiy e-pochta sifatida belgilash</text>
+    <text id="IDS_PB_BODY_OTHER">Boshqa</text>
+    <text id="IDS_COM_POP_REMOVED">Olib tashlandi</text>
+    <text id="IDS_PB_BODY_COUNTRY">Mamlakat</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">Hamkasblar</text>
+    <text id="IDS_COM_POP_SUCCESS">Muvaffaqiyat</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">Tug‘ilgan kun</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">Barcha kontaktlar</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">Tayinlanmagan</text>
+    <text id="IDS_COM_SK_DONE">Bajarildi</text>
+    <text id="IDS_PB_BODY_MOBILE">Mobil</text>
+    <text id="IDS_COM_BODY_EMAIL">E-pochta</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">Qurilma xotirasi to‘la</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Guruh tanlang</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">Noto‘g‘ri raqam</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">A’zo qo‘sh</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">Kontaktlar yo‘q</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">Rasmni olib tashlash</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">Avval familiya</text>
+    <text id="IDS_PB_OPT_VIEW">Ko‘rib chiqish</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">Noto‘g‘ri tug‘ilgan kun sanasi</text>
+    <text id="IDS_PB_BODY_WORK">Ish</text>
+    <text id="IDS_COM_SK_EDIT">Tahrirl.</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Noto‘g‘ri e-pochta manzili</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Guruh mavjud emas</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">Kontaktlarga qo‘shish</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">Birlam. o'rn. raqam sifatida belgilash</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">Boshqa ma’lumotlar</text>
+    <text id="IDS_COM_POP_SELECTED">Tanlangan</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">Bo‘sh</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">Suratga olish</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">Yangi guruh</text>
+    <text id="IDS_COM_SK_DELETE">O'chirish</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">Faks (ish)</text>
+    <text id="IDS_PB_BODY_RINGTONE">Rington</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">Do‘stlar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Manzil</text>
+    <text id="IDS_COM_BODY_COPY">Nusxa olish</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Tanlanganlar yo‘q</text>
+    <text id="IDS_COM_BODY_CONTACTS">Kontaktlar</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">Kontaktlar tanlang</text>
+    <text id="IDS_PB_BODY_PAGER">Peyjer</text>
+    <text id="IDS_MP_POP_INVALID_FILE">Noto‘g‘ri fayl</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">Oniy xabar mesenjeri (IM)</text>
+    <text id="IDS_COM_BODY_GALLERY">Galereya</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">Mobil telefon (uy)</text>
+    <text id="IDS_COM_BODY_SEARCH">Qidirish</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">Guruh nomi avvaldan ishlatilmoqda</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">Oila</text>
+    <text id="IDS_PB_BODY_CITY">Shahar</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_COM_BODY_CREATE">Yaratish</text>
+    <text id="IDS_PB_BODY_NICKNAME">Laqab</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Bo'lim</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffiks</text>
+    <text id="IDS_COM_BODY_CALL">Qo‘ng‘iroq qilish</text>
+    <text id="IDS_COM_BODY_SETTINGS">Parametrlar</text>
+    <text id="IDS_COM_POP_UNKNOWN">Noma’lum</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">Kontakt saqlansinmi?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Tanlanganlar</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">Guruhlarni tahrirlash</text>
+    <text id="IDS_COM_SK_SAVE">Saqlash</text>
+    <text id="IDS_PB_BODY_PROVINCE">Viloyat</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">Tashrif kartasi yuborish</text>
+    <text id="IDS_COM_POP_ADDED">Qo‘shilgan</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">Video qo‘ng‘iroq</text>
+    <text id="IDS_PB_BODY_HOME">Asosiy</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">Noto‘g‘ri format</text>
+    <text id="IDS_PB_BODY_NOTE">Eslatma</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">Kontakt parametrlari</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">Displey nomlari tartibi</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">Kontaktlar o‘chirilmoqda...</text>
+    <text id="IDS_PB_BODY_STREET">Ko‘cha</text>
+    <text id="IDS_PB_BODY_NUMBER">Raqam</text>
+    <text id="IDS_PB_HEADER_DETAILS">Tafsilotlar</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">O‘zgartirishlar rad etilsinmi?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Pochta indeksi</text>
+    <text id="IDS_COM_BODY_REMOVE">Olib tashlash</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">Faks (uy)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">Avval ism</text>
+    <text id="IDS_PB_BODY_DEFAULT">Birlamchi</text>
+    <text id="IDS_COM_SK_OK">OK</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">Guruh nomi</text>
+</string_table>
diff --git a/res/zho-CN.xml b/res/zho-CN.xml
new file mode 100644 (file)
index 0000000..029e3e2
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">网址</text>
+    <text id="IDS_PB_BODY_GROUPS">分组</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">名字</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">职位</text>
+    <text id="IDS_PB_BODY_COMPANY">公司</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">纪念日</text>
+    <text id="IDS_COM_POP_CLOSE">关闭</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全选</text>
+    <text id="IDS_COM_POP_DELETE_Q">删除?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">添加至收藏</text>
+    <text id="IDS_PB_BODY_PHONE">手机</text>
+    <text id="IDS_COM_BODY_MESSAGE">信息</text>
+    <text id="IDS_PB_BODY_LAST_NAME">姓氏</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">储存联系人到</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">手机(工作)</text>
+    <text id="IDS_PB_SK_CANCEL">取消</text>
+    <text id="IDS_COM_SK_NEW">新建</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">中间名</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">标记为默认电子邮件</text>
+    <text id="IDS_PB_BODY_OTHER">其他</text>
+    <text id="IDS_COM_POP_REMOVED">已移除</text>
+    <text id="IDS_PB_BODY_COUNTRY">国家</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">同事</text>
+    <text id="IDS_COM_POP_SUCCESS">成功</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">生日</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">全部联系人</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">未分配</text>
+    <text id="IDS_COM_SK_DONE">完成</text>
+    <text id="IDS_PB_BODY_MOBILE">手机</text>
+    <text id="IDS_COM_BODY_EMAIL">电子邮件</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">设备存储已满</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">选择群组</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">数值无效</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">添加成员</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">没有联系人</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">移除照片</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">姓</text>
+    <text id="IDS_PB_OPT_VIEW">查看</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">无效生日日期</text>
+    <text id="IDS_PB_BODY_WORK">工作</text>
+    <text id="IDS_COM_SK_EDIT">编辑</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">电子邮件地址无效</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">无群组</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">添加到联系人</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">标记为默认号码</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">更多信息</text>
+    <text id="IDS_COM_POP_SELECTED">已选择</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">空</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">拍照</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">新群组</text>
+    <text id="IDS_COM_SK_DELETE">删除</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">传真(工作)</text>
+    <text id="IDS_PB_BODY_RINGTONE">铃声</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">好友</text>
+    <text id="IDS_PB_BODY_ADDRESS">地址</text>
+    <text id="IDS_COM_BODY_COPY">复制</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">没有收藏</text>
+    <text id="IDS_COM_BODY_CONTACTS">联系人</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">选择联系人</text>
+    <text id="IDS_PB_BODY_PAGER">寻呼机</text>
+    <text id="IDS_MP_POP_INVALID_FILE">无效文件</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">IM</text>
+    <text id="IDS_COM_BODY_GALLERY">图库</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">手机(家庭)</text>
+    <text id="IDS_COM_BODY_SEARCH">搜索</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">群组名称已使用</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">家人</text>
+    <text id="IDS_PB_BODY_CITY">城市</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">名称</text>
+    <text id="IDS_COM_BODY_CREATE">新建</text>
+    <text id="IDS_PB_BODY_NICKNAME">昵称</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">部门</text>
+    <text id="IDS_PB_BODY_SUFFIX">后缀</text>
+    <text id="IDS_COM_BODY_CALL">通话</text>
+    <text id="IDS_COM_BODY_SETTINGS">设定</text>
+    <text id="IDS_COM_POP_UNKNOWN">未知</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">存储联系人?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">收藏</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">编辑分组</text>
+    <text id="IDS_COM_SK_SAVE">保存</text>
+    <text id="IDS_PB_BODY_PROVINCE">省</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">发送名片</text>
+    <text id="IDS_COM_POP_ADDED">已添加</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">视频通话</text>
+    <text id="IDS_PB_BODY_HOME">家庭</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">格式无效</text>
+    <text id="IDS_PB_BODY_NOTE">注释</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">联系人设置</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">姓名显示顺序</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">正在删除联系人…</text>
+    <text id="IDS_PB_BODY_STREET">街道</text>
+    <text id="IDS_PB_BODY_NUMBER">号码</text>
+    <text id="IDS_PB_HEADER_DETAILS">详情</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">放弃变更?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">邮编</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">传真(家庭)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">首先是名字</text>
+    <text id="IDS_PB_BODY_DEFAULT">默认</text>
+    <text id="IDS_COM_SK_OK">确定</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">群组名称</text>
+</string_table>
diff --git a/res/zho-HK.xml b/res/zho-HK.xml
new file mode 100644 (file)
index 0000000..c16a04d
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">網址</text>
+    <text id="IDS_PB_BODY_GROUPS">群組</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">名字</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">職稱</text>
+    <text id="IDS_PB_BODY_COMPANY">公司</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">週年</text>
+    <text id="IDS_COM_POP_CLOSE">關閉</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">選擇全部</text>
+    <text id="IDS_COM_POP_DELETE_Q">刪除嗎?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">加到我的最愛</text>
+    <text id="IDS_PB_BODY_PHONE">電話</text>
+    <text id="IDS_COM_BODY_MESSAGE">訊息</text>
+    <text id="IDS_PB_BODY_LAST_NAME">姓氏</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">儲存聯絡人到</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">手機(工作)</text>
+    <text id="IDS_PB_SK_CANCEL">取消</text>
+    <text id="IDS_COM_SK_NEW">新增</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">中間名</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">標記為預設電子郵件</text>
+    <text id="IDS_PB_BODY_OTHER">其他</text>
+    <text id="IDS_COM_POP_REMOVED">已移除</text>
+    <text id="IDS_PB_BODY_COUNTRY">國家</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">同事</text>
+    <text id="IDS_COM_POP_SUCCESS">成功</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">生日</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">全部聯絡人</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">無指定</text>
+    <text id="IDS_COM_SK_DONE">完成</text>
+    <text id="IDS_PB_BODY_MOBILE">手機</text>
+    <text id="IDS_COM_BODY_EMAIL">電子郵件</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">裝置記憶體已滿</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">選擇群組</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">號碼無效</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">加入成員</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">無聯絡人</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">移除相片</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">姓氏在前</text>
+    <text id="IDS_PB_OPT_VIEW">檢視</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">出生日期無效</text>
+    <text id="IDS_PB_BODY_WORK">工作</text>
+    <text id="IDS_COM_SK_EDIT">編輯</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">無效電子郵件地址</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">無群組</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">加到聯絡人</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">標記為預設號碼</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">更多資料</text>
+    <text id="IDS_COM_POP_SELECTED">已選擇</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">空白</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">拍照</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">新增群組</text>
+    <text id="IDS_COM_SK_DELETE">刪除</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">傳真(工作)</text>
+    <text id="IDS_PB_BODY_RINGTONE">鈴聲</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">朋友</text>
+    <text id="IDS_PB_BODY_ADDRESS">地址</text>
+    <text id="IDS_COM_BODY_COPY">複製</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">無我的最愛</text>
+    <text id="IDS_COM_BODY_CONTACTS">聯絡人</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">選擇聯絡人</text>
+    <text id="IDS_PB_BODY_PAGER">傳呼機</text>
+    <text id="IDS_MP_POP_INVALID_FILE">檔案無效</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">即時訊息</text>
+    <text id="IDS_COM_BODY_GALLERY">媒體瀏覽器</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">手機(住家)</text>
+    <text id="IDS_COM_BODY_SEARCH">搜尋</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">群組名稱已存在</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">家人</text>
+    <text id="IDS_PB_BODY_CITY">城市</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">名稱</text>
+    <text id="IDS_COM_BODY_CREATE">建立</text>
+    <text id="IDS_PB_BODY_NICKNAME">暱稱</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">部門</text>
+    <text id="IDS_PB_BODY_SUFFIX">字尾</text>
+    <text id="IDS_COM_BODY_CALL">通話</text>
+    <text id="IDS_COM_BODY_SETTINGS">設定</text>
+    <text id="IDS_COM_POP_UNKNOWN">未知</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">要儲存聯絡人嗎?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">我的最愛</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">編輯群組</text>
+    <text id="IDS_COM_SK_SAVE">儲存</text>
+    <text id="IDS_PB_BODY_PROVINCE">省</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">發送名片</text>
+    <text id="IDS_COM_POP_ADDED">已加入</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">視像通話</text>
+    <text id="IDS_PB_BODY_HOME">住家</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">格式無效</text>
+    <text id="IDS_PB_BODY_NOTE">記事本</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">聯絡人設定</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">顯示名稱次序</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">正在刪除聯絡人...</text>
+    <text id="IDS_PB_BODY_STREET">街道</text>
+    <text id="IDS_PB_BODY_NUMBER">號碼</text>
+    <text id="IDS_PB_HEADER_DETAILS">詳細資料</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">捨棄更改嗎?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">郵政編號</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">傳真(住家)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">先顯示名字</text>
+    <text id="IDS_PB_BODY_DEFAULT">預設</text>
+    <text id="IDS_COM_SK_OK">確定</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">群組名稱</text>
+</string_table>
diff --git a/res/zho-SG.xml b/res/zho-SG.xml
new file mode 100644 (file)
index 0000000..65982ef
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">网址</text>
+    <text id="IDS_PB_BODY_GROUPS">群组</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">名字</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">职位</text>
+    <text id="IDS_PB_BODY_COMPANY">公司</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">纪念日</text>
+    <text id="IDS_COM_POP_CLOSE">关闭</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全选</text>
+    <text id="IDS_COM_POP_DELETE_Q">删除?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">添加到收藏</text>
+    <text id="IDS_PB_BODY_PHONE">手机</text>
+    <text id="IDS_COM_BODY_MESSAGE">讯息</text>
+    <text id="IDS_PB_BODY_LAST_NAME">姓氏</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">储存联系人到</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">手机(工作)</text>
+    <text id="IDS_PB_SK_CANCEL">取消</text>
+    <text id="IDS_COM_SK_NEW">新建</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">中间名</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">标记为默认电子邮件</text>
+    <text id="IDS_PB_BODY_OTHER">其他</text>
+    <text id="IDS_COM_POP_REMOVED">已移除</text>
+    <text id="IDS_PB_BODY_COUNTRY">国家</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">合作者</text>
+    <text id="IDS_COM_POP_SUCCESS">成功</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">生日</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">全部联系人</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">未分配</text>
+    <text id="IDS_COM_SK_DONE">已完成</text>
+    <text id="IDS_PB_BODY_MOBILE">手机</text>
+    <text id="IDS_COM_BODY_EMAIL">电邮</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">设备存储已满</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">选择组群</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">数值无效</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">添加成员</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">无联系人</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">移除照片</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">姓</text>
+    <text id="IDS_PB_OPT_VIEW">查看</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">无效生日日期</text>
+    <text id="IDS_PB_BODY_WORK">工作</text>
+    <text id="IDS_COM_SK_EDIT">编辑</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">无效电子邮件地址</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">无群组</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">添加到联系人</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">标记为默认号码</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">更多信息</text>
+    <text id="IDS_COM_POP_SELECTED">已选择</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">空白</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">拍照</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">新群组</text>
+    <text id="IDS_COM_SK_DELETE">删除</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">传真(工作)</text>
+    <text id="IDS_PB_BODY_RINGTONE">铃声</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">朋友</text>
+    <text id="IDS_PB_BODY_ADDRESS">地址</text>
+    <text id="IDS_COM_BODY_COPY">复制</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">没有收藏夹</text>
+    <text id="IDS_COM_BODY_CONTACTS">联系人</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">选择联系人</text>
+    <text id="IDS_PB_BODY_PAGER">寻呼机</text>
+    <text id="IDS_MP_POP_INVALID_FILE">无效文件</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">即时通讯</text>
+    <text id="IDS_COM_BODY_GALLERY">画廊</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">手机(家庭)</text>
+    <text id="IDS_COM_BODY_SEARCH">搜寻</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">群组名称已使用</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">家人</text>
+    <text id="IDS_PB_BODY_CITY">城市</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">名称</text>
+    <text id="IDS_COM_BODY_CREATE">创建</text>
+    <text id="IDS_PB_BODY_NICKNAME">绰号</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">部门</text>
+    <text id="IDS_PB_BODY_SUFFIX">后缀</text>
+    <text id="IDS_COM_BODY_CALL">通话</text>
+    <text id="IDS_COM_BODY_SETTINGS">设定</text>
+    <text id="IDS_COM_POP_UNKNOWN">未知</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">储存联系人?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">收藏</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">编辑分组</text>
+    <text id="IDS_COM_SK_SAVE">储存</text>
+    <text id="IDS_PB_BODY_PROVINCE">省</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">发送名片</text>
+    <text id="IDS_COM_POP_ADDED">已添加</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">视像通话</text>
+    <text id="IDS_PB_BODY_HOME">首页</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">格式无效</text>
+    <text id="IDS_PB_BODY_NOTE">附注</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">联系人设置</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">显示名称顺序</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">正在删除联系人…</text>
+    <text id="IDS_PB_BODY_STREET">街道</text>
+    <text id="IDS_PB_BODY_NUMBER">号码</text>
+    <text id="IDS_PB_HEADER_DETAILS">详细内容</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">丢掉变更?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">邮编</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">传真(家庭)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">首先是名字</text>
+    <text id="IDS_PB_BODY_DEFAULT">默认</text>
+    <text id="IDS_COM_SK_OK">确认</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">群组名称</text>
+</string_table>
diff --git a/res/zho-TW.xml b/res/zho-TW.xml
new file mode 100644 (file)
index 0000000..ab636c4
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201309242034" Dversion="20120315">
+    <text id="IDS_PB_BODY_URL">URL</text>
+    <text id="IDS_PB_BODY_GROUPS">群組</text>
+    <text id="IDS_PB_BODY_FIRST_NAME">名字</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">職稱</text>
+    <text id="IDS_PB_BODY_COMPANY">公司</text>
+    <text id="IDS_PB_BODY_ANNIVERSARY">週年紀念日</text>
+    <text id="IDS_COM_POP_CLOSE">關閉</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全選</text>
+    <text id="IDS_COM_POP_DELETE_Q">要刪除嗎?</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">加到我的最愛</text>
+    <text id="IDS_PB_BODY_PHONE">電話</text>
+    <text id="IDS_COM_BODY_MESSAGE">訊息</text>
+    <text id="IDS_PB_BODY_LAST_NAME">姓氏</text>
+    <text id="IDS_PB_BODY_SAVE_CONTACT_TO">儲存聯絡人到</text>
+    <text id="IDS_PB_BODY_MOBILE_HWORK">手機(工作)</text>
+    <text id="IDS_PB_SK_CANCEL">取消</text>
+    <text id="IDS_COM_SK_NEW">新增</text>
+    <text id="IDS_PB_BODY_MIDDLE_NAME">中間名</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_EMAIL">標記為預設的電子郵件</text>
+    <text id="IDS_PB_BODY_OTHER">其他</text>
+    <text id="IDS_COM_POP_REMOVED">已移除</text>
+    <text id="IDS_PB_BODY_COUNTRY">國家</text>
+    <text id="IDS_PB_BODY_CO_WORKERS">同事</text>
+    <text id="IDS_COM_POP_SUCCESS">成功</text>
+    <text id="IDS_PB_BODY_BIRTHDAY">生日</text>
+    <text id="IDS_PB_BODY_ALL_CONTACTS">全部聯絡人</text>
+    <text id="IDS_PB_BODY_NOT_ASSIGNED">未指定</text>
+    <text id="IDS_COM_SK_DONE">完成</text>
+    <text id="IDS_PB_BODY_MOBILE">行動裝置</text>
+    <text id="IDS_COM_BODY_EMAIL">電子郵件</text>
+    <text id="IDS_EMAIL_POP_DEVICE_STORAGE_FULL">裝置儲存已滿</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">選擇群組</text>
+    <text id="IDS_PB_BODY_INVALID_NUMBER">號碼無效</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">新增成員</text>
+    <text id="IDS_PB_BODY_NO_CONTACTS">無聯絡人</text>
+    <text id="IDS_PB_OPT_REMOVE_PHOTO_ABB">刪除照片</text>
+    <text id="IDS_PB_BODY_LAST_NAME_FIRST_ABB">姓氏在前</text>
+    <text id="IDS_PB_OPT_VIEW">檢視</text>
+    <text id="IDS_SAPPS_POP_INVALID_DATE_OF_BIRTH">無效的出生日期</text>
+    <text id="IDS_PB_BODY_WORK">公司</text>
+    <text id="IDS_COM_SK_EDIT">編輯</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">電子郵件地址無效</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">無群組</text>
+    <text id="IDS_COM_OPT_ADD_TO_CONTACTS">新增至聯絡人</text>
+    <text id="IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER">標記為預設號碼</text>
+    <text id="IDS_KA_BODY_MORE_INFORMATION">更多資訊</text>
+    <text id="IDS_COM_POP_SELECTED">已選擇</text>
+    <text id="IDS_PB_OPT_EMPTY_MVERB">空白</text>
+    <text id="IDS_PB_BODY_TAKE_A_PHOTO">拍照</text>
+    <text id="IDS_PB_OPT_NEW_GROUP">新增群組</text>
+    <text id="IDS_COM_SK_DELETE">刪除</text>
+    <text id="IDS_PB_BODY_FAX_HWORK">傳真(工作)</text>
+    <text id="IDS_PB_BODY_RINGTONE">鈴聲</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FRIENDS">朋友</text>
+    <text id="IDS_PB_BODY_ADDRESS">地址</text>
+    <text id="IDS_COM_BODY_COPY">複製</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">無我的最愛</text>
+    <text id="IDS_COM_BODY_CONTACTS">聯絡人</text>
+    <text id="IDS_PB_HEADER_SELECT_CONTACTS">選擇聯絡人</text>
+    <text id="IDS_PB_BODY_PAGER">呼叫器</text>
+    <text id="IDS_MP_POP_INVALID_FILE">檔案無效</text>
+    <text id="IDS_PB_HEADER_INSTANT_MESSENGER_ABB">即時通訊</text>
+    <text id="IDS_COM_BODY_GALLERY">媒體瀏覽器</text>
+    <text id="IDS_PB_BODY_MOBILE_HHOME">手機(住家)</text>
+    <text id="IDS_COM_BODY_SEARCH">搜尋</text>
+    <text id="IDS_PB_POP_GROUP_ALREADY_IN_USE">群組名稱已在使用中</text>
+    <text id="IDS_PB_BODY_DEFAULT_GROUP_FAMILY">家庭</text>
+    <text id="IDS_PB_BODY_CITY">城市</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">名稱</text>
+    <text id="IDS_COM_BODY_CREATE">建立</text>
+    <text id="IDS_PB_BODY_NICKNAME">暱稱</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">部門</text>
+    <text id="IDS_PB_BODY_SUFFIX">稱謂</text>
+    <text id="IDS_COM_BODY_CALL">通話</text>
+    <text id="IDS_COM_BODY_SETTINGS">設定</text>
+    <text id="IDS_COM_POP_UNKNOWN">未知</text>
+    <text id="IDS_PB_POP_SAVE_CONTACT_Q">要儲存聯絡人嗎?</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">我的最愛</text>
+    <text id="IDS_PB_OPT2_EDIT_GROUPS">編輯群組</text>
+    <text id="IDS_COM_SK_SAVE">儲存</text>
+    <text id="IDS_PB_BODY_PROVINCE">省</text>
+    <text id="IDS_PB_HEADER_SEND_NAMECARD">傳送名片</text>
+    <text id="IDS_COM_POP_ADDED">已新增</text>
+    <text id="IDS_COM_BODY_VIDEO_CALL">視訊通話</text>
+    <text id="IDS_PB_BODY_HOME">住家</text>
+    <text id="IDS_RSSR_BODY_INVALID_FORMAT">無效格式</text>
+    <text id="IDS_PB_BODY_NOTE">備註</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">聯絡人設定</text>
+    <text id="IDS_PB_BODY_ORDER_OF_DISPLAY_NAME">顯示名稱順序</text>
+    <text id="IDS_PB_POP_DELETING_CONTACTS_ING">正在刪除聯絡人...</text>
+    <text id="IDS_PB_BODY_STREET">街道</text>
+    <text id="IDS_PB_BODY_NUMBER">號碼</text>
+    <text id="IDS_PB_HEADER_DETAILS">詳細資料</text>
+    <text id="IDS_PB_POP_DISCARD_CHANGES_Q">捨棄變更嗎?</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">郵政編碼</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_FAX_HHOME">傳真(住家)</text>
+    <text id="IDS_PB_BODY_FIRST_NAME_FIRST">先顯示名字</text>
+    <text id="IDS_PB_BODY_DEFAULT">預設</text>
+    <text id="IDS_COM_SK_OK">確定</text>
+    <text id="IDS_PB_BODY_GROUP_NAME_ABB">群組名稱</text>
+</string_table>
diff --git a/shared/data/nofile.dummy b/shared/data/nofile.dummy
new file mode 100644 (file)
index 0000000..2995a4d
--- /dev/null
@@ -0,0 +1 @@
+dummy
\ No newline at end of file
diff --git a/shared/res/screen-density-xhigh/mainmenu.png b/shared/res/screen-density-xhigh/mainmenu.png
new file mode 100644 (file)
index 0000000..725edd1
Binary files /dev/null and b/shared/res/screen-density-xhigh/mainmenu.png differ
diff --git a/shared/trusted/nofile.dummy b/shared/trusted/nofile.dummy
new file mode 100644 (file)
index 0000000..2995a4d
--- /dev/null
@@ -0,0 +1 @@
+dummy
\ No newline at end of file
diff --git a/src/CtAccountListItemProvider.cpp b/src/CtAccountListItemProvider.cpp
new file mode 100644 (file)
index 0000000..d6fa79e
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// 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       CtAccountListItemProvider.cpp
+ * @brief      This is the implementation file for the AccountListItemProvider class.
+ */
+
+#include "CtAccountListItemProvider.h"
+#include "CtContactListPresentationModel.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+
+static const int H_ITEM = 112;
+
+AccountListItemProvider::AccountListItemProvider(Tizen::Ui::Controls::ListView* pAccountListView, ContactListPresentationModel* pContactListPresentationModel)
+: __pAccountListView(pAccountListView)
+, __pContactListPresentationModel(pContactListPresentationModel)
+{
+}
+
+AccountListItemProvider::~AccountListItemProvider(void)
+{
+}
+
+Tizen::Ui::Controls::ListItemBase*
+AccountListItemProvider::CreateItem(int index, int itemWidth)
+{
+       SimpleItem* pItem = null;
+       String addressbookName(__pContactListPresentationModel->GetAddressbookName(index));
+
+       pItem = new (std::nothrow) SimpleItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), LIST_ANNEX_STYLE_RADIO);
+       pItem->SetElement(addressbookName);
+
+       if (addressbookName.Equals(__pContactListPresentationModel->GetCurrentAddressbook()))
+       {
+               __pAccountListView->SetItemChecked(index, true);
+       }
+
+       return pItem;
+}
+
+bool
+AccountListItemProvider::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+int
+AccountListItemProvider::GetItemCount(void)
+{
+       return __pContactListPresentationModel->GetAddressbookCount();
+}
diff --git a/src/CtCommonUtil.cpp b/src/CtCommonUtil.cpp
new file mode 100644 (file)
index 0000000..61e6a63
--- /dev/null
@@ -0,0 +1,56 @@
+//
+// 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       CtCommonUtil.cpp
+ * @brief      This is the implementation file for the CtCommonUtil.cpp class.
+ */
+
+#include <FSysRuntimeInfo.h>
+#include <FUi.h>
+#include "CtCommonUtil.h"
+#include "CtResourceManager.h"
+#include "CtTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::System;
+
+bool CommonUtil::isMemoryAvailable()
+{
+       long long avialableMemory = 0;
+       result r = E_SUCCESS;
+
+       String key(RUNTIMEINFO_INTERNAL_MEMORY_KEY);
+
+       r  = RuntimeInfo::GetValue(key, avialableMemory);
+       if (avialableMemory <= 1024)
+       {
+               return false;
+       }
+
+       return true;
+}
+
+void CommonUtil::showMemoryFullMessageBox()
+{
+       int modalResult = 0;
+       MessageBox memoryFullMessageBox;
+       memoryFullMessageBox.Construct(L"", ResourceManager::GetString(L"IDS_EMAIL_POP_DEVICE_STORAGE_FULL"), MSGBOX_STYLE_NONE, 1000);
+       memoryFullMessageBox.ShowAndWait(modalResult);
+}
+
+
diff --git a/src/CtContactDetailsForm.cpp b/src/CtContactDetailsForm.cpp
new file mode 100644 (file)
index 0000000..eab4174
--- /dev/null
@@ -0,0 +1,2320 @@
+//
+// 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       CtContactDetailsForm.cpp
+ * @brief      This is the implementation file for the ContactDetailsForm class.
+ */
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FMedia.h>
+#include <FSocial.h>
+#include "CtContactDetailsForm.h"
+#include "CtContactPresentationModel.h"
+#include "CtContactValueListItemProvider.h"
+#include "CtContactsApp.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+using namespace Tizen::Io;
+using namespace Tizen::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+static const int IDA_FOOTER_EDIT = 10;
+static const int IDA_FOOTER_DELETE = 11;
+static const int IDA_FOOTER_ADD = 13;
+static const int IDA_VOICE_CALL = 20;
+static const int IDA_MESSAGE = 21;
+static const int IDA_VIDEO_CALL = 22;
+static const int IDA_CONTEXTMENU_SHARE_EMAIL = 30;
+static const int IDA_CONTEXTMENU_SHARE_MESSAGE = 31;
+static const int IDA_BUTTON_RINGTONE_CLEAR = 40;
+static const int IDA_BUTTON_SHARE_NAME_CARD = 50;
+static const int IDA_POPUP_CLOSE = 60;
+static const int IDA_MORE_DEFAULT_NUMBER = 70;
+static const int IDA_FAVORITE_BUTTON = 80;
+static const int IDA_POPUP_DELETE_OK = 90;
+static const int IDA_POPUP_DELETE_CANCEL = 91;
+
+static const wchar_t* IDB_DETAILS_FAVORITE_ON = L"00_icon_favorite_on.png";
+static const wchar_t* IDB_DETAILS_FAVORITE_OFF = L"00_icon_favorite_off.png";
+static const wchar_t* IDB_DETAILS_RESET_NORMAL = L"00_button_refresh.png";
+static const wchar_t* IDB_DETAILS_RESET_PRESSED = L"00_button_refresh_press.png";
+static const wchar_t* IDB_CIRCLE_BUTTON_NORMAL = L"C02_circle_button.png";
+static const wchar_t* IDB_CIRCLE_BUTTON_PRESSED = L"C02_circle_button_press.png";
+static const wchar_t* IDB_CALL_NORMAL = L"C02_circle_icon_call.png";
+static const wchar_t* IDB_CALL_PRESSED = L"C02_circle_icon_call_press.png";
+static const wchar_t* IDB_SMS_NORMAL = L"C02_circle_icon_sms.png";
+static const wchar_t* IDB_SMS_PRESSED = L"C02_circle_icon_sms_press.png";
+static const wchar_t* IDB_VIDEO_CALL_NORMAL = L"C02_circle_icon_vt-call.png";
+static const wchar_t* IDB_VIDEO_CALL_PRESSED = L"C02_circle_icon_vt-call_press.png";
+
+static const wchar_t* GROUP_STYLE_PANEL = L"GroupStylePanel";
+static const wchar_t* GROUP_LABEL = L"GroupLabel";
+static const wchar_t* VALUE_LABEL = L"ValueLabel";
+
+static const int Y_THUMBNAIL = 34;
+static const int H_THUMBNAIL = 360;
+static const int X_MAIN_INFO = 26;
+static const int H_NAME = 70;
+static const int H_SUB_INFO = 40;
+static const int H_SUB_INFO_DIVIDER = 6;
+static const int H_DEFAULT_NUMBER = 50;
+static const int H_QUICK_BUTTON_DIVIDER = 42;
+#if __SUPPORT_VIDEO_CALL
+static const int W_QUICK_BUTTON_GAP = 115;
+static const int X_QUICK_BUTTON = 38;
+#else
+static const int W_QUICK_BUTTON_GAP = 148;
+static const int X_QUICK_BUTTON = 148;
+#endif
+static const int H_QUICK_BUTTON = 138;
+static const int Y_FAVORITE = 10;
+static const int H_FAVORITE = 45;
+static const int W_FAVORITE_GAP = 26;
+static const int W_GROUP_STYLE_MARGIN = 16;
+static const int W_TEXT_MARGIN = 15;
+static const int W_TYPE = 220;
+static const int H_ITEM = 112;
+static const int H_ITEM_DOUBLE_LINE = 148;
+static const int H_ADDITIONAL_ITEM = 54;
+static const int Y_ITEM_TITLE = 22;
+static const int H_ITEM_TITLE = 42;
+static const int H_ITEM_VALUE = 62;
+static const int H_ICON = 74;
+static const int Y_BUTTON = 20;
+static const int H_BUTTON = 72;
+static const int H_BUTTON_CONTAINER = 132;
+static const int W_BUTTON_GAP = 18;
+
+static const int W_POPUP = 688;
+static const int H_POPUP = 532;
+static const int H_POPUP_LIST_VIEW = 338;
+static const int Y_POPUP_BUTTON = 358;
+static const int H_POPUP_BUTTON = 74;
+static const int W_POPUP_BUTTON = 394;
+
+static const int SUB_INDEX_MASK = 0xF000;
+static const int MESSAGE_BOX_TIMEOUT_MS = 300000;
+
+static const unsigned int COLOR_TABLE_BG = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_ITEM_TITLE = Color32<128, 128, 128>::Value;
+static const unsigned int COLOR_ITEM_VALUE = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_ITEM_TYPE = Color32<128, 128, 128>::Value;
+static const unsigned int COLOR_OTHER_NUMBER = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_NAME = Color32<59, 115, 182>::Value;
+static const unsigned int COLOR_GROUP_STYLE = Color32<240, 237, 232>::Value;
+static const unsigned int COLOR_PRESSED = Color32<87, 135, 194>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_NORMAL = Color32<213, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_TEXT = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_ITEM_PRESSED = Color32<248, 246, 239>::Value;
+
+static const int FONT_SIZE_NAME = 56;
+static const int FONT_SIZE_SUB_INFO = 32;
+static const int FONT_SIZE_MAIN_TEXT = 44;
+static const int FONT_SIZE_SUB_TEXT = 32;
+
+static const wchar_t* INPUT_KEY_CALL_TYPE = L"http://tizen.org/appcontrol/data/call/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TYPE = L"http://tizen.org/appcontrol/data/message/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TO = L"http://tizen.org/appcontrol/data/to";
+static const wchar_t* INPUT_KEY_SELECTION_MODE = L"http://tizen.org/appcontrol/data/selection_mode";
+static const wchar_t* INPUT_DATA_SELECTION_MODE_SINGLE = L"single";
+static const wchar_t* INPUT_MIME_TYPE_AUDIO = L"audio/*";
+static const wchar_t* INPUT_URI_TEL = L"tel:";
+static const wchar_t* INPUT_TYPE_VIDEO = L"video";
+static const wchar_t* INPUT_TYPE_VOICE = L"voice";
+static const wchar_t* INPUT_TYPE_SMS = L"sms";
+static const wchar_t* INPUT_TYPE_MMS = L"mms";
+static const wchar_t* OUTPUT_KEY_SELECTED = L"http://tizen.org/appcontrol/data/selected";
+static const wchar_t* KEY_VIEW_TYPE = L"viewType";
+static const wchar_t* KEY_VIEW_TYPE_VCF = L"path";
+static const wchar_t* KEY_VIEW_TYPE_CONTACT_ID = L"contactId";
+static const wchar_t* VALUE_VIEW_TYPE_VCF = L"vcf";
+static const wchar_t* VALUE_VIEW_TYPE_CONTACT = L"contact";
+
+ContactDetailsForm::ContactDetailsForm(void)
+: __isAppControlLaunching(false)
+, __pAppControl(null)
+, __pTableView(null)
+, __pContextMenuCall(null)
+, __pContextMenuShare(null)
+, __pFileEventManager(null)
+, __pOptionMenu(null)
+, __pDefaultSelectorPopup(null)
+, __pDeletePopup(null)
+, __pItemList(null)
+, __pPresentationModel(null)
+, __scrolledDistance(0)
+, __pFavoriteButton(null)
+, __pGroupsItem(null)
+, __pRingtoneItem(null)
+, __pClearButton(null)
+{
+}
+
+ContactDetailsForm::~ContactDetailsForm(void)
+{
+}
+
+void
+ContactDetailsForm::Initialize(void)
+{
+       Construct(L"IDL_CONTACT_DETAILS_FORM");
+}
+
+result
+ContactDetailsForm::OnInitializing(void)
+{
+       Footer* pFooter = GetFooter();
+       pFooter->AddActionEventListener(*this);
+       SetFormBackEventListener(this);
+       SetFormMenuEventListener(this);
+
+       __pTableView = new (std::nothrow) TableView();
+       __pTableView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height), false, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
+       __pTableView->SetItemProvider(this);
+       __pTableView->AddTableViewItemEventListener(*this);
+       __pTableView->SetBackgroundColor(COLOR_TABLE_BG);
+       __pTableView->AddTouchEventListener(*this);
+       __pTableView->AddScrollEventListener(*this);
+       AddControl(__pTableView);
+
+       __pContextMenuCall = new (std::nothrow) ContextMenu();
+       __pContextMenuCall->Construct(Point(0, 0), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuCall->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_CALL"), IDA_VOICE_CALL);
+       __pContextMenuCall->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), IDA_MESSAGE);
+#if    __SUPPORT_VIDEO_CALL
+       __pContextMenuCall->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), IDA_VIDEO_CALL);
+#endif
+       __pContextMenuCall->AddActionEventListener(*this);
+       __pContextMenuCall->SetFocusable(true);
+
+       __pContextMenuShare = new (std::nothrow) ContextMenu();
+       __pContextMenuShare->Construct(Point(0, 0), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuShare->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_EMAIL"), IDA_CONTEXTMENU_SHARE_EMAIL);
+       __pContextMenuShare->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), IDA_CONTEXTMENU_SHARE_MESSAGE);
+       __pContextMenuShare->AddActionEventListener(*this);
+       __pContextMenuShare->SetFocusable(true);
+
+       __pItemList = new (std::nothrow) ArrayListT<int>();
+       __pItemList->Construct();
+
+       __pPresentationModel = new (std::nothrow) ContactPresentationModel();
+       __pPresentationModel->Construct();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER"), IDA_MORE_DEFAULT_NUMBER);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+
+       return E_SUCCESS;
+}
+
+result
+ContactDetailsForm::OnTerminating(void)
+{
+       delete __pAppControl;
+       delete __pContextMenuCall;
+       delete __pContextMenuShare;
+       delete __pFileEventManager;
+       delete __pOptionMenu;
+
+       if (__pItemList != null)
+       {
+               __pItemList->RemoveAll();
+               delete __pItemList;
+       }
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+               delete __pPresentationModel;
+       }
+       if (__pDeletePopup != null)
+       {
+               delete __pDeletePopup;
+       }
+
+       delete __pDefaultSelectorPopup;
+
+       return E_SUCCESS;
+}
+
+void
+ContactDetailsForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       AppLog("ContactDetailsForm::OnActionPerformed(), actionId %d", actionId);
+
+       result r = E_SUCCESS;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (actionId)
+       {
+       case IDA_FOOTER_EDIT:
+               {
+                       __currentFocusedItem = L"";
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+                       pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetContactId())));
+                       r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go forward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_FOOTER_DELETE:
+               {
+                       __currentFocusedItem = L"";
+                       ShowDeletePopup();
+               }
+               break;
+       case IDA_FOOTER_ADD:
+               {
+                       __currentFocusedItem = L"";
+                       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+                       
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_VIEW)
+                       {
+                               if(Tizen::Io::File::IsFileExist(__pPresentationModel->GetVcfPath()) == false)
+                               {
+                                       ShowInvalidFileMessageBox(ResourceManager::GetString(L"IDS_MP_POP_INVALID_FILE"), true);
+                                       return;
+                               }
+                       }
+
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+                       pList->Add(*(new (std::nothrow) Integer(INVALID_RECORD_ID)));
+                       pList->Add(*(new (std::nothrow) String(__pPresentationModel->GetVcfPath())));
+                       r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go forward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_MORE_DEFAULT_NUMBER:
+               {
+                       __currentFocusedItem = L"";
+                       ShowDefaultSelectorPopup();
+               }
+               break;
+       case IDA_BUTTON_RINGTONE_CLEAR:
+               {
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, String());
+                       __pPresentationModel->UpdateContact();
+                       __pTableView->RefreshItem(__pItemList->GetCount() - 1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               }
+               break;
+       case IDA_VOICE_CALL:
+               {
+                       __currentFocusedItem = L"";
+                       r = LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, INPUT_TYPE_VOICE, source.GetName());
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to launch appcontrol", GetErrorMessage(r));
+               }
+               break;
+       case IDA_MESSAGE:
+               {
+                       __currentFocusedItem = L"";
+                       r = LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, INPUT_TYPE_SMS, source.GetName());
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to launch appcontrol", GetErrorMessage(r));
+               }
+               break;
+       case IDA_VIDEO_CALL:
+               {
+                       __currentFocusedItem = L"";
+                       r = LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, INPUT_TYPE_VIDEO, source.GetName());
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to launch appcontrol", GetErrorMessage(r));
+               }
+               break;
+       case IDA_CONTEXTMENU_SHARE_EMAIL:
+               {
+                       __currentFocusedItem = L"";
+                       r = LaunchAppControl(PROVIDER_ID_EMAIL, OPERATION_ID_COMPOSE);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to launch appcontrol", GetErrorMessage(r));
+               }
+               break;
+       case IDA_CONTEXTMENU_SHARE_MESSAGE:
+               {
+                       __currentFocusedItem = L"";
+                       r = LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, INPUT_TYPE_MMS);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to launch appcontrol", GetErrorMessage(r));
+               }
+               break;
+       case IDA_BUTTON_SHARE_NAME_CARD:
+               {
+                       __currentFocusedItem = L"";
+                       Point itemPoint;
+                       itemPoint.x = GetClientAreaBounds().width / 2;
+                       itemPoint.y = 0;
+
+                       TableViewItem* pParent = static_cast<TableViewItem*>(source.GetParent());
+                       if (pParent != null)
+                       {
+                               itemPoint.y = GetClientAreaBounds().y + pParent->GetY() + source.GetY() - __scrolledDistance;
+                       }
+
+                       __pContextMenuShare->SetAnchorPosition(itemPoint);
+                       __pContextMenuShare->SetShowState(true);
+                       __pContextMenuShare->Show();
+               }
+               break;
+       case IDA_POPUP_CLOSE:
+               {
+                       HideDefaultSelectorPopup();
+               }
+               break;
+       case IDA_FAVORITE_BUTTON:
+               {
+                       __pFavoriteButton = static_cast<Button*>(&const_cast<Control&>(source));
+                       if (__pFavoriteButton == null)
+                       {
+                               return;
+                       }
+
+                       __pPresentationModel->SetAsFavorite(!__pPresentationModel->IsFavorite());
+
+                       Bitmap* pBitmapNormal = null;
+                       Bitmap* pBitmapPressed = null;
+                       if (__pPresentationModel->IsFavorite())
+                       {
+                               pBitmapNormal = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_ON);
+                               pBitmapPressed = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_OFF);
+                       }
+                       else
+                       {
+                               pBitmapNormal = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_OFF);
+                               pBitmapPressed = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_ON);
+                       }
+
+                       if (pBitmapNormal != null && pBitmapPressed != null)
+                       {
+                               __pFavoriteButton->SetNormalBackgroundBitmap(*pBitmapNormal);
+                               __pFavoriteButton->SetPressedBackgroundBitmap(*pBitmapPressed);
+                               delete pBitmapNormal;
+                               delete pBitmapPressed;
+                       }
+                       __pFavoriteButton->Invalidate(false);
+               }
+               break;
+       case IDA_POPUP_DELETE_OK:
+               {
+                       r = __pPresentationModel->RemoveContact();
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to remove contact", GetErrorMessage(r));
+                       HideDeletePopup();
+               }
+               break;
+       case IDA_POPUP_DELETE_CANCEL:
+               {
+                       HideDeletePopup();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactDetailsForm::ShowDeletePopup(void)
+{
+       if (__pDeletePopup == null)
+       {
+               __pDeletePopup = new (std::nothrow) Popup();
+               __pDeletePopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_POPUP));
+               __pDeletePopup->SetPropagatedKeyEventListener(this);
+
+               Rectangle popupClientBounds = __pDeletePopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_LABEL, W_DELETE_LABEL, H_DELETE_LABEL), ResourceManager::GetString(L"IDS_COM_POP_DELETE_Q"));
+               pLabel->SetTextConfig(FONT_SIZE_DELETE_CONFIRM, LABEL_TEXT_STYLE_NORMAL);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+               Button* pDeleteButton = new (std::nothrow) Button();
+               pDeleteButton->Construct(Rectangle(X_DELETE_LABEL + W_DELETE_BUTTON + W_POPUP_ITEM_GAP, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+               pDeleteButton->SetColor(BUTTON_STATUS_NORMAL, COLOR_DELETE_BUTTON_NORMAL);
+               pDeleteButton->SetColor(BUTTON_STATUS_PRESSED, COLOR_DELETE_BUTTON_PRESSED);
+               pDeleteButton->SetTextColor(COLOR_DELETE_BUTTON_TEXT);
+               pDeleteButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pDeleteButton->SetActionId(IDA_POPUP_DELETE_OK);
+               pDeleteButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pCancelButton->SetActionId(IDA_POPUP_DELETE_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pDeletePopup->AddControl(pLabel);
+               __pDeletePopup->AddControl(pDeleteButton);
+               __pDeletePopup->AddControl(pCancelButton);
+       }
+
+       __pDeletePopup->SetShowState(true);
+       __pDeletePopup->Show();
+}
+
+void
+ContactDetailsForm::HideDeletePopup(void)
+{
+       if (__pDeletePopup != null)
+       {
+               __pDeletePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       __pOptionMenu->SetShowState(true);
+       __pOptionMenu->Show();
+}
+
+void
+ContactDetailsForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       if (__appControlViewType.IsEmpty() == false)
+       {
+               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+               AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+               result r = pAppManager->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_CANCELED, null);
+               AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+               UiApp::GetInstance()->Terminate();
+       }
+       else
+       {
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+       }
+}
+
+void
+ContactDetailsForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to cast UiApp to ContactsApp");
+
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+       SettingInfo::AddSettingEventListener(*this);
+
+       if (previousSceneId == IDSCN_GROUP_SELECTOR || previousSceneId == IDSCN_GROUP_EDITOR)
+       {
+               if (pArgs == null)
+               {
+                       return;
+               }
+
+               Integer* pArgument = null;
+               __pPresentationModel->RemoveContactFromAllCategories();
+               IEnumerator* pEnum = pArgs->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pArgument = static_cast<Integer*>(pEnum->GetCurrent());
+                       if (pArgument != null)
+                       {
+                               __pPresentationModel->AddContactToCategory(pArgument->ToInt());
+                       }
+               }
+               delete pEnum;
+
+               __pTableView->RefreshItem(__pItemList->GetCount() - 2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else if (previousSceneId == IDSCN_CONTACT_EDITOR && __appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == false)
+       {
+               InitializeDetailItemList();
+               __pTableView->UpdateTableView();
+       }
+       else
+       {
+               if (pArgs == null)
+               {
+                       return;
+               }
+
+               if (pContactsApp->GetOperationId() == OPERATION_ID_VIEW)
+               {
+                       __pPresentationModel->RemoveContactChangeListener(*this);
+                       SettingInfo::RemoveSettingEventListener(*this);
+
+                       String *pError = static_cast<String*>(pArgs->GetAt(2));
+                       if (pError != null)
+                       {
+                               ShowInvalidFileMessageBox(*pError);
+                       }
+
+                       result r = InitializeAppControl(pArgs);
+
+                       if (IsFailed(r))
+                       {
+                               pArgs->RemoveAll(true);
+                               delete pArgs;
+                               AppLogDebug("Unable to initialize appcontrol");
+
+                               ShowInvalidFileMessageBox(ResourceManager::GetString(L"IDS_RSSR_BODY_INVALID_FORMAT"));
+
+                               return;
+                       }
+
+                       InitializeDetailItemList();
+               }
+               else
+               {
+                       Integer* pContactId = static_cast<Integer*>(pArgs->GetAt(0));
+                       if (pContactId != null)
+                       {
+                               __pPresentationModel->SetContactId(pContactId->ToInt());
+                               InitializeDetailItemList();
+                       }
+               }
+               __pTableView->UpdateTableView();
+       }
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+result
+ContactDetailsForm::InitializeAppControl(Tizen::Base::Collection::IList* pArgs)
+{
+       if (pArgs == null)
+       {
+               return E_FAILURE;
+       }
+
+       result r = E_SUCCESS;
+
+       String* pArgStringType = null;
+       String* pArgStringValue = null;
+       String keyViewType;
+       String keyValue;
+       String valueViewType;
+       String value;
+
+       pArgStringType = static_cast<String*>(pArgs->GetAt(0));
+       pArgStringValue = static_cast<String*>(pArgs->GetAt(1));
+
+       TryReturn(pArgStringType != null && pArgStringValue != null, E_FAILURE, "[E_FAILURE] Unable to initialize appcontrol");
+
+       ParseAppControlArgument(*pArgStringType, keyViewType, valueViewType);
+       ParseAppControlArgument(*pArgStringValue, keyValue, value);
+
+       if (keyViewType.Equals(KEY_VIEW_TYPE, false))
+       {
+               if (valueViewType.Equals(VALUE_VIEW_TYPE_CONTACT, false))
+               {
+                       if (keyValue.Equals(KEY_VIEW_TYPE_CONTACT_ID, false))
+                       {
+                               RecordId contactId;
+                               Integer::Parse(value, contactId);
+                               r = __pPresentationModel->SetContactId(contactId);
+                               __appControlViewType = valueViewType;
+
+                               Footer* pFooter = GetFooter();
+                               pFooter->RemoveAllItems();
+
+                               FooterItem footerItemEdit;
+                               footerItemEdit.Construct(IDA_FOOTER_EDIT);
+                               footerItemEdit.SetText(ResourceManager::GetString(L"IDS_COM_SK_EDIT"));
+                               pFooter->AddItem(footerItemEdit);
+
+                               __pPresentationModel->AddContactChangeListener(*this);
+                       }
+                       else
+                       {
+                               AppLogDebug("Invalid KEY(contactId) of AppControl[VIEW]. [%ls] has been input", keyValue.GetPointer());
+                               r = E_FAILURE;
+                       }
+               }
+               else if (valueViewType.Equals(VALUE_VIEW_TYPE_VCF, false))
+               {
+                       if (keyValue.Equals(KEY_VIEW_TYPE_VCF, false))
+                       {
+                               r = __pPresentationModel->SetVcfPath(value);
+
+                               __appControlViewType = valueViewType;
+                               Footer* pFooter = GetFooter();
+                               pFooter->RemoveAllItems();
+                               pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+
+                               FooterItem footerItemAdd;
+                               footerItemAdd.Construct(IDA_FOOTER_ADD);
+                               footerItemAdd.SetText(ResourceManager::GetString(L"IDS_COM_OPT_ADD_TO_CONTACTS"));
+                               pFooter->AddItem(footerItemAdd);
+                       }
+                       else
+                       {
+                               AppLogDebug("Invalid KEY(path) of AppControl[VIEW]. [%ls] has been input", keyValue.GetPointer());
+                               r = E_FAILURE;
+                       }
+               }
+               else
+               {
+                       AppLogDebug("viewType of AppControl[VIEW] should be either vcf or contact. [%ls] has been inpue", keyValue.GetPointer());
+                       r = E_FAILURE;
+               }
+       }
+       else
+       {
+               AppLogDebug("Invalid KEY(viewType) of AppControl[VIEW]. [%ls] has been input", keyViewType.GetPointer());
+               r = E_FAILURE;
+       }
+
+       return r;
+}
+
+void
+ContactDetailsForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+       SettingInfo::RemoveSettingEventListener(*this);
+
+       delete __pAppControl;
+       __pAppControl = null;
+}
+
+void
+ContactDetailsForm::InitializeDetailItemList(void)
+{
+       if (__pItemList->GetCount() > 0)
+       {
+               __pItemList->RemoveAll();
+       }
+
+       // Default area
+       __pItemList->Add(DETAIL_PROPERTY_MAIN_INFO);
+
+       // Other Phone Numbers
+       Footer* pFooter = GetFooter();
+       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+       int otherNumberCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER);
+       
+       if (otherNumberCount > 1)
+       {
+               if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == false)
+               {
+                       SetFormMenuEventListener(this);
+               }
+               else
+               {
+                       SetFormMenuEventListener(null);
+               }
+
+               for (int subIndex = 0; subIndex < otherNumberCount; subIndex++)
+               {
+                       if (__pPresentationModel->GetDefaultNumberIndex() != subIndex)
+                       {
+                               __pItemList->Add(DETAIL_PROPERTY_PHONE_NUMBER + subIndex);
+                       }
+               }
+       }
+       else
+       {
+               SetFormMenuEventListener(null);
+       }
+
+       if (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL) > 0)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_EMAIL);
+       }
+
+       if (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_ADDRESS) > 0)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_ADDRESS);
+       }
+
+       if (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS) > 0)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_IM_ADDRESS);
+       }
+
+       if (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL) > 0)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_URL);
+       }
+
+       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_BIRTHDAY).IsEmpty() == false)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_BIRTHDAY);
+       }
+
+       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_NOTE).IsEmpty() == false)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_NOTE);
+       }
+
+       __pItemList->Add(DETAIL_PROPERTY_GROUP);
+       __pItemList->Add(DETAIL_PROPERTY_RINGTONE);
+}
+
+int
+ContactDetailsForm::GetItemCount(void)
+{
+       return __pItemList->GetCount();
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactDetailsForm::CreateItem(int itemIndex, int itemWidth)
+{
+       TableViewItem* pItem = new (std::nothrow) TableViewItem();
+
+       int contentItemIndex = -1;
+       int itemSubIndex = -1;
+       __pItemList->GetAt(itemIndex, contentItemIndex);
+
+       switch (contentItemIndex & SUB_INDEX_MASK)
+       {
+       case DETAIL_PROPERTY_PHONE_NUMBER:
+               {
+                       itemSubIndex = contentItemIndex - DETAIL_PROPERTY_PHONE_NUMBER;
+                       contentItemIndex = DETAIL_PROPERTY_PHONE_NUMBER;
+               }
+               break;
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       contentItemIndex = DETAIL_PROPERTY_EMAIL;
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       contentItemIndex = DETAIL_PROPERTY_IM_ADDRESS;
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       contentItemIndex = DETAIL_PROPERTY_ADDRESS;
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       contentItemIndex = DETAIL_PROPERTY_URL;
+               }
+               break;
+       default:
+               break;
+       }
+
+       switch (contentItemIndex)
+       {
+       case DETAIL_PROPERTY_MAIN_INFO:
+               {
+                       AddMainInfo(itemWidth, pItem);
+               }
+               break;
+       case DETAIL_PROPERTY_PHONE_NUMBER: // fall through
+       case DETAIL_PROPERTY_EMAIL: // fall through
+       case DETAIL_PROPERTY_ADDRESS: // fall through
+       case DETAIL_PROPERTY_URL: // fall through
+       case DETAIL_PROPERTY_BIRTHDAY: // fall through
+       case DETAIL_PROPERTY_NOTE:
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       AddProperty(itemWidth, pItem, contentItemIndex, itemSubIndex);
+               }
+               break;
+       case DETAIL_PROPERTY_GROUP:
+               {
+                       AddGroup(itemWidth, pItem);
+               }
+               break;
+       case DETAIL_PROPERTY_RINGTONE:
+               {
+                       AddRingTone(itemWidth, pItem);
+               }
+               break;
+       default:
+               {
+                       delete pItem;
+                       pItem = null;
+               }
+               break;
+       }
+
+       return pItem;
+}
+
+bool
+ContactDetailsForm::DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       delete pItem;
+       return true;
+}
+
+void
+ContactDetailsForm::UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       int contentItemIndex = -1;
+       __pItemList->GetAt(itemIndex, contentItemIndex);
+
+       String value;
+
+       if (contentItemIndex == DETAIL_PROPERTY_GROUP)
+       {
+               value =  __pPresentationModel->GetValue(DETAIL_PROPERTY_GROUP);
+
+               if (value.IsEmpty())
+               {
+                       value = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+               }
+       }
+       else if (contentItemIndex == DETAIL_PROPERTY_RINGTONE)
+       {
+               String path =  __pPresentationModel->GetValue(DETAIL_PROPERTY_RINGTONE);
+               int index = 0;
+               path.LastIndexOf(L"/", path.GetLength() - 1, index);
+
+               if (index != 0)
+               {
+                       path.SubString(index + 1, value);
+               }
+       }
+
+       Label* pValueLabel = static_cast<Label*>(pItem->GetControl(2));
+       if (pValueLabel == null)
+       {
+               return;
+       }
+
+       pValueLabel->SetText(value);
+       pValueLabel->Invalidate(false);
+}
+
+int
+ContactDetailsForm::GetDefaultItemHeight(void)
+{
+       return H_ITEM;
+}
+
+void
+ContactDetailsForm::AddMainInfo(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       int itemHeight = Y_THUMBNAIL;
+
+       Label* pThumbnailLabel = null;
+
+       String thumbnailPath = __pPresentationModel->GetValue(DETAIL_PROPERTY_THUMBNAIL);
+       Bitmap* pThumbnail = null;
+       ImageBuffer thumbnailImageBuffer;
+       result r = thumbnailImageBuffer.Construct(thumbnailPath);
+       if (r == E_SUCCESS)
+       {
+               pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_ARGB8888, BUFFER_SCALING_NONE);
+       }
+       if (pThumbnail != null)
+       {
+               pThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_HIGH);
+               pThumbnail->Scale(Dimension(H_THUMBNAIL, H_THUMBNAIL));
+               pThumbnailLabel = new (std::nothrow) Label();
+               pThumbnailLabel->Construct(Rectangle((itemWidth - H_THUMBNAIL) / 2, Y_THUMBNAIL, H_THUMBNAIL, H_THUMBNAIL), L"");
+               pThumbnailLabel->SetBackgroundBitmap(*pThumbnail);
+               delete pThumbnail;
+
+               itemHeight += (H_THUMBNAIL + Y_THUMBNAIL);
+       }
+
+       String name;
+       String nickName = __pPresentationModel->GetValue(DETAIL_PROPERTY_NICK_NAME);
+       String jobTitle = __pPresentationModel->GetValue(DETAIL_PROPERTY_JOB_TITLE);
+       String company = __pPresentationModel->GetValue(DETAIL_PROPERTY_COMPANY);
+       String department = __pPresentationModel->GetValue(DETAIL_PROPERTY_DEPARTMENT);
+
+       __pPresentationModel->GetDisplayName(name);
+       if (name.IsEmpty())
+       {
+               if (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER))
+               {
+                       name.Append(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER));
+               }
+               else
+               {
+                       name.Append(__pPresentationModel->GetValue(DETAIL_PROPERTY_EMAIL, 0));
+               }
+       }
+
+       String companyInfo;
+       if (jobTitle.IsEmpty() == false)
+       {
+               companyInfo = jobTitle + CHARACTER_SPACE;
+       }
+       if (company.IsEmpty() == false)
+       {
+               companyInfo += company + CHARACTER_SPACE;
+       }
+       if (department.IsEmpty() == false)
+       {
+               companyInfo += department;
+       }
+
+       Label* pNameLabel = null;
+       __pFavoriteButton = null;
+       if (name.IsEmpty() == false)
+       {
+               pNameLabel = new (std::nothrow) Label();
+               pNameLabel->Construct(Rectangle(X_MAIN_INFO, itemHeight, itemWidth - (X_MAIN_INFO + H_FAVORITE + W_FAVORITE_GAP * 2), H_NAME), name);
+               pNameLabel->SetTextConfig(FONT_SIZE_NAME, LABEL_TEXT_STYLE_BOLD);
+               pNameLabel->SetTextColor(COLOR_NAME);
+               pNameLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pNameLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
+
+               if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == false)
+               {
+                       __pFavoriteButton = new (std::nothrow) Button();
+                       __pFavoriteButton->Construct(Rectangle(itemWidth - (H_FAVORITE + W_FAVORITE_GAP * 2), itemHeight + Y_FAVORITE, H_FAVORITE, H_FAVORITE), L"");
+                       __pFavoriteButton->SetActionId(IDA_FAVORITE_BUTTON);
+                       __pFavoriteButton->SetName(Integer::ToString(IDA_FAVORITE_BUTTON));
+                       __pFavoriteButton->AddActionEventListener(*this);
+                       __pFavoriteButton->AddFocusEventListener(*this);
+
+                       Bitmap* pBitmapNormal = null;
+                       Bitmap* pBitmapPressed = null;
+                       if (__pPresentationModel->IsFavorite())
+                       {
+                               pBitmapNormal = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_ON);
+                               pBitmapPressed = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_OFF);
+                       }
+                       else
+                       {
+                               pBitmapNormal = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_OFF);
+                               pBitmapPressed = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_ON);
+                       }
+
+                       if (pBitmapNormal != null && pBitmapPressed != null)
+                       {
+                               __pFavoriteButton->SetNormalBackgroundBitmap(*pBitmapNormal);
+                               __pFavoriteButton->SetPressedBackgroundBitmap(*pBitmapPressed);
+                               delete pBitmapNormal;
+                               delete pBitmapPressed;
+                       }
+               }
+
+               itemHeight += H_NAME;
+       }
+
+       Label* pSuffixNickNameLabel = null;
+       if (nickName.IsEmpty() == false)
+       {
+               pSuffixNickNameLabel = new (std::nothrow) Label();
+               pSuffixNickNameLabel->Construct(Rectangle(X_MAIN_INFO, itemHeight, itemWidth - X_MAIN_INFO, H_SUB_INFO), nickName);
+               pSuffixNickNameLabel->SetTextConfig(FONT_SIZE_SUB_INFO, LABEL_TEXT_STYLE_NORMAL);
+               pSuffixNickNameLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pSuffixNickNameLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               itemHeight += (H_SUB_INFO + H_SUB_INFO_DIVIDER);
+       }
+
+       Label* pCompanyInfoLabel = null;
+       if (companyInfo.IsEmpty() == false)
+       {
+               pCompanyInfoLabel = new (std::nothrow) Label();
+               pCompanyInfoLabel->Construct(Rectangle(X_MAIN_INFO, itemHeight, itemWidth - X_MAIN_INFO, H_SUB_INFO), companyInfo);
+               pCompanyInfoLabel->SetTextConfig(FONT_SIZE_SUB_INFO, LABEL_TEXT_STYLE_NORMAL);
+               pCompanyInfoLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pCompanyInfoLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               itemHeight += (H_SUB_INFO + H_SUB_INFO_DIVIDER);
+       }
+
+       Label* pDefaultNumberLabel = null;
+       Button* pCallButton = null;
+       Button* pMessageButton = null;
+#if __SUPPORT_VIDEO_CALL
+       Button* pVideoCallButton = null;
+#endif
+
+       String defaultPhoneNumber = __pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER);
+       if (defaultPhoneNumber.IsEmpty() == false)
+       {
+               pDefaultNumberLabel = new (std::nothrow) Label();
+               pDefaultNumberLabel->Construct(Rectangle(X_MAIN_INFO, itemHeight, itemWidth - X_MAIN_INFO, H_DEFAULT_NUMBER), defaultPhoneNumber);
+               pDefaultNumberLabel->SetTextConfig(FONT_SIZE_MAIN_TEXT, LABEL_TEXT_STYLE_BOLD);
+               pDefaultNumberLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pDefaultNumberLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               itemHeight += (H_DEFAULT_NUMBER + H_QUICK_BUTTON_DIVIDER);
+
+               Bitmap* pBgNormal = ResourceManager::GetBitmapN(IDB_CIRCLE_BUTTON_NORMAL);
+               Bitmap* pBgPressed = ResourceManager::GetBitmapN(IDB_CIRCLE_BUTTON_PRESSED);
+               Bitmap* pCallNormal = ResourceManager::GetBitmapN(IDB_CALL_NORMAL);
+               Bitmap* pCallPressed = ResourceManager::GetBitmapN(IDB_CALL_PRESSED);
+               Bitmap* pMessageNormal = ResourceManager::GetBitmapN(IDB_SMS_NORMAL);
+               Bitmap* pMessagePressed = ResourceManager::GetBitmapN(IDB_SMS_PRESSED);
+               Bitmap* pVideoCallNormal = ResourceManager::GetBitmapN(IDB_VIDEO_CALL_NORMAL);
+               Bitmap* pVideoCallPressed = ResourceManager::GetBitmapN(IDB_VIDEO_CALL_PRESSED);
+
+               pCallButton = new (std::nothrow) Button();
+               pCallButton->Construct(Rectangle(X_QUICK_BUTTON, itemHeight, H_QUICK_BUTTON, H_QUICK_BUTTON));
+               pCallButton->SetActionId(IDA_VOICE_CALL);
+               pCallButton->AddActionEventListener(*this);
+               if (pBgNormal != null)
+               {
+                       pCallButton->SetNormalBackgroundBitmap(*pBgNormal);
+               }
+               if (pBgPressed != null)
+               {
+                       pCallButton->SetPressedBackgroundBitmap(*pBgPressed);
+               }
+               if (pCallNormal != null)
+               {
+                       pCallButton->SetNormalBitmap(Point(0, 0), *pCallNormal);
+               }
+               if (pCallPressed != null)
+               {
+                       pCallButton->SetPressedBitmap(Point(0, 0), *pCallPressed);
+               }
+
+               pMessageButton = new (std::nothrow) Button();
+               pMessageButton->Construct(Rectangle((X_QUICK_BUTTON + H_QUICK_BUTTON + W_QUICK_BUTTON_GAP), itemHeight, H_QUICK_BUTTON, H_QUICK_BUTTON));
+               pMessageButton->SetActionId(IDA_MESSAGE);
+               pMessageButton->AddActionEventListener(*this);
+               if (pBgNormal != null)
+               {
+                       pMessageButton->SetNormalBackgroundBitmap(*pBgNormal);
+               }
+               if (pBgPressed != null)
+               {
+                       pMessageButton->SetPressedBackgroundBitmap(*pBgPressed);
+               }
+               if (pMessageNormal != null)
+               {
+                       pMessageButton->SetNormalBitmap(Point(0, 0), *pMessageNormal);
+               }
+               if (pMessagePressed != null)
+               {
+                       pMessageButton->SetPressedBitmap(Point(0, 0), *pMessagePressed);
+               }
+#if __SUPPORT_VIDEO_CALL
+               pVideoCallButton = new (std::nothrow) Button();
+               pVideoCallButton->Construct(Rectangle((X_QUICK_BUTTON + (H_QUICK_BUTTON * 2) + (W_QUICK_BUTTON_GAP * 2)), itemHeight, H_QUICK_BUTTON, H_QUICK_BUTTON));
+               pVideoCallButton->SetActionId(IDA_VIDEO_CALL);
+               pVideoCallButton->AddActionEventListener(*this);
+               if (pBgNormal != null)
+               {
+                       pVideoCallButton->SetNormalBackgroundBitmap(*pBgNormal);
+               }
+               if (pBgPressed != null)
+               {
+                       pVideoCallButton->SetPressedBackgroundBitmap(*pBgPressed);
+               }
+               if (pVideoCallNormal != null)
+               {
+                       pVideoCallButton->SetNormalBitmap(Point(0, 0), *pVideoCallNormal);
+               }
+               if (pVideoCallPressed != null)
+               {
+                       pVideoCallButton->SetPressedBitmap(Point(0, 0), *pVideoCallPressed);
+               }
+#endif
+
+               delete pBgNormal;
+               delete pBgPressed;
+               delete pCallNormal;
+               delete pCallPressed;
+               delete pMessageNormal;
+               delete pMessagePressed;
+               delete pVideoCallNormal;
+               delete pVideoCallPressed;
+
+               itemHeight += (H_QUICK_BUTTON + H_QUICK_BUTTON_DIVIDER);
+       }
+       else
+       {
+               itemHeight += H_QUICK_BUTTON_DIVIDER;
+       }
+
+       pItem->Construct(Dimension(itemWidth, itemHeight));
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       if (pThumbnailLabel != null)
+       {
+               pItem->AddControl(pThumbnailLabel);
+       }
+       if (pNameLabel != null)
+       {
+               pItem->AddControl(pNameLabel);
+       }
+       if (__pFavoriteButton != null)
+       {
+               pItem->AddControl(__pFavoriteButton);
+       }
+       if (pSuffixNickNameLabel != null)
+       {
+               pItem->AddControl(pSuffixNickNameLabel);
+       }
+       if (pCompanyInfoLabel != null)
+       {
+               pItem->AddControl(pCompanyInfoLabel);
+       }
+       if (pDefaultNumberLabel != null)
+       {
+               pItem->AddControl(pDefaultNumberLabel);
+       }
+#if __SUPPORT_VIDEO_CALL
+       if (pCallButton != null && pMessageButton != null && pVideoCallButton != null)
+       {
+               pItem->AddControl(pCallButton);
+               pItem->AddControl(pMessageButton);
+               pItem->AddControl(pVideoCallButton);
+       }
+#else
+       if (pCallButton != null && pMessageButton != null)
+       {
+               pItem->AddControl(pCallButton);
+               pItem->AddControl(pMessageButton);
+       }
+#endif
+}
+
+void
+ContactDetailsForm::AddProperty(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, int detailProperty, int itemSubIndex)
+{
+       String title;
+       String value;
+       String type;
+       int lineCount = 1;
+       int itemHeight = H_ITEM_DOUBLE_LINE;
+       int valueCount = __pPresentationModel->GetMultiValuesCount(static_cast<DetailProperty>(detailProperty));
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (detailProperty != DETAIL_PROPERTY_PHONE_NUMBER && valueCount > 1)
+       {
+               pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE + pContactsApp->GetFontHeightOffset() + ((H_ADDITIONAL_ITEM + pContactsApp->GetFontHeightOffset()) * (valueCount - 1))), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+               CreateTitleValueTypeItem(itemWidth, pItem, detailProperty);
+
+               return;
+       }
+
+       switch (detailProperty)
+       {
+       case DETAIL_PROPERTY_PHONE_NUMBER:
+               {
+                       type = __pPresentationModel->GetType(DETAIL_PROPERTY_PHONE_NUMBER, itemSubIndex);
+                       value = __pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, itemSubIndex);
+
+                       pItem->Construct(Dimension(itemWidth, H_ITEM + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+                       pItem->SetName(value);
+
+                       CreateValueTypeItem(itemWidth, pItem, value, type);
+
+                       return;
+               }
+               break;
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       title = ResourceManager::GetString(L"IDS_COM_BODY_EMAIL");
+                       type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), 0);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), 0);
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_ADDRESS");
+                       type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), 0);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), 0);
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_HEADER_INSTANT_MESSENGER_ABB");
+                       type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), 0);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), 0);
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_URL");
+                       type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), 0);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), 0);
+               }
+               break;
+       case DETAIL_PROPERTY_BIRTHDAY:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_BIRTHDAY");
+                       value = __pPresentationModel->GetValue(DETAIL_PROPERTY_BIRTHDAY);
+               }
+               break;
+       case DETAIL_PROPERTY_NOTE:
+               {
+                       pItem->Construct(Dimension(itemWidth, itemHeight + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+                       CreateNoteItem(itemWidth, pItem);
+
+                       return;
+               }
+               break;
+       default:
+               break;
+       }
+
+       pItem->Construct(Dimension(itemWidth, itemHeight + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       CreateTitleValueTypeItem(itemWidth, pItem, title, value, type, lineCount);
+}
+
+void
+ContactDetailsForm::AddGroup(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pItem->SetName(Integer::ToString(DETAIL_PROPERTY_GROUP));
+       pItem->AddKeyEventListener(*this);
+
+       String title = ResourceManager::GetString(L"IDS_PB_BODY_GROUPS");
+       String value =  __pPresentationModel->GetValue(DETAIL_PROPERTY_GROUP);
+
+       if (value.IsEmpty())
+       {
+               value = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+       }
+
+       AddGroupStylePanel(itemWidth, pItem, GROUP_STYLE_TOP);
+
+       CreateTitleValueTypeItem(itemWidth, pItem, title, value);
+       __pGroupsItem = pItem;
+}
+
+void
+ContactDetailsForm::AddRingTone(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pItem->SetName(Integer::ToString(DETAIL_PROPERTY_RINGTONE));
+       pItem->AddKeyEventListener(*this);
+
+       String title = ResourceManager::GetString(L"IDS_PB_BODY_RINGTONE");
+       String value = __pPresentationModel->GetValue(DETAIL_PROPERTY_RINGTONE);
+
+       int index = 0;
+       String trimmedPath;
+       value.LastIndexOf(L"/", value.GetLength() - 1, index);
+
+       if (index != 0)
+       {
+               value.SubString(index + 1, trimmedPath);
+       }
+
+       AddGroupStylePanel(itemWidth, pItem, GROUP_STYLE_BOTTOM);
+
+       CreateTitleValueTypeItem(itemWidth, pItem, title, trimmedPath);
+
+       if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == false)
+       {
+               __pClearButton = new (std::nothrow) Button();
+               __pClearButton->Construct(Rectangle(itemWidth - H_ICON - W_TEXT_MARGIN - 10, (H_ITEM_DOUBLE_LINE + pContactsApp->GetFontHeightOffset()  - H_ICON) / 2, H_ICON, H_ICON));
+               __pClearButton->SetActionId(IDA_BUTTON_RINGTONE_CLEAR);
+               __pClearButton->SetName(Integer::ToString(IDA_BUTTON_RINGTONE_CLEAR));
+               __pClearButton->AddActionEventListener(*this);
+               __pClearButton->AddFocusEventListener(*this);
+
+               Bitmap* pReset = ResourceManager::GetBitmapN(IDB_DETAILS_RESET_NORMAL);
+               if (pReset != null)
+               {
+                       __pClearButton->SetNormalBitmap(Point(0, 0), *pReset);
+                       delete pReset;
+               }
+               pReset = ResourceManager::GetBitmapN(IDB_DETAILS_RESET_PRESSED);
+               if (pReset != null)
+               {
+                       __pClearButton->SetPressedBitmap(Point(0, 0), *pReset);
+                       delete pReset;
+               }
+
+               pItem->AddControl(__pClearButton);
+               pItem->SetIndividualSelectionEnabled(__pClearButton, true);
+               __pRingtoneItem = pItem;
+       }
+}
+
+void
+ContactDetailsForm::AddShareButtons(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       pItem->Construct(Dimension(itemWidth, H_BUTTON_CONTAINER));
+
+       int buttonWidth = itemWidth - W_BUTTON_GAP * 2;
+
+       Button* pSendNameButton = new (std::nothrow) Button();
+       pSendNameButton->Construct(Rectangle(W_BUTTON_GAP, Y_BUTTON, buttonWidth, H_BUTTON), ResourceManager::GetString(L"IDS_PB_HEADER_SEND_NAMECARD"));
+       pSendNameButton->SetActionId(IDA_BUTTON_SHARE_NAME_CARD);
+       pSendNameButton->AddActionEventListener(*this);
+       pItem->AddControl(pSendNameButton);
+}
+
+void
+ContactDetailsForm::CreateValueTypeItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, const Tizen::Base::String& value, const Tizen::Base::String& type)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Label* pValueLabel = new (std::nothrow) Label();
+       pValueLabel->Construct(Rectangle(W_TEXT_MARGIN, 0, itemWidth - W_TEXT_MARGIN * 2 - W_TYPE, H_ITEM + pContactsApp->GetFontHeightOffset()), value);
+       pValueLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pValueLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pValueLabel->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pValueLabel->SetTextColor(COLOR_OTHER_NUMBER);
+       pItem->AddControl(pValueLabel);
+
+       Label* pTypeLabel = new (std::nothrow) Label();
+       pTypeLabel->Construct(Rectangle((itemWidth - W_TEXT_MARGIN - W_TYPE), 0, W_TYPE, H_ITEM + pContactsApp->GetFontHeightOffset()), type);
+       pTypeLabel->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
+       pTypeLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pTypeLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pTypeLabel->SetTextColor(COLOR_ITEM_TYPE);
+       pItem->AddControl(pTypeLabel);
+}
+
+void
+ContactDetailsForm::CreateTitleValueTypeItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, const Tizen::Base::String& title, const Tizen::Base::String& value, const Tizen::Base::String& type, int lineCount)
+{
+       int valueWidth = itemWidth - (W_TEXT_MARGIN * 2);
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Label* pTitleLabel = new (std::nothrow) Label();
+       pTitleLabel->Construct(Rectangle(W_TEXT_MARGIN, Y_ITEM_TITLE, itemWidth - W_TEXT_MARGIN, H_ITEM_TITLE), title);
+       pTitleLabel->SetName(GROUP_LABEL);
+       pTitleLabel->AddTouchEventListener(*this);
+       pTitleLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pTitleLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pTitleLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pTitleLabel->SetTextColor(COLOR_ITEM_TITLE);
+       pItem->AddControl(pTitleLabel);
+
+       if (type.IsEmpty() == false)
+       {
+               Label* pTypeLabel = new (std::nothrow) Label();
+               pTypeLabel->Construct(Rectangle((itemWidth - W_TEXT_MARGIN - W_TYPE), Y_ITEM_TITLE + H_ITEM_TITLE, W_TYPE, H_ITEM_VALUE), type);
+               pTypeLabel->SetName(GROUP_LABEL);
+               pTypeLabel->AddTouchEventListener(*this);
+               pTypeLabel->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
+               pTypeLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pTypeLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_BOLD);
+               pTypeLabel->SetTextColor(COLOR_ITEM_TYPE);
+               pItem->AddControl(pTypeLabel);
+
+               valueWidth = itemWidth - (W_TEXT_MARGIN * 2) - W_TYPE;
+       }
+       else if (title.Equals(ResourceManager::GetString(L"IDS_PB_BODY_RINGTONE"), false))
+       {
+               valueWidth = itemWidth - (W_TEXT_MARGIN * 2) - H_ICON;
+       }
+
+       Label* pValueLabel = new (std::nothrow) Label();
+       pValueLabel->Construct(Rectangle(W_TEXT_MARGIN, Y_ITEM_TITLE + H_ITEM_TITLE, valueWidth, (H_ITEM_VALUE + pContactsApp->GetFontHeightOffset()) * lineCount), value);
+       pValueLabel->SetName(VALUE_LABEL);
+       pValueLabel->AddTouchEventListener(*this);
+       pValueLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pValueLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pValueLabel->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pValueLabel->SetTextColor(COLOR_ITEM_VALUE);
+       pItem->AddControl(pValueLabel);
+}
+
+void
+ContactDetailsForm::CreateTitleValueTypeItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, int detailProperty)
+{
+       String title;
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       switch (detailProperty)
+       {
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       title = ResourceManager::GetString(L"IDS_COM_BODY_EMAIL");
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_ADDRESS");
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_URL");
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_HEADER_INSTANT_MESSENGER_ABB");
+               }
+               break;
+       default:
+               break;
+       }
+
+       Label* pTitleLabel = new (std::nothrow) Label();
+       pTitleLabel->Construct(Rectangle(W_TEXT_MARGIN, Y_ITEM_TITLE, itemWidth - W_TEXT_MARGIN, H_ITEM_TITLE), title);
+       pTitleLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pTitleLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pTitleLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pTitleLabel->SetTextColor(COLOR_ITEM_TITLE);
+       pItem->AddControl(pTitleLabel);
+
+       for (int i = 0; i < __pPresentationModel->GetMultiValuesCount(static_cast<DetailProperty>(detailProperty)); i++)
+       {
+               String type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), i);
+               String value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), i);
+
+               int valueWidth = itemWidth - (W_TEXT_MARGIN * 2);
+               if (type.IsEmpty() == false)
+               {
+                       Label* pTypeLabel = new (std::nothrow) Label();
+                       pTypeLabel->Construct(Rectangle((itemWidth - W_TEXT_MARGIN - W_TYPE), (H_ADDITIONAL_ITEM + pContactsApp->GetFontHeightOffset())/2 + H_ITEM_TITLE + ((H_ADDITIONAL_ITEM + pContactsApp->GetFontHeightOffset()) * i), W_TYPE, H_ITEM_VALUE), type);
+                       pTypeLabel->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
+                       pTypeLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+                       pTypeLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_BOLD);
+                       pTypeLabel->SetTextColor(COLOR_ITEM_TYPE);
+                       pItem->AddControl(pTypeLabel);
+
+                       valueWidth = itemWidth - (W_TEXT_MARGIN * 2) - W_TYPE;
+               }
+
+               Label* pValueLabel = new (std::nothrow) Label();
+               pValueLabel->Construct(Rectangle(W_TEXT_MARGIN, Y_ITEM_TITLE + H_ITEM_TITLE + ((H_ADDITIONAL_ITEM + pContactsApp->GetFontHeightOffset()) * i), valueWidth, H_ITEM_VALUE + pContactsApp->GetFontHeightOffset()), value);
+               pValueLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pValueLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pValueLabel->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+               pValueLabel->SetTextColor(COLOR_ITEM_VALUE);
+               pItem->AddControl(pValueLabel);
+       }
+}
+
+void
+ContactDetailsForm::CreateNoteItem(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       String title = ResourceManager::GetString(L"IDS_PB_BODY_NOTE");
+       String value = __pPresentationModel->GetValue(DETAIL_PROPERTY_NOTE);
+
+       Label* pTitleLabel = new (std::nothrow) Label();
+       pTitleLabel->Construct(Rectangle(W_TEXT_MARGIN, Y_ITEM_TITLE, itemWidth - W_TEXT_MARGIN, H_ITEM_TITLE), title);
+       pTitleLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pTitleLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pTitleLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pTitleLabel->SetTextColor(COLOR_ITEM_TITLE);
+       pItem->AddControl(pTitleLabel);
+
+       Label* pValueLabel = new (std::nothrow) Label();
+       pValueLabel->Construct(Rectangle(W_TEXT_MARGIN, Y_ITEM_TITLE + H_ITEM_TITLE, itemWidth - (W_TEXT_MARGIN * 2), H_ITEM_VALUE), value);
+       pValueLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pValueLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
+       pValueLabel->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pValueLabel->SetTextColor(COLOR_ITEM_VALUE);
+       pItem->AddControl(pValueLabel);
+
+       Font font;
+       font.Construct(FONT_STYLE_PLAIN, pContactsApp->GetFontSize());
+
+       TextElement* pNameElement = new (std::nothrow) TextElement();
+       pNameElement->Construct(value);
+       pNameElement->SetFont(font);
+
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(Dimension(itemWidth - (W_TEXT_MARGIN * 2) - (pValueLabel->GetLeftMargin() * 2), H_ITEM_VALUE));
+       pEnrichedText->SetTextWrapStyle(TEXT_WRAP_CHARACTER_WRAP);
+       pEnrichedText->SetTextAbbreviationEnabled(false);
+       pEnrichedText->Add(*pNameElement);
+
+       pValueLabel->SetSize(pValueLabel->GetWidth(), pEnrichedText->GetTotalLineHeight() + pValueLabel->GetTopMargin());
+       pItem->SetSize(itemWidth, (Y_ITEM_TITLE * 2) + H_ITEM_TITLE + pEnrichedText->GetTotalLineHeight());
+
+       pEnrichedText->RemoveAllTextElements(true);
+       delete pEnrichedText;
+}
+
+void
+ContactDetailsForm::OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       if (status == TABLE_VIEW_ITEM_STATUS_SELECTED)
+       {
+               String itemName = pItem->GetName();
+
+               if (itemName.Equals(Integer::ToString(DETAIL_PROPERTY_GROUP), true) == true)
+               {
+                       if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == true)
+                       {
+                               return;
+                       }
+
+                       if (__isAppControlLaunching == true)
+                       {
+                               return;
+                       }
+
+                       __currentFocusedItem.Clear();
+                       if (__pPresentationModel->GetCategoryCount() > 0)
+                       {
+                               IList* pCategoryList = __pPresentationModel->GetAssignedCategoryIdListN();
+
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_SELECTOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pCategoryList);
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+                       }
+               }
+               else if (itemName.Equals(Integer::ToString(DETAIL_PROPERTY_RINGTONE), true) == true)
+               {
+                       if (__isAppControlLaunching == true)
+                       {
+                               return;
+                       }
+
+                       if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == true)
+                       {
+                               return;
+                       }
+
+                       __currentFocusedItem.Clear();
+                       result r = LaunchAppControl(PROVIDER_ID_FILEMANAGER, OPERATION_ID_PICK);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to launch appcontrol", GetErrorMessage(r));
+               }
+               else if (itemName.IsEmpty() == false)
+               {
+                       if (__isAppControlLaunching == true)
+                       {
+                               return;
+                       }
+                       Point itemPoint;
+                       itemPoint.x = GetClientAreaBounds().width / 2;
+                       itemPoint.y = GetClientAreaBounds().y + pItem->GetY() + (pItem->GetHeight() / 2) - __scrolledDistance;
+
+                       __pContextMenuCall->SetName(itemName);
+                       __pContextMenuCall->SetAnchorPosition(itemPoint);
+                       __pContextMenuCall->SetShowState(true);
+                       __pContextMenuCall->Show();
+               }
+       }
+}
+
+void
+ContactDetailsForm::OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
+{
+}
+
+void
+ContactDetailsForm::OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo)
+{
+}
+
+void
+ContactDetailsForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       if (__isAppControlLaunching == true)
+       {
+               return;
+       }
+
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&const_cast<Control&>(source));
+       }
+       else if (source.GetName().Equals(GROUP_LABEL, true) || source.GetName().Equals(VALUE_LABEL, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent()->GetControl(GROUP_STYLE_PANEL));
+               if (pPanel != null)
+               {
+                       pPanel->SetBackgroundColor(COLOR_PRESSED);
+               }
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_PRESSED);
+
+               Label* pLabelValue = static_cast<Label*>(source.GetParent()->GetControl(VALUE_LABEL, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+
+               Label* pLabelTitle = static_cast<Label*>(source.GetParent()->GetControl(GROUP_LABEL, true));
+               pLabelTitle->SetTextColor(Color(COLOR_ITEM_PRESSED));
+
+               pPanel->Invalidate(true);
+               pLabelValue->Invalidate(true);
+               pLabelTitle->Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&const_cast<Control&>(source));
+
+       }
+       else if (source.GetName().Equals(GROUP_LABEL, true) || source.GetName().Equals(VALUE_LABEL, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent()->GetControl(GROUP_STYLE_PANEL));
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_GROUP_STYLE);
+
+               Label* pLabelValue = static_cast<Label*>(source.GetParent()->GetControl(VALUE_LABEL, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               Label* pLabelTitle = static_cast<Label*>(source.GetParent()->GetControl(GROUP_LABEL, true));
+               pLabelTitle->SetTextColor(Color(COLOR_ITEM_TITLE));
+
+               pPanel->Invalidate(true);
+               pLabelValue->Invalidate(true);
+               pLabelTitle->Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&const_cast<Control&>(source));
+
+       }
+       else if (source.GetName().Equals(GROUP_LABEL, true) || source.GetName().Equals(VALUE_LABEL, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent()->GetControl(GROUP_STYLE_PANEL));
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_GROUP_STYLE);
+
+               Label* pLabelTitle = static_cast<Label*>(source.GetParent()->GetControl(GROUP_LABEL, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               Label* pLabelValue = static_cast<Label*>(source.GetParent()->GetControl(VALUE_LABEL, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               pPanel->Invalidate(true);
+               pLabelValue->Invalidate(true);
+               pLabelTitle->Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactDetailsForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactDetailsForm::OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&const_cast<Control&>(source));
+
+       }
+       else if (source.GetName().Equals(GROUP_LABEL, true) || source.GetName().Equals(VALUE_LABEL, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent()->GetControl(GROUP_STYLE_PANEL));
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_GROUP_STYLE);
+
+               Label* pLabelTitle = static_cast<Label*>(source.GetParent()->GetControl(GROUP_LABEL, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               Label* pLabelValue = static_cast<Label*>(source.GetParent()->GetControl(VALUE_LABEL, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               pPanel->Invalidate(true);
+               pLabelValue->Invalidate(true);
+               pLabelTitle->Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId)
+{
+       String ringtonePath = __pPresentationModel->GetValue(DETAIL_PROPERTY_RINGTONE);
+       if (ringtonePath.Equals(ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT"), false) == true )
+       {
+               __pTableView->RefreshItem(__pItemList->GetCount() - 1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+}
+
+void
+ContactDetailsForm::OnScrollEndReached(Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+}
+
+void
+ContactDetailsForm::OnScrollPositionChanged(Tizen::Ui::Control &source, int scrollPos)
+{
+       __scrolledDistance = scrollPos;
+}
+
+void
+ContactDetailsForm::OnScrollStopped(Tizen::Ui::Control &source)
+{
+}
+
+void
+ContactDetailsForm::OnContactsChanged(void)
+{
+       HideDeletePopup();
+       if (__pPresentationModel->IsContactRemoved())
+       {
+               if (__pAppControl != null)
+               {
+                       __pAppControl->Stop();
+               }
+
+               if (__appControlViewType.IsEmpty() == true)
+               {
+                       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+                       result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               else
+               {
+                       UiApp::GetInstance()->Terminate();
+               }
+       }
+       else
+       {
+               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+               TryReturnVoid(pContactsApp != null, "Unable to get ContactsApp instance.");
+
+               InitializeDetailItemList();
+               __pFavoriteButton = null;
+               __pClearButton = null;
+               __pTableView->UpdateTableView();
+
+               if (__currentFocusedItem == Integer::ToString(IDA_FAVORITE_BUTTON))
+               {
+                       if (__pFavoriteButton != null)
+                       {
+                               __pFavoriteButton->SetFocus();
+                       }
+               }
+               else if (__currentFocusedItem == Integer::ToString(IDA_BUTTON_RINGTONE_CLEAR))
+               {
+                       if (__pClearButton != null)
+                       {
+                               __pClearButton->SetFocus();
+                       }
+               }
+       }
+
+       delete __pDefaultSelectorPopup;
+       __pDefaultSelectorPopup = null;
+}
+
+void
+ContactDetailsForm::OnCategoriesChanged(void)
+{
+}
+
+result
+ContactDetailsForm::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& launchType, const Tizen::Base::String& value)
+{
+       result r = E_SUCCESS;
+
+       if (__pAppControl != null)
+       {
+               return E_FAILURE;
+       }
+
+       String uri;
+       String mimeType;
+       HashMap extraData;
+       extraData.Construct();
+       IAppControlResponseListener* pEvent = null;
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)) && operationId.Equals(String(OPERATION_ID_CALL)))
+       {
+               uri.Append(INPUT_URI_TEL);
+
+               if (value.IsEmpty())
+               {
+                       uri.Append(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER));
+               }
+               else
+               {
+                       uri.Append(value);
+               }
+
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_CALL_TYPE), new (std::nothrow) String(launchType));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)) && operationId.Equals(String(OPERATION_ID_COMPOSE)))
+       {
+               String recipientAddress;
+
+               if (value.IsEmpty())
+               {
+                       recipientAddress.Append(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER));
+                       int index = -1;
+                       recipientAddress.IndexOf(DELIMITER_SEMICOLON, 0, index);
+                       if (index >= 0)
+                       {
+                               recipientAddress.SubString(0, index, recipientAddress);
+                       }
+                       index = -1;
+                       recipientAddress.IndexOf(DELIMITER_COMMA, 0, index);
+                       if (index >= 0)
+                       {
+                               recipientAddress.SubString(0, index, recipientAddress);
+                       }
+               }
+               else
+               {
+                       recipientAddress.Append(value);
+               }
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TO), new (std::nothrow) String(recipientAddress));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_AUDIO);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_DATA_SELECTION_MODE_SINGLE));
+
+               pEvent = this;
+       }
+       else if (appId.Equals(String(PROVIDER_ID_EMAIL)) && operationId.Equals(String(OPERATION_ID_COMPOSE)))
+       {
+               ArrayList* pArgList = new (std::nothrow) ArrayList();
+               pArgList->Construct();
+
+               pArgList->Add(new (std::nothrow) String(__pPresentationModel->GetValue(DETAIL_PROPERTY_EMAIL, 0)));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TO), pArgList);
+       }
+
+       __pAppControl = AppManager::FindAppControlN(appId, operationId);
+
+       if (__pAppControl != null)
+       {
+               r = __pAppControl->Start(&uri, &mimeType, &extraData, pEvent);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to launch app control", GetErrorMessage(r));
+
+               __isAppControlLaunching = true;
+
+               if (operationId.Equals(String(OPERATION_ID_PICK)))
+               {
+                       SetEnabled(false);
+                       Invalidate(true);
+               }
+
+               Footer* pFooter = GetFooter();
+               pFooter->SetEnabled(false);
+       }
+
+CATCH:
+       extraData.RemoveAll(true);
+       if (__isAppControlLaunching == false && __pAppControl != null)
+       {
+               delete __pAppControl;
+               __pAppControl = null;
+       }
+       return r;
+}
+
+void
+ContactDetailsForm::OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData)
+{
+       AppLogDebug("ENTER");
+
+       if (pExtraData == null)
+       {
+               return;
+       }
+
+       if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               if (appControlResult == APP_CTRL_RESULT_SUCCEEDED)
+               {
+                       const String *pResultString = null;
+                       const ArrayList* pResultList = dynamic_cast<const ArrayList*>(pExtraData->GetValue(String(OUTPUT_KEY_SELECTED)));
+                       if (pResultList != null)
+                       {
+                               pResultString = static_cast<const String*>(pResultList->GetAt(0));
+                       }
+                       else
+                       {
+                               pResultString = static_cast<const String*>(pExtraData->GetValue(String(OUTPUT_KEY_SELECTED)));
+                       }
+
+                       if (pResultString != null && pResultString->IsEmpty() == false)
+                       {
+                               __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, *pResultString);
+                               __pPresentationModel->UpdateContact();
+                               __pTableView->RefreshItem(__pItemList->GetCount() - 1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+                               if (__pFileEventManager == null)
+                               {
+                                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                                       __pFileEventManager->Construct(*this);
+                               }
+                               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+
+                       }
+               }
+       }
+
+       AppLogDebug("EXIT");
+}
+
+void
+ContactDetailsForm::AddGroupStylePanel(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::GroupStyle groupStyle)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Panel* pGroupStyle = new (std::nothrow) Panel();
+       pGroupStyle->Construct(Rectangle(W_GROUP_STYLE_MARGIN, 0, itemWidth - W_GROUP_STYLE_MARGIN * 2, H_ITEM_DOUBLE_LINE + pContactsApp->GetFontHeightOffset()), groupStyle);
+       pGroupStyle->SetName(GROUP_STYLE_PANEL);
+       pGroupStyle->SetBackgroundColor(COLOR_GROUP_STYLE);
+       pGroupStyle->AddTouchEventListener(*this);
+       pItem->AddControl(pGroupStyle);
+}
+
+result
+ContactDetailsForm::ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content)
+{
+       result r = E_SUCCESS;
+
+       if (argument.IsEmpty() || argument.Contains(DELIMITER) == false)
+       {
+               return E_FAILURE;
+       }
+
+       StringTokenizer stringToken(argument, DELIMITER);
+
+       r = stringToken.GetNextToken(type);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get type", GetErrorMessage(r));
+
+       r = stringToken.GetNextToken(content);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get content", GetErrorMessage(r));
+
+       return r;
+}
+
+void
+ContactDetailsForm::ShowDefaultSelectorPopup(void)
+{
+       ArrayList* pList = new (std::nothrow) ArrayList();
+       pList->Construct();
+
+       String numberWithType;
+       int numberCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER);
+       for (int index = 0; index < numberCount; index++)
+       {
+               numberWithType = __pPresentationModel->GetType(DETAIL_PROPERTY_PHONE_NUMBER, index) + L"  ";
+               numberWithType += __pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, index);
+
+               pList->Add(*(new (std::nothrow) String(numberWithType)));
+       }
+       ContactValueListItemProvider* pProvider = new (std::nothrow) ContactValueListItemProvider(pList);
+
+       delete __pDefaultSelectorPopup;
+       __pDefaultSelectorPopup = new (std::nothrow) Popup();
+       __pDefaultSelectorPopup->Construct(true, Dimension(W_POPUP, H_POPUP));
+       __pDefaultSelectorPopup->SetTitleText(ResourceManager::GetString(L"IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER"));
+       __pDefaultSelectorPopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pDefaultSelectorPopup->GetClientAreaBounds();
+
+       ListView* pOtherNumberList = new (std::nothrow) ListView();
+       pOtherNumberList->Construct(Rectangle(0, 0, popupClientBounds.width, H_POPUP_LIST_VIEW));
+       pOtherNumberList->AddListViewItemEventListener(*this);
+       pOtherNumberList->SetItemProvider(*pProvider);
+
+       __pDefaultSelectorPopup->AddControl(pOtherNumberList);
+
+       Button* pCloseButton = new (std::nothrow) Button();
+       pCloseButton->Construct(Rectangle((popupClientBounds.width - W_POPUP_BUTTON) / 2, Y_POPUP_BUTTON,
+                                                                       W_POPUP_BUTTON, H_POPUP_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCloseButton->SetActionId(IDA_POPUP_CLOSE);
+       pCloseButton->AddActionEventListener(*this);
+
+       __pDefaultSelectorPopup->AddControl(pCloseButton);
+       __pDefaultSelectorPopup->SetShowState(true);
+       __pDefaultSelectorPopup->Show();
+}
+
+void
+ContactDetailsForm::HideDefaultSelectorPopup(void)
+{
+       __pDefaultSelectorPopup->SetShowState(false);
+
+       Invalidate(true);
+}
+
+void
+ContactDetailsForm::ShowInvalidFileMessageBox(const Tizen::Base::String errorMsg, bool showFooter)
+{
+       if (showFooter == false)
+       {
+               Footer* pFooter = GetFooter();
+               if (pFooter != null)
+               {
+                       pFooter->SetShowState(false);
+               }
+       }
+
+       int modalResult = 0;
+       MessageBox unsupportedMessageBox;
+       unsupportedMessageBox.Construct(L"", errorMsg, MSGBOX_STYLE_OK, MESSAGE_BOX_TIMEOUT_MS);
+       unsupportedMessageBox.ShowAndWait(modalResult);
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       result r = AppControlProviderManager::GetInstance()->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, null);
+       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+       UiApp::GetInstance()->Terminate();
+}
+
+void
+ContactDetailsForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       __pPresentationModel->SetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER, L"", index);
+       __pPresentationModel->AddAddressBook();
+
+       HideDefaultSelectorPopup();
+}
+
+void
+ContactDetailsForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+ContactDetailsForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status)
+{
+}
+
+void
+ContactDetailsForm::OnForeground(void)
+{
+       AppLogDebug("ContactDetailsForm::OnForeground");
+       delete __pAppControl;
+       __pAppControl = null;
+
+       __isAppControlLaunching = false;
+}
+
+void
+ContactDetailsForm::OnBackground(void)
+{
+       if (IsEnabled() == false)
+       {
+               result r = SetEnabled(true);
+               AppLogDebug("Form Enabled = %s", GetErrorMessage(r));
+               Invalidate(true);
+       }
+
+       Footer* pFooter = GetFooter();
+       pFooter->SetEnabled(true);
+}
+
+bool
+ContactDetailsForm::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactDetailsForm::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pDefaultSelectorPopup && __pDefaultSelectorPopup->GetShowState() == true)
+               {
+                       HideDefaultSelectorPopup();
+                       return true;
+               }
+
+               if (__pDeletePopup && __pDeletePopup->GetShowState() == true)
+               {
+                       HideDeletePopup();
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+bool
+ContactDetailsForm::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactDetailsForm::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+void
+ContactDetailsForm::OnFocusGained(const Tizen::Ui::Control& source)
+{
+       if (source.GetName() == Integer::ToString(IDA_FAVORITE_BUTTON))
+       {
+               __currentFocusedItem = Integer::ToString(IDA_FAVORITE_BUTTON);
+       }
+       else if (source.GetName() == Integer::ToString(IDA_BUTTON_RINGTONE_CLEAR))
+       {
+               __currentFocusedItem = Integer::ToString(IDA_BUTTON_RINGTONE_CLEAR);
+       }
+}
+
+void
+ContactDetailsForm::OnFocusLost(const Tizen::Ui::Control& source)
+{
+
+}
+
+void
+ContactDetailsForm::OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       if (keyCode == KEY_ENTER )
+       {
+               TableViewItem* pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+               String valueString;
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(VALUE_LABEL, true));
+
+               if (pLabelValue == null)
+               {
+                       return;
+               }
+
+               Label* pLabelTitle = static_cast<Label*>(pItem->GetControl(GROUP_LABEL, true));
+
+               if (pLabelTitle == null)
+               {
+                       return;
+               }
+
+               pPanel->SetBackgroundColor(COLOR_PRESSED);
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+               pLabelTitle->SetTextColor(Color(COLOR_ITEM_PRESSED));
+
+               pPanel->Invalidate(true);
+               pLabelValue->Invalidate(true);
+               pLabelTitle->Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       if (keyCode == KEY_ENTER )
+       {
+
+               TableViewItem* pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+               String valueString;
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(VALUE_LABEL, true));
+
+               if (pLabelValue == null)
+               {
+                       return;
+               }
+
+               Label* pLabelTitle = static_cast<Label*>(pItem->GetControl(GROUP_LABEL, true));
+
+               if (pLabelTitle == null)
+               {
+                       return;
+               }
+
+
+               pPanel->SetBackgroundColor(COLOR_GROUP_STYLE);
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+               pLabelTitle->SetTextColor(Color(COLOR_ITEM_TITLE));
+
+               pPanel->Invalidate(true);
+               pLabelValue->Invalidate(true);
+               pLabelTitle->Invalidate(true);
+       }
+}
+
+void
+ContactDetailsForm::OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+
+}
+
+void
+ContactDetailsForm::OnSettingChanged(Tizen::Base::String &key)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to get ContactsApp instance.");
+
+       if(key == L"http://tizen.org/setting/contacts.order.firstname")
+       {
+               InitializeDetailItemList();
+               __pTableView->UpdateTableView();
+       }
+}
diff --git a/src/CtContactEditorForm.cpp b/src/CtContactEditorForm.cpp
new file mode 100644 (file)
index 0000000..fcea905
--- /dev/null
@@ -0,0 +1,4407 @@
+//
+// 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       CtContactEditorForm.cpp
+ * @brief      This is the implementation file for the ContactEditorForm class.
+ */
+
+#include <FApp.h>
+#include <FMedia.h>
+#include "CtContactEditorForm.h"
+#include "CtContactPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtContactValueListItemProvider.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+#include "CtCommonUtil.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+using namespace Tizen::Io;
+using namespace Tizen::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+static const int IDA_ACTION_BAR_SAVE = 11;
+static const int IDA_BUTTON_THUMBNAIL_ADD = 21;
+static const int IDA_BUTTON_THUMBNAIL_DELETE = 22;
+static const int IDA_BUTTON_CAMERA = 23;
+static const int IDA_BUTTON_EXPANDABLE = 24;
+static const int IDA_BUTTON_MORE_INFO = 25;
+static const int IDA_BUTTON_BIRTHDAY_CLEAR = 26;
+static const int IDA_BUTTON_DEFAULT_PHONE_NUMBER = 27;
+static const int IDA_BUTTON_RINGTONE_CLEAR = 28;
+static const int IDA_BUTTON_TYPE = 29;
+static const int IDA_BUTTON_BIRTHDAY_DELETE = 30;
+static const int IDA_CONTEXT_MENU_ITEM_JOB_TITLE = 31;
+static const int IDA_CONTEXT_MENU_ITEM_DEPARTMENT = 32;
+static const int IDA_CONTEXT_MENU_ITEM_INSTANT_MESSENGER = 33;
+static const int IDA_CONTEXT_MENU_ITEM_URL = 34;
+static const int IDA_CONTEXT_MENU_ITEM_BIRTHDAY = 35;
+static const int IDA_CONTEXT_MENU_ITEM_NOTE = 36;
+static const int IDA_INPUT_FIELD_DISPLAY_NAME = 41;
+static const int IDA_POPUP_DISCARD_CHANGES_OK = 44;
+static const int IDA_POPUP_DISCARD_CHANGES_CANCEL = 45;
+
+static const wchar_t* IDB_EXPAND_BUTTON_NORMAL = L"00_circle_button.png";
+static const wchar_t* IDB_EXPAND_BUTTON_PRESSED = L"00_circle_button_press.png";
+static const wchar_t* IDB_EXPAND_CLOSED = L"00_button_expand_closed.png";
+static const wchar_t* IDB_EXPAND_CLOSED_PRESSED = L"00_button_expand_closed_press.png";
+static const wchar_t* IDB_EXPAND_OPENED = L"00_button_expand_opened.png";
+static const wchar_t* IDB_EXPAND_OPENED_PRESSED = L"00_button_expand_opened_press.png";
+static const wchar_t* IDB_BUTTON_DELETE_NORMAL = L"00_circle_button_delete.png";
+static const wchar_t* IDB_BUTTON_DELETE_PRESSED = L"00_circle_button_delete_press.png";
+static const wchar_t* IDB_BUTTON_MINUS = L"00_button_expand_minus_press.png";
+static const wchar_t* IDB_BUTTON_MINUS_PRESSED = L"00_button_expand_minus_press.png";
+static const wchar_t* IDB_BUTTON_RESET_NORMAL = L"00_button_refresh.png";
+static const wchar_t* IDB_BUTTON_RESET_PRESSED = L"00_button_refresh_press.png";
+static const wchar_t* IDB_BUTTON_ADD= L"C02_caller_id_icon_add.png";
+static const wchar_t* IDB_BUTTON_ADD_PRESSED = L"C02_caller_id_icon_add_press.png";
+static const wchar_t* IDB_BUTTON_CAMERA = L"C02_caller_id_icon_camera.png";
+static const wchar_t* IDB_BUTTON_CAMERA_PRESSED = L"C02_caller_id_icon_camera_press.png";
+static const wchar_t* IDB_BUTTON_DROPBOX = L"C02_button_icon_dropbox.png";
+static const wchar_t* IDB_THUMBNAIL_BACKGROUND = L"C02_created_photo_bg.png";
+static const wchar_t* IDB_DETAILS_RESET_NORMAL = L"00_button_refresh.png";
+static const wchar_t* IDB_DETAILS_RESET_PRESSED = L"00_button_refresh_press.png";
+
+static const wchar_t* INPUT_DATA_SELECTION_MODE_SINGLE = L"single";
+static const wchar_t* INPUT_KEY_SELECTION_MODE = L"http://tizen.org/appcontrol/data/selection_mode";
+static const wchar_t* INPUT_KEY_IMAGEVIEWER_MODE = L"http://tizen.org/appcontrol/data/image/crop_mode";
+static const wchar_t* INPUT_KEY_ALLOW_SWITCH = L"http://tizen.org/appcontrol/data/camera/allow_switch";
+static const wchar_t* INPUT_MIME_TYPE_CAMERA = L"image/jpg";
+static const wchar_t* INPUT_MIME_TYPE_GALLERY = L"image/*";
+static const wchar_t* INPUT_MIME_TYPE_AUDIO = L"audio/*";
+static const wchar_t* INPUT_VALUE_FALSE = L"false";
+static const wchar_t* INPUT_VALUE_IMAGEVIEWER_TYPE = L"fit_to_screen";
+static const wchar_t* OUTPUT_KEY_SELECTED = L"http://tizen.org/appcontrol/data/selected";
+static const wchar_t* SD_CARD_UNMOUNTED = L"Unmounted";
+
+static const int H_ITEM = 112;
+static const int H_DOUBLE_LINE_ITEM = 140;
+static const int H_LABEL = 40;
+static const int H_DESCRIPTION_CONTAINER = 136;
+static const int H_DIVIDER = 1;
+static const int W_DIVIDER = 1;
+static const int H_EMPTY_SPACE = 32;
+static const int H_BUTTON = 74;
+static const int H_ICON_BUTTON = 74;
+static const int W_THUMBNAIL = 360;
+static const int W_TITLE_LABEL = 170;
+static const int X_MORE_INFORMATION_BUTTON = 60;
+static const int Y_MORE_INFORMATION_BUTTON = 30;
+static const int Y_DEFAULT_NUMBER_BUTTON = 19;
+static const int W_ITEM_GAP = 16;
+static const int W_TYPE_BUTTON = 186;
+static const int H_THUMBNAIL_DELETE_BUTTON_GAP = 31;
+static const int H_THUMBNAIL_GROUP_ITEM_HEIGHT = 34;
+static const int H_NAMEFIELD_GROUP_ITEM_HEIGHT = 40;
+static const int H_GROUP_RINGTONE_TITLE_GAP = 22;
+static const int H_GROUP_RINGTONE_TITLE_LABEL = 42;
+static const int H_GROUP_RINGTONE_VALUE_LABEL = 62;
+static const int W_DROPBOX_ICON = 29;
+static const int H_DROPBOX_ICON = 29;
+static const int X_REFRESH_BUTTON_MARGIN = 88;
+static const int Y_EDIT_FIELD_GAP = 5;
+static const int H_EDIT_FIELD_GAP = 10;
+static const int H_EXPANDABLE_EDIT_AREA_EXTENDED = 8;
+
+static const int X_MORE_INFO_PANEL_GAP = 5;
+static const int H_MORE_INFO_PANEL_GAP = 10;
+
+static const int FONT_SIZE_TITLE_TEXT = 32;
+
+static const int GROUP_ITEM_COUNT = 11;
+static const int NAME_FIELD_ITEM_COUNT = 1;
+
+static const int EDIT_FIELD_EXTENDED_LENGTH = 100;
+
+static const int MESSAGE_BOX_TIMEOUT_MS = 300000;
+
+static const int DEFAULT_EXPAND_NAME_FIELD_COUNT = 6;
+
+static const wchar_t* EXPAND_BUTTON = L"ExpandButton";
+
+static const unsigned int COLOR_TABLE_VIEW_BG = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_DIVIDER = Color32<169, 169, 169>::Value;
+static const unsigned int COLOR_THUMBNAIL_BACKGROUND = Color32<239, 237, 229>::Value;
+static const unsigned int COLOR_ITEM_TITLE = Color32<128, 128, 128>::Value;
+static const unsigned int COLOR_ITEM_VALUE = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_ITEM_PRESSED = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_PRESSED = Color32<87, 135, 194>::Value;
+
+static const int TABLE_VIEW_DELETE_INPUT_FIELD_ID = 0xE0000000;
+static const int TABLE_VIEW_INPUT_FIELD_ACTION_MASK = 0xF0000000;
+static const int TABLE_VIEW_INPUT_FIELD_INDEX_MASK = 0x0F000000;
+static const int TABLE_VIEW_GROUP_INDEX_MASK = 0x00FF0000;
+static const int TABLE_VIEW_ITEM_INDEX_MASK = 0x0000FFFF;
+static const int TABLE_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT = 24;
+static const int TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT = 28;
+static const int TABLE_VIEW_THUMBNAIL_FIELD_INDEX = 0;
+static const int TABLE_VIEW_NAME_FIELD_INDEX = 1;
+static const int TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX = 2;
+static const int TABLE_VIEW_EMAIL_FIELD_INDEX = 3;
+static const int TABLE_VIEW_ADDRESS_FIELD_INDEX = 4;
+static const int TABLE_VIEW_IM_ADDRESS_FIELD_INDEX = 5;
+static const int TABLE_VIEW_URL_FIELD_INDEX = 6;
+static const int TABLE_VIEW_BIRTHDAY_FIELD_INDEX = 7;
+static const int TABLE_VIEW_NOTE_FIELD_INDEX = 8;
+static const int TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX = 9;
+static const int TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX = 10;
+
+static const wchar_t* INPUT_TYPE_PHONE = L"phone";
+static const wchar_t* INPUT_TYPE_EMAIL = L"email";
+static const wchar_t* INPUT_TYPE_URL = L"url";
+static const wchar_t* VIEW_TYPE = L"viewType";
+static const wchar_t* VIEW_TYPE_VALUE_CONTACT = L"contact";
+static const wchar_t* VIEW_TYPE_CONTACT_ID = L"contactId";
+static const wchar_t* GROUP_LABEL_TITLE = L"GroupLabelTitle";
+static const wchar_t* GROUP_LABEL_VALUE = L"GroupLabelValue";
+static const wchar_t* GROUP_STYLE_PANEL = L"GroupStylePanel";
+
+ContactEditorForm::ContactEditorForm(void)
+: __isExpandable(false)
+, __isAppControl(false)
+, __isJobTitleEnabled(false)
+, __isDepartmentEnabled(false)
+, __isDefaultPhoneNumberButtonEnabled(false)
+, __isSaved(false)
+, __isMoreInformationContextMenuShowing(false)
+, __isTypeContextMenuShowing(false)
+, __isKeypadOpened(false)
+, __isScrollOccurred(false)
+, __isContactModified(false)
+, __scrolledDistance(0)
+, __origScrolledDistance(0)
+, __itemIndex(-1)
+, __groupIndex(-1)
+, __previousItemIndex(-1)
+, __previousGroupIndex(-1)
+, __pAppControl(null)
+, __pPhoneNumberFieldItem(null)
+, __pEmailFieldItem(null)
+, __pAddressFieldItem(null)
+, __pImAddressFieldItem(null)
+, __pUrlFieldItem(null)
+, __pDeletedItemList(null)
+, __pFileEventManager(null)
+, __pDiscardChangesPopup(null)
+, __pCurrentFocusedItem(null)
+, __pMoreInformationItem(null)
+, __pMoreInformationButton(null)
+, __pDefaultPhoneNumberContextMenu(null)
+, __pMoreInformationContextMenu(null)
+, __pThumbnailContextMenu(null)
+, __pTypeContextMenu(null)
+, __pTableView(null)
+, __pNameFieldItem(null)
+, __pNoteFieldItem(null)
+, __pPresentationModel(null)
+{
+}
+
+ContactEditorForm::~ContactEditorForm(void)
+{
+}
+
+void
+ContactEditorForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
+}
+
+result
+ContactEditorForm::OnInitializing(void)
+{
+       SetFormBackEventListener(this);
+       SettingInfo::AddSettingEventListener(*this);
+
+       Footer* pFooter = GetFooter();
+
+       FooterItem footerItemSave;
+       footerItemSave.Construct(IDA_ACTION_BAR_SAVE);
+       footerItemSave.SetText(ResourceManager::GetString(L"IDS_COM_SK_SAVE"));
+
+       pFooter->AddItem(footerItemSave);
+       pFooter->AddActionEventListener(*this);
+
+       __pTableView = new (std::nothrow) GroupedTableView();
+       __pTableView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height), false, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
+       __pTableView->SetItemProvider(this);
+       __pTableView->AddScrollEventListener(*this);
+       __pTableView->AddGroupedTableViewItemEventListener(*this);
+       AddControl(__pTableView);
+
+       __pPhoneNumberFieldItem = new (std::nothrow) ArrayList();
+       __pPhoneNumberFieldItem->Construct();
+
+       __pEmailFieldItem = new (std::nothrow) ArrayList();
+       __pEmailFieldItem->Construct();
+
+       __pAddressFieldItem = new (std::nothrow) ArrayList();
+       __pAddressFieldItem->Construct();
+
+       __pImAddressFieldItem = new (std::nothrow) ArrayList();
+       __pImAddressFieldItem->Construct();
+
+       __pUrlFieldItem = new (std::nothrow) ArrayList();
+       __pUrlFieldItem->Construct();
+
+       __pPresentationModel = new (std::nothrow) ContactPresentationModel();
+       __pPresentationModel->Construct();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       DeviceManager::AddDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
+
+       __pDeletedItemList = new ArrayList();
+       __pDeletedItemList->Construct();
+
+       return E_SUCCESS;
+}
+
+result
+ContactEditorForm::OnTerminating(void)
+{
+       AppLog("ContactEditorForm::OnTerminating()");
+
+       result r = E_SUCCESS;
+
+       __pTableView->SetItemProvider(null);
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+               delete __pPresentationModel;
+       }
+
+       if (__pPhoneNumberFieldItem)
+       {
+               __pPhoneNumberFieldItem->RemoveAll(true);
+               delete __pPhoneNumberFieldItem;
+       }
+
+       if (__pEmailFieldItem)
+       {
+               __pEmailFieldItem->RemoveAll(true);
+               delete __pEmailFieldItem;
+       }
+
+       if (__pAddressFieldItem)
+       {
+               __pAddressFieldItem->RemoveAll(true);
+               delete __pAddressFieldItem;
+       }
+
+       if (__pUrlFieldItem)
+       {
+               __pUrlFieldItem->RemoveAll(true);
+               delete __pUrlFieldItem;
+       }
+
+       if (__pImAddressFieldItem)
+       {
+               __pImAddressFieldItem->RemoveAll(true);
+               delete __pImAddressFieldItem;
+       }
+
+       if (__pDeletedItemList)
+       {
+               __pDeletedItemList->RemoveAll(true);
+               delete __pDeletedItemList;
+       }
+
+       if (__pDiscardChangesPopup)
+       {
+               delete __pDiscardChangesPopup;
+       }
+       delete __pAppControl;
+       delete __pNameFieldItem;
+       delete __pNoteFieldItem;
+       delete __pDefaultPhoneNumberContextMenu;
+       delete __pMoreInformationContextMenu;
+       delete __pThumbnailContextMenu;
+       delete __pTypeContextMenu;
+       delete __pFileEventManager;
+
+       DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
+       SettingInfo::RemoveSettingEventListener(*this);
+
+       return r;
+}
+
+void
+ContactEditorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SetFocus();
+
+       if( IsSaveContactValid() == true  && __isContactModified == true)
+       {
+               ShowDiscardChangesPopup();
+               return;
+       }
+       if (__isAppControl == true)
+       {
+               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+               AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+               result r = pAppManager->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_CANCELED, null);
+               AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+               UiApp::GetInstance()->Terminate();
+       }
+       else
+       {
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+       }
+}
+
+void
+ContactEditorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       AppLog("ContactEditorForm::OnActionPerformed(), actionId %d", actionId);
+
+       if ((actionId & TABLE_VIEW_INPUT_FIELD_ACTION_MASK) == TABLE_VIEW_DELETE_INPUT_FIELD_ID)
+       {
+               int groupIndex = (actionId & TABLE_VIEW_GROUP_INDEX_MASK) >> TABLE_VIEW_GROUP_INDEX_SHIFT;
+               int itemIndex = (actionId & TABLE_VIEW_ITEM_INDEX_MASK);
+
+               if (groupIndex > TABLE_VIEW_NAME_FIELD_INDEX)
+               {
+                       DeleteInputField(groupIndex, itemIndex);
+                       if (groupIndex == __previousGroupIndex && itemIndex < __previousItemIndex) //if we deleted a number on top of the item to be deleted
+                       {
+                               __previousItemIndex--; //adjust the index of the item to be deleted
+                       }
+                       __isContactModified = true;
+               }
+
+               return;
+       }
+       else if (&source == __pDefaultPhoneNumberContextMenu)
+       {
+               SetAsDefaultPhoneNumber(actionId, true);
+               __isContactModified = true;
+
+               return;
+       }
+       else if (((actionId & TABLE_VIEW_INPUT_FIELD_ACTION_MASK) >> TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT) == TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX)
+       {
+               int itemIndex = (actionId & TABLE_VIEW_ITEM_INDEX_MASK);
+               int selectedItemIndex = (actionId & TABLE_VIEW_INPUT_FIELD_INDEX_MASK) >> TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pPhoneNumberFieldItem->GetAt(itemIndex));
+               if (pItem == null)
+               {
+                       return;
+               }
+               pItem->SetName(Integer::ToString(selectedItemIndex));
+
+               Button* pButtonType = static_cast<Button *>(pItem->GetControl(1));
+               if (pButtonType == null)
+               {
+                       return;
+               }
+
+               pButtonType->SetText(__pPresentationModel->GetPhoneNumberTypeString((DetailPhoneNumberType)selectedItemIndex));
+               pButtonType->Invalidate(false);
+
+               __isContactModified = true;
+               return;
+       }
+       else if (((actionId & TABLE_VIEW_INPUT_FIELD_ACTION_MASK) >> TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT) == TABLE_VIEW_EMAIL_FIELD_INDEX)
+       {
+               int itemIndex = (actionId & TABLE_VIEW_ITEM_INDEX_MASK);
+               int selectedItemIndex = (actionId & TABLE_VIEW_INPUT_FIELD_INDEX_MASK) >> TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pEmailFieldItem->GetAt(itemIndex));
+               if (pItem == null)
+               {
+                       return;
+               }
+               pItem->SetName(Integer::ToString(selectedItemIndex));
+
+               Button* pButtonType = static_cast<Button *>(pItem->GetControl(1));
+               if (pButtonType == null)
+               {
+                       return;
+               }
+
+               pButtonType->SetText(__pPresentationModel->GetEmailTypeString((DetailEmailType)selectedItemIndex));
+               pButtonType->Invalidate(false);
+
+               __isContactModified = true;
+               return;
+       }
+       else if (((actionId & TABLE_VIEW_INPUT_FIELD_ACTION_MASK) >> TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT) == TABLE_VIEW_ADDRESS_FIELD_INDEX)
+       {
+               int itemIndex = (actionId & TABLE_VIEW_ITEM_INDEX_MASK);
+               int selectedItemIndex = (actionId & TABLE_VIEW_INPUT_FIELD_INDEX_MASK) >> TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pAddressFieldItem->GetAt(itemIndex));
+               if (pItem == null)
+               {
+                       return;
+               }
+               pItem->SetName(Integer::ToString(selectedItemIndex));
+
+               Button* pButtonType = static_cast<Button *>(pItem->GetControl(1));
+               if (pButtonType == null)
+               {
+                       return;
+               }
+
+               pButtonType->SetText(__pPresentationModel->GetAddressTypeString((DetailAddressType)selectedItemIndex));
+               pButtonType->Invalidate(false);
+
+               __isContactModified = true;
+               return;
+       }
+       else if (((actionId & TABLE_VIEW_INPUT_FIELD_ACTION_MASK) >> TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT) == TABLE_VIEW_IM_ADDRESS_FIELD_INDEX)
+       {
+               int itemIndex = (actionId & TABLE_VIEW_ITEM_INDEX_MASK);
+               int selectedItemIndex = (actionId & TABLE_VIEW_INPUT_FIELD_INDEX_MASK) >> TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pImAddressFieldItem->GetAt(itemIndex));
+               if (pItem == null)
+               {
+                       return;
+               }
+               pItem->SetName(Integer::ToString(selectedItemIndex));
+
+               Button* pButtonType = static_cast<Button *>(pItem->GetControl(1));
+               if (pButtonType == null)
+               {
+                       return;
+               }
+
+               pButtonType->SetText(__pPresentationModel->GetImAddressTypeString((DetailImAddressType)selectedItemIndex));
+               pButtonType->Invalidate(false);
+
+               __isContactModified = true;
+               return;
+       }
+       else if (((actionId & TABLE_VIEW_INPUT_FIELD_ACTION_MASK) >> TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT) == TABLE_VIEW_URL_FIELD_INDEX)
+       {
+               int itemIndex = (actionId & TABLE_VIEW_ITEM_INDEX_MASK);
+               int selectedItemIndex = (actionId & TABLE_VIEW_INPUT_FIELD_INDEX_MASK) >> TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pUrlFieldItem->GetAt(itemIndex));
+               if (pItem == null)
+               {
+                       return;
+               }
+               pItem->SetName(Integer::ToString(selectedItemIndex));
+
+               Button* pButtonType = static_cast<Button *>(pItem->GetControl(1));
+               if (pButtonType == null)
+               {
+                       return;
+               }
+
+               pButtonType->SetText(__pPresentationModel->GetUrlTypeString((DetailUrlType)selectedItemIndex));
+               pButtonType->Invalidate(false);
+
+               __isContactModified = true;
+               return;
+       }
+
+       switch (actionId)
+       {
+       case IDA_ACTION_BAR_SAVE:
+               {
+                       result r = E_SUCCESS;
+
+                       r = SaveContactData();
+                       if (r != E_SUCCESS)
+                       {
+                               return;
+                       }
+                       SetFocus();
+
+                       __isSaved = true;
+               }
+               break;
+       case IDA_BUTTON_THUMBNAIL_ADD:
+               {
+                       if (__pCurrentFocusedItem != null)
+                       {
+                               SetFocus();
+                       }
+                       LaunchAppControl(PROVIDER_ID_GALLERY, OPERATION_ID_PICK);
+               }
+               break;
+       case IDA_BUTTON_THUMBNAIL_DELETE:
+               {
+                       __pPresentationModel->SetThumbnail(L"");
+                       __isContactModified = true;
+                       __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+                       delete __pFileEventManager;
+                       __pFileEventManager = null;
+               }
+               break;
+       case IDA_BUTTON_CAMERA:
+               {
+                       if (__pCurrentFocusedItem != null)
+                       {
+                               SetFocus();
+                       }
+                       LaunchAppControl(PROVIDER_ID_CAMERA, OPERATION_ID_CREATE_CONTENT);
+               }
+               break;
+       case IDA_BUTTON_EXPANDABLE:
+               {
+                       ChangeNameFieldStatus();
+                       if (__previousItemIndex != -1 && __previousGroupIndex != -1)
+                       {
+                               DeleteInputField(__previousGroupIndex, __previousItemIndex, true);
+                       }
+                       if (__pCurrentFocusedItem == __pNameFieldItem)
+                       {
+                               __pCurrentFocusedItem = null;
+                       }
+
+                       __pTableView->UpdateTableView();
+                       static_cast<Button*>(__pNameFieldItem->GetControl(EXPAND_BUTTON))->SetFocus();
+
+                       Rectangle clientBounds = GetClientAreaBounds();
+                       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+
+                       if (__pCurrentFocusedItem != null)
+                       {
+                               SetFocus();
+                       }
+               }
+               break;
+       case IDA_BUTTON_MORE_INFO:
+               {
+                       if (__pCurrentFocusedItem != null)
+                       {
+                               if (__isKeypadOpened)
+                               {
+                                       __isMoreInformationContextMenuShowing = true;
+                                       __scrolledDistance = 0;
+                               }
+                       }
+
+                       __pMoreInformationButton = static_cast<Button*>(&(const_cast<Control&>(source)));
+
+                       Control* pParentPanel = source.GetParent();
+                       if (pParentPanel == null)
+                       {
+                               return;
+                       }
+
+                       __pMoreInformationItem = pParentPanel->GetParent();
+                       if (__pMoreInformationItem == null)
+                       {
+                               return;
+                       }
+
+                       Point contextMenuPos;
+
+                       contextMenuPos.x = __pMoreInformationItem->GetWidth() / 2;
+                       contextMenuPos.y = GetClientAreaBounds().y + __pMoreInformationItem->GetY() + source.GetY() - __scrolledDistance;
+
+                       ShowMoreInformationContextMenu(contextMenuPos);
+
+                       __pMoreInformationButton->SetFocus();
+               }
+               break;
+       case IDA_BUTTON_BIRTHDAY_CLEAR:
+               {
+                       DateTime currentDate;
+                       Tizen::System::SystemTime::GetCurrentTime(currentDate);
+                       __pPresentationModel->SetBirthday(currentDate);
+
+                       __pTableView->RefreshItem(TABLE_VIEW_BIRTHDAY_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+                       __isContactModified = true;
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_JOB_TITLE:
+               {
+                       __isExpandable = false;
+                       __isJobTitleEnabled = true;
+
+                       ChangeNameFieldStatus();
+
+                       __pTableView->UpdateTableView();
+
+                       if (IsMoreInformationButtonVisible() == false)
+                       {
+                               __pTableView->RefreshItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       }
+                       __pTableView->ScrollToItem(TABLE_VIEW_NAME_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_DEPARTMENT:
+               {
+                       __isExpandable = false;
+                       __isDepartmentEnabled = true;
+
+                       ChangeNameFieldStatus();
+
+                       __pTableView->UpdateTableView();
+
+                       if (IsMoreInformationButtonVisible() == false)
+                       {
+                               __pTableView->RefreshItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       }
+                       __pTableView->ScrollToItem(TABLE_VIEW_NAME_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_INSTANT_MESSENGER:
+               {
+                       SaveContactData(false);
+
+                       int index = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS);
+
+                       __pTableView->RefreshItem(TABLE_VIEW_IM_ADDRESS_FIELD_INDEX, index, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+
+                       if (IsMoreInformationButtonVisible() == false)
+                       {
+                               __pTableView->RefreshItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       }
+                       __pTableView->ScrollToItem(TABLE_VIEW_IM_ADDRESS_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_URL:
+               {
+                       SaveContactData(false);
+
+                       int index = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL);
+
+                       __pTableView->RefreshItem(TABLE_VIEW_URL_FIELD_INDEX, index, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+
+                       if (IsMoreInformationButtonVisible() == false)
+                       {
+                               __pTableView->RefreshItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       }
+                       __pTableView->ScrollToItem(TABLE_VIEW_URL_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_BIRTHDAY:
+               {
+                       DateTime currentDate;
+
+                       Tizen::System::SystemTime::GetCurrentTime(currentDate);
+                       __pPresentationModel->SetBirthday(currentDate);
+
+                       __pTableView->RefreshItem(TABLE_VIEW_BIRTHDAY_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+
+                       if (IsMoreInformationButtonVisible() == false)
+                       {
+                               __pTableView->RefreshItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       }
+                       __pTableView->ScrollToItem(TABLE_VIEW_BIRTHDAY_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_NOTE:
+               {
+                       __pTableView->RefreshItem(TABLE_VIEW_NOTE_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+
+                       if (IsMoreInformationButtonVisible() == false)
+                       {
+                               __pTableView->RefreshItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       }
+                       __pTableView->ScrollToItem(TABLE_VIEW_NOTE_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_BUTTON_DEFAULT_PHONE_NUMBER:
+               {
+                       Control* pParent = source.GetParent();
+                       Point contextMenuPos;
+
+                       contextMenuPos.x = pParent->GetWidth() / 2;
+                       contextMenuPos.y = GetClientAreaBounds().y + pParent->GetY() + source.GetY() + (source.GetHeight() / 2) - __scrolledDistance;
+
+                       if (__pCurrentFocusedItem != null)
+                       {
+                               SetFocus();
+                       }
+
+                       SaveContactData(false);
+                       ShowDefaultPhoneNumberContextMenu(contextMenuPos);
+               }
+               break;
+       case IDA_POPUP_DISCARD_CHANGES_CANCEL:
+               {
+                       HideDiscardChangesPopup();
+               }
+               break;
+       case IDA_POPUP_DISCARD_CHANGES_OK:
+               {
+                       HideDiscardChangesPopup();
+
+                       if (__isAppControl == true)
+                       {
+                               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+                               AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+                               result r = pAppManager->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_CANCELED, null);
+                               AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                               UiApp::GetInstance()->Terminate();
+                       }
+                       else
+                       {
+
+                               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+                               result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+                       }
+               }
+               break;
+       case IDA_BUTTON_RINGTONE_CLEAR:
+               {
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, L"", 0);
+                       __pTableView->RefreshItem(TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX, 2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               }
+               break;
+       case IDA_BUTTON_BIRTHDAY_DELETE:
+               {
+                       __pPresentationModel->RemoveBirthday();
+                       __isContactModified = true;
+                       __pTableView->UpdateTableView();
+               }
+               break;
+       case IDA_BUTTON_TYPE:
+               {
+                       Control* pParent = source.GetParent();
+                       Point position = pParent->GetPosition();
+                       Point itemPosition(position.x + source.GetX(), GetClientAreaBounds().y + position.y + source.GetY() + (source.GetHeight() / 2) - __scrolledDistance);
+                       String typeString = pParent->GetName();
+                       String itemIndexTag = source.GetName();
+                       int type;
+                       int itemIndex;
+
+                       Integer::Parse(itemIndexTag, itemIndex);
+                       Integer::Parse(typeString, type);
+                       ShowTypeContextMenu(type, itemPosition, itemIndex);
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactEditorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                                        Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to cast UiApp to ContactsApp");
+
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+
+       Header* pHeader = GetHeader();
+       Footer* pFooter = GetFooter();
+
+       if (previousSceneId.Equals(IDSCN_GROUP_SELECTOR, true) || previousSceneId.Equals(IDSCN_GROUP_EDITOR, true))
+       {
+               if (pArgs != null)
+               {
+                       Integer* pCategoryId = null;
+                       int prevCount = 0;
+                       int curCount  = 0;
+
+                       IList* pCategoryList = __pPresentationModel->GetAssignedCategoryIdListN();
+                       prevCount = pCategoryList->GetCount();
+                       delete pCategoryList;
+
+                       __pPresentationModel->RemoveContactFromAllCategories();
+
+                       IEnumerator* pEnum = pArgs->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               pCategoryId = static_cast<Integer*>(pEnum->GetCurrent());
+                               if (pCategoryId != null)
+                               {
+                                       __pPresentationModel->AddContactToCategory(pCategoryId->ToInt());
+                                       __isContactModified = true;
+                                       curCount++;
+                               }
+                       }
+
+                       if(prevCount > 0 && curCount == 0)
+                       {
+                               __isContactModified = true;
+                       }
+
+                       delete pEnum;
+
+                       pArgs->RemoveAll(true);
+                       delete pArgs;
+               }
+
+               __pTableView->RefreshItem(TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               return;
+       }
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_ADD)
+       {
+               __isAppControl = true;
+               __pPresentationModel->PrepareNewContact();
+
+               pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+               pFooter->SetItemEnabled(0, false);
+       }
+       else if (pContactsApp->GetOperationId() == OPERATION_ID_EDIT)
+       {
+               __isAppControl = true;
+
+               if (pArgs != null)
+               {
+                       String* pArgString = null;
+                       String type;
+                       String content;
+
+                       IEnumerator* pEnum = pArgs->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               pArgString = static_cast<String*>(pEnum->GetCurrent());
+                               if (pArgString != null)
+                               {
+                                       ParseAppControlArgument(*pArgString, type, content);
+
+                                       if (type.Equals(RETURN_TYPE_ITEM_ID, false))
+                                       {
+                                               RecordId contactId;
+                                               Integer::Parse(content, contactId);
+                                               result r = __pPresentationModel->SetContactId(contactId, true);
+
+                                               if (IsFailed(r))
+                                               {
+                                                       AppLogDebug("Invalid contactId has been input : %d", contactId);
+                                                       UiApp::GetInstance()->Terminate();
+                                               }
+
+                                               if (__pPresentationModel->GetValue(DETAIL_PROPERTY_JOB_TITLE).IsEmpty() == false)
+                                               {
+                                                       __isJobTitleEnabled = true;
+                                               }
+                                               if (__pPresentationModel->GetValue(DETAIL_PROPERTY_DEPARTMENT).IsEmpty() == false)
+                                               {
+                                                       __isDepartmentEnabled = true;
+                                               }
+                                               break;
+                                       }
+                               }
+                       }
+                       delete pEnum;
+
+                       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_SK_EDIT"));
+               }
+       }
+       else
+       {
+               if (pArgs != null)
+               {
+                       Integer* pContactId = null;
+
+                       pContactId = static_cast<Integer*>(pArgs->GetAt(0));
+                       if (pContactId != null)
+                       {
+                               if (pContactId->ToInt() != INVALID_RECORD_ID)
+                               {
+                                       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_SK_EDIT"));
+                                       __pPresentationModel->SetContactId(pContactId->ToInt(), true);
+                               }
+                               else
+                               {
+                                       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+
+                                       String* pVcfPath = static_cast<String*>(pArgs->GetAt(1));
+                                       if (pVcfPath != null)
+                                       {
+                                               __pPresentationModel->SetVcfPath(*pVcfPath, true);
+                                               SetSaveButtonEnabled(IsSaveContactValid());
+                                       }
+                               }
+                       }
+
+                       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_JOB_TITLE).IsEmpty() == false)
+                       {
+                               __isJobTitleEnabled = true;
+                       }
+                       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_DEPARTMENT).IsEmpty() == false)
+                       {
+                               __isDepartmentEnabled = true;
+                       }
+               }
+               else
+               {
+                       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+                       pFooter->SetItemEnabled(0, false);
+                       __pPresentationModel->PrepareNewContact();
+               }
+       }
+
+       if (__isAppControl == true)
+       {
+               if (pArgs != null)
+               {
+                       String* pArgString = null;
+                       String type;
+                       String content;
+
+                       IEnumerator* pEnum = pArgs->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               pArgString = static_cast<String*>(pEnum->GetCurrent());
+                               if (pArgString != null)
+                               {
+                                       result r = E_SUCCESS;
+                                       ParseAppControlArgument(*pArgString, type, content);
+
+                                       if (type.Equals(INPUT_TYPE_PHONE, false))
+                                       {
+                                               r = __pPresentationModel->SetValue(DETAIL_PROPERTY_PHONE_NUMBER, content, __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER));
+                                       }
+                                       else if (type.Equals(INPUT_TYPE_EMAIL, false))
+                                       {
+                                               r = __pPresentationModel->SetValue(DETAIL_PROPERTY_EMAIL, content, __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL));
+                                       }
+                                       else if (type.Equals(INPUT_TYPE_URL, false))
+                                       {
+                                               r = __pPresentationModel->SetValue(DETAIL_PROPERTY_URL, content, __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL));
+                                       }
+
+                                       if (r == E_SUCCESS)
+                                       {
+                                               pFooter->SetItemEnabled(0, true);
+                                       }
+                               }
+                       }
+                       delete pEnum;
+               }
+       }
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+ContactEditorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+       if (__previousItemIndex != -1 && __previousGroupIndex != -1)
+       {
+               DeleteInputField(__previousGroupIndex, __previousItemIndex);
+       }
+}
+
+void
+ContactEditorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactEditorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+       __isKeypadOpened = true;
+}
+
+void
+ContactEditorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+       AppLogDebug("Contacts::OnKeypadclosed bounds are width:(%d), height:(%d)", clientBounds.width, clientBounds.height);
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+
+       if (__isMoreInformationContextMenuShowing)
+       {
+               if (__pCurrentFocusedItem != null)
+               {
+                       __isMoreInformationContextMenuShowing = false;
+                       __isKeypadOpened = false;
+                       return;
+               }
+
+               AppLogDebug("__isMoreInformationContextMenuShowing is True");
+               Point anchorPosition = __pMoreInformationContextMenu->GetAnchorPosition();
+               __pTableView->ScrollToItem(TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX, 0, TABLE_VIEW_SCROLL_ITEM_ALIGNMENT_BOTTOM);
+               if (__scrolledDistance != __origScrolledDistance)
+               {
+                       __scrolledDistance = __origScrolledDistance;
+               }
+
+               if (__pMoreInformationItem != null && __pMoreInformationButton != null)
+               {
+                       anchorPosition.x = __pMoreInformationItem->GetWidth() / 2;
+                       anchorPosition.y = GetClientAreaBounds().y + __pMoreInformationItem->GetY() + __pMoreInformationButton->GetY() - __scrolledDistance;
+
+                       __pMoreInformationItem = null;
+                       __pMoreInformationButton = null;
+               }
+
+               __pMoreInformationContextMenu->SetAnchorPosition(anchorPosition);
+               __pMoreInformationContextMenu->Show();
+
+               __isMoreInformationContextMenuShowing = false;
+       }
+       __isKeypadOpened = false;
+}
+
+void
+ContactEditorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+void
+ContactEditorForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+       int diff = clientBounds.height - __pTableView->GetHeight();
+
+       if (__pTypeContextMenu != null)
+       {
+               int yPos = __pTypeContextMenu->GetAnchorPosition().y;
+               __pTypeContextMenu->SetAnchorPosition(Point(__pTypeContextMenu->GetAnchorPosition().x, yPos + diff));
+               __pTypeContextMenu->Show();
+       }
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+}
+
+void
+ContactEditorForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       if (status == TABLE_VIEW_ITEM_STATUS_SELECTED && groupIndex == TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX)
+       {
+               if (__pCurrentFocusedItem != null)
+               {
+                       SetFocus();
+               }
+
+               if (itemIndex == 0)
+               {
+                       if (__isMoreInformationContextMenuShowing == true)
+                       {
+                               __isMoreInformationContextMenuShowing = false;
+                       }
+
+                       if (__pPresentationModel->GetCategoryCount() > 0)
+                       {
+                               IList* pCategoryList = __pPresentationModel->GetAssignedCategoryIdListN();
+
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_SELECTOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pCategoryList);
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+                       }
+
+                       return;
+               }
+               else if (itemIndex == 2)
+               {
+                       if (__isMoreInformationContextMenuShowing == true)
+                       {
+                               __isMoreInformationContextMenuShowing = false;
+                       }
+
+                       Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+                       if (pPanel != null)
+                       {
+                               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(1));
+                               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(0));
+
+                               pPanel->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+                               if (pLabelValue != null)
+                               {
+                                       pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+                               }
+
+                               if (pLabelValue != null)
+                               {
+                                       pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+                               }
+                               pPanel->Invalidate(true);
+                       }
+
+                       LaunchAppControl(PROVIDER_ID_FILEMANAGER, OPERATION_ID_PICK);
+               }
+       }
+}
+
+void
+ContactEditorForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem *pContextItem, bool activated)
+{
+}
+
+void
+ContactEditorForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+}
+
+int
+ContactEditorForm::GetGroupCount(void)
+{
+       return GROUP_ITEM_COUNT;
+}
+
+int
+ContactEditorForm::GetItemCount(int groupIndex)
+{
+       int itemCount = 0;
+
+       switch (groupIndex)
+       {
+       case TABLE_VIEW_THUMBNAIL_FIELD_INDEX:
+               {
+                       itemCount = 1;
+               }
+               break;
+       case TABLE_VIEW_NAME_FIELD_INDEX:
+               {
+                       itemCount = NAME_FIELD_ITEM_COUNT;
+               }
+               break;
+       case TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX:
+               {
+                       itemCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) + 1;
+
+                       if (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) > 1)
+                       {
+                               __isDefaultPhoneNumberButtonEnabled = true;
+                               itemCount++;
+                       }
+                       else
+                       {
+                               __isDefaultPhoneNumberButtonEnabled = false;
+                       }
+               }
+               break;
+       case TABLE_VIEW_EMAIL_FIELD_INDEX:
+               {
+                       itemCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL) + 1;
+               }
+               break;
+       case TABLE_VIEW_ADDRESS_FIELD_INDEX:
+               {
+                       itemCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_ADDRESS) + 1;
+               }
+               break;
+       case TABLE_VIEW_IM_ADDRESS_FIELD_INDEX:
+               {
+                       itemCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS);
+
+                       if ((itemCount == 0 && __pImAddressFieldItem->GetCount() > 0) || itemCount > 0)
+                       {
+                               itemCount++;
+                       }
+               }
+               break;
+       case TABLE_VIEW_URL_FIELD_INDEX:
+               {
+                       itemCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL);
+
+                       if ((itemCount == 0 && __pUrlFieldItem->GetCount() > 0) || itemCount > 0)
+                       {
+                               itemCount++;
+                       }
+               }
+               break;
+       case TABLE_VIEW_BIRTHDAY_FIELD_INDEX:
+               {
+                       DateTime birthday;
+                       if (__pPresentationModel->GetBirthday(birthday) != E_SUCCESS)
+                       {
+                               itemCount = 0;
+                       }
+                       else
+                       {
+                               itemCount = 1;
+                       }
+               }
+               break;
+       case TABLE_VIEW_NOTE_FIELD_INDEX:
+               {
+                       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_NOTE).IsEmpty() == false || __pNoteFieldItem != null )
+                       {
+                               itemCount = 1;
+                       }
+                       else
+                       {
+                               itemCount = 0;
+                       }
+               }
+               break;
+       case TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX:
+               {
+                       itemCount = 3;
+               }
+               break;
+       case TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX:
+               {
+                       if (IsMoreInformationButtonVisible())
+                       {
+                               itemCount = 1;
+                       }
+                       else
+                       {
+                               itemCount = 0;
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+
+       return itemCount;
+}
+
+int
+ContactEditorForm::GetDefaultGroupItemHeight(void)
+{
+       return H_EMPTY_SPACE;
+}
+
+int
+ContactEditorForm::GetDefaultItemHeight(void)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       return pContactsApp->GetListItemSingleLineHeight();
+}
+
+TableViewGroupItem*
+ContactEditorForm::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       int groupItemHeight = H_EMPTY_SPACE;
+
+       if (groupIndex == TABLE_VIEW_THUMBNAIL_FIELD_INDEX)
+       {
+               groupItemHeight = H_THUMBNAIL_GROUP_ITEM_HEIGHT;
+       }
+       else if (groupIndex == TABLE_VIEW_NAME_FIELD_INDEX)
+       {
+               groupItemHeight = H_NAMEFIELD_GROUP_ITEM_HEIGHT;
+       }
+       else if (groupIndex == TABLE_VIEW_BIRTHDAY_FIELD_INDEX)
+       {
+               groupItemHeight = Y_EDIT_FIELD_GAP;
+       }
+       else if (groupIndex == TABLE_VIEW_NOTE_FIELD_INDEX)
+       {
+               groupItemHeight = H_EDIT_FIELD_GAP;
+       }
+       else if ((groupIndex > TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX && groupIndex < TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX) || groupIndex == TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX)
+       {
+               groupItemHeight = 0;
+       }
+
+       TableViewGroupItem* pGroupItem = new (std::nothrow) TableViewGroupItem();
+       pGroupItem->Construct(Dimension(itemWidth, groupItemHeight));
+       pGroupItem->SetBackgroundColor(Color(COLOR_TABLE_VIEW_BG), TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pGroupItem->SetEnabled(false);
+
+       Panel* pPanel = new (std::nothrow) Panel();
+       pPanel->Construct(Rectangle(0, -(H_DIVIDER), itemWidth, groupItemHeight + H_DIVIDER));
+       pPanel->SetBackgroundColor(Color(COLOR_TABLE_VIEW_BG));
+
+       pGroupItem->AddControl(pPanel);
+
+       return pGroupItem;
+}
+
+bool
+ContactEditorForm::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+TableViewItem*
+ContactEditorForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       TableViewItem* pItem = null;
+
+       switch (groupIndex)
+       {
+       case TABLE_VIEW_THUMBNAIL_FIELD_INDEX:
+               {
+                       pItem = GetThumbnailField(itemWidth);
+               }
+               break;
+       case TABLE_VIEW_NAME_FIELD_INDEX:
+               {
+                       pItem = GetNameFields(itemWidth);
+               }
+               break;
+       case TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX:
+               {
+                       if ((itemIndex == __pTableView->GetItemCountAt(groupIndex) - 1) && __isDefaultPhoneNumberButtonEnabled == true)
+                       {
+                               pItem = GetDefaultPhoneNumberItem(itemWidth);
+                               break;
+                       }
+
+                       pItem = GetPhoneNumberFields(itemIndex, itemWidth);
+               }
+               break;
+       case TABLE_VIEW_EMAIL_FIELD_INDEX:
+               {
+                       pItem = GetEmailFields(itemIndex, itemWidth);
+               }
+               break;
+       case TABLE_VIEW_ADDRESS_FIELD_INDEX:
+               {
+                       pItem = GetAddressFields(itemIndex, itemWidth);
+               }
+               break;
+       case TABLE_VIEW_IM_ADDRESS_FIELD_INDEX:
+               {
+                       pItem = GetImAddressFields(itemIndex, itemWidth);
+               }
+               break;
+       case TABLE_VIEW_URL_FIELD_INDEX:
+               {
+                       pItem = GetUrlFields(itemIndex, itemWidth);
+               }
+               break;
+       case TABLE_VIEW_BIRTHDAY_FIELD_INDEX:
+               {
+                       pItem = GetBirthdayField(itemWidth);
+               }
+               break;
+       case TABLE_VIEW_NOTE_FIELD_INDEX:
+               {
+                       pItem = GetNoteField(itemWidth);
+               }
+               break;
+       case TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX:
+               {
+                       switch (itemIndex)
+                       {
+                       case 0:
+                               pItem = GetGroupsField(itemWidth);
+                               break;
+                       case 1:
+                               {
+                                       pItem = new (std::nothrow) TableViewItem();
+                                       pItem->Construct(Dimension(itemWidth, H_DIVIDER * 2));
+                                       pItem->SetEnabled(false);
+                               }
+                               break;
+                       case 2:
+                               pItem = GetRingtoneField(itemWidth);
+                               break;
+                       default:
+                               break;
+                       }
+               }
+               break;
+       case TABLE_VIEW_MORE_INFORMATION_FIELD_INDEX:
+               {
+                       if (IsMoreInformationButtonVisible())
+                       {
+                               pItem = GetMoreInformationField(itemWidth);
+                       }
+                       else
+                       {
+                               pItem = null;
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+
+       return pItem;
+}
+
+bool
+ContactEditorForm::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       if ((groupIndex > TABLE_VIEW_NAME_FIELD_INDEX && groupIndex < TABLE_VIEW_BIRTHDAY_FIELD_INDEX) || groupIndex == TABLE_VIEW_NOTE_FIELD_INDEX)
+       {
+               int index = -1;
+               __pDeletedItemList->IndexOf(*pItem, index);
+
+               if (index >= 0)
+               {
+                       __pDeletedItemList->RemoveAt(index);
+               }
+               else
+               {
+                       return true;
+               }
+       }
+       else if (groupIndex == TABLE_VIEW_NAME_FIELD_INDEX)
+       {
+               SaveNameFields();
+               __pNameFieldItem = null;
+       }
+
+       if (__pCurrentFocusedItem == pItem && __isKeypadOpened)
+       {
+               __isKeypadOpened = false;
+       }
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+ContactEditorForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem)
+{
+}
+
+void
+ContactEditorForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem)
+{
+       if (pItem == null)
+       {
+               return;
+       }
+
+       switch (groupIndex)
+       {
+       case TABLE_VIEW_THUMBNAIL_FIELD_INDEX:
+               {
+                       SetThumbnailControls(*pItem, true);
+                       pItem->Invalidate(true);
+               }
+               break;
+       case TABLE_VIEW_NAME_FIELD_INDEX:
+               {
+                       if (__pCurrentFocusedItem == pItem && __isKeypadOpened)
+                       {
+                               __isKeypadOpened = false;
+                       }
+                       pItem->RemoveAllControls();
+                       SetNameFields(*pItem);
+                       Invalidate(true);
+               }
+           break;
+       case TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX:
+               {
+                       String valueString;
+                       Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+                       if (pPanel == null)
+                       {
+                               return;
+                       }
+
+                       Label* pLabel = static_cast<Label*>(pPanel->GetControl(1));
+
+                       if (pLabel == null)
+                       {
+                               return;
+                       }
+
+                       if (itemIndex == 0)
+                       {
+                               valueString =  __pPresentationModel->GetValue(DETAIL_PROPERTY_GROUP);
+                               if (valueString.IsEmpty() == true)
+                               {
+                                       valueString = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+                               }
+                       }
+                       else if (itemIndex == 2)
+                       {
+                               String ringtoneName =  __pPresentationModel->GetValue(DETAIL_PROPERTY_RINGTONE);
+                               int index = 0;
+
+                               ringtoneName.LastIndexOf(L"/", ringtoneName.GetLength() - 1, index);
+
+                               if (index != 0)
+                               {
+                                       ringtoneName.SubString(index + 1, valueString);
+                               }
+                       }
+
+                       pLabel->SetText(valueString);
+                       pLabel->Invalidate(false);
+               }
+               break;
+       case TABLE_VIEW_BIRTHDAY_FIELD_INDEX:
+               {
+                       EditDate* pBirthday = static_cast<EditDate *>(pItem->GetControl(1));
+                       if (pBirthday == null)
+                       {
+                               return;
+                       }
+                       pBirthday->Invalidate(false);
+               }
+               break;
+       case TABLE_VIEW_NOTE_FIELD_INDEX:
+               {
+                       Control* pNoteField = pItem->GetControl(1);
+                       Control* pNoteLabel = pItem->GetControl(0);
+                       if (pNoteField == null)
+                       {
+                               return;
+                       }
+
+                       pItem->SetSize(pItem->GetWidth(), pNoteLabel->GetHeight() + pNoteField->GetHeight() + H_EDIT_FIELD_GAP + H_EXPANDABLE_EDIT_AREA_EXTENDED);
+
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetThumbnailField(int itemWidth)
+{
+       TableViewItem* pThumbnailItem = new (std::nothrow) TableViewItem();
+       pThumbnailItem->Construct(Dimension(itemWidth, W_THUMBNAIL + H_THUMBNAIL_DELETE_BUTTON_GAP + Y_EDIT_FIELD_GAP * 2));
+       pThumbnailItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       SetThumbnailControls(*pThumbnailItem);
+
+       return pThumbnailItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetNameFields(int itemWidth)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       __pNameFieldItem = new (std::nothrow) TableViewItem();
+       __pNameFieldItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()));
+       __pNameFieldItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       SetNameFields(*__pNameFieldItem);
+
+       return __pNameFieldItem;
+}
+
+void
+ContactEditorForm::SetNameFields(Tizen::Ui::Controls::TableViewItem& item)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int itemWidth = item.GetWidth();
+       int itemHeight = pContactsApp->GetListItemSingleLineHeight();
+
+       if (__isExpandable == true)
+       {
+               itemHeight = DEFAULT_EXPAND_NAME_FIELD_COUNT * pContactsApp->GetListItemSingleLineHeight();
+
+               if (__isJobTitleEnabled == true)
+               {
+                       itemHeight += pContactsApp->GetListItemSingleLineHeight();
+               }
+
+               if (__isDepartmentEnabled)
+               {
+                       itemHeight += pContactsApp->GetListItemSingleLineHeight();
+               }
+       }
+
+       item.SetSize(itemWidth, itemHeight);
+
+       Rectangle itemBounds(W_ITEM_GAP, Y_EDIT_FIELD_GAP, itemWidth - (W_ITEM_GAP * 3) - H_BUTTON, pContactsApp->GetListItemSingleLineHeight() - H_EDIT_FIELD_GAP);
+
+       if (__isExpandable == true)
+       {
+               EditField* pFirstName = new (std::nothrow) EditField();
+               pFirstName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, false, __pPresentationModel->GetValue(DETAIL_PROPERTY_FIRST_NAME).GetLength() + EDIT_FIELD_EXTENDED_LENGTH);
+               pFirstName->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME"));
+               pFirstName->AddFocusEventListener(*this);
+               pFirstName->AddKeypadEventListener(*this);
+               pFirstName->SetName(ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME"));
+               pFirstName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_FIRST_NAME));
+               pFirstName->AddTextEventListener(*this);
+               pFirstName->SetTextSize(pContactsApp->GetFontSize());
+
+               item.AddControl(pFirstName);
+               item.SetIndividualSelectionEnabled(pFirstName, true);
+
+               itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               EditField* pMiddleName = new (std::nothrow) EditField();
+               pMiddleName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, false, __pPresentationModel->GetValue(DETAIL_PROPERTY_MIDDLE_NAME).GetLength() + EDIT_FIELD_EXTENDED_LENGTH);
+               pMiddleName->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_MIDDLE_NAME"));
+               pMiddleName->AddFocusEventListener(*this);
+               pMiddleName->AddKeypadEventListener(*this);
+               pMiddleName->AddTextEventListener(*this);
+               pMiddleName->SetName(ResourceManager::GetString(L"IDS_PB_BODY_MIDDLE_NAME"));
+               pMiddleName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_MIDDLE_NAME));
+               pMiddleName->SetTextSize(pContactsApp->GetFontSize());
+
+               item.AddControl(pMiddleName);
+               item.SetIndividualSelectionEnabled(pMiddleName, true);
+
+               itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               EditField* pLastName = new (std::nothrow) EditField();
+               pLastName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, false, __pPresentationModel->GetValue(DETAIL_PROPERTY_LAST_NAME).GetLength() + EDIT_FIELD_EXTENDED_LENGTH);
+               pLastName->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME"));
+               pLastName->AddFocusEventListener(*this);
+               pLastName->AddKeypadEventListener(*this);
+               pLastName->SetName(ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME"));
+               pLastName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_LAST_NAME));
+               pLastName->SetTextSize(pContactsApp->GetFontSize());
+               pLastName->AddTextEventListener(*this);
+
+               item.AddControl(pLastName);
+               item.SetIndividualSelectionEnabled(pLastName, true);
+
+               itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               EditField* pSuffix = new (std::nothrow) EditField();
+               pSuffix->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, false, __pPresentationModel->GetValue(DETAIL_PROPERTY_NAME_SUFFIX).GetLength() + EDIT_FIELD_EXTENDED_LENGTH);
+               pSuffix->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_SUFFIX"));
+               pSuffix->AddFocusEventListener(*this);
+               pSuffix->AddKeypadEventListener(*this);
+               pSuffix->AddTextEventListener(*this);
+               pSuffix->SetName(ResourceManager::GetString(L"IDS_PB_BODY_SUFFIX"));
+               pSuffix->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_NAME_SUFFIX));
+               pSuffix->SetTextSize(pContactsApp->GetFontSize());
+
+               item.AddControl(pSuffix);
+               item.SetIndividualSelectionEnabled(pSuffix, true);
+
+               itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               EditField* pNickName = new (std::nothrow) EditField();
+               pNickName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               pNickName->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_NICKNAME"));
+               pNickName->AddFocusEventListener(*this);
+               pNickName->AddKeypadEventListener(*this);
+               pNickName->AddTextEventListener(*this);
+               pNickName->SetName(ResourceManager::GetString(L"IDS_PB_BODY_NICKNAME"));
+               pNickName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_NICK_NAME));
+               pNickName->SetTextSize(pContactsApp->GetFontSize());
+
+               item.AddControl(pNickName);
+               item.SetIndividualSelectionEnabled(pNickName, true);
+
+               itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               if (__isJobTitleEnabled == true)
+               {
+                       EditField* pJobTitle = new (std::nothrow) EditField();
+                       pJobTitle->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+                       pJobTitle->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_JOB_TITLE"));
+                       pJobTitle->AddFocusEventListener(*this);
+                       pJobTitle->AddKeypadEventListener(*this);
+                       pJobTitle->AddTextEventListener(*this);
+                       pJobTitle->SetName(ResourceManager::GetString(L"IDS_PB_BODY_JOB_TITLE"));
+                       pJobTitle->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_JOB_TITLE));
+                       pJobTitle->SetTextSize(pContactsApp->GetFontSize());
+
+                       item.AddControl(pJobTitle);
+                       item.SetIndividualSelectionEnabled(pJobTitle, true);
+
+                       itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               }
+
+               if (__isDepartmentEnabled == true)
+               {
+                       EditField* pDepartment = new (std::nothrow) EditField();
+                       pDepartment->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+                       pDepartment->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_DEPARTMENT"));
+                       pDepartment->AddFocusEventListener(*this);
+                       pDepartment->AddKeypadEventListener(*this);
+                       pDepartment->AddTextEventListener(*this);
+                       pDepartment->SetName(ResourceManager::GetString(L"IDS_PB_BODY_DEPARTMENT"));
+                       pDepartment->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEPARTMENT));
+                       pDepartment->SetTextSize(pContactsApp->GetFontSize());
+
+                       item.AddControl(pDepartment);
+                       item.SetIndividualSelectionEnabled(pDepartment, true);
+
+                       itemBounds.y += pContactsApp->GetListItemSingleLineHeight();
+               }
+
+               EditField* pCompanyName = new (std::nothrow) EditField();
+               pCompanyName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               pCompanyName->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_COMPANY"));
+               pCompanyName->AddFocusEventListener(*this);
+               pCompanyName->AddKeypadEventListener(*this);
+               pCompanyName->SetName(ResourceManager::GetString(L"IDS_PB_BODY_COMPANY"));
+               pCompanyName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_COMPANY));
+               pCompanyName->SetTextSize(pContactsApp->GetFontSize());
+
+               item.AddControl(pCompanyName);
+               item.SetIndividualSelectionEnabled(pCompanyName, true);
+       }
+       else
+       {
+               int nameLength = 0;
+               String firstName(__pPresentationModel->GetValue(DETAIL_PROPERTY_FIRST_NAME));
+               String lastName(__pPresentationModel->GetValue(DETAIL_PROPERTY_LAST_NAME));
+               String middleName(__pPresentationModel->GetValue(DETAIL_PROPERTY_MIDDLE_NAME));
+               String suffix(__pPresentationModel->GetValue(DETAIL_PROPERTY_NAME_SUFFIX));
+
+               nameLength = firstName.GetLength() + lastName.GetLength() + middleName.GetLength();
+               if (suffix.IsEmpty() == false)
+               {
+                       nameLength = nameLength + suffix.GetLength() + 1;
+               }
+
+               EditField* pName = new (std::nothrow) EditField();
+               pName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, false, nameLength + EDIT_FIELD_EXTENDED_LENGTH);
+               pName->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_DETAILS_NAME"));
+               pName->AddFocusEventListener(*this);
+               pName->AddKeypadEventListener(*this);
+               pName->SetName(Integer::ToString(IDA_INPUT_FIELD_DISPLAY_NAME));
+               pName->AddTextEventListener(*this);
+               pName->SetTextSize(pContactsApp->GetFontSize());
+
+               if (firstName.IsEmpty() == false)
+               {
+                       pName->SetText(firstName);
+               }
+
+               if (middleName.IsEmpty() == false)
+               {
+                       pName->AppendText(CHARACTER_SPACE + middleName);
+               }
+
+               if (lastName.IsEmpty() == false)
+               {
+                       pName->AppendText(CHARACTER_SPACE + lastName);
+               }
+
+               if (suffix.IsEmpty() == false)
+               {
+                       pName->AppendText(DELIMITER_COMMA);
+                       pName->AppendText(CHARACTER_SPACE + suffix);
+               }
+
+               item.AddControl(pName);
+               item.SetIndividualSelectionEnabled(pName, true);
+               __fullName = pName->GetText();
+       }
+
+       Button* pButtonExpand = new (std::nothrow) Button();
+       pButtonExpand->Construct(Rectangle(itemWidth - (H_BUTTON + W_ITEM_GAP), (pContactsApp->GetListItemSingleLineHeight() - H_BUTTON) / 2, H_BUTTON, H_BUTTON));
+       pButtonExpand->SetActionId(IDA_BUTTON_EXPANDABLE);
+       pButtonExpand->SetName(EXPAND_BUTTON);
+       pButtonExpand->AddActionEventListener(*this);
+
+       Bitmap* pBitmap = null;
+       Bitmap* pBitmapPressed = null;
+
+       if (__isExpandable == true)
+       {
+               pBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_OPENED);
+               pBitmapPressed = ResourceManager::GetBitmapN(IDB_EXPAND_OPENED_PRESSED);
+       }
+       else
+       {
+               pBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_CLOSED);
+               pBitmapPressed = ResourceManager::GetBitmapN(IDB_EXPAND_CLOSED_PRESSED);
+       }
+
+       if (pBitmap != null)
+       {
+               pButtonExpand->SetNormalBitmap(Point(0, 0), *pBitmap);
+       }
+
+       if (pBitmapPressed != null)
+       {
+               pButtonExpand->SetPressedBitmap(Point(0, 0), *pBitmapPressed);
+       }
+
+       delete pBitmap;
+       delete pBitmapPressed;
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_BUTTON_NORMAL);
+       pBitmapPressed = ResourceManager::GetBitmapN(IDB_EXPAND_BUTTON_PRESSED);
+
+       if (pBitmap != null)
+       {
+               pButtonExpand->SetNormalBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       if (pBitmapPressed != null)
+       {
+               pButtonExpand->SetPressedBackgroundBitmap(*pBitmapPressed);
+               delete pBitmapPressed;
+       }
+
+       item.AddControl(pButtonExpand);
+       item.SetIndividualSelectionEnabled(pButtonExpand, true);
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetInputFieldN(int groupIndex, int itemIndex, int itemWidth, Tizen::Ui::Controls::EditFieldStyle style, const Tizen::Base::String& titleText, const Tizen::Base::String& guideText, const Tizen::Base::String& text, bool isDeleteButton)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       TableViewItem* pTableViewItem = new (std::nothrow) TableViewItem();
+       pTableViewItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pTableViewItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       EditField* pInputField = new (std::nothrow) EditField();
+       pInputField->Construct(Rectangle(W_ITEM_GAP, Y_EDIT_FIELD_GAP, itemWidth - (W_ITEM_GAP * 4) - H_BUTTON - W_TYPE_BUTTON, pContactsApp->GetListItemSingleLineHeight() - H_EDIT_FIELD_GAP), style, INPUT_STYLE_OVERLAY);
+       pInputField->SetGuideText(guideText);
+       pInputField->SetText(text);
+       pInputField->SetTextSize(pContactsApp->GetFontSize());
+       pInputField->AddKeypadEventListener(*this);
+       pInputField->AddFocusEventListener(*this);
+       pInputField->AddTextEventListener(*this);
+       pInputField->SetEnabled(true);
+
+       int parsedItemIndex = 0;
+       parsedItemIndex |= (groupIndex << TABLE_VIEW_INPUT_FIELD_ACTION_SHIFT);
+       parsedItemIndex |= (groupIndex << TABLE_VIEW_GROUP_INDEX_SHIFT);
+       parsedItemIndex |= itemIndex;
+
+       pInputField->SetName(Integer::ToString(parsedItemIndex));
+       pTableViewItem->AddControl(pInputField);
+
+       Button *pButtonType = new (std::nothrow) Button();
+       pButtonType->Construct(Rectangle(pInputField->GetX() + pInputField->GetWidth() + W_ITEM_GAP, (pContactsApp->GetListItemSingleLineHeight() - H_BUTTON) / 2, W_TYPE_BUTTON, H_BUTTON));
+       pButtonType->SetText(titleText);
+       pButtonType->SetActionId(IDA_BUTTON_TYPE);
+       pButtonType->AddActionEventListener(*this);
+       pButtonType->AddTouchEventListener(*this);
+       pButtonType->SetName(Integer::ToString(parsedItemIndex));
+
+       Bitmap* pDropBoxIcon = ResourceManager::GetBitmapN(IDB_BUTTON_DROPBOX);
+
+       if (pDropBoxIcon != null)
+       {
+               pButtonType->SetNormalBitmap(Point(W_TYPE_BUTTON - W_DROPBOX_ICON, H_BUTTON - H_DROPBOX_ICON), *pDropBoxIcon);
+               pButtonType->SetPressedBitmap(Point(W_TYPE_BUTTON - W_DROPBOX_ICON, H_BUTTON - H_DROPBOX_ICON), *pDropBoxIcon);
+               pButtonType->SetDisabledBitmap(Point(W_TYPE_BUTTON - W_DROPBOX_ICON, H_BUTTON - H_DROPBOX_ICON), *pDropBoxIcon);
+               delete pDropBoxIcon;
+       }
+       pTableViewItem->AddControl(pButtonType);
+
+       Button *pButtonDelete = new (std::nothrow) Button();
+       pButtonDelete->Construct(Rectangle(itemWidth - H_BUTTON - W_ITEM_GAP, (pContactsApp->GetListItemSingleLineHeight() - H_BUTTON) / 2, H_BUTTON, H_BUTTON));
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_MINUS);
+       Bitmap* pBitmapPressed = ResourceManager::GetBitmapN(IDB_BUTTON_MINUS_PRESSED);
+
+       if (pBitmap != null)
+       {
+               pButtonDelete->SetNormalBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+       if (pBitmapPressed != null)
+       {
+               pButtonDelete->SetPressedBitmap(Point(0, 0), *pBitmapPressed);
+               delete pBitmapPressed;
+       }
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_DELETE_NORMAL);
+       pBitmapPressed = ResourceManager::GetBitmapN(IDB_BUTTON_DELETE_PRESSED);
+
+       if (pBitmap != null)
+       {
+               pButtonDelete->SetNormalBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       if (pBitmapPressed != null)
+       {
+               pButtonDelete->SetPressedBackgroundBitmap(*pBitmapPressed);
+               delete pBitmapPressed;
+       }
+
+       int actionId = 0;
+       actionId |= TABLE_VIEW_DELETE_INPUT_FIELD_ID;
+       actionId |= (groupIndex << TABLE_VIEW_GROUP_INDEX_SHIFT);
+       actionId |= itemIndex;
+
+       pButtonDelete->SetActionId(actionId);
+       pButtonDelete->AddActionEventListener(*this);
+
+       pTableViewItem->AddControl(pButtonDelete);
+
+       if (isDeleteButton == false)
+       {
+               pButtonDelete->SetShowState(false);
+       }
+
+       pTableViewItem->SetIndividualSelectionEnabled(pInputField, true);
+       pTableViewItem->SetIndividualSelectionEnabled(pButtonType, true);
+       pTableViewItem->SetIndividualSelectionEnabled(pButtonDelete, true);
+
+       return pTableViewItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetPhoneNumberFields(int itemIndex, int itemWidth)
+{
+       if (__pPhoneNumberFieldItem->GetCount() == 0)
+       {
+               int phoneNumberCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER);
+               String guideText = ResourceManager::GetString(L"IDS_PB_BODY_NUMBER");
+               String defaultPhoneNumber = __pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER);
+
+               for (int i = 0; i < phoneNumberCount; i++)
+               {
+                       String typeString = __pPresentationModel->GetType(DETAIL_PROPERTY_PHONE_NUMBER, i);
+                       String phoneNumberString =  __pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, i);
+
+                       TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX, i, itemWidth, EDIT_FIELD_STYLE_PHONE_NUMBER, typeString, guideText, phoneNumberString, true);
+                       pItem->SetName(Integer::ToString(__pPresentationModel->GetPhoneNumberType(i)));
+
+                       __pPhoneNumberFieldItem->Add(*pItem);
+               }
+
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX, phoneNumberCount, itemWidth, EDIT_FIELD_STYLE_PHONE_NUMBER, __pPresentationModel->GetPhoneNumberTypeString(DETAIL_PHONENUMBER_TYPE_MOBILE), guideText);
+               pItem->SetName(Integer::ToString(DETAIL_PHONENUMBER_TYPE_MOBILE));
+
+               __pPhoneNumberFieldItem->Add(*pItem);
+               SetAsDefaultPhoneNumber(__pPresentationModel->GetDefaultNumberIndex());
+       }
+
+       if (__pPhoneNumberFieldItem->GetCount() < (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) + 1))
+       {
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX, __pPhoneNumberFieldItem->GetCount(), itemWidth, EDIT_FIELD_STYLE_PHONE_NUMBER, __pPresentationModel->GetPhoneNumberTypeString(DETAIL_PHONENUMBER_TYPE_MOBILE), ResourceManager::GetString(L"IDS_PB_BODY_NUMBER"));
+               pItem->SetName(Integer::ToString(DETAIL_PHONENUMBER_TYPE_MOBILE));
+
+               __pPhoneNumberFieldItem->Add(*pItem);
+       }
+
+       TableViewItem* pItem = static_cast<TableViewItem *>(__pPhoneNumberFieldItem->GetAt(itemIndex));
+       if (pItem == null)
+       {
+               return null;
+       }
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetEmailFields(int itemIndex, int itemWidth)
+{
+       if (__pEmailFieldItem->GetCount() == 0)
+       {
+               int emailCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL);
+               String guideText = ResourceManager::GetString(L"IDS_COM_BODY_EMAIL");
+
+               for (int i = 0; i < emailCount; i++)
+               {
+                       String typeString = __pPresentationModel->GetType(DETAIL_PROPERTY_EMAIL, i);
+                       String emailString =  __pPresentationModel->GetValue(DETAIL_PROPERTY_EMAIL, i);
+
+                       TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_EMAIL_FIELD_INDEX, i, itemWidth, EDIT_FIELD_STYLE_EMAIL, typeString, guideText, emailString, true);
+                       pItem->SetName(Integer::ToString(__pPresentationModel->GetEmailType(i)));
+
+                       __pEmailFieldItem->Add(*pItem);
+               }
+
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_EMAIL_FIELD_INDEX, emailCount, itemWidth, EDIT_FIELD_STYLE_EMAIL, __pPresentationModel->GetEmailTypeString(DETAIL_EMAIL_TYPE_HOME), guideText);
+               pItem->SetName(Integer::ToString(DETAIL_EMAIL_TYPE_HOME));
+
+               __pEmailFieldItem->Add(*pItem);
+       }
+
+       if (__pEmailFieldItem->GetCount() < (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL) + 1))
+       {
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_EMAIL_FIELD_INDEX, __pEmailFieldItem->GetCount(), itemWidth, EDIT_FIELD_STYLE_EMAIL, __pPresentationModel->GetEmailTypeString(DETAIL_EMAIL_TYPE_HOME), ResourceManager::GetString(L"IDS_COM_BODY_EMAIL"));
+               pItem->SetName(Integer::ToString(DETAIL_EMAIL_TYPE_HOME));
+
+               __pEmailFieldItem->Add(*pItem);
+       }
+
+       TableViewItem* pItem = static_cast<TableViewItem *>(__pEmailFieldItem->GetAt(itemIndex));
+       if (pItem == null)
+       {
+               return null;
+       }
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetAddressFields(int itemIndex, int itemWidth)
+{
+       if (__pAddressFieldItem->GetCount() == 0)
+       {
+               int addressCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_ADDRESS);
+               String guideText = ResourceManager::GetString(L"IDS_PB_BODY_ADDRESS");
+
+               for (int i = 0; i < addressCount; i++)
+               {
+                       String typeString = __pPresentationModel->GetType(DETAIL_PROPERTY_ADDRESS, i);
+                       String addressString =  __pPresentationModel->GetValue(DETAIL_PROPERTY_ADDRESS, i);
+
+                       TableViewItem* pItem= GetInputFieldN(TABLE_VIEW_ADDRESS_FIELD_INDEX, i, itemWidth, EDIT_FIELD_STYLE_NORMAL, typeString, guideText, addressString, true);
+                       pItem->SetName(Integer::ToString(__pPresentationModel->GetAddressType(DETAIL_PROPERTY_ADDRESS, i)));
+
+                       __pAddressFieldItem->Add(*pItem);
+               }
+
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_ADDRESS_FIELD_INDEX, addressCount, itemWidth, EDIT_FIELD_STYLE_NORMAL, ResourceManager::GetString(L"IDS_PB_BODY_HOME"), guideText);
+               pItem->SetName(Integer::ToString(DETAIL_ADDRESS_TYPE_HOME));
+
+               __pAddressFieldItem->Add(*pItem);
+       }
+
+       if (__pAddressFieldItem->GetCount() < (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_ADDRESS) + 1))
+       {
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_ADDRESS_FIELD_INDEX, __pAddressFieldItem->GetCount(), itemWidth, EDIT_FIELD_STYLE_NORMAL, ResourceManager::GetString(L"IDS_PB_BODY_HOME"), ResourceManager::GetString(L"IDS_PB_BODY_ADDRESS"));
+               pItem->SetName(Integer::ToString(DETAIL_ADDRESS_TYPE_HOME));
+
+               __pAddressFieldItem->Add(*pItem);
+       }
+
+       TableViewItem* pItem = static_cast<TableViewItem *>(__pAddressFieldItem->GetAt(itemIndex));
+       if (pItem == null)
+       {
+               return null;
+       }
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetImAddressFields(int itemIndex, int itemWidth)
+{
+       if (__pImAddressFieldItem->GetCount() == 0)
+       {
+               int imCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS);
+               String guideText = ResourceManager::GetString(L"IDS_PB_HEADER_INSTANT_MESSENGER_ABB");
+
+               for (int i = 0; i < imCount; i++)
+               {
+                       String typeString = __pPresentationModel->GetType(DETAIL_PROPERTY_IM_ADDRESS, i);
+                       String imString =  __pPresentationModel->GetValue(DETAIL_PROPERTY_IM_ADDRESS, i);
+
+                       TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_IM_ADDRESS_FIELD_INDEX, i, itemWidth, EDIT_FIELD_STYLE_NORMAL, typeString, guideText, imString, true);
+                       pItem->SetName(Integer::ToString(__pPresentationModel->GetImAddressType(i)));
+
+                       __pImAddressFieldItem->Add(*pItem);
+               }
+
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_IM_ADDRESS_FIELD_INDEX, imCount, itemWidth, EDIT_FIELD_STYLE_NORMAL, IM_ADDRESS_YAHOO, guideText);
+               pItem->SetName(Integer::ToString(DETAIL_IM_ADDRESS_TYPE_YAHOO));
+
+               __pImAddressFieldItem->Add(*pItem);
+       }
+
+       if (__pImAddressFieldItem->GetCount() < (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS) + 1))
+       {
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_IM_ADDRESS_FIELD_INDEX, __pImAddressFieldItem->GetCount(), itemWidth, EDIT_FIELD_STYLE_NORMAL, IM_ADDRESS_YAHOO, ResourceManager::GetString(L"IDS_PB_HEADER_INSTANT_MESSENGER_ABB"));
+               pItem->SetName(Integer::ToString(DETAIL_IM_ADDRESS_TYPE_YAHOO));
+
+               __pImAddressFieldItem->Add(*pItem);
+       }
+
+       TableViewItem* pItem = static_cast<TableViewItem *>(__pImAddressFieldItem->GetAt(itemIndex));
+       if (pItem == null)
+       {
+               return null;
+       }
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetUrlFields(int itemIndex, int itemWidth)
+{
+       if (__pUrlFieldItem->GetCount() == 0)
+       {
+               int urlCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL);
+               String guideText = ResourceManager::GetString(L"IDS_PB_BODY_URL");
+
+               for (int i = 0; i < urlCount; i++)
+               {
+                       String typeString = __pPresentationModel->GetType(DETAIL_PROPERTY_URL, i);
+                       String urlString =  __pPresentationModel->GetValue(DETAIL_PROPERTY_URL, i);
+
+                       TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_URL_FIELD_INDEX, i, itemWidth, EDIT_FIELD_STYLE_URL, typeString, guideText, urlString, true);
+                       pItem->SetName(Integer::ToString(__pPresentationModel->GetUrlType(i)));
+
+                       __pUrlFieldItem->Add(*pItem);
+               }
+
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_URL_FIELD_INDEX, urlCount, itemWidth, EDIT_FIELD_STYLE_URL, __pPresentationModel->GetUrlTypeString(DETAIL_URL_TYPE_HOME), guideText);
+               pItem->SetName(Integer::ToString(DETAIL_URL_TYPE_HOME));
+
+               __pUrlFieldItem->Add(*pItem);
+       }
+
+       if (__pUrlFieldItem->GetCount() < (__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL) + 1))
+       {
+               TableViewItem* pItem = GetInputFieldN(TABLE_VIEW_URL_FIELD_INDEX, __pUrlFieldItem->GetCount(), itemWidth, EDIT_FIELD_STYLE_URL, __pPresentationModel->GetUrlTypeString(DETAIL_URL_TYPE_HOME), ResourceManager::GetString(L"IDS_PB_BODY_URL"));
+               pItem->SetName(Integer::ToString(DETAIL_URL_TYPE_HOME));
+
+               __pUrlFieldItem->Add(*pItem);
+       }
+
+       TableViewItem* pItem = static_cast<TableViewItem *>(__pUrlFieldItem->GetAt(itemIndex));
+       if (pItem == null)
+       {
+               return null;
+       }
+
+       return pItem;
+}
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetGroupsField(int itemWidth)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       TableViewItem* pGroupsItem = new (std::nothrow) TableViewItem();
+       pGroupsItem->Construct(Dimension(itemWidth, H_DOUBLE_LINE_ITEM + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pGroupsItem->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+       pGroupsItem->AddKeyEventListener(*this);
+
+       Panel* pGroupStyle = new (std::nothrow) Panel();
+       pGroupStyle->Construct(Rectangle(0, 0, itemWidth , H_DOUBLE_LINE_ITEM + pContactsApp->GetFontHeightOffset()), GROUP_STYLE_NONE);
+       pGroupStyle->SetName(GROUP_STYLE_PANEL);
+       pGroupStyle->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+       pGroupStyle->AddTouchEventListener(*this);
+       pGroupsItem->AddControl(pGroupStyle);
+
+       Label* pLabelTitle = new (std::nothrow) Label();
+       pLabelTitle->Construct(Rectangle(0, H_GROUP_RINGTONE_TITLE_GAP, itemWidth, H_GROUP_RINGTONE_TITLE_LABEL), ResourceManager::GetString(L"IDS_PB_BODY_GROUPS"));
+       pLabelTitle->SetName(GROUP_LABEL_TITLE);
+       pLabelTitle->AddTouchEventListener(*this);
+       pLabelTitle->SetTextConfig(FONT_SIZE_TITLE_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+       pLabelTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       pGroupStyle->AddControl(pLabelTitle);
+
+       String groupsName =  __pPresentationModel->GetValue(DETAIL_PROPERTY_GROUP);
+       if (groupsName.IsEmpty() == true)
+       {
+               groupsName = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+       }
+
+       Label* pLabelGroupName = new (std::nothrow) Label();
+       pLabelGroupName->Construct(Rectangle(0, H_GROUP_RINGTONE_TITLE_GAP + H_GROUP_RINGTONE_TITLE_LABEL, itemWidth, H_GROUP_RINGTONE_VALUE_LABEL + pContactsApp->GetFontHeightOffset()), groupsName);
+       pLabelGroupName->SetName(GROUP_LABEL_VALUE);
+       pLabelGroupName->AddTouchEventListener(*this);
+       pLabelGroupName->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pLabelGroupName->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               
+       pGroupStyle->AddControl(pLabelGroupName);
+
+       return pGroupsItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetBirthdayField(int itemWidth)
+{
+       DateTime birthdayDate;
+       EditDate* pBirthday = new (std::nothrow) EditDate();
+       pBirthday->Construct(Point(W_TITLE_LABEL, 0));
+       pBirthday->AddDateChangeEventListener(*this);
+
+       __pPresentationModel->GetBirthday(birthdayDate);
+       pBirthday->SetDate(birthdayDate);
+
+       DateTime currentDate;
+       Tizen::System::SystemTime::GetCurrentTime(currentDate);
+       int min;
+       int max;
+       pBirthday->GetYearRange(min, max);
+       max = currentDate.GetYear();
+       pBirthday->SetYearRange(max - BIRTHDAY_MIN_YEAR_DIFF, max + BIRTHDAY_MAX_YEAR_DIFF);
+
+       if (birthdayDate.GetYear() < (currentDate.GetYear() - BIRTHDAY_MIN_YEAR_DIFF))
+       {
+               birthdayDate.SetValue(currentDate.GetYear() - BIRTHDAY_MIN_YEAR_DIFF, birthdayDate.GetMonth(), birthdayDate.GetDay());
+               __pPresentationModel->SetBirthday(birthdayDate);
+       }
+
+       TableViewItem* pBirthdayItem = new (std::nothrow) TableViewItem();
+       pBirthdayItem->Construct(Dimension(itemWidth, H_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pBirthdayItem->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pBirthdayItem->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Label* pLabelTitle = new (std::nothrow) Label();
+       pLabelTitle->Construct(Rectangle(0, 0, W_TITLE_LABEL, pBirthdayItem->GetHeight()), L"");
+       pLabelTitle->SetText(ResourceManager::GetString(L"IDS_PB_BODY_BIRTHDAY"));
+       pLabelTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+       pLabelTitle->SetTextConfig(FONT_SIZE_TITLE_TEXT, LABEL_TEXT_STYLE_BOLD);
+
+       pBirthdayItem->AddControl(pLabelTitle);
+       pBirthdayItem->AddControl(pBirthday);
+
+       Button* pClearButton = new (std::nothrow) Button();
+       pClearButton->Construct(Rectangle(itemWidth - (H_BUTTON * 2) - H_BUTTON/2, (pBirthdayItem->GetHeight() - H_BUTTON) / 2, H_BUTTON, H_BUTTON));
+       pClearButton->SetActionId(IDA_BUTTON_BIRTHDAY_CLEAR);
+       pClearButton->AddActionEventListener(*this);
+
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_RESET_NORMAL);
+       if (pBitmap != null)
+       {
+               pClearButton->SetNormalBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_RESET_PRESSED);
+       if (pBitmap != null)
+       {
+               pClearButton->SetPressedBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+
+       pBirthdayItem->AddControl(pClearButton);
+
+       Button *pButtonDelete = new (std::nothrow) Button();
+       pButtonDelete->Construct(Rectangle(itemWidth - H_BUTTON - W_ITEM_GAP, (H_ITEM - H_BUTTON) / 2, H_BUTTON, H_BUTTON));
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_MINUS);
+       if (pBitmap != null)
+       {
+               pButtonDelete->SetNormalBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_MINUS_PRESSED);
+       if (pBitmap != null)
+       {
+               pButtonDelete->SetPressedBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_DELETE_NORMAL);
+       if (pBitmap != null)
+       {
+               pButtonDelete->SetNormalBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_DELETE_PRESSED);
+       if (pBitmap != null)
+       {
+               pButtonDelete->SetPressedBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+
+       pButtonDelete->SetActionId(IDA_BUTTON_BIRTHDAY_DELETE);
+       pButtonDelete->AddActionEventListener(*this);
+
+       pBirthdayItem->AddControl(pButtonDelete);
+
+       pBirthdayItem->SetIndividualSelectionEnabled(pBirthday, true);
+       pBirthdayItem->SetIndividualSelectionEnabled(pClearButton, true);
+       pBirthdayItem->SetIndividualSelectionEnabled(pButtonDelete, true);
+
+       return pBirthdayItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetNoteField(int itemWidth)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (__pNoteFieldItem != null)
+       {
+               return __pNoteFieldItem;
+       }
+
+       __pNoteFieldItem = new (std::nothrow) TableViewItem();
+       __pNoteFieldItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight() + Y_EDIT_FIELD_GAP + H_EXPANDABLE_EDIT_AREA_EXTENDED), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       __pNoteFieldItem->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       __pNoteFieldItem->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+
+       Label* pNoteTitle = new (std::nothrow) Label();
+       pNoteTitle->Construct(Rectangle(0, 0, itemWidth, H_LABEL), ResourceManager::GetString(L"IDS_PB_BODY_NOTE"));
+       pNoteTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pNoteTitle->SetTextColor(COLOR_ITEM_TITLE);
+       pNoteTitle->SetTextConfig(FONT_SIZE_TITLE_TEXT, LABEL_TEXT_STYLE_BOLD);
+       __pNoteFieldItem->AddControl(pNoteTitle);
+
+       ExpandableEditArea* pNoteEditArea = new (std::nothrow) ExpandableEditArea();
+       pNoteEditArea->Construct(Rectangle(Y_EDIT_FIELD_GAP, H_LABEL, itemWidth - H_EDIT_FIELD_GAP, pContactsApp->GetListItemSingleLineHeight() - H_LABEL + Y_EDIT_FIELD_GAP + H_EXPANDABLE_EDIT_AREA_EXTENDED), EXPANDABLE_EDIT_AREA_STYLE_NORMAL, EXPANDABLE_EDIT_AREA_TITLE_STYLE_NONE);
+       pNoteEditArea->SetTitleText(ResourceManager::GetString(L"IDS_PB_BODY_NOTE"));
+       pNoteEditArea->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_NOTE));
+       pNoteEditArea->AddExpandableEditAreaEventListener(*this);
+       pNoteEditArea->AddKeypadEventListener(*this);
+       pNoteEditArea->AddFocusEventListener(*this);
+       pNoteEditArea->SetTextSize(pContactsApp->GetFontSize());
+       pNoteEditArea->AddTextEventListener(*this);
+
+       __pNoteFieldItem->AddControl(pNoteEditArea);
+       __pNoteFieldItem->SetIndividualSelectionEnabled(pNoteEditArea, true);
+
+       return __pNoteFieldItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetRingtoneField(int itemWidth)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       TableViewItem* pRingtoneItem = new (std::nothrow) TableViewItem();
+       pRingtoneItem->Construct(Dimension(itemWidth, H_DOUBLE_LINE_ITEM + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pRingtoneItem->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+       pRingtoneItem->AddKeyEventListener(*this);
+
+       Panel* pGroupStyle = new (std::nothrow) Panel();
+       pGroupStyle->Construct(Rectangle(0, 0, itemWidth , H_DOUBLE_LINE_ITEM + pContactsApp->GetFontHeightOffset()), GROUP_STYLE_NONE);
+       pGroupStyle->SetName(GROUP_STYLE_PANEL);
+       pGroupStyle->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+       pGroupStyle->AddTouchEventListener(*this);
+       pRingtoneItem->AddControl(pGroupStyle);
+
+       Label* pLabelTitle = new (std::nothrow) Label();
+       pLabelTitle->Construct(Rectangle(0, H_GROUP_RINGTONE_TITLE_GAP, itemWidth, H_GROUP_RINGTONE_TITLE_LABEL), ResourceManager::GetString(L"IDS_PB_BODY_RINGTONE"));
+       pLabelTitle->SetName(GROUP_LABEL_TITLE);
+       pLabelTitle->AddTouchEventListener(*this);
+       pLabelTitle->SetTextConfig(FONT_SIZE_TITLE_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+       pLabelTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       pGroupStyle->AddControl(pLabelTitle);
+
+       String ringtoneName = __pPresentationModel->GetValue(DETAIL_PROPERTY_RINGTONE);
+       String trimmedPath;
+       int index = 0;
+
+       ringtoneName.LastIndexOf(L"/", ringtoneName.GetLength() - 1, index);
+
+       if (index != 0)
+       {
+               ringtoneName.SubString(index + 1, trimmedPath);
+       }
+
+       Label* pLabelRingToneName = new (std::nothrow) Label();
+       pLabelRingToneName->Construct(Rectangle(0, H_GROUP_RINGTONE_TITLE_GAP + H_GROUP_RINGTONE_TITLE_LABEL, itemWidth - H_GROUP_RINGTONE_TITLE_GAP - H_ICON_BUTTON, H_GROUP_RINGTONE_VALUE_LABEL + pContactsApp->GetFontHeightOffset()), trimmedPath);
+       pLabelRingToneName->SetName(GROUP_LABEL_VALUE);
+       pLabelRingToneName->AddTouchEventListener(*this);
+       pLabelRingToneName->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pLabelRingToneName->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pGroupStyle->AddControl(pLabelRingToneName);
+
+       Button* pClearButton = new (std::nothrow) Button();
+       pClearButton->Construct(Rectangle(itemWidth - X_REFRESH_BUTTON_MARGIN, (pRingtoneItem->GetHeight() - H_ICON_BUTTON) / 2, H_ICON_BUTTON, H_ICON_BUTTON));
+       pClearButton->SetActionId(IDA_BUTTON_RINGTONE_CLEAR);
+       pClearButton->AddActionEventListener(*this);
+
+       Bitmap* pReset = ResourceManager::GetBitmapN(IDB_DETAILS_RESET_NORMAL);
+       if (pReset != null)
+       {
+               pClearButton->SetNormalBitmap(Point(0, 0), *pReset);
+               delete pReset;
+       }
+       pReset = ResourceManager::GetBitmapN(IDB_DETAILS_RESET_PRESSED);
+       if (pReset != null)
+       {
+               pClearButton->SetPressedBitmap(Point(0, 0), *pReset);
+               delete pReset;
+       }
+
+       pRingtoneItem->AddControl(pClearButton);
+       pRingtoneItem->SetIndividualSelectionEnabled(pClearButton, true);
+
+       return pRingtoneItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetMoreInformationField(int itemWidth)
+{
+       TableViewItem* pMoreInformationItem = new (std::nothrow) TableViewItem();
+       pMoreInformationItem->Construct(Dimension(itemWidth, H_DESCRIPTION_CONTAINER));
+       pMoreInformationItem->SetBackgroundColor(Color(COLOR_TABLE_VIEW_BG), TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pMoreInformationItem->SetBackgroundColor(Color(COLOR_TABLE_VIEW_BG), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Panel* pPanel = new (std::nothrow) Panel();
+       pPanel->Construct(Rectangle(X_MORE_INFO_PANEL_GAP, X_MORE_INFO_PANEL_GAP, itemWidth - H_MORE_INFO_PANEL_GAP, H_DESCRIPTION_CONTAINER - H_MORE_INFO_PANEL_GAP));
+       pPanel->SetBackgroundColor(Color(COLOR_TABLE_VIEW_BG));
+
+       pMoreInformationItem->AddControl(pPanel);
+
+       Button* pButtonMoreInformation = new (std::nothrow) Button();
+       pButtonMoreInformation->Construct(Rectangle(X_MORE_INFORMATION_BUTTON, Y_MORE_INFORMATION_BUTTON, itemWidth - (X_MORE_INFORMATION_BUTTON * 2), H_BUTTON));
+       pButtonMoreInformation->SetText(ResourceManager::GetString(L"IDS_KA_BODY_MORE_INFORMATION"));
+       pButtonMoreInformation->SetActionId(IDA_BUTTON_MORE_INFO);
+       pButtonMoreInformation->AddActionEventListener(*this);
+
+       pPanel->AddControl(pButtonMoreInformation);
+
+       return pMoreInformationItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetDefaultPhoneNumberItem(int itemWidth)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       TableViewItem* pDefaultPhoneNumberItem = new (std::nothrow) TableViewItem();
+       pDefaultPhoneNumberItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()));
+       pDefaultPhoneNumberItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Button* pButtonDefaultNumber = new (std::nothrow) Button();
+       pButtonDefaultNumber->Construct(Rectangle(X_MORE_INFORMATION_BUTTON, Y_DEFAULT_NUMBER_BUTTON, itemWidth - (X_MORE_INFORMATION_BUTTON * 2), H_BUTTON));
+       pButtonDefaultNumber->SetText(ResourceManager::GetString(L"IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER"));
+       pButtonDefaultNumber->SetActionId(IDA_BUTTON_DEFAULT_PHONE_NUMBER);
+       pButtonDefaultNumber->AddActionEventListener(*this);
+
+       pDefaultPhoneNumberItem->AddControl(pButtonDefaultNumber);
+       pDefaultPhoneNumberItem->SetIndividualSelectionEnabled(pButtonDefaultNumber, true);
+
+       return pDefaultPhoneNumberItem;
+}
+
+result
+ContactEditorForm::DeleteInputField(int groupIndex, int itemIndex, int isUpdating)
+{
+       result r = E_SUCCESS;
+       ArrayList* pFieldList = null;
+
+       switch (groupIndex)
+       {
+       case TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX:
+               {
+                       pFieldList = __pPhoneNumberFieldItem;
+                       __pPresentationModel->SetPhoneNumber(DETAIL_PHONENUMBER_TYPE_NONE, L"", itemIndex); //phoneNumberType doesn't matter
+               }
+               break;
+       case TABLE_VIEW_EMAIL_FIELD_INDEX:
+               {
+                       pFieldList = __pEmailFieldItem;
+                       __pPresentationModel->SetEmail(DETAIL_EMAIL_TYPE_NONE, L"", itemIndex);
+               }
+               break;
+       case TABLE_VIEW_ADDRESS_FIELD_INDEX:
+               {
+                       pFieldList = __pAddressFieldItem;
+                       __pPresentationModel->SetAddress(DETAIL_ADDRESS_TYPE_NONE, L"", itemIndex);
+               }
+               break;
+       case TABLE_VIEW_IM_ADDRESS_FIELD_INDEX:
+               {
+                       pFieldList = __pImAddressFieldItem;
+                       __pPresentationModel->SetImAddress(DETAIL_IM_ADDRESS_TYPE_NONE, L"", itemIndex);
+               }
+               break;
+       case TABLE_VIEW_URL_FIELD_INDEX:
+               {
+                       pFieldList = __pUrlFieldItem;
+                       __pPresentationModel->SetUrl(DETAIL_URL_TYPE_NONE, L"", itemIndex);
+               }
+               break;
+       default:
+               break;
+       }
+
+       TryReturn(pFieldList != null, E_FAILURE, "[E_FAILURE] Unable to delete the item.")
+
+       __pDeletedItemList->Add(pFieldList->GetAt(itemIndex));
+
+       r = pFieldList->RemoveAt(itemIndex, false);
+
+       if (__previousGroupIndex == groupIndex && __previousItemIndex == itemIndex)
+       {
+               __previousGroupIndex = -1;
+               __previousItemIndex  = -1;
+       }
+       if (isUpdating == false)
+       {
+               __pTableView->RefreshItem(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+       }
+
+       Rectangle clientBounds = GetClientAreaBounds();
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+
+       for (int i = itemIndex; i < pFieldList->GetCount(); i++)
+       {
+               TableViewItem* pItem = static_cast<TableViewItem *>(pFieldList->GetAt(i));
+               if (pItem == null)
+               {
+                       return E_FAILURE;
+               }
+
+               int parsedIndex;
+               EditField* pInputField = static_cast<EditField*>(pItem->GetControl(0));
+               if (pInputField == null)
+               {
+                       return E_FAILURE;
+               }
+
+               result r = Integer::Decode(pInputField->GetName(), parsedIndex);
+               if (r == E_NUM_FORMAT)
+               {
+                       return E_FAILURE;
+               }
+               pInputField->SetName(Integer::ToString(parsedIndex - 1));
+
+               Button* pTypeButton = static_cast<Button*>(pItem->GetControl(1));
+               if (pTypeButton == null)
+               {
+                       return E_FAILURE;
+               }
+
+               r = Integer::Decode(pTypeButton->GetName(), parsedIndex);
+               if (r == E_NUM_FORMAT)
+               {
+                       return E_FAILURE;
+               }
+               pTypeButton->SetName(Integer::ToString(parsedIndex - 1));
+
+               Button* pDeleteButton = static_cast<Button *>(pItem->GetControl(2));
+               if (pDeleteButton == null)
+               {
+                       return E_FAILURE;
+               }
+               pDeleteButton->SetActionId(pDeleteButton->GetActionId() - 1);
+       }
+
+       SaveContactData(false);
+       SetSaveButtonEnabled(IsSaveContactValid());
+       
+       if (groupIndex == TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX)
+       {
+               if (itemIndex == __pPresentationModel->GetDefaultNumberIndex())
+               {
+                       SetAsDefaultPhoneNumber(0);
+               }
+               else if (itemIndex < __pPresentationModel->GetDefaultNumberIndex())
+               {
+                       SetAsDefaultPhoneNumber(__pPresentationModel->GetDefaultNumberIndex() - 1);
+               }
+       }
+
+       if (__isDefaultPhoneNumberButtonEnabled == true && __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) < 2)
+       {
+               if (isUpdating == false)
+               {
+                       __pTableView->RefreshItem(TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX, __pTableView->GetItemCountAt(TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX) - 1, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+               }
+               __isDefaultPhoneNumberButtonEnabled = false;
+       }
+
+       return r;
+}
+
+void
+ContactEditorForm::SetThumbnailControls(Tizen::Ui::Controls::TableViewItem& item, bool isUpdated)
+{
+       Label* pLabelThumbnail = null;
+       Button* pButtonAdd = null;
+       Button* pButtonDelete = null;
+
+       if (isUpdated == false)
+       {
+               int itemWidth = GetBounds().width;
+
+               pLabelThumbnail = new (std::nothrow) Label();
+               pLabelThumbnail->Construct(Rectangle((itemWidth - W_THUMBNAIL) / 2, H_THUMBNAIL_DELETE_BUTTON_GAP + Y_EDIT_FIELD_GAP, W_THUMBNAIL, W_THUMBNAIL), L"");
+
+               item.AddControl(pLabelThumbnail);
+
+               Bitmap* pBitmapItem = null;
+               Bitmap* pBitmapItemPressed = null;
+
+               pButtonAdd = new (std::nothrow) Button();
+               pButtonAdd->Construct(Rectangle(pLabelThumbnail->GetX() + ((pLabelThumbnail->GetWidth() - H_BUTTON) / 2), pLabelThumbnail->GetY() + ((pLabelThumbnail->GetHeight() - H_BUTTON) / 2), H_BUTTON, H_BUTTON));
+               pButtonAdd->SetActionId(IDA_BUTTON_THUMBNAIL_ADD);
+               pButtonAdd->AddActionEventListener(*this);
+
+               pBitmapItem = ResourceManager::GetBitmapN(IDB_BUTTON_ADD);
+               pBitmapItemPressed = ResourceManager::GetBitmapN(IDB_BUTTON_ADD_PRESSED);
+
+               if (pBitmapItem != null)
+               {
+                       pButtonAdd->SetNormalBackgroundBitmap(*pBitmapItem);
+                       delete pBitmapItem;
+               }
+               if (pBitmapItemPressed != null)
+               {
+                       pButtonAdd->SetPressedBackgroundBitmap(*pBitmapItemPressed);
+                       delete pBitmapItemPressed;
+               }
+               item.AddControl(pButtonAdd);
+               item.SetIndividualSelectionEnabled(pButtonAdd, true);
+
+               pButtonDelete = new (std::nothrow) Button();
+               pButtonDelete->Construct(Rectangle(pLabelThumbnail->GetX() - H_THUMBNAIL_DELETE_BUTTON_GAP, pLabelThumbnail->GetY() - H_THUMBNAIL_DELETE_BUTTON_GAP + Y_EDIT_FIELD_GAP, H_BUTTON, H_BUTTON));
+               pButtonDelete->SetActionId(IDA_BUTTON_THUMBNAIL_DELETE);
+               pButtonDelete->AddActionEventListener(*this);
+
+               pBitmapItem = ResourceManager::GetBitmapN(IDB_BUTTON_MINUS);
+               pBitmapItemPressed = ResourceManager::GetBitmapN(IDB_BUTTON_MINUS_PRESSED);
+
+               if (pBitmapItem != null)
+               {
+                       pButtonDelete->SetNormalBitmap(Point(0, 0), *pBitmapItem);
+                       delete pBitmapItem;
+               }
+               if (pBitmapItemPressed != null)
+               {
+                       pButtonDelete->SetPressedBitmap(Point(0, 0), *pBitmapItemPressed);
+                       delete pBitmapItemPressed;
+               }
+
+               pBitmapItem = ResourceManager::GetBitmapN(IDB_BUTTON_DELETE_NORMAL);
+               pBitmapItemPressed = ResourceManager::GetBitmapN(IDB_BUTTON_DELETE_PRESSED);
+
+               if (pBitmapItem != null)
+               {
+                       pButtonDelete->SetNormalBackgroundBitmap(*pBitmapItem);
+                       delete pBitmapItem;
+               }
+               if (pBitmapItemPressed != null)
+               {
+                       pButtonDelete->SetPressedBackgroundBitmap(*pBitmapItemPressed);
+                       delete pBitmapItemPressed;
+               }
+               item.AddControl(pButtonDelete);
+               item.SetIndividualSelectionEnabled(pButtonDelete, true);
+
+               Button* pButtonCamera = new (std::nothrow) Button();
+               pButtonCamera->Construct(Rectangle(pLabelThumbnail->GetX() + pLabelThumbnail->GetWidth(), pLabelThumbnail->GetY() + pLabelThumbnail->GetHeight() - H_BUTTON, H_BUTTON, H_BUTTON));
+               pButtonCamera->SetActionId(IDA_BUTTON_CAMERA);
+               pButtonCamera->AddActionEventListener(*this);
+
+               pBitmapItem = ResourceManager::GetBitmapN(IDB_BUTTON_CAMERA);
+               pBitmapItemPressed = ResourceManager::GetBitmapN(IDB_BUTTON_CAMERA_PRESSED);
+               if (pBitmapItem != null)
+               {
+                       pButtonCamera->SetNormalBackgroundBitmap(*pBitmapItem);
+                       delete pBitmapItem;
+               }
+               if (pBitmapItemPressed != null)
+               {
+                       pButtonCamera->SetPressedBackgroundBitmap(*pBitmapItemPressed);
+                       delete pBitmapItemPressed;
+               }
+
+               item.AddControl(pButtonCamera);
+               item.SetIndividualSelectionEnabled(pButtonCamera, true);
+       }
+       else
+       {
+               pLabelThumbnail = static_cast<Label*>(item.GetControl(0));
+               TryReturnVoid(pLabelThumbnail != null, "[E_FAILURE] Unable to get a thumbnail control.");
+
+               pButtonAdd = static_cast<Button*>(item.GetControl(1));
+               TryReturnVoid(pButtonAdd != null, "[E_FAILURE] Unable to get a button.");
+
+               pButtonDelete = static_cast<Button*>(item.GetControl(2));
+               TryReturnVoid(pButtonDelete != null, "[E_FAILURE] Unable to get a button.");
+       }
+
+       Bitmap* pThumbnail = null;
+       String thumbnailPath = __pPresentationModel->GetValue(DETAIL_PROPERTY_THUMBNAIL);
+
+       if (thumbnailPath.IsEmpty() == false)
+       {
+               ImageBuffer thumbnailImageBuffer;
+               result r = thumbnailImageBuffer.Construct(thumbnailPath);
+               if (r == E_SUCCESS)
+               {
+                       pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_ARGB8888, BUFFER_SCALING_NONE);
+               }
+               if (pThumbnail != null)
+               {
+                       pThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_HIGH);
+                       pThumbnail->Scale(Dimension(W_THUMBNAIL, W_THUMBNAIL));
+                       pLabelThumbnail->SetBackgroundBitmap(*pThumbnail);
+               }
+               pButtonAdd->SetShowState(false);
+               pButtonAdd->SetEnabled(false);
+               pButtonDelete->SetShowState(true);
+       }
+       else
+       {
+               pThumbnail = ResourceManager::GetBitmapN(IDB_THUMBNAIL_BACKGROUND);
+               if (pThumbnail != null)
+               {
+                       pLabelThumbnail->SetBackgroundBitmap(*pThumbnail);
+                       pButtonAdd->SetShowState(true);
+                       pButtonAdd->SetEnabled(true);
+                       pButtonDelete->SetShowState(false);
+               }
+       }
+
+       delete pThumbnail;
+}
+
+void
+ContactEditorForm::AddHorizontalDivider(Tizen::Ui::Controls::TableViewItem* pItem, int positionY, int width)
+{
+       Label* pDivider = new (std::nothrow) Label();
+       pDivider->Construct(Rectangle(0, positionY, width, H_DIVIDER), L"");
+       pDivider->SetBackgroundColor(Color(COLOR_DIVIDER));
+       pDivider->SetEnabled(false);
+
+       pItem->AddControl(pDivider);
+}
+
+void
+ContactEditorForm::AddVerticalDivider(Tizen::Ui::Controls::TableViewItem* pItem, int positionX, int positionY)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Label* pDivider = new (std::nothrow) Label();
+       pDivider->Construct(Rectangle(positionX, positionY, W_DIVIDER, pContactsApp->GetListItemSingleLineHeight()), L"");
+       pDivider->SetBackgroundColor(Color(COLOR_DIVIDER));
+       pDivider->SetEnabled(false);
+
+       pItem->AddControl(pDivider);
+}
+
+result
+ContactEditorForm::SetAsDefaultPhoneNumber(int index, bool scrollToItem)
+{
+       result r = E_SUCCESS;
+       TableViewItem* pItem = null;
+       EditField* pEditField = null;
+
+       pItem = static_cast<TableViewItem *>(__pPhoneNumberFieldItem->GetAt(index));
+       if (pItem == null)
+       {
+               r = E_FAILURE;
+               goto CATCH;
+       }
+
+       pEditField = static_cast<EditField *>(pItem->GetControl(0));
+       if (pEditField == null)
+       {
+               r = E_FAILURE;
+               goto CATCH;
+       }
+
+       __pPresentationModel->SetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER, L"", index);
+
+       if (pEditField->IsVisible() == false && scrollToItem == true)
+       {
+               __pTableView->ScrollToItem(TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX, index);
+       }
+       pEditField->Invalidate(true);
+
+CATCH:
+       return r;
+}
+
+result
+ContactEditorForm::ChangeNameFieldStatus(void)
+{
+       result r = E_SUCCESS;
+
+       r = SaveNameFields();
+
+       __isExpandable = (__isExpandable == true) ? false : true;
+
+       return r;
+}
+
+result
+ContactEditorForm::SaveContactData(bool isSaved)
+{
+       result r = E_SUCCESS;
+
+       if (isSaved == true)
+       {
+               if (CommonUtil::isMemoryAvailable() == false)
+               {
+                       CommonUtil::showMemoryFullMessageBox();
+                       return E_FAILURE;
+               }
+       }
+
+       r = SaveNameFields();
+
+       for (int i = 0; i < __pPhoneNumberFieldItem->GetCount(); i++)
+       {
+               r = E_SUCCESS;
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pPhoneNumberFieldItem->GetAt(i));
+               if (pItem == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               EditField* pEditField = static_cast<EditField *>(pItem->GetControl(0));
+               if (pEditField == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String phoneNumberString(pEditField->GetText());
+               String phoneNumberTypeString(pItem->GetName());
+               int phoneNumberType;
+               phoneNumberString.Trim();
+               wchar_t ch;
+
+               for (int i = 0; i < phoneNumberString.GetLength(); i++)
+               {
+                       phoneNumberString.GetCharAt(i, ch);
+
+                       if(ch == '+' && i == 0)
+                       {
+                               continue;
+                       }
+                       if((ch == ',' || ch == ';' || ch == 'p') && i == 0)
+                       {
+                               r = E_FAILURE;
+                               break;
+                       }
+                       else if ((ch < '0' || ch > '9') && (ch != '*') && (ch != '#') && (ch != ',') && (ch != ';') && (ch != 'p'))
+                       {
+                               r = E_FAILURE;
+                               break;
+                       }
+                       else
+                       {
+                               r = E_SUCCESS;
+                       }
+               }
+
+               if (isSaved == true && phoneNumberString.GetLength() > 0 && r != E_SUCCESS)
+               {
+                       int modalResult;
+                       MessageBox invalidNumberMessage;
+                       invalidNumberMessage.Construct(L"", ResourceManager::GetString(L"IDS_PB_BODY_INVALID_NUMBER"), MSGBOX_STYLE_OK, MESSAGE_BOX_TIMEOUT_MS);
+                       invalidNumberMessage.ShowAndWait(modalResult);
+
+                       return E_FAILURE;
+               }
+
+               Integer::Parse(phoneNumberTypeString, phoneNumberType);
+
+               __pPresentationModel->SetPhoneNumber((DetailPhoneNumberType)phoneNumberType, phoneNumberString, i);
+       }
+
+       for (int i = 0; i < __pEmailFieldItem->GetCount(); i++)
+       {
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pEmailFieldItem->GetAt(i));
+               if (pItem == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               EditField* pEditField = static_cast<EditField *>(pItem->GetControl(0));
+               if (pEditField == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String emailString(pEditField->GetText());
+               String remainingString;
+               String emailTypeString(pItem->GetName());
+               int emailType;
+
+               emailString.Trim();
+               Integer::Parse(emailTypeString, emailType);
+
+               r = __pPresentationModel->SetEmail((DetailEmailType)emailType, emailString, i);
+
+               if (isSaved == true && r == E_SUCCESS)
+               {
+                       if(emailString.GetLength() > 0)
+                       {
+                               bool isValidEmail = ValidateEmailAddress(emailString);
+                               if (isValidEmail != true)
+                               {
+                                       int modalResult;
+                                       MessageBox invalidEmailMessage;
+                                       invalidEmailMessage.Construct(L"", ResourceManager::GetString(L"IDS_PB_POP_INVALID_EMAIL_ADDRESS"), MSGBOX_STYLE_OK, MESSAGE_BOX_TIMEOUT_MS);
+                                       invalidEmailMessage.ShowAndWait(modalResult);
+                                       pEditField->ShowKeypad();
+
+                                       return E_FAILURE;
+                               }
+                       }
+               }
+       }
+
+       for (int i = 0; i < __pAddressFieldItem->GetCount(); i++)
+       {
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pAddressFieldItem->GetAt(i));
+               if (pItem == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               EditField* pEditField = static_cast<EditField *>(pItem->GetControl(0));
+               if (pEditField == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String addressString(pEditField->GetText());
+               String addressTypeString(pItem->GetName());
+               int addressType;
+
+               addressString.Trim();
+               Integer::Parse(addressTypeString, addressType);
+
+               __pPresentationModel->SetAddress((DetailAddressType)addressType, addressString, i);
+       }
+
+       for (int i = 0; i < __pImAddressFieldItem->GetCount(); i++)
+       {
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pImAddressFieldItem->GetAt(i));
+               if (pItem == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               EditField* pEditField = static_cast<EditField *>(pItem->GetControl(0));
+               if (pEditField == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String addressString(pEditField->GetText());
+               String addressTypeString(pItem->GetName());
+               int addressType;
+
+               addressString.Trim();
+               Integer::Parse(addressTypeString, addressType);
+
+               __pPresentationModel->SetImAddress((DetailImAddressType)addressType, addressString, i);
+       }
+
+       for (int i = 0; i < __pUrlFieldItem->GetCount(); i++)
+       {
+               TableViewItem* pItem = static_cast<TableViewItem *>(__pUrlFieldItem->GetAt(i));
+               if (pItem == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               EditField* pEditField = static_cast<EditField *>(pItem->GetControl(0));
+               if (pEditField == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String urlString(pEditField->GetText());
+               String urlTypeString(pItem->GetName());
+               int urlType;
+
+               urlString.Trim();
+               Integer::Parse(urlTypeString, urlType);
+
+               __pPresentationModel->SetUrl((DetailUrlType)urlType, urlString, i);
+       }
+
+       if (__pNoteFieldItem != null)
+       {
+               String noteString;
+               ExpandableEditArea* pNoteEditArea = static_cast<ExpandableEditArea *>(__pNoteFieldItem->GetControl(1));
+               if (pNoteEditArea != null)
+               {
+                       noteString.Append(pNoteEditArea->GetText());
+               }
+
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_NOTE, noteString);
+       }
+
+       if (isSaved == true)
+       {
+               r = __pPresentationModel->AddAddressBook();
+       }
+       return r;
+}
+
+result
+ContactEditorForm::SaveNameFields(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pNameFieldItem == null)
+       {
+               return E_FAILURE;
+       }
+
+       if (__isExpandable == true)
+       {
+               EditField* pFirstName = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME"), false));
+               if (pFirstName == null)
+               {
+                       return E_FAILURE;
+               }
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_FIRST_NAME, pFirstName->GetText());
+
+               EditField* pLastName = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME"), false));
+               if (pLastName == null)
+               {
+                       return E_FAILURE;
+               }
+
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_LAST_NAME, pLastName->GetText());
+
+               EditField* pMiddleName = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_MIDDLE_NAME"), false));
+               if (pMiddleName == null)
+               {
+                       return E_FAILURE;
+               }
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_MIDDLE_NAME, pMiddleName->GetText());
+
+               EditField* pSuffix = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_SUFFIX"), false));
+               if (pSuffix == null)
+               {
+                       return E_FAILURE;
+               }
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_NAME_SUFFIX, pSuffix->GetText());
+
+               EditField* pNickName = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_NICKNAME"), false));
+               if (pNickName == null)
+               {
+                       return E_FAILURE;
+               }
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_NICK_NAME, pNickName->GetText());
+
+               EditField* pCompanyName = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_COMPANY"), false));
+               if (pCompanyName == null)
+               {
+                       return E_FAILURE;
+               }
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_COMPANY, pCompanyName->GetText());
+
+               if (__isJobTitleEnabled == true)
+               {
+                       EditField* pJobTitle = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_JOB_TITLE"), false));
+                       if (pJobTitle == null)
+                       {
+                               return E_FAILURE;
+                       }
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_JOB_TITLE, pJobTitle->GetText());
+               }
+
+               if (__isDepartmentEnabled == true)
+               {
+                       EditField* pDepartment = static_cast<EditField *>(__pNameFieldItem->GetControl(ResourceManager::GetString(L"IDS_PB_BODY_DEPARTMENT"), false));
+                       if (pDepartment == null)
+                       {
+                               return E_FAILURE;
+                       }
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_DEPARTMENT, pDepartment->GetText());
+               }
+       }
+       else
+       {
+               EditField* pName = static_cast<EditField *>(__pNameFieldItem->GetControl(Integer::ToString(IDA_INPUT_FIELD_DISPLAY_NAME), false));
+               if (pName == null)
+               {
+                       return E_FAILURE;
+               }
+
+               String firstName = L"";
+               String lastName = L"";
+               String middleName = L"";
+               String suffix = L"";
+
+               int delimeterIndex = -1;
+               int delimcommaIndex = -1;
+
+               String displayName(pName->GetText());
+               if (displayName != __fullName)
+               {
+                       displayName.Trim();
+                       if (!displayName.IsEmpty())
+                       {
+                               displayName.IndexOf(DELIMITER_COMMA, 0, delimcommaIndex);
+                               if (delimcommaIndex >= 0)
+                               {
+                                       displayName.SubString(delimcommaIndex + 1, displayName.GetLength() - (delimcommaIndex + 1), suffix);
+                                       displayName.SetLength(delimcommaIndex);
+                                       displayName.Trim();
+                               }
+
+                               if (!displayName.IsEmpty())
+                               {
+                                       delimeterIndex = -1;
+                                       displayName.IndexOf(CHARACTER_SPACE, 0, delimeterIndex);
+                                       if (delimeterIndex < 0)
+                                       {
+                                               firstName.Append(displayName);
+                                       }
+                                       else
+                                       {
+                                               displayName.SubString(0, delimeterIndex++, firstName);
+                                               displayName.SubString(delimeterIndex, displayName.GetLength() - delimeterIndex, displayName);
+
+                                               delimeterIndex = -1;
+                                               displayName.Trim();
+
+                                               if (!displayName.IsEmpty())
+                                               {
+                                                       displayName.IndexOf(CHARACTER_SPACE, 0, delimeterIndex);
+                                                       if (delimeterIndex < 0)
+                                                       {
+                                                               lastName.Append(displayName);
+                                                       }
+                                                       else
+                                                       {
+                                                               displayName.SubString(0, delimeterIndex, middleName);
+                                                               displayName.SubString(delimeterIndex + 1, displayName.GetLength() - (delimeterIndex + 1), lastName);
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_FIRST_NAME, firstName);
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_MIDDLE_NAME, middleName);
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_LAST_NAME, lastName);
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_NAME_SUFFIX, suffix);
+               }
+               else if (displayName.IsEmpty() == true)
+               {
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_FIRST_NAME, firstName);
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_MIDDLE_NAME, middleName);
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_LAST_NAME, lastName);
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_NAME_SUFFIX, suffix);
+               }
+       }
+
+       return r;
+}
+
+bool
+ContactEditorForm::IsSaveContactValid(void)
+{
+       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_FIRST_NAME).IsEmpty() == false)
+       {
+               return true;
+       }
+
+       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_LAST_NAME).IsEmpty() == false)
+       {
+               return true;
+       }
+
+       for (int i = 0; i < __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER); i++)
+       {
+               if (__pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, i).IsEmpty() == false)
+               {
+                       return true;
+               }
+       }
+
+       for (int i = 0; i < __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL); i++)
+       {
+               if (__pPresentationModel->GetValue(DETAIL_PROPERTY_EMAIL, i).IsEmpty() == false)
+               {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+void
+ContactEditorForm::SetSaveButtonEnabled(bool enable)
+{
+       Footer* pFooter = GetFooter();
+
+       if (enable)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       pFooter->Invalidate(true);
+}
+
+bool
+ContactEditorForm::IsMoreInformationButtonVisible(void)
+{
+       if (__isJobTitleEnabled == false)
+       {
+               return true;
+       }
+
+       if (__isDepartmentEnabled == false)
+       {
+               return true;
+       }
+
+       if (__pImAddressFieldItem->GetCount() == 0)
+       {
+               return true;
+       }
+
+       if (__pUrlFieldItem->GetCount() == 0)
+       {
+               return true;
+       }
+
+       DateTime birthday;
+       if (__pPresentationModel->GetBirthday(birthday) != E_SUCCESS)
+       {
+               return true;
+       }
+
+       if (__pNoteFieldItem == null)
+       {
+               return true;
+       }
+
+       return false;
+}
+
+void
+ContactEditorForm::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       TableViewItem* pTableViewItem = static_cast<TableViewItem *>(source.GetParent());
+
+       __isContactModified = true;
+
+       if (pTableViewItem == null)
+       {
+               return;
+       }
+
+       SaveContactData(false);
+       SetSaveButtonEnabled(IsSaveContactValid());
+
+       if (__pNameFieldItem == pTableViewItem)
+       {
+               return;
+       }
+
+       EditField* pEditField = const_cast<EditField *>(static_cast<const EditField *>(&source));
+       if (pEditField == null)
+       {
+               return;
+       }
+
+       Control* pDeleteButton = pTableViewItem->GetControl(2);
+       if (pDeleteButton == null)
+       {
+               return;
+       }
+
+       int index = 0;
+       int groupIndex = 0;
+       int inputFlag = 0;
+       int itemCount = 0;
+
+       Integer::Decode(pEditField->GetName(), index);
+       groupIndex = (index & TABLE_VIEW_GROUP_INDEX_MASK) >> TABLE_VIEW_GROUP_INDEX_SHIFT;
+       inputFlag = (index & TABLE_VIEW_INPUT_FIELD_INDEX_MASK) >> TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+       int itemIndex = (index & TABLE_VIEW_ITEM_INDEX_MASK);
+       itemCount = __pTableView->GetItemCountAt(groupIndex);
+
+       String trimmedString = pEditField->GetText();
+       trimmedString.Trim();
+
+       if (trimmedString.IsEmpty())
+       {
+               pDeleteButton->SetShowState(false);
+
+               int Itemcount = __pTableView->GetItemCountAt(groupIndex);
+               if (itemIndex == Itemcount - 1)
+               {
+
+               }
+               else
+               {
+                       __previousItemIndex = itemIndex;  //if the entered text is empty store the index of the field for deletion
+                       __previousGroupIndex = groupIndex;
+               }
+       }
+       else if (pDeleteButton->GetShowState() == false)
+       {
+               __previousItemIndex = -1;
+               __previousGroupIndex = -1;
+               pDeleteButton->SetShowState(true);
+               if (inputFlag <= 0)
+               {
+                       index |= (1 << TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT);
+                       pEditField->SetName(Integer::ToString(index));
+
+                       if (groupIndex == TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX)
+                       {
+                               if (__isDefaultPhoneNumberButtonEnabled == false && __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) > 1)
+                               {
+                                       __isDefaultPhoneNumberButtonEnabled = true;
+                                       __pTableView->RefreshItem(groupIndex, __pTableView->GetItemCountAt(groupIndex), TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+                               }
+                               else if (itemCount > 1)
+                               {
+                                       itemCount--;
+                               }
+                       }
+
+                       ArrayList* pFieldList = null;
+                       switch (groupIndex)
+                       {
+                       case TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX:
+                               {
+                                       pFieldList = __pPhoneNumberFieldItem;
+                               }
+                               break;
+                       case TABLE_VIEW_EMAIL_FIELD_INDEX:
+                               {
+                                       pFieldList = __pEmailFieldItem;
+                               }
+                               break;
+                       case TABLE_VIEW_ADDRESS_FIELD_INDEX:
+                               {
+                                       pFieldList = __pAddressFieldItem;
+                               }
+                               break;
+                       case TABLE_VIEW_IM_ADDRESS_FIELD_INDEX:
+                               {
+                                       pFieldList = __pImAddressFieldItem;
+                               }
+                               break;
+                       case TABLE_VIEW_URL_FIELD_INDEX:
+                               {
+                                       pFieldList = __pUrlFieldItem;
+                               }
+                               break;
+                       default:
+                               break;
+                       }
+
+                       if (pFieldList != null)
+                       {
+                               TableViewItem* pItem = static_cast<TableViewItem*>(pFieldList->GetAt(pFieldList->GetCount() - 1));
+                               if (pItem != null)
+                               {
+                                       EditField* pInputField = static_cast<EditField*>(pItem->GetControl(0));
+
+                                       if (pInputField != null && pInputField->GetTextLength() != 0)
+                                       {
+                                               __pTableView->RefreshItem(groupIndex, itemCount, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+                                       }
+                               }
+                       }
+               }
+       }
+       else
+       {
+               __previousItemIndex = -1;
+               __previousGroupIndex = -1;
+       }
+       if(__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) <= 1 && __isDefaultPhoneNumberButtonEnabled == true)
+       {
+               __isDefaultPhoneNumberButtonEnabled = false;
+               __pTableView->RefreshItem(groupIndex, __pTableView->GetItemCountAt(groupIndex) - 1, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+       }
+       else if(__pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) > 1 && __isDefaultPhoneNumberButtonEnabled == false)
+       {
+               __isDefaultPhoneNumberButtonEnabled = true;
+               __pTableView->RefreshItem(groupIndex, __pTableView->GetItemCountAt(groupIndex), TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+       }
+}
+
+void
+ContactEditorForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+result
+ContactEditorForm::ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content)
+{
+       result r = E_SUCCESS;
+
+       if (argument.IsEmpty() || argument.Contains(DELIMITER) == false)
+       {
+               return E_FAILURE;
+       }
+
+       int delimiterIndex;
+
+       argument.IndexOf(DELIMITER, 0, delimiterIndex);
+       argument.SubString(0, delimiterIndex++, type);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get type", GetErrorMessage(r));
+       argument.SubString(delimiterIndex, argument.GetLength() - delimiterIndex, content);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get type", GetErrorMessage(r));
+
+       return r;
+}
+
+void
+ContactEditorForm::OnFocusGained(const Tizen::Ui::Control& source)
+{
+       __pCurrentFocusedItem = source.GetParent();
+
+       if (__previousItemIndex != -1 && __previousGroupIndex != -1)
+       {
+               const EditField* pEditField = static_cast<const EditField*>(&source);
+               if (pEditField == null)
+               {
+                       return;
+               }
+
+               int groupIndex;
+               int itemIndex;
+               int index;
+
+               Integer::Decode(pEditField->GetName(), index);
+               groupIndex = (index & TABLE_VIEW_GROUP_INDEX_MASK) >> TABLE_VIEW_GROUP_INDEX_SHIFT;
+               itemIndex = (index & TABLE_VIEW_ITEM_INDEX_MASK);
+
+               if (groupIndex == __previousGroupIndex && itemIndex == __previousItemIndex)
+               {
+                       //Same item is focused. Hence not deleting it
+               }
+               else
+               {
+                       DeleteInputField(__previousGroupIndex, __previousItemIndex);
+               }
+       }
+}
+
+void
+ContactEditorForm::OnFocusLost(const Tizen::Ui::Control& source)
+{
+       if (__pCurrentFocusedItem == __pNameFieldItem)
+       {
+               SaveNameFields();
+       }
+
+       __pCurrentFocusedItem = null;
+}
+
+void
+ContactEditorForm::ShowDefaultPhoneNumberContextMenu(const Tizen::Graphics::Point& position)
+{
+       if (__pDefaultPhoneNumberContextMenu != null)
+       {
+               delete __pDefaultPhoneNumberContextMenu;
+               __pDefaultPhoneNumberContextMenu = null;
+       }
+
+       __pDefaultPhoneNumberContextMenu = new (std::nothrow) ContextMenu();
+       __pDefaultPhoneNumberContextMenu->Construct(position, CONTEXT_MENU_STYLE_LIST);
+       __pDefaultPhoneNumberContextMenu->AddActionEventListener(*this);
+       __pDefaultPhoneNumberContextMenu->SetFocusable(true);
+
+       int count = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER);
+       int defaultPhoneNumberIndex = __pPresentationModel->GetDefaultNumberIndex();
+
+       for (int i = 0; i < count; i++)
+       {
+               String phoneNumber(__pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, i));
+
+               if (i != defaultPhoneNumberIndex)
+               {
+                       phoneNumber.Insert(__pPresentationModel->GetType(DETAIL_PROPERTY_PHONE_NUMBER, i) + CHARACTER_SPACE, 0);
+                       __pDefaultPhoneNumberContextMenu->AddItem(phoneNumber, i);
+               }
+       }
+
+       if (__pDefaultPhoneNumberContextMenu->GetItemCount() > 0)
+       {
+               __pDefaultPhoneNumberContextMenu->Show();
+       }
+}
+
+void
+ContactEditorForm::ShowMoreInformationContextMenu(const Tizen::Graphics::Point& position)
+{
+       if (__pMoreInformationContextMenu != null)
+       {
+               delete __pMoreInformationContextMenu;
+               __pMoreInformationContextMenu = null;
+       }
+
+       __pMoreInformationContextMenu = new (std::nothrow) ContextMenu();
+       __pMoreInformationContextMenu->Construct(position, CONTEXT_MENU_STYLE_LIST);
+
+       __pMoreInformationContextMenu->SetMaxVisibleItemsCount(6);
+       __pMoreInformationContextMenu->AddActionEventListener(*this);
+       __pMoreInformationContextMenu->SetFocusable(true);
+
+       if (__isJobTitleEnabled == false)
+       {
+               __pMoreInformationContextMenu->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_JOB_TITLE"), IDA_CONTEXT_MENU_ITEM_JOB_TITLE);
+       }
+
+       if (__isDepartmentEnabled == false)
+       {
+               __pMoreInformationContextMenu->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_DEPARTMENT"), IDA_CONTEXT_MENU_ITEM_DEPARTMENT);
+       }
+
+       if (__pImAddressFieldItem->GetCount() == 0)
+       {
+               __pMoreInformationContextMenu->AddItem(ResourceManager::GetString(L"IDS_PB_HEADER_INSTANT_MESSENGER_ABB"), IDA_CONTEXT_MENU_ITEM_INSTANT_MESSENGER);
+       }
+
+       if (__pUrlFieldItem->GetCount() == 0)
+       {
+               __pMoreInformationContextMenu->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_URL"), IDA_CONTEXT_MENU_ITEM_URL);
+       }
+
+       DateTime birthday;
+       if (__pPresentationModel->GetBirthday(birthday) != E_SUCCESS)
+       {
+               __pMoreInformationContextMenu->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_BIRTHDAY"), IDA_CONTEXT_MENU_ITEM_BIRTHDAY);
+       }
+
+       if (__pNoteFieldItem == null)
+       {
+               __pMoreInformationContextMenu->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_NOTE"), IDA_CONTEXT_MENU_ITEM_NOTE);
+       }
+
+       if (__isMoreInformationContextMenuShowing == false)
+       {
+               __pMoreInformationContextMenu->Show();
+       }
+}
+
+void
+ContactEditorForm::ShowTypeContextMenu(int currentType, const Tizen::Graphics::Point& position, int itemTag)
+{
+       int groupIndex = (itemTag & TABLE_VIEW_GROUP_INDEX_MASK) >> TABLE_VIEW_GROUP_INDEX_SHIFT;
+
+       __groupIndex = groupIndex;
+       __itemIndex = itemTag;
+
+       if (__isKeypadOpened)
+       {
+               __isTypeContextMenuShowing = true;
+       }
+
+       if (__pTypeContextMenu != null)
+       {
+               delete __pTypeContextMenu;
+               __pTypeContextMenu = null;
+       }
+
+       __pTypeContextMenu = new (std::nothrow) ContextMenu();
+       __pTypeContextMenu->Construct(position, CONTEXT_MENU_STYLE_LIST, CONTEXT_MENU_ANCHOR_DIRECTION_LEFTWARD);
+       __pTypeContextMenu->AddActionEventListener(*this);
+       __pTypeContextMenu->SetFocusable(true);
+
+       switch (groupIndex)
+       {
+       case TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX:
+               {
+                       __pTypeContextMenu->SetMaxVisibleItemsCount(DETAIL_PHONENUMBER_TYPE_OTHER + 1);
+                       for (int i = 0; i <= DETAIL_PHONENUMBER_TYPE_OTHER; i++)
+                       {
+                               int index = i << TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+                               __pTypeContextMenu->AddItem(__pPresentationModel->GetPhoneNumberTypeString((DetailPhoneNumberType)i), itemTag | index);
+                       }
+               }
+               break;
+       case TABLE_VIEW_EMAIL_FIELD_INDEX:
+               {
+                       __pTypeContextMenu->SetMaxVisibleItemsCount(DETAIL_EMAIL_TYPE_OTHER + 1);
+                       for (int i = 0; i <= DETAIL_EMAIL_TYPE_OTHER; i++)
+                       {
+                               int index = i << TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+                               __pTypeContextMenu->AddItem(__pPresentationModel->GetAddressTypeString((DetailAddressType)i), itemTag | index);
+                       }
+               }
+               break;
+       case TABLE_VIEW_ADDRESS_FIELD_INDEX:
+               {
+                       __pTypeContextMenu->SetMaxVisibleItemsCount(DETAIL_ADDRESS_TYPE_OTHER + 1);
+                       for (int i = 0; i <= DETAIL_ADDRESS_TYPE_OTHER; i++)
+                       {
+                               int index = i << TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+                               __pTypeContextMenu->AddItem(__pPresentationModel->GetAddressTypeString((DetailAddressType)i), itemTag | index);
+                       }
+               }
+               break;
+       case TABLE_VIEW_IM_ADDRESS_FIELD_INDEX:
+               {
+                       __pTypeContextMenu->SetMaxVisibleItemsCount(7); // Temporary the code due to limit max count(8) by UI framework.
+                       for (int i = 0; i <= DETAIL_IM_ADDRESS_TYPE_OTHER; i++)
+                       {
+                               int index = i << TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+                               __pTypeContextMenu->AddItem(__pPresentationModel->GetImAddressTypeString((DetailImAddressType)i), itemTag | index);
+                       }
+               }
+               break;
+       case TABLE_VIEW_URL_FIELD_INDEX:
+               {
+                       __pTypeContextMenu->SetMaxVisibleItemsCount(DETAIL_URL_TYPE_OTHER + 1);
+                       for (int i = 0; i <= DETAIL_URL_TYPE_OTHER; i++)
+                       {
+                               int index = i << TABLE_VIEW_INPUT_FIELD_INDEX_SHIFT;
+                               __pTypeContextMenu->AddItem(__pPresentationModel->GetUrlTypeString((DetailUrlType)i), itemTag | index);
+                       }
+               }
+               break;
+       default:
+               {
+                       __isTypeContextMenuShowing = false;
+                       __groupIndex = -1;
+                       __itemIndex = -1;
+                       delete __pTypeContextMenu;
+                       __pTypeContextMenu = null;
+               }
+               break;
+       }
+
+       if (__pTypeContextMenu != null)
+       {
+               __pTypeContextMenu->RemoveItemAt(currentType);
+               __pTypeContextMenu->Show();
+       }
+}
+
+void
+ContactEditorForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       __isScrollOccurred = false;
+
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_LABEL_TITLE, true) || source.GetName().Equals(GROUP_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_PRESSED);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_PRESSED);
+
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+ContactEditorForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_LABEL_TITLE, true) || source.GetName().Equals(GROUP_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               pPanel->Invalidate(true);
+       }
+
+       if (__isScrollOccurred || source.Contains(currentPosition) == false)
+       {
+               return;
+       }
+}
+
+void
+ContactEditorForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_LABEL_TITLE, true) || source.GetName().Equals(GROUP_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+ContactEditorForm::OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       if (keyCode == KEY_ENTER )
+       {
+               TableViewItem* pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+               String valueString;
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(1));
+
+               if (pLabelValue == null)
+               {
+                       return;
+               }
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(0));
+
+               if (pLabelTitle == null)
+               {
+                       return;
+               }
+
+               pPanel->SetBackgroundColor(COLOR_PRESSED);
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+               pLabelTitle->SetTextColor(COLOR_ITEM_PRESSED);
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+ContactEditorForm::OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       if (keyCode == KEY_ENTER )
+       {
+
+               TableViewItem* pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+               String valueString;
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(1));
+
+               if (pLabelValue == null)
+               {
+                       return;
+               }
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(0));
+
+               if (pLabelTitle == null)
+               {
+                       return;
+               }
+
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+ContactEditorForm::OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+
+}
+
+void
+ContactEditorForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactEditorForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactEditorForm::OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_LABEL_TITLE, true) || source.GetName().Equals(GROUP_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               pPanel->Invalidate(true);
+       }
+
+       if (__isScrollOccurred || source.Contains(currentPosition) == false)
+       {
+               return;
+       }
+}
+
+void
+ContactEditorForm::OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+}
+
+void
+ContactEditorForm::OnScrollPositionChanged (Tizen::Ui::Control &source, int scrollPos)
+{
+       int scrollDif = scrollPos - __scrolledDistance;
+       if (__isTypeContextMenuShowing)
+       {
+               Point anchorPosition = __pTypeContextMenu->GetAnchorPosition();
+
+               anchorPosition.y -= scrollDif;
+               __pTypeContextMenu->SetAnchorPosition(anchorPosition);
+               __pTypeContextMenu->Show();
+
+               __isTypeContextMenuShowing = false;
+               __groupIndex = -1;
+               __itemIndex = -1;
+       }
+       if (__pDefaultPhoneNumberContextMenu != null)
+       {
+               Point anchorPosition = __pDefaultPhoneNumberContextMenu->GetAnchorPosition();
+
+               anchorPosition.y -= scrollDif;
+               __pDefaultPhoneNumberContextMenu->SetAnchorPosition(anchorPosition);
+               __pDefaultPhoneNumberContextMenu->Show();
+       }
+
+       __scrolledDistance = scrollPos;
+       __origScrolledDistance = scrollPos;
+
+       if (__isScrollOccurred == false)
+       {
+               __isScrollOccurred = true;
+       }
+}
+
+void
+ContactEditorForm::OnScrollStopped (Tizen::Ui::Control &source)
+{
+}
+
+void
+ContactEditorForm::OnExpandableEditAreaLineAdded (Tizen::Ui::Controls::ExpandableEditArea &source, int newLineCount)
+{
+       __pTableView->RefreshItem(TABLE_VIEW_NOTE_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+}
+
+void
+ContactEditorForm::OnExpandableEditAreaLineRemoved (Tizen::Ui::Controls::ExpandableEditArea &source, int newLineCount)
+{
+       __pTableView->RefreshItem(TABLE_VIEW_NOTE_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+}
+
+void
+ContactEditorForm::OnDateChanged(const Tizen::Ui::Control& source, int year, int month, int day)
+{
+       DateTime changedDate;
+
+       changedDate.SetValue(year, month, day);
+       __pPresentationModel->SetBirthday(changedDate);
+       __isContactModified = true;
+}
+
+void
+ContactEditorForm::OnDateChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactEditorForm::OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData)
+{
+       AppLogDebug("ENTER");
+
+       if (__pAppControl != null)
+       {
+               delete __pAppControl;
+               __pAppControl = null;
+       }
+
+       TryReturnVoid(appControlResult == APP_CTRL_RESULT_SUCCEEDED, "[E_FAILURE] The result of an appcontrol is not succeeded.");
+       TryReturnVoid(pExtraData != null, "[E_FAILURE] The extra data is null.");
+
+       const String *pResultString = null;
+       const ArrayList* pResultList = dynamic_cast<const ArrayList*>(pExtraData->GetValue(String(OUTPUT_KEY_SELECTED)));
+       if (pResultList != null)
+       {
+               pResultString = static_cast<const String*>(pResultList->GetAt(0));
+       }
+       else
+       {
+               pResultString = static_cast<const String*>(pExtraData->GetValue(String(OUTPUT_KEY_SELECTED)));
+       }
+       TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               __pPresentationModel->SetThumbnail(*pResultString);
+               __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__pFileEventManager == null)
+               {
+                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                       __pFileEventManager->Construct(*this);
+               }
+               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+               __isContactModified = true;
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               int width = 0;
+               int height = 0;
+               ImageFormat imageFormat;
+               result r = ImageBuffer::GetImageInfo(*pResultString, imageFormat, width, height);
+
+               if (appControlResult == APP_CTRL_RESULT_FAILED || r != E_SUCCESS)
+               {
+                       int modalResult = 0;
+                       MessageBox unsupportedMessageBox;
+                       unsupportedMessageBox.Construct(L"", ResourceManager::GetString(L"IDS_MP_POP_INVALID_FILE"), MSGBOX_STYLE_NONE, 3000);
+                       unsupportedMessageBox.ShowAndWait(modalResult);
+
+                       return;
+               }
+
+               __pPresentationModel->SetThumbnail(*pResultString);
+               AppLogDebug("pResultString is %ls", pResultString->GetPointer());
+               __isContactModified = true;
+               __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__pFileEventManager == null)
+               {
+                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                       __pFileEventManager->Construct(*this);
+               }
+               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, *pResultString);
+               __pTableView->RefreshItem(TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX, 2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__pFileEventManager == null)
+               {
+                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                       __pFileEventManager->Construct(*this);
+               }
+               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+
+               __isContactModified = true;
+       }
+       AppLogDebug("EXIT");
+}
+
+result
+ContactEditorForm::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId)
+{
+       result r = E_SUCCESS;
+
+       String uri;
+       String mimeType;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_CAMERA);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_ALLOW_SWITCH), new (std::nothrow) String(INPUT_VALUE_FALSE));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_GALLERY);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_DATA_SELECTION_MODE_SINGLE));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_IMAGEVIEWER_MODE), new (std::nothrow) String(INPUT_VALUE_IMAGEVIEWER_TYPE));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_AUDIO);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_DATA_SELECTION_MODE_SINGLE));
+       }
+
+       __pAppControl = AppManager::FindAppControlN(appId, operationId);
+
+       if (__pAppControl != null)
+       {
+               r = __pAppControl->Start(&uri, &mimeType, &extraData, this);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to launch app control.", GetErrorMessage(r));
+
+               SetEnabled(false);
+               Invalidate(true);
+       }
+       extraData.RemoveAll(true);
+
+       return r;
+
+CATCH:
+       extraData.RemoveAll(true);
+       delete __pAppControl;
+       __pAppControl = null;
+
+       return r;
+}
+
+void
+ContactEditorForm::OnContactsChanged(void)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (__isSaved == false)
+       {
+               if (__pPresentationModel->IsContactRemoved())
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_VIEW)
+                       {
+                               __pPresentationModel->RemoveContactChangeListener(*this);
+                       }
+                       else
+                       {
+                               if (__pAppControl != null)
+                               {
+                                       __pAppControl->Stop();
+                               }
+                               pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       }
+               }
+
+               return;
+       }
+
+       SetFocus();
+
+       if (__isAppControl)
+       {
+               AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), new (std::nothrow) String(Integer::ToString(__pPresentationModel->GetContactId())));
+
+               result r = pAppManager->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+               AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+               UiApp::GetInstance()->Terminate();
+       }
+       else
+       {
+               ArrayList* pArg = null;
+
+               if (__pPresentationModel->GetVcfPath().IsEmpty() == false)
+               {
+                       pArg = new (std::nothrow) ArrayList();
+                       pArg->Construct();
+
+                       String* pViewType = new (std::nothrow) String();
+                       String* pValueType = new (std::nothrow) String();
+
+                       pViewType->Append(VIEW_TYPE);
+                       pViewType->Append(DELIMITER);
+                       pViewType->Append(VIEW_TYPE_VALUE_CONTACT);
+
+                       pValueType->Append(VIEW_TYPE_CONTACT_ID);
+                       pValueType->Append(DELIMITER);
+                       pValueType->Append(Integer::ToString(__pPresentationModel->GetContactId()));
+
+                       pArg->Add(pViewType);
+                       pArg->Add(pValueType);
+               }
+               pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), pArg);
+       }
+
+       __isSaved = false;
+}
+
+void
+ContactEditorForm::OnCategoriesChanged(void)
+{
+       __pTableView->RefreshItem(TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+}
+
+void
+ContactEditorForm::OnForeground(void)
+{
+}
+
+void
+ContactEditorForm::OnBackground(void)
+{
+       if (__previousItemIndex != -1 && __previousGroupIndex != -1)
+       {
+               DeleteInputField(__previousGroupIndex, __previousItemIndex);
+       }
+       if (IsEnabled() == false)
+       {
+               result r = SetEnabled(true);
+               AppLogDebug("Form Enabled = %s", GetErrorMessage(r));
+               Invalidate(true);
+       }
+}
+
+void
+ContactEditorForm::OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId)
+{
+       String thumbnailPath = __pPresentationModel->GetValue(DETAIL_PROPERTY_THUMBNAIL);
+       if (thumbnailPath.Equals(path, false) == true)
+       {
+               __pPresentationModel->SetThumbnail(L"");
+               __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else
+       {
+               String ringtonePath = __pPresentationModel->GetValue(DETAIL_PROPERTY_RINGTONE);
+               if (ringtonePath.Equals(ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT"), false) == true )
+               {
+                       __pTableView->RefreshItem(TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX, 2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               }
+       }
+}
+
+void
+ContactEditorForm::OnDeviceStateChanged(Tizen::System::DeviceType deviceType, const Tizen::Base::String &state)
+{
+       if (deviceType != DEVICE_TYPE_STORAGE_CARD || __pPresentationModel->GetValue(DETAIL_PROPERTY_THUMBNAIL).IsEmpty())
+       {
+               return;
+       }
+
+       if (state.Equals(SD_CARD_UNMOUNTED, false) && File::IsFileExist(__pPresentationModel->GetValue(DETAIL_PROPERTY_THUMBNAIL)) == false)
+       {
+               __pPresentationModel->SetThumbnail(L"");
+               __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+}
+
+bool ContactEditorForm::ValidateEmailAddress(const Tizen::Base::String& emailAddress)
+{
+       int count = 0;
+       int index = 0;
+       const wchar_t* tmpChar;
+       const wchar_t* tmpDomain;
+       String splChars = L"([<@,;\\:\">])";
+
+       for (tmpChar = emailAddress.GetPointer(), index=0; index < emailAddress.GetLength(); tmpChar++, index++)
+       {
+               if (*tmpChar == '\"' && (tmpChar == emailAddress.GetPointer() || *(tmpChar-1) == '.' || *(tmpChar-1) == '\"'))
+               {
+                       while (*++tmpChar)
+                       {
+                               if (*tmpChar == '\"')
+                               {
+                                       break;
+                               }
+                               if (*tmpChar == '\\' && (*++tmpChar == ' '))
+                               {
+                                       continue;
+                               }
+                               if (*tmpChar <= ' ' || *tmpChar >= 127)
+                               {
+                                       return false;
+                               }
+                       }
+                       if (!*tmpChar++)
+                       {
+                               return false;
+                       }
+                       if (*tmpChar == '@')
+                       {
+                               break;
+                       }
+                       if (*tmpChar != '.')
+                       {
+                               return false;
+                       }
+                       continue;
+               }
+               if (*tmpChar == '@')
+               {
+                       break;
+               }
+               if (*tmpChar <= ' ' || *tmpChar >= 127)
+               {
+                       return false;
+               }
+               if (splChars.IndexOf(*tmpChar, 0, index) != E_OBJ_NOT_FOUND)
+               {
+                       return false;
+               }
+       }
+       if (tmpChar == emailAddress.GetPointer() || *(tmpChar-1) == '.')
+       {
+               return false;
+       }
+
+       if (!*(tmpDomain = ++tmpChar))
+       {
+               return false;
+       }
+       do
+       {
+               if (*tmpChar == '.')
+               {
+                       if (tmpChar == tmpDomain || *(tmpChar-1) == '.')
+                       {
+                               return false;
+                       }
+                       count++;
+               }
+               if (*tmpChar <= ' ' || *tmpChar >= 127)
+               {
+                       return false;
+               }
+               if (splChars.IndexOf(*tmpChar, 0, index) != E_OBJ_NOT_FOUND)
+               {
+                       return false;
+               }
+       } while (*++tmpChar);
+
+       if (*(tmpChar-1) == '.')
+       {
+               return false;
+       }
+
+       if (count >= 1)
+       {
+               return true;
+       }
+
+       return false;
+}
+
+void
+ContactEditorForm::OnSettingChanged(Tizen::Base::String &key)
+{
+       if(key == L"http://tizen.org/setting/locale.date_time")
+       {
+               DateTime bday;
+               __pPresentationModel->GetBirthday(bday);
+
+               DateTime currentDate;
+               Tizen::System::SystemTime::GetCurrentTime(currentDate);
+
+               __pTableView->RefreshItem(TABLE_VIEW_BIRTHDAY_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+}
+
+bool
+ContactEditorForm::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactEditorForm::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pDiscardChangesPopup && __pDiscardChangesPopup->GetShowState() == true)
+               {
+                       HideDiscardChangesPopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+ContactEditorForm::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactEditorForm::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+void
+ContactEditorForm::ShowDiscardChangesPopup(void)
+{
+       if (__pDiscardChangesPopup == null)
+       {
+               __pDiscardChangesPopup = new (std::nothrow) Popup();
+               __pDiscardChangesPopup->Construct(false, Dimension(W_SAVE_POPUP, H_SAVE_POPUP));
+               __pDiscardChangesPopup->SetPropagatedKeyEventListener(this);
+
+               Rectangle popupClientBounds = __pDiscardChangesPopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(X_SAVE_LABEL, Y_SAVE_LABEL, W_SAVE_LABEL, H_SAVE_LABEL), ResourceManager::GetString(L"IDS_PB_POP_DISCARD_CHANGES_Q"));
+               pLabel->SetTextConfig(FONT_SIZE_SAVE_CONFIRM, LABEL_TEXT_STYLE_NORMAL);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+               Button* pSaveButton = new (std::nothrow) Button();
+               pSaveButton->Construct(Rectangle(X_SAVE_LABEL + W_SAVE_BUTTON + W_POPUP_ITEM_GAP, Y_SAVE_BUTTON, W_SAVE_BUTTON, H_SAVE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_OK"));
+               pSaveButton->SetTextSize(FONT_SIZE_SAVE_BUTTON);
+               pSaveButton->SetActionId(IDA_POPUP_DISCARD_CHANGES_OK);
+               pSaveButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(X_SAVE_LABEL, Y_SAVE_BUTTON, W_SAVE_BUTTON, H_SAVE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetTextSize(FONT_SIZE_SAVE_BUTTON);
+               pCancelButton->SetActionId(IDA_POPUP_DISCARD_CHANGES_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pDiscardChangesPopup->AddControl(pLabel);
+               __pDiscardChangesPopup->AddControl(pSaveButton);
+               __pDiscardChangesPopup->AddControl(pCancelButton);
+       }
+
+       __pDiscardChangesPopup->SetShowState(true);
+       __pDiscardChangesPopup->Show();
+}
+
+void
+ContactEditorForm::HideDiscardChangesPopup(void)
+{
+       __pDiscardChangesPopup->SetShowState(false);
+       Invalidate(true);
+}
diff --git a/src/CtContactEntry.cpp b/src/CtContactEntry.cpp
new file mode 100644 (file)
index 0000000..eff1e84
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// 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       CtContactEntry.cpp
+ * @brief      This is the implementation file for the Contacts application entry.
+ */
+
+#include "CtContactsApp.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+_EXPORT_ int OspMain(int argc, char *pArgv[]);
+#ifdef _PROFILE
+extern void start_profile (void);
+extern void end_profile (void);
+#else
+#define start_profile()
+#define end_profile()
+#endif
+
+
+/**
+ * The entry function of Tizen application called by the operating system.
+ */
+int
+OspMain(int argc, char *pArgv[])
+{
+       result r = E_SUCCESS;
+
+       AppLog("Contact Application started.");
+       ArrayList* pArgs = new ArrayList();
+       pArgs->Construct();
+       for (int i = 0; i < argc; i++)
+               pArgs->Add(*(new String(pArgv[i])));
+
+       start_profile();
+       r = Tizen::App::UiApp::Execute(ContactsApp::CreateInstance, pArgs);
+       if (IsFailed(r))
+       {
+               AppLogException("Contact Application execution failed-[%s].", GetErrorMessage(r));
+               r &= 0x0000FFFF;
+       }
+       end_profile();
+
+       pArgs->RemoveAll(true);
+       delete pArgs;
+       AppLog("Contact Application finished.");
+
+       return static_cast<int>(r);
+}
+#ifdef __cplusplus
+}
+#endif // __cplusplus
diff --git a/src/CtContactListEditorPanel.cpp b/src/CtContactListEditorPanel.cpp
new file mode 100644 (file)
index 0000000..c2ca40d
--- /dev/null
@@ -0,0 +1,1578 @@
+//
+// 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       CtContactListEditorPanel.cpp
+ * @brief      This is the implementation file for the ContactListEditorPanel class.
+ */
+
+#include <FSocial.h>
+#include "CtContactListEditorPanel.h"
+#include "CtContactListItem.h"
+#include "CtContactListPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtSearchListItem.h"
+#include "CtSearchListEventListener.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+static const int IDA_CHECK_SELECT_ALL_CHECKED = 20;
+static const int IDA_CHECK_SELECT_ALL_UNCHECKED = 21;
+static const int IDA_FOOTER_DELETE = 30;
+static const int IDA_FOOTER_CANCEL = 31;
+static const int IDA_FOOTER_DONE = 32;
+static const int IDA_POPUP_CONTACT_VALUE_CLOSE = 40;
+static const int IDA_POPUP_DELETE_OK = 41;
+static const int IDA_POPUP_DELETE_CANCEL = 42;
+static const int IDA_POPUP_DELETE_PROGRESS_CANCEL = 43;
+
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+static const int W_INITIAL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int H_SELECT_ALL = 112;
+static const int H_SEARCHBAR = 86;
+static const int H_BOTTOM_LABEL = 48;
+static const int H_GROUP_ITEM = 76;
+static const int W_CONTACT_VALUE_POPUP = 688;
+static const int H_CONTACT_VALUE_POPUP = 532;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 338;
+static const int H_CLOSE_BUTTON = 74;
+static const int Y_CLOSE_BUTTON = 358;
+static const int W_CLOSE_BUTTON = 394;
+static const int H_DELETE_PROGRESS_POPUP = 308;
+static const int Y_DELETE_POPUP_TITLE = 20;
+static const int H_DELETE_POPUP_ELEMENT = 60;
+static const int H_DELETE_POPUP_PROGRESS = 34;
+static const int Y_DELETE_POPUP_CANCEL_BUTTON = 214;
+static const int H_DELETE_POPUP_CANCEL_BUTTON = 74;
+static const int W_DELETE_POPUP_CANCEL_BUTTON = 394;
+static const int X_LIST_ITEM_TEXT_MARGIN = 32;
+static const int H_CHECK_LABEL = 72;
+static const int Y_CHECK_LABEL = 20;
+
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+static const int FONT_SIZE_BOTTOM_LABEL = 32;
+static const int FONT_SIZE_DELETE_POPUP_TEXT = 36;
+
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<68, 68, 68>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_DELETE_POPUP_TEXT = Color32<128, 128, 128>::Value;
+static const unsigned int COLOR_CHECK_LABEL_BG = Color32<220, 218, 211>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_NORMAL = Color32<213, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_TEXT = Color32<248, 246, 239>::Value;
+
+static const int LIST_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int LIST_VIEW_MASK = 0xFFFF;
+
+static const wchar_t* IDB_NO_CONTENTS = L"00_Nocontents_text.png";
+
+ContactListEditorPanel::ContactListEditorPanel(void)
+: __pTempContactValueHashMap(null)
+, __pSelectAll(null)
+, __pListView(null)
+, __pSearchListView(null)
+, __pSearchBar(null)
+, __pCheckLabel(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pBottomLabel(null)
+, __pMultipleContactValuePopup(null)
+, __pDeleteProgressPopup(null)
+, __pDeleteConfirmationPopup(null)
+, __pContactValueListEvent(null)
+, __pPresentationModel(null)
+, __pSearchListEvent(null)
+, __isContactRemoved(false)
+, __selectedIndex(-1)
+, __selectedSearchIndex(-1)
+, __deleteGroupIndex(0)
+, __deleteItemIndex(0)
+{
+       __deleteContactTimer.Construct(*this);
+}
+
+ContactListEditorPanel::~ContactListEditorPanel(void)
+{
+}
+
+void
+ContactListEditorPanel::Initialize(void)
+{
+       Construct(Rectangle(0, 0, W_INITIAL_PANEL, H_INITIAL_PANEL));
+}
+
+result
+ContactListEditorPanel::OnInitializing(void)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       FloatRectangle clientBounds = pForm->GetClientAreaBoundsF();
+       SetBounds(FloatRectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = ContactListPresentationModel::GetInstance();
+
+       __pCheckLabel = new (std::nothrow) Label();
+       __pCheckLabel->Construct(Rectangle(0, H_SEARCHBAR + Y_CHECK_LABEL, clientBounds.width, H_CHECK_LABEL), L"");
+       __pCheckLabel->SetBackgroundColor(COLOR_CHECK_LABEL_BG);
+
+       AddControl(__pCheckLabel);
+
+       __pSelectAll = new (std::nothrow) CheckButton();
+       __pSelectAll->Construct(Rectangle(0, H_SEARCHBAR, clientBounds.width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_NONE);
+       __pSelectAll->SetText(ResourceManager::GetString(L"IDS_COM_BODY_SELECT_ALL"));
+       __pSelectAll->SetActionId(IDA_CHECK_SELECT_ALL_CHECKED, IDA_CHECK_SELECT_ALL_UNCHECKED);
+       __pSelectAll->AddActionEventListener(*this);
+
+       AddControl(__pSelectAll);
+
+       __pListView = new (std::nothrow) GroupedListView();
+       __pListView->Construct(Rectangle(0, H_SEARCHBAR + H_SELECT_ALL, clientBounds.width, clientBounds.height - H_SEARCHBAR - H_SELECT_ALL - H_BOTTOM_LABEL), GROUPED_LIST_VIEW_STYLE_INDEXED, true, true);
+       __pListView->SetItemProvider(*this);
+       __pListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pListView->AddFastScrollListener(*this);
+       __pListView->AddGroupedListViewItemEventListener(*this);
+       __pListView->AddTouchEventListener(*this);
+
+       AddControl(__pListView);
+
+       __pSearchBar = new (std::nothrow) SearchBar();
+       __pSearchBar->Construct(Rectangle(0, 0, clientBounds.width, H_SEARCHBAR));
+       __pSearchBar->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_SEARCH"));
+       __pSearchBar->AddSearchBarEventListener(*this);
+       __pSearchBar->AddTextEventListener(*this);
+       __pSearchBar->AddKeypadEventListener(*this);
+       __pSearchBar->SetContentAreaSize(Dimension(0, 0));
+
+       __pSearchListEvent = new (std::nothrow) SearchListEventListener(LIST_ANNEX_STYLE_MARK, __pPresentationModel);
+
+       AddControl(__pSearchBar);
+
+       __pSearchListView = new (std::nothrow) GroupedListView();
+       __pSearchListView->Construct(Rectangle(0, H_SEARCHBAR, clientBounds.width, clientBounds.height - H_SEARCHBAR - H_BOTTOM_LABEL), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
+       __pSearchListView->SetItemProvider(*__pSearchListEvent);
+       __pSearchListView->AddGroupedListViewItemEventListener(*this);
+       __pSearchListView->AddTouchEventListener(*this);
+       __pSearchListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pSearchListView->SetShowState(false);
+
+       AddControl(__pSearchListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_CONTENTS);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, clientBounds.width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pBottomLabel = new (std::nothrow) Label();
+       __pBottomLabel->Construct(FloatRectangle(0, clientBounds.height - H_BOTTOM_LABEL, clientBounds.width, H_BOTTOM_LABEL),
+                                                                                                       ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + INITIAL_SELECTED_COUNT);
+       __pBottomLabel->SetBackgroundColor(Color(COLOR_BOTTOM_LABEL_BG));
+       __pBottomLabel->SetTextColor(Color(COLOR_BOTTOM_LABEL_FONT));
+       __pBottomLabel->SetTextConfig(FONT_SIZE_BOTTOM_LABEL, LABEL_TEXT_STYLE_BOLD);
+       __pBottomLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       __pBottomLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       AddControl(__pBottomLabel);
+
+       __pTempContactValueHashMap = new (std::nothrow) HashMap();
+       __pTempContactValueHashMap->Construct();
+
+       return E_SUCCESS;
+}
+
+result
+ContactListEditorPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       delete __pSearchListEvent;
+
+       __pTempContactValueHashMap->RemoveAll(true);
+       delete __pTempContactValueHashMap;
+
+       delete __pDeleteProgressPopup;
+       delete __pDeleteConfirmationPopup;
+       delete __pMultipleContactValuePopup;
+
+       return r;
+}
+
+void
+ContactListEditorPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK && pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                       }
+               }
+               break;
+       case IDA_HEADER_GROUPS:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_HEADER_FAVORITES:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                       }
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_CHECKED:
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, true);
+
+                                       int index = 0;
+                                       index |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+                                       index |= itemIndex;
+                                       Integer hashMapIndex(index);
+
+                                       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                                       {
+                                               if (__pTempContactValueHashMap->GetValue(hashMapIndex) == null)
+                                               {
+                                                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                                                       __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(index)), *(new (std::nothrow) String(phoneNumber)));
+                                               }
+                                       }
+                                       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                                       {
+                                               if (__pTempContactValueHashMap->GetValue(hashMapIndex) == null)
+                                               {
+                                                       String email = __pPresentationModel->GetDefaultEmail(groupIndex, itemIndex);
+                                                       __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(index)), *(new (std::nothrow) String(email)));
+                                               }
+                                       }
+                               }
+                       }
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_UNCHECKED:
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                               }
+                       }
+                       __pTempContactValueHashMap->RemoveAll(true);
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_FOOTER_DELETE:
+               {
+                       ShowDeleteConfirmationPopup();
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       pSceneManager->GoBackward(BackwardSceneTransition());
+               }
+               break;
+       case IDA_FOOTER_DONE:
+               {
+                       ReturnMultipleValues();
+               }
+               break;
+       case IDA_POPUP_CONTACT_VALUE_CLOSE:
+               {
+                       HideContactValuePopup();
+               }
+               break;
+       case IDA_POPUP_DELETE_OK:
+               {
+                       ShowDeleteProgressPopup();
+               }
+               break;
+       case IDA_POPUP_DELETE_CANCEL:
+               {
+                       HideDeleteConfirmationPopup();
+               }
+               break;
+       case IDA_POPUP_DELETE_PROGRESS_CANCEL:
+               {
+                       __deleteContactTimer.Cancel();
+                       HideDeleteProgressPopup();
+                       pSceneManager->GoBackward(BackwardSceneTransition());
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactListEditorPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                               const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveAllItems();
+       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+       pForm->SetFormMenuEventListener(null);
+
+       __pPresentationModel->InitializeContactList();
+       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+       __pListView->UpdateList();
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               pFooter->SetShowState(true);
+
+               FooterItem footerItemDone;
+               footerItemDone.Construct(IDA_FOOTER_DONE);
+               footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+               pFooter->AddItem(footerItemDone);
+
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       pFooter->SetItemEnabled(0, false);
+
+                       __pSearchBar->SetShowState(false);
+                       __pCheckLabel->SetShowState(false);
+                       __pSelectAll->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+
+               }
+               else
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                               }
+                       }
+
+                        pFooter->SetItemEnabled(0, false);
+
+                       __pSearchBar->SetShowState(true);
+                       __pCheckLabel->SetShowState(true);
+                       __pSelectAll->SetShowState(true);
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+
+                       __pSelectAll->SetSelected(false);
+               }
+       }
+       else
+       {
+               __pSelectAll->SetSelected(false);
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                       }
+               }
+
+               FooterItem footerDelete;
+               footerDelete.Construct(IDA_FOOTER_DELETE);
+               footerDelete.SetText(ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+
+               FooterItem footerCancel;
+               footerCancel.Construct(IDA_FOOTER_CANCEL);
+               footerCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pFooter->AddItem(footerCancel);
+               pFooter->AddItem(footerDelete);
+               pFooter->SetItemEnabled(1, false);
+       }
+
+       __pPresentationModel->AddContactChangeListener(*this);
+       pFooter->AddActionEventListener(*this);
+       UpdateBottomLabel();
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+ContactListEditorPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                               const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       if (pForm->IsFooterVisible() == false)
+       {
+               pForm->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+       }
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+       }
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+}
+
+result
+ContactListEditorPanel::RemoveContactList(void)
+{
+       result r = E_FAILURE;
+
+       for (int groupIndex = __deleteGroupIndex; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+       {
+               int itemCount = __pListView->GetItemCountAt(groupIndex);
+               for (int itemIndex = __deleteItemIndex; itemIndex < itemCount; itemIndex++)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                       {
+                               r = __pPresentationModel->RemoveContact(groupIndex, itemIndex, false);
+
+                               __deleteGroupIndex = groupIndex;
+                               __deleteItemIndex = ++itemIndex;
+
+                               return r;
+                       }
+               }
+               __deleteItemIndex = 0;
+       }
+
+       __deleteGroupIndex = 0;
+       __deleteItemIndex = 0;
+
+       return r;
+}
+
+int
+ContactListEditorPanel::GetCheckedContactCounts(void)
+{
+       int contactCount = 0;
+
+       for (int groupIndex = __deleteGroupIndex; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+       {
+               int itemCount = __pListView->GetItemCountAt(groupIndex);
+               for (int itemIndex = __deleteItemIndex; itemIndex < itemCount; itemIndex++)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                       {
+                               contactCount++;
+                       }
+               }
+       }
+
+       return contactCount;
+}
+
+Tizen::Ui::Controls::ListItemBase*
+ContactListEditorPanel::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String name;
+       Bitmap* pThumbnail = null;
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), LIST_ANNEX_STYLE_MARK);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), pContactsApp->GetListItemSingleLineHeight()), 0, *(static_cast<ICustomElement *>(pCustomElement)));
+
+       return pItem;
+}
+
+bool
+ContactListEditorPanel::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+int
+ContactListEditorPanel::GetItemCount(int groupIndex)
+{
+       return __pPresentationModel->GetContactCount(groupIndex);
+}
+
+int
+ContactListEditorPanel::GetGroupCount(void)
+{
+       return __pPresentationModel->GetKeyCount();
+}
+
+Tizen::Ui::Controls::GroupItem*
+ContactListEditorPanel::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(__pPresentationModel->GetKey(groupIndex), null);
+
+       return pItem;
+}
+
+bool
+ContactListEditorPanel::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+ContactListEditorPanel::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode)
+{
+       if (mode == SEARCH_BAR_MODE_NORMAL)
+       {
+               int count = __pPresentationModel->GetSearchedContactCount();
+               bool isChecked = true;
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pListView->SetShowState(true);
+               __pListView->Invalidate(true);
+               __pCheckLabel->SetShowState(true);
+               __pSelectAll->SetShowState(true);
+               __pSelectAll->SetSelected(isChecked);
+               __pSearchListView->SetShowState(false);
+               __pPresentationModel->ResetSearchedContactList();
+               __pSearchListView->UpdateList();
+       }
+}
+
+void
+ContactListEditorPanel::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+ContactListEditorPanel::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int mainGroupIndex = groupIndex;
+       int mainItemIndex = itemIndex;
+
+       if (listView.Equals(*__pSearchListView) == true)
+       {
+               __selectedSearchIndex = 0;
+               __selectedSearchIndex |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+               __selectedSearchIndex |= itemIndex;
+
+               __pPresentationModel->GetItemMainIndex(itemIndex, mainGroupIndex, mainItemIndex);
+       }
+
+       __selectedIndex = 0;
+       __selectedIndex |= mainGroupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+       __selectedIndex |= mainItemIndex;
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               if (listView.IsItemChecked(groupIndex, itemIndex) == true)
+               {
+                       IList* pList = null;
+                       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                       {
+                               pList = __pPresentationModel->GetAllPhoneNumbersN(mainGroupIndex, mainItemIndex);
+
+                               if (pList == null)
+                               {
+                                       ReturnResultFailed();
+                               }
+                               else
+                               {
+                                       if (pList->GetCount() > 1)
+                                       {
+                                               listView.SetItemChecked(groupIndex, itemIndex, false);
+                                               __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                               ShowContactValuePopup(mainGroupIndex, mainItemIndex);
+                                       }
+                                       else if (pList->GetCount() == 1)
+                                       {
+                                               String* pContactValueInfo = static_cast<String *>(pList->GetAt(0));
+                                               int blankIndex = 0;
+                                               pContactValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                               pContactValueInfo->Remove(0, blankIndex + 1);
+                                               __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(__selectedIndex)), *(new (std::nothrow) String(*pContactValueInfo)));
+                                               delete pList;
+                                       }
+                               }
+                       }
+                       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                       {
+                               pList = __pPresentationModel->GetAllEmailsN(mainGroupIndex, mainItemIndex);
+
+                               if (pList == null)
+                               {
+                                       ReturnResultFailed();
+                               }
+                               else
+                               {
+                                       if (pList->GetCount() > 1)
+                                       {
+                                               listView.SetItemChecked(groupIndex, itemIndex, false);
+                                               __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                               ShowContactValuePopup(mainGroupIndex, mainItemIndex);
+                                       }
+                                       else if (pList->GetCount() == 1)
+                                       {
+                                               String* pContactValueInfo = static_cast<String *>(pList->GetAt(0));
+                                               int blankIndex = 0;
+                                               pContactValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                               pContactValueInfo->Remove(0, blankIndex + 1);
+                                               __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(__selectedIndex)), *(new (std::nothrow) String(*pContactValueInfo)));
+                                               delete pList;
+                                       }
+                               }
+                       }
+               }
+               else
+               {
+                       Integer keyIndex(__selectedIndex);
+                       __pTempContactValueHashMap->Remove(keyIndex, true);
+               }
+       }
+
+       if (listView.Equals(*__pListView) == true)
+       {
+               if (listView.IsItemChecked(groupIndex, itemIndex) == true)
+               {
+                       bool isChecked = true;
+                       for (int groupIndex = 0; groupIndex < listView.GetGroupCount() && isChecked == true; groupIndex++)
+                       {
+                               int itemCount = listView.GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       if (listView.IsItemChecked(groupIndex, itemIndex) == false)
+                                       {
+                                               isChecked = false;
+                                               break;
+                                       }
+                               }
+                       }
+                       __pSelectAll->SetSelected(isChecked);
+               }
+               else if (listView.IsItemChecked(groupIndex, itemIndex) == false)
+               {
+                       __pSelectAll->SetSelected(false);
+               }
+       }
+       else if (listView.Equals(*__pSearchListView) == true)
+       {
+               int count = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+ContactListEditorPanel::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+ContactListEditorPanel::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+ContactListEditorPanel::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int groupIndex = (__selectedIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+       int itemIndex = __selectedIndex & LIST_VIEW_MASK;
+
+       IList* pList = null;
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+       }
+
+       if (pList == null)
+       {
+               ReturnResultFailed();
+       }
+       else
+       {
+               String* pContactValueInfo = static_cast<String *>(pList->GetAt(index));
+               int blankIndex = 0;
+               pContactValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+               pContactValueInfo->Remove(0, blankIndex + 1);
+               __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(__selectedIndex)), *(new (std::nothrow) String(*pContactValueInfo)));
+       }
+       delete pList;
+
+       HideContactValuePopup();
+
+       if (__pListView->GetShowState() == true)
+       {
+               __pListView->SetItemChecked(groupIndex, itemIndex, true);
+
+               bool isChecked = true;
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pSelectAll->SetSelected(isChecked);
+       }
+       else
+       {
+               groupIndex = (__selectedSearchIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+               itemIndex = __selectedSearchIndex & LIST_VIEW_MASK;
+               __pSearchListView->SetItemChecked(groupIndex, itemIndex, true);
+
+               int count = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < count; index++)
+               {
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+ContactListEditorPanel::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+ContactListEditorPanel::OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index)
+{
+       __pListView->ScrollToItem(__pPresentationModel->GetKeyIndex(index), -1);
+       __pListView->Invalidate(false);
+}
+
+void
+ContactListEditorPanel::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       String searchText = __pSearchBar->GetText();
+       searchText.Trim();
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+       }
+       else
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+       }
+
+       if (searchText.GetLength() != 0)
+       {
+               __pCheckLabel->SetShowState(false);
+               __pSelectAll->SetShowState(false);
+               __pListView->SetShowState(false);
+               __pSearchListView->SetShowState(true);
+
+               __pSearchListView->UpdateList();
+
+               int count = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+                       __pSearchListView->SetItemChecked(0, index, __pListView->IsItemChecked(groupIndex, itemIndex));
+               }
+
+               __pSearchListView->Invalidate(true);
+       }
+       else
+       {
+               __pCheckLabel->SetShowState(true);
+               __pSelectAll->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pSearchListView->SetShowState(false);
+
+               int count = __pPresentationModel->GetSearchedContactCount();
+               bool isChecked = true;
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pSelectAll->SetSelected(isChecked);
+               __pListView->Invalidate(true);
+       }
+}
+
+void
+ContactListEditorPanel::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListEditorPanel::OnContactsChanged(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       HideContactValuePopup();
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               Footer* pFooter = pForm->GetFooter();
+               pFooter->RemoveAllItems();
+
+               FooterItem footerItemDone;
+               footerItemDone.Construct(IDA_FOOTER_DONE);
+               footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+               pFooter->AddItem(footerItemDone);
+
+               __pPresentationModel->InitializeContactList();
+
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       pFooter->SetItemEnabled(0, false);
+
+                       __pSearchBar->SetShowState(false);
+                       __pCheckLabel->SetShowState(false);
+                       __pSelectAll->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+               else
+               {
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+                       {
+                               Form* pForm = dynamic_cast<Form*>(GetParent());
+                               AppAssert(pForm);
+
+                               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+                               pForm->SetFocus();
+                       }
+
+                       __pListView->SetShowState(true);
+                       __pSelectAll->SetShowState(true);
+                       __pCheckLabel->SetShowState(true);
+
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                                       {
+                                               __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                                       }
+                               }
+                       }
+
+                       pFooter->SetItemEnabled(0, false);
+
+                       __pSearchBar->SetShowState(true);
+                       __pSelectAll->SetSelected(false);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+                       UpdateBottomLabel();
+
+                       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+                       __pListView->UpdateList();
+               }
+       }
+       else if (__isContactRemoved == false)
+       {
+               __pPresentationModel->InitializeContactList();
+               if( __pPresentationModel->GetContactCount() == 0)
+               {
+                       SceneManager* pSceneManager = SceneManager::GetInstance();
+                       pSceneManager->GoBackward(BackwardSceneTransition());
+                       return;
+               }
+               if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+               {
+                       Form* pForm = dynamic_cast<Form*>(GetParent());
+                       AppAssert(pForm);
+
+                       __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+                       pForm->SetFocus();
+               }
+               __pSelectAll->SetSelected(false);
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                               }
+                       }
+               }
+               UpdateBottomLabel();
+               __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+               __pListView->UpdateList();
+       }
+}
+
+void
+ContactListEditorPanel::OnCategoriesChanged(void)
+{
+}
+
+result
+ContactListEditorPanel::UpdateBottomLabel(void)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       int selectedCount = 0;
+       int fotterItemIndex = 1;
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               fotterItemIndex = 0;
+       }
+
+
+       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+       {
+               int itemCount = __pListView->GetItemCountAt(groupIndex);
+               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                       {
+                               selectedCount++;
+                       }
+               }
+       }
+
+       String selected = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       selected.Append(L" (");
+       selected.Append(selectedCount);
+       selected.Append(L")");
+       __pBottomLabel->SetText(selected);
+       __pBottomLabel->SetPosition(FloatPoint(0, pForm->GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+       __pBottomLabel->Invalidate(false);
+
+       Footer* pFooter = pForm->GetFooter();
+
+       if (selectedCount > 0 && __pBottomLabel->GetShowState() == false)
+       {
+               __pBottomLabel->SetShowState(true);
+               __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height - H_BOTTOM_LABEL);
+               __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height - H_BOTTOM_LABEL);
+               pFooter->SetItemEnabled(fotterItemIndex, true);
+       }
+       else if (selectedCount == 0 && __pBottomLabel->GetShowState() == true)
+       {
+               __pBottomLabel->SetShowState(false);
+               __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height + H_BOTTOM_LABEL);
+               __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height + H_BOTTOM_LABEL);
+               pFooter->SetItemEnabled(fotterItemIndex, false);
+       }
+
+       pFooter->Invalidate(true);
+
+       return E_SUCCESS;
+}
+
+void
+ContactListEditorPanel::ShowContactValuePopup(int groupIndex, int itemIndex)
+{
+       delete __pMultipleContactValuePopup;
+       __pMultipleContactValuePopup = new (std::nothrow) Popup();
+       __pMultipleContactValuePopup->Construct(true, Dimension(W_CONTACT_VALUE_POPUP, H_CONTACT_VALUE_POPUP));
+       __pMultipleContactValuePopup->SetTitleText(__pPresentationModel->GetName(groupIndex, itemIndex));
+       __pMultipleContactValuePopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pMultipleContactValuePopup->GetClientAreaBounds();
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, popupClientBounds.width, H_CONTACT_VALUE_POPUP_LIST_VIEW));
+       pListView->SetItemProvider(*__pContactValueListEvent);
+       pListView->AddListViewItemEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pListView);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((popupClientBounds.width - W_CLOSE_BUTTON) / 2, Y_CLOSE_BUTTON, W_CLOSE_BUTTON, H_CLOSE_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCancelButton->SetActionId(IDA_POPUP_CONTACT_VALUE_CLOSE);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pCancelButton);
+       __pMultipleContactValuePopup->SetShowState(true);
+       __pMultipleContactValuePopup->Show();
+}
+
+void
+ContactListEditorPanel::HideContactValuePopup(void)
+{
+       if (__pMultipleContactValuePopup != null)
+       {
+               __pMultipleContactValuePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+ContactListEditorPanel::ShowDeleteConfirmationPopup(void)
+{
+       if (__pDeleteConfirmationPopup == null)
+       {
+               __pDeleteConfirmationPopup = new (std::nothrow) Popup();
+               __pDeleteConfirmationPopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_POPUP));
+               __pDeleteConfirmationPopup->SetPropagatedKeyEventListener(this);
+
+               Rectangle popupClientBounds = __pDeleteConfirmationPopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_LABEL, W_DELETE_LABEL, H_DELETE_LABEL), ResourceManager::GetString(L"IDS_COM_POP_DELETE_Q"));
+               pLabel->SetTextConfig(FONT_SIZE_DELETE_CONFIRM, LABEL_TEXT_STYLE_NORMAL);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+               Button* pDeleteButton = new (std::nothrow) Button();
+               pDeleteButton->Construct(Rectangle(X_DELETE_LABEL + W_DELETE_BUTTON + W_POPUP_ITEM_GAP, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+               pDeleteButton->SetColor(BUTTON_STATUS_NORMAL, COLOR_DELETE_BUTTON_NORMAL);
+               pDeleteButton->SetColor(BUTTON_STATUS_PRESSED, COLOR_DELETE_BUTTON_PRESSED);
+               pDeleteButton->SetTextColor(COLOR_DELETE_BUTTON_TEXT);
+               pDeleteButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pDeleteButton->SetActionId(IDA_POPUP_DELETE_OK);
+               pDeleteButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pCancelButton->SetActionId(IDA_POPUP_DELETE_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pDeleteConfirmationPopup->AddControl(pLabel);
+               __pDeleteConfirmationPopup->AddControl(pDeleteButton);
+               __pDeleteConfirmationPopup->AddControl(pCancelButton);
+       }
+
+       __pDeleteConfirmationPopup->SetShowState(true);
+       __pDeleteConfirmationPopup->Show();
+}
+
+void
+ContactListEditorPanel::HideDeleteConfirmationPopup(void)
+{
+       if (__pDeleteConfirmationPopup != null)
+       {
+               __pDeleteConfirmationPopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+ContactListEditorPanel::ShowDeleteProgressPopup(void)
+{
+       if (__pDeleteProgressPopup != null)
+       {
+               delete __pDeleteProgressPopup;
+       }
+
+       __pDeleteProgressPopup = new (std::nothrow) Popup();
+       __pDeleteProgressPopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_PROGRESS_POPUP));
+       __pDeleteProgressPopup->AddWindowEventListener(*this);
+
+       Rectangle clientBounds = __pDeleteProgressPopup->GetClientAreaBounds();
+
+       Label* pLabelTitle = new (std::nothrow) Label();
+       pLabelTitle->Construct(Rectangle(0, Y_DELETE_POPUP_TITLE, clientBounds.width, H_DELETE_POPUP_ELEMENT), ResourceManager::GetString(L"IDS_PB_POP_DELETING_CONTACTS_ING"));
+       pLabelTitle->SetTextColor(COLOR_DELETE_POPUP_TEXT);
+       pLabelTitle->SetTextConfig(FONT_SIZE_DELETE_POPUP_TEXT, LABEL_TEXT_STYLE_BOLD);
+       pLabelTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       __pDeleteProgressPopup->AddControl(pLabelTitle);
+
+       Progress* pProgress = new (std::nothrow) Progress();
+       pProgress->Construct(Rectangle(0, Y_DELETE_POPUP_TITLE + H_DELETE_POPUP_ELEMENT, clientBounds.width, H_DELETE_POPUP_PROGRESS), 0, GetCheckedContactCounts());
+
+       __pDeleteProgressPopup->AddControl(pProgress);
+
+       Label* pLabelPercentage = new (std::nothrow) Label();
+       pLabelPercentage->Construct(Rectangle(0, pProgress->GetY() + pProgress->GetHeight(), clientBounds.width / 2, H_DELETE_POPUP_ELEMENT), Integer::ToString(pProgress->GetPercentComplete()) + L"%");
+       pLabelPercentage->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pLabelPercentage->SetTextColor(COLOR_DELETE_POPUP_TEXT);
+       pLabelPercentage->SetTextConfig(FONT_SIZE_DELETE_POPUP_TEXT, LABEL_TEXT_STYLE_NORMAL);
+
+       __pDeleteProgressPopup->AddControl(pLabelPercentage);
+
+       String currentOfTotal(Integer::ToString(pProgress->GetValue()) + L" / " + Integer::ToString(GetCheckedContactCounts()));
+       Label* pLabelTotal = new (std::nothrow) Label();
+       pLabelTotal->Construct(Rectangle(clientBounds.width / 2, pLabelPercentage->GetY(), clientBounds.width / 2, H_DELETE_POPUP_ELEMENT), currentOfTotal);
+       pLabelTotal->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
+       pLabelTotal->SetTextColor(COLOR_DELETE_POPUP_TEXT);
+       pLabelTotal->SetTextConfig(FONT_SIZE_DELETE_POPUP_TEXT, LABEL_TEXT_STYLE_NORMAL);
+
+       __pDeleteProgressPopup->AddControl(pLabelTotal);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((clientBounds.width - W_DELETE_POPUP_CANCEL_BUTTON) / 2, Y_DELETE_POPUP_CANCEL_BUTTON, W_DELETE_POPUP_CANCEL_BUTTON, H_DELETE_POPUP_CANCEL_BUTTON));
+       pCancelButton->SetText(ResourceManager::GetString("IDS_PB_SK_CANCEL"));
+       pCancelButton->SetActionId(IDA_POPUP_DELETE_PROGRESS_CANCEL);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pDeleteProgressPopup->AddControl(pCancelButton);
+       __pDeleteProgressPopup->Show();
+
+       __isContactRemoved = true;
+}
+
+void
+ContactListEditorPanel::HideDeleteProgressPopup(void)
+{
+       if (__pDeleteProgressPopup != null)
+       {
+               delete __pDeleteProgressPopup;
+               __pDeleteProgressPopup = null;
+       }
+       __isContactRemoved = false;
+
+       __pListView->UpdateList();
+       Invalidate(true);
+}
+
+void
+ContactListEditorPanel::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+       result r = pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+       AppLogDebug("[%s] The return result from SendAppControlResult(), AppCtrlResult value : %d.", GetErrorMessage(r), appCtrlResult);
+
+       UiApp::GetInstance()->Terminate();
+}
+
+void
+ContactListEditorPanel::ReturnMultipleValues(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               ArrayList* pValueList = new (std::nothrow) ArrayList();
+               pValueList->Construct();
+
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pValueList->Add(new (std::nothrow) String(*pValue));
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PHONE), pValueList);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pValueList->Add(new (std::nothrow) String(*pValue));
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_EMAIL), pValueList);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_ITEM_ID)
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                                       {
+                                               String contactId;
+                                               contactId.Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                                               pValueList->Add(new (std::nothrow) String(contactId));
+                                       }
+                               }
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), pValueList);
+               }
+               else
+               {
+                       delete pValueList;
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+                       return;
+               }
+
+               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+       }
+}
+
+void
+ContactListEditorPanel::ReturnResultFailed(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, null);
+}
+
+void
+ContactListEditorPanel::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListEditorPanel::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, pForm->GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+ContactListEditorPanel::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, pForm->GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+               if (SceneManager::GetInstance()->GetCurrentSceneId() == IDSCN_CONTACT_LIST_EDITOR)
+               {
+                       UpdateBottomLabel();
+               }
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+ContactListEditorPanel::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, pForm->GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+ContactListEditorPanel::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+       if (keypadAction == KEYPAD_ACTION_SEARCH)
+       {
+               __pSearchBar->HideKeypad();
+       }
+}
+
+void
+ContactListEditorPanel::OnWindowActivated (const Tizen::Ui::Window &source)
+{
+       __deleteContactTimer.Start(1);
+}
+
+void
+ContactListEditorPanel::OnWindowDeactivated (const Tizen::Ui::Window &source)
+{
+}
+
+void
+ContactListEditorPanel::OnTimerExpired(Tizen::Base::Runtime::Timer &timer)
+{
+       Progress* pProgress = static_cast<Progress *>(__pDeleteProgressPopup->GetControl(1));
+
+       pProgress->SetValue(pProgress->GetValue() + 1);
+       pProgress->Invalidate(false);
+
+       Label* pLabelPercentage = static_cast<Label *>(__pDeleteProgressPopup->GetControl(2));
+
+       pLabelPercentage->SetText(Integer::ToString(pProgress->GetPercentComplete()) + L"%");
+       pLabelPercentage->Invalidate(false);
+
+       Label* pLabelTotal = static_cast<Label *>(__pDeleteProgressPopup->GetControl(3));
+
+       String currentOfTotal = pLabelTotal->GetText();
+       currentOfTotal.Remove(0, Integer::ToString(pProgress->GetValue() - 1).GetLength());
+       currentOfTotal.Insert(Integer::ToString(pProgress->GetValue()), 0);
+       pLabelTotal->SetText(currentOfTotal);
+       pLabelTotal->Invalidate(false);
+
+       if (RemoveContactList() == E_SUCCESS)
+       {
+               __deleteContactTimer.Start(1);
+       }
+       else
+       {
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+               pSceneManager->GoBackward(BackwardSceneTransition());
+       }
+}
+
+void
+ContactListEditorPanel::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       GroupedListView* pList = static_cast<GroupedListView*>(&const_cast<Control&>(source));
+       if (pList != null)
+       {
+               pList->SetFocus();
+       }
+}
+
+void
+ContactListEditorPanel::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactListEditorPanel::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactListEditorPanel::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactListEditorPanel::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+bool
+ContactListEditorPanel::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactListEditorPanel::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pDeleteConfirmationPopup && __pDeleteConfirmationPopup->GetShowState() == true)
+               {
+                       HideDeleteConfirmationPopup();
+                       return true;
+               }
+               if (__pMultipleContactValuePopup && __pMultipleContactValuePopup->GetShowState() == true)
+               {
+                       HideContactValuePopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+ContactListEditorPanel::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactListEditorPanel::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
diff --git a/src/CtContactListItem.cpp b/src/CtContactListItem.cpp
new file mode 100644 (file)
index 0000000..4a162ae
--- /dev/null
@@ -0,0 +1,105 @@
+//
+// 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       CtContactListItem.cpp
+ * @brief      This is the implementation file for the ContactListItem class.
+ */
+
+#include "CtContactListItem.h"
+#include "CtContactsApp.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Social;
+using namespace Tizen::Ui::Controls;
+
+static const int W_THUMBNAIL_AREA = 134;
+static const int W_THUMBNAIL = 108;
+static const int H_THUMBNAIL = 108;
+static const int X_TEXT = 26;
+static const int Y_TEXT = 16;
+static const int H_TEXT = 80;
+
+static const unsigned int COLOR_ITEM_NORMAL = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_ITEM_PRESSED = Color32<255, 255, 255>::Value;
+
+ContactListItem::ContactListItem(const Tizen::Base::String name, Tizen::Graphics::Bitmap* pThumbnail)
+: __name(name)
+, __pThumbnail(pThumbnail)
+{
+}
+
+ContactListItem::~ContactListItem(void)
+{
+       delete __pThumbnail;
+}
+
+bool
+ContactListItem::OnDraw(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& rect, Tizen::Ui::Controls::ListItemDrawingStatus itemStatus)
+{
+       result r = E_SUCCESS;
+       bool ret = true;
+       TextElement* pNameElement = null;
+       EnrichedText* pEnrichedText = null;
+       Font font;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       font.Construct(FONT_STYLE_PLAIN, pContactsApp->GetFontSize());
+       canvas.SetFont(font);
+
+       if (__name.IsEmpty())
+       {
+               return false;
+       }
+
+       pNameElement = new (std::nothrow) TextElement();
+       pNameElement->Construct(__name);
+       pNameElement->SetFont(font);
+
+       if (itemStatus == LIST_ITEM_DRAWING_STATUS_NORMAL)
+       {
+               pNameElement->SetTextColor(COLOR_ITEM_NORMAL);
+       }
+       else if (itemStatus == LIST_ITEM_DRAWING_STATUS_PRESSED)
+       {
+               pNameElement->SetTextColor(COLOR_ITEM_PRESSED);
+       }
+
+       pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(Dimension(rect.width - (rect.x + X_TEXT + W_THUMBNAIL_AREA), H_TEXT + pContactsApp->GetFontHeightOffset()));
+       pEnrichedText->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedText->SetTextWrapStyle(TEXT_WRAP_CHARACTER_WRAP);
+       pEnrichedText->SetTextAbbreviationEnabled(true);
+       pEnrichedText->Add(*pNameElement);
+
+       r = canvas.DrawText(Point(rect.x + X_TEXT, Y_TEXT), *pEnrichedText);
+       TryCatch(r == E_SUCCESS, ret = false, "Unable to draw text.");
+
+       if (__pThumbnail != null)
+       {
+               r = canvas.DrawBitmap(Rectangle(rect.width - (W_THUMBNAIL_AREA), (pContactsApp->GetListItemSingleLineHeight() - H_THUMBNAIL)/2, W_THUMBNAIL, H_THUMBNAIL), *__pThumbnail);
+               TryCatch(r == E_SUCCESS, ret = false, "Unable to draw a thumbnail.");
+       }
+
+CATCH:
+
+       pEnrichedText->RemoveAllTextElements(true);
+       delete pEnrichedText;
+
+       return ret;
+}
diff --git a/src/CtContactListPanel.cpp b/src/CtContactListPanel.cpp
new file mode 100644 (file)
index 0000000..cdd3fa2
--- /dev/null
@@ -0,0 +1,1508 @@
+//
+// 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       CtContactListPanel.cpp
+ * @brief      This is the implementation file for the ContactListPanel class.
+ */
+
+#include <FSocial.h>
+#include "CtAccountListItemProvider.h"
+#include "CtContactListItem.h"
+#include "CtContactListPanel.h"
+#include "CtContactListPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtSearchListEventListener.h"
+#include "CtSearchListItem.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+
+static const int IDA_FOOTER_CREATE = 1;
+static const int IDA_MORE_DELETE = 2;
+static const int IDA_MORE_SETTING = 3;
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+static const int IDA_POPUP_DELETE_OK = 30;
+static const int IDA_POPUP_DELETE_CANCEL = 31;
+static const int IDA_POPUP_VIEW_OK = 32;
+static const int IDA_POPUP_VIEW_CANCEL = 33;
+static const int IDA_POPUP_CONTACT_VALUE_CLOSE = 34;
+static const int IDA_LIST_ELEMENT_DELETE = 40;
+static const int IDA_LIST_ELEMENT_CALL = 41;
+static const int IDA_LIST_ELEMENT_MESSAGE = 42;
+static const int IDA_LIST_ELEMENT_VIDEO_CALL = 43;
+
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+static const int H_GROUP_ITEM = 76;
+static const int W_INITIAL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int H_SEARCHBAR = 86;
+static const int W_ACCOUNT_POPUP = 600;
+static const int H_ACCOUNT_POPUP = 700;
+static const int H_ACCOUNT_POPUP_BUTTON = 80;
+static const int W_CONTACT_VALUE_POPUP = 688;
+static const int H_CONTACT_VALUE_POPUP = 532;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 338;
+static const int H_CLOSE_BUTTON = 74;
+static const int Y_CLOSE_BUTTON = 358;
+static const int W_CLOSE_BUTTON = 394;
+
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_NORMAL = Color32<213, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_TEXT = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_NORMAL = Color32<208, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_TEXT = Color32<248, 246, 239>::Value;
+
+static const int LIST_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int LIST_VIEW_MASK = 0xFFFF;
+
+static const wchar_t* IDB_NO_CONTENTS = L"00_Nocontents_text.png";
+
+static const wchar_t* INPUT_KEY_MESSAGE_TYPE = L"http://tizen.org/appcontrol/data/message/type";
+static const wchar_t* INPUT_KEY_CALL_TYPE = L"http://tizen.org/appcontrol/data/call/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TO = L"http://tizen.org/appcontrol/data/to";
+static const wchar_t* INPUT_TYPE_VIDEO = L"video";
+static const wchar_t* INPUT_TYPE_VOICE = L"voice";
+static const wchar_t* INPUT_TYPE_SMS = L"sms";
+static const wchar_t* INPUT_URI_TEL = L"tel:";
+
+ContactListPanel::ContactListPanel(void)
+: __pAppControl(null)
+, __pArgList(null)
+, __pListView(null)
+, __pSearchListView(null)
+, __pAccountPopup(null)
+, __pDeletePopup(null)
+, __pMultipleContactValuePopup(null)
+, __pSearchBar(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pOptionMenu(null)
+, __pAccountListEvent(null)
+, __pPresentationModel(null)
+, __pContactValueListEvent(null)
+, __pSearchListEvent(null)
+, __sweptItemIndex(0)
+, __selectedIndex(-1)
+{
+}
+
+ContactListPanel::~ContactListPanel(void)
+{
+}
+
+void
+ContactListPanel::Initialize(void)
+{
+       Construct(Rectangle(0, 0, W_INITIAL_PANEL, H_INITIAL_PANEL));
+}
+
+result
+ContactListPanel::OnInitializing(void)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = ContactListPresentationModel::GetInstance();
+
+       __pListView = new (std::nothrow) GroupedListView();
+       __pListView->Construct(Rectangle(0, H_SEARCHBAR, clientBounds.width, clientBounds.height - H_SEARCHBAR), GROUPED_LIST_VIEW_STYLE_INDEXED, true, true);
+       __pListView->SetItemProvider(*this);
+       __pListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pListView->AddFastScrollListener(*this);
+       __pListView->AddGroupedListViewItemEventListener(*this);
+       __pListView->AddTouchEventListener(*this);
+
+       AddControl(__pListView);
+
+       __pSearchBar = new (std::nothrow) SearchBar();
+       __pSearchBar->Construct(Rectangle(0, 0, clientBounds.width, H_SEARCHBAR));
+       __pSearchBar->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_SEARCH"));
+       __pSearchBar->AddSearchBarEventListener(*this);
+       __pSearchBar->AddFocusEventListener(*this);
+       __pSearchBar->AddTextEventListener(*this);
+       __pSearchBar->AddKeypadEventListener(*this);
+       __pSearchBar->SetContentAreaSize(Dimension(0, 0));
+
+       __pSearchListEvent = new (std::nothrow) SearchListEventListener(LIST_ANNEX_STYLE_NORMAL, __pPresentationModel);
+
+       AddControl(__pSearchBar);
+
+       __pSearchListView = new (std::nothrow) GroupedListView();
+       __pSearchListView->Construct(Rectangle(0, H_SEARCHBAR, clientBounds.width, clientBounds.height - H_SEARCHBAR), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
+       __pSearchListView->SetItemProvider(*__pSearchListEvent);
+       __pSearchListView->AddGroupedListViewItemEventListener(*this);
+       __pSearchListView->AddTouchEventListener(*this);
+       __pSearchListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pSearchListView->SetShowState(false);
+       AddControl(__pSearchListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_CONTENTS);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, clientBounds.width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_SK_DELETE"), IDA_MORE_DELETE);
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_SETTINGS"), IDA_MORE_SETTING);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+       return E_SUCCESS;
+}
+
+result
+ContactListPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       if (__pArgList != null)
+       {
+               __pArgList->RemoveAll(true);
+               delete __pArgList;
+       }
+       if (__pDeletePopup != null)
+       {
+               delete __pDeletePopup;
+       }
+       delete __pAppControl;
+       delete __pAccountPopup;
+       delete __pSearchListEvent;
+       delete __pAccountListEvent;
+       delete __pOptionMenu;
+       delete __pMultipleContactValuePopup;
+
+       return r;
+}
+
+void
+ContactListPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+                       {
+                               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+                       }
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+               }
+               break;
+       case IDA_HEADER_GROUPS:
+               {
+                       if (__pListView->IsEnabled() == false)
+                       {
+                               __pListView->SetEnabled(true);
+                       }
+
+                       if (__pSearchListView->IsEnabled() == false)
+                       {
+                               __pSearchListView->SetEnabled(true);
+                       }
+
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+                       {
+                               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+                       }
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_HEADER_FAVORITES:
+               {
+                       if (__pListView->IsEnabled() == false)
+                       {
+                               __pListView->SetEnabled(true);
+                       }
+
+                       if (__pSearchListView->IsEnabled() == false)
+                       {
+                               __pSearchListView->SetEnabled(true);
+                       }
+
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+                       {
+                               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+                       }
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                       }
+               }
+               break;
+       case IDA_FOOTER_CREATE:
+               {
+                       if (__pListView->IsEnabled() == false)
+                       {
+                               __pListView->SetEnabled(true);
+                       }
+
+                       if (__pSearchListView->IsEnabled() == false)
+                       {
+                               __pSearchListView->SetEnabled(true);
+                       }
+
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+                       {
+                               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+                       }
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+               }
+               break;
+       case IDA_MORE_DELETE:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+               }
+               break;
+       case IDA_MORE_SETTING:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SETTINGS, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+               }
+               break;
+       case IDA_POPUP_DELETE_OK:
+               {
+                       int groupIndex = (__sweptItemIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+                       int itemIndex = __sweptItemIndex & LIST_VIEW_MASK;
+
+                       __pPresentationModel->RemoveContact(groupIndex, itemIndex);
+                       HideDeletePopup();
+               }
+               break;
+       case IDA_POPUP_DELETE_CANCEL:
+               {
+                       HideDeletePopup();
+               }
+               break;
+       case IDA_POPUP_VIEW_OK:
+               {
+
+               }
+               break;
+       case IDA_POPUP_VIEW_CANCEL:
+               {
+                       HideAccountPopup();
+               }
+               break;
+       case IDA_POPUP_CONTACT_VALUE_CLOSE:
+               {
+                       HideContactValuePopup();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactListPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                  const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Form *pEventForm = const_cast<Form*>(pForm);
+       pEventForm->SetFormMenuEventListener(this);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->AddActionEventListener(*this);
+       pForm->SetFormMenuEventListener(null);
+
+       __pPresentationModel->InitializeContactList();
+
+       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+       __pListView->UpdateList();
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK || pContactsApp->GetOperationId() == OPERATION_ID_EDIT)
+       {
+               pFooter->SetShowState(false);
+               SetBounds(Rectangle(0, 0, pForm->GetClientAreaBounds().width, pForm->GetClientAreaBounds().height));
+               __pListView->SetSize(__pListView->GetWidth(), pForm->GetClientAreaBounds().height - __pSearchBar->GetHeight());
+               __pSearchListView->SetSize(__pSearchListView->GetWidth(), pForm->GetClientAreaBounds().height - __pSearchBar->GetHeight());
+               Invalidate(true);
+
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+               else
+               {
+                       __pSearchBar->SetShowState(true);
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+
+               if (pArgs != null)
+               {
+                       __pArgList = new (std::nothrow) ArrayList();
+                       __pArgList->Construct();
+
+                       for (int i = 0; i < pArgs->GetCount(); i++)
+                       {
+                               __pArgList->Add(new (std::nothrow) String(*static_cast<String*>(pArgs->GetAt(i))));
+                       }
+               }
+       }
+       else
+       {
+               FooterItem footerItemCreate;
+               footerItemCreate.Construct(IDA_FOOTER_CREATE);
+               footerItemCreate.SetText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+               
+               int count = pFooter->GetItemCount();
+               if (count == 0)
+               {
+                       pFooter->AddItem(footerItemCreate);
+               }
+               else if (count == 1)
+               {
+                       pFooter->SetItemAt(0, footerItemCreate);
+               }
+               else
+               {
+                       pFooter->SetItemAt(0, footerItemCreate);
+                       pFooter->RemoveItemAt(1);
+                       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+               }
+               pFooter->SetItemEnabled(0,true);
+
+               if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       pForm->SetFormMenuEventListener(this);
+                       __pSearchBar->SetShowState(true);
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT && __pSearchBar->GetTextLength() != 0)
+                       {
+                               String searchText = __pSearchBar->GetText();
+                               searchText.Trim();
+
+                               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+                               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+                               }
+                               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+                               }
+                               else
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+                               }
+                               __pSearchListView->UpdateList();
+                               __pListView->SetShowState(false);
+                               __pSearchListView->SetShowState(true);
+                       }
+                       else
+                       {
+                               __pListView->SetShowState(true);
+                               __pSearchListView->SetShowState(false);
+                       }
+               }
+               else
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pSearchListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+               pContactsApp->AddContactsAppChangeEventListener(*this);
+       }
+
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       SettingInfo::AddSettingEventListener(*this);
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+ContactListPanel::OnSettingChanged(Tizen::Base::String &key)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to get ContactsApp instance.");
+
+       if (key.Equals(SETTING_KEY_NAME_ORDER, false) == true)
+       {
+               __pPresentationModel->InitializeContactList();
+
+               __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+               __pListView->UpdateList();
+
+               if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+               {
+                       String searchText = __pSearchBar->GetText();
+                       searchText.Trim();
+
+                       if (searchText.IsEmpty() == false)
+                       {
+                               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+                               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+                               }
+                               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+                               }
+                               else
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+                               }
+                               __pSearchListView->UpdateList();
+                       }
+               }
+       }
+}
+
+void
+ContactListPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Form *pEventForm = const_cast<Form*>(pForm);
+       pEventForm->SetFormMenuEventListener(null);
+
+       if (pForm->IsFooterVisible() == false)
+       {
+               pForm->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+       }
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+       SettingInfo::RemoveSettingEventListener(*this);
+
+       delete __pAppControl;
+       __pAppControl = null;
+}
+
+int
+ContactListPanel::GetGroupCount(void)
+{
+       return __pPresentationModel->GetKeyCount();
+}
+
+int
+ContactListPanel::GetItemCount(int groupIndex)
+{
+       return __pPresentationModel->GetContactCount(groupIndex);
+}
+
+Tizen::Ui::Controls::ListItemBase*
+ContactListPanel::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String name;
+       Bitmap* pThumbnail = null;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), LIST_ANNEX_STYLE_NORMAL);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth, pContactsApp->GetListItemSingleLineHeight()), 0, *(static_cast<ICustomElement *>(pCustomElement)));
+
+       if (pContactsApp->GetOperationId().IsEmpty() == false)
+       {
+               return pItem;
+       }
+
+       bool isCallEnabled = true;
+       bool isMessageEnabled = true;
+       if (__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty())
+       {
+               isCallEnabled = false;
+       }
+
+       if ((__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty()) && (__pPresentationModel->GetDefaultEmail(groupIndex, itemIndex).IsEmpty()))
+       {
+               isMessageEnabled = false;
+       }
+
+       ListContextItem* pItemContext = new (std::nothrow) ListContextItem();
+       pItemContext->Construct();
+       pItemContext->AddElement(IDA_LIST_ELEMENT_CALL, ResourceManager::GetString(L"IDS_COM_BODY_CALL"), isCallEnabled);
+       pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), isMessageEnabled);
+#if __SUPPORT_VIDEO_CALL
+       pItemContext->AddElement(IDA_LIST_ELEMENT_VIDEO_CALL, ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), isCallEnabled);
+#endif
+       pItemContext->AddElement(IDA_LIST_ELEMENT_DELETE, ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+       pItemContext->SetElementBackgroundColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL, COLOR_DELETE_ELEMENT_NORMAL);
+       pItemContext->SetElementBackgroundColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED, COLOR_DELETE_ELEMENT_PRESSED);
+       pItemContext->SetElementTextColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL, COLOR_DELETE_ELEMENT_TEXT);
+
+       pItem->SetContextItem(pItemContext);
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::GroupItem*
+ContactListPanel::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(__pPresentationModel->GetKey(groupIndex), null);
+
+       return pItem;
+}
+
+bool
+ContactListPanel::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
+       pCustomItem->RemoveAllElements();
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+ContactListPanel::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+ContactListPanel::OnContactsChanged(void)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       HideContactValuePopup();
+       HideDeletePopup();
+
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+               pForm->SetFocus();
+       }
+
+       __pPresentationModel->InitializeContactList();
+
+       if (__pPresentationModel->GetContactCount() > 0)
+       {
+               int groupIndex;
+               int itemIndex;
+
+               pForm->SetFormMenuEventListener(this);
+               __pSearchBar->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pEmptyImageLabel->SetShowState(false);
+               __pEmptyCommentLabel->SetShowState(false);
+
+               __pListView->GetTopDrawnItemIndex(groupIndex, itemIndex);
+               __pListView->UpdateList();
+               __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+               __pListView->Invalidate(true);
+               __pListView->ScrollToItem(groupIndex, itemIndex);
+       }
+       else
+       {
+               pForm->SetFormMenuEventListener(null);
+               __pSearchBar->SetShowState(false);
+               __pListView->SetShowState(false);
+               __pEmptyImageLabel->SetShowState(true);
+               __pEmptyCommentLabel->SetShowState(true);
+       }
+}
+
+void
+ContactListPanel::OnCategoriesChanged(void)
+{
+}
+
+void
+ContactListPanel::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode)
+{
+       if (mode == SEARCH_BAR_MODE_NORMAL)
+       {
+               __pListView->SetShowState(true);
+               __pSearchListView->SetShowState(false);
+               __pPresentationModel->ResetSearchedContactList();
+               __pSearchListView->UpdateList();
+               __pListView->UpdateList();
+       }
+       else
+       {
+               //[TODO] to restore swept item.
+               // need to be fixed with better idea..
+               Rectangle bounds = __pListView->GetBounds();
+               __pListView->SetBounds(bounds.x, bounds.y, bounds.width, bounds.height + 1);
+               __pListView->Invalidate(true);
+               __pListView->SetBounds(bounds);
+       }
+}
+
+void
+ContactListPanel::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+       int index = 0;
+
+       if (listView.Equals(*__pSearchListView) == true)
+       {
+               __pPresentationModel->GetItemMainIndex(itemIndex, groupIndex, itemIndex);
+       }
+
+       index |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+       index |= itemIndex;
+
+       __sweptItemIndex = index;
+
+       switch (elementId)
+       {
+       case IDA_LIST_ELEMENT_DELETE:
+               {
+                       ShowDeletePopup();
+               }
+               break;
+       case IDA_LIST_ELEMENT_CALL:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                       LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, phoneNumber, INPUT_TYPE_VOICE);
+               }
+               break;
+       case IDA_LIST_ELEMENT_MESSAGE:
+               {
+                       if (!(__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty()))
+                       {
+                               String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                               int index = -1;
+                               phoneNumber.IndexOf(DELIMITER_SEMICOLON, 0, index);
+                               if (index >= 0)
+                               {
+                                       phoneNumber.SubString(0, index, phoneNumber);
+                               }
+                               index = -1;
+                               phoneNumber.IndexOf(DELIMITER_COMMA, 0, index);
+                               if (index >= 0)
+                               {
+                                       phoneNumber.SubString(0, index, phoneNumber);
+                               }
+                               LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, phoneNumber, INPUT_TYPE_SMS);
+                       }
+                       else if (!(__pPresentationModel->GetDefaultEmail(groupIndex, itemIndex).IsEmpty()))
+                       {
+                               String emailId = __pPresentationModel->GetDefaultEmail(groupIndex, itemIndex);
+                               LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, emailId, null);
+                       }
+               }
+               break;
+       case IDA_LIST_ELEMENT_VIDEO_CALL:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                       LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, phoneNumber, INPUT_TYPE_VIDEO);
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactListPanel::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       
+       if (listView.Equals(*__pSearchListView) == true)
+       {
+               __pPresentationModel->GetItemMainIndex(itemIndex, groupIndex, itemIndex);
+       }
+
+       __selectedIndex = 0;
+       __selectedIndex |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+       __selectedIndex |= itemIndex;
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               IList* pList = null;
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+
+                       if (pList == null)
+                       {
+                               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+                       }
+                       else
+                       {
+                               if (pList->GetCount() > 1)
+                               {
+                                       __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                       ShowContactValuePopup(groupIndex, itemIndex);
+                               }
+                               else if (pList->GetCount() == 1)
+                               {
+                                       AddContactValueOnList(pList, CONTACT_KEY_PHONE, 0, pReturnValue);
+
+                                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                                       delete pList;
+                               }
+                       }
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+
+                       if (pList == null)
+                       {
+                               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+                       }
+                       else
+                       {
+                               if (pList->GetCount() > 1)
+                               {
+                                       __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                       ShowContactValuePopup(groupIndex, itemIndex);
+                               }
+                               else if (pList->GetCount() == 1)
+                               {
+                                       AddContactValueOnList(pList, CONTACT_KEY_EMAIL, 0, pReturnValue);
+
+                                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                                       delete pList;
+                               }
+                       }
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_ITEM_ID)
+               {
+                       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       RecordId contactId = __pPresentationModel->GetContactId(groupIndex, itemIndex);
+                       if (contactId == INVALID_RECORD_ID)
+                       {
+                               appCtrlResult = APP_CTRL_RESULT_FAILED;
+                       }
+                       else
+                       {
+                               String contactId;
+                               ArrayList* pValueList = new (std::nothrow) ArrayList();
+                               pValueList->Construct();
+
+                               contactId.Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                               pValueList->Add(new (std::nothrow) String(contactId));
+
+                               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), pValueList);
+                       }
+
+                       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_VCARD)
+               {
+                       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       String vCardPath = __pPresentationModel->ExportToVcard(groupIndex, itemIndex);
+
+                       if (vCardPath.IsEmpty())
+                       {
+                               appCtrlResult = APP_CTRL_RESULT_FAILED;
+                       }
+                       else
+                       {
+                               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PATH), new (std::nothrow) String(vCardPath));
+                       }
+
+                       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+               }
+
+               delete pReturnValue;
+       }
+       else if (pContactsApp->GetOperationId() == OPERATION_ID_EDIT)
+       {
+               ArrayList* pArgList = null;
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               if (__pArgList != null)
+               {
+                       pArgList = new (std::nothrow) ArrayList();
+                       pArgList->Construct();
+
+                       for (int i = 0; i < __pArgList->GetCount(); i++)
+                       {
+                               pArgList->Add(new (std::nothrow) String(*static_cast<String*>(__pArgList->GetAt(i))));
+                       }
+
+                       String* pContactId = new (std::nothrow) String(RETURN_TYPE_ITEM_ID);
+                       pContactId->Append(DELIMITER);
+                       pContactId->Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                       pArgList->InsertAt(pContactId, 0);
+
+                       __pArgList->RemoveAll(true);
+               }
+
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgList);
+       }
+       else
+       {
+               ArrayList* pContactId = new (std::nothrow) ArrayList();
+               pContactId->Construct();
+
+               pContactId->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetContactId(groupIndex, itemIndex))));
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_DETAILS, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pContactId);
+       }
+}
+
+void
+ContactListPanel::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+ContactListPanel::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+
+}
+
+void
+ContactListPanel::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       IList* pList = null;
+       int groupIndex = (__selectedIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+       int itemIndex = __selectedIndex & LIST_VIEW_MASK;
+       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+
+       HashMap* pReturnValue = new (std::nothrow) HashMap();
+       pReturnValue->Construct();
+
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+               if (pList == null)
+               {
+                       appCtrlResult = APP_CTRL_RESULT_FAILED;
+               }
+               else
+               {
+                       AddContactValueOnList(pList, CONTACT_KEY_PHONE, index, pReturnValue);
+               }
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+
+               pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+               if (pList == null)
+               {
+                       appCtrlResult = APP_CTRL_RESULT_FAILED;
+               }
+               else
+               {
+                       AddContactValueOnList(pList, CONTACT_KEY_EMAIL, index, pReturnValue);
+               }
+       }
+       delete pList;
+
+       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+}
+
+void
+ContactListPanel::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+
+}
+
+void
+ContactListPanel::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       String searchText = __pSearchBar->GetText();
+       searchText.Trim();
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+       }
+       else
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+       }
+
+       if (searchText.GetLength() != 0)
+       {
+               __pSearchListView->SetShowState(true);
+               __pListView->SetShowState(false);
+       }
+       else
+       {
+               __pSearchListView->SetShowState(false);
+               __pListView->SetShowState(true);
+       }
+
+       __pSearchListView->UpdateList();
+}
+
+void
+ContactListPanel::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListPanel::ShowDeletePopup(void)
+{
+       if (__pDeletePopup == null)
+       {
+               __pDeletePopup = new (std::nothrow) Popup();
+               __pDeletePopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_POPUP));
+               __pDeletePopup->SetPropagatedKeyEventListener(this);
+
+               Rectangle popupClientBounds = __pDeletePopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_LABEL, W_DELETE_LABEL, H_DELETE_LABEL), ResourceManager::GetString(L"IDS_COM_POP_DELETE_Q"));
+               pLabel->SetTextConfig(FONT_SIZE_DELETE_CONFIRM, LABEL_TEXT_STYLE_NORMAL);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+               Button* pDeleteButton = new (std::nothrow) Button();
+               pDeleteButton->Construct(Rectangle(X_DELETE_LABEL + W_DELETE_BUTTON + W_POPUP_ITEM_GAP, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+               pDeleteButton->SetColor(BUTTON_STATUS_NORMAL, COLOR_DELETE_BUTTON_NORMAL);
+               pDeleteButton->SetColor(BUTTON_STATUS_PRESSED, COLOR_DELETE_BUTTON_PRESSED);
+               pDeleteButton->SetTextColor(COLOR_DELETE_BUTTON_TEXT);
+               pDeleteButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pDeleteButton->SetActionId(IDA_POPUP_DELETE_OK);
+               pDeleteButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pCancelButton->SetActionId(IDA_POPUP_DELETE_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pDeletePopup->AddControl(pLabel);
+               __pDeletePopup->AddControl(pDeleteButton);
+               __pDeletePopup->AddControl(pCancelButton);
+       }
+
+       __pDeletePopup->SetShowState(true);
+       __pDeletePopup->Show();
+}
+
+void
+ContactListPanel::HideDeletePopup(void)
+{
+       if (__pDeletePopup != null)
+       {
+               __pDeletePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+ContactListPanel::ShowAccountPopup(void)
+{
+       if (__pAccountListEvent != null)
+       {
+               delete __pAccountListEvent;
+               __pAccountListEvent = null;
+       }
+
+       if (__pAccountPopup != null)
+       {
+               delete __pAccountPopup;
+               __pAccountPopup = null;
+       }
+
+       if (__pAccountPopup == null)
+       {
+               __pAccountPopup = new (std::nothrow) Popup();
+               __pAccountPopup->Construct(true, Dimension(W_ACCOUNT_POPUP, H_ACCOUNT_POPUP));
+               __pAccountPopup->SetTitleText(ResourceManager::GetString(L"IDS_PB_OPT_VIEW"));
+
+               Rectangle popupClientBounds = __pAccountPopup->GetClientAreaBounds();
+
+               ListView* pAccountListView = new (std::nothrow) ListView();
+               pAccountListView->Construct(Rectangle(0, 0, popupClientBounds.width, popupClientBounds.height - H_ACCOUNT_POPUP_BUTTON));
+
+               __pAccountListEvent = new (std::nothrow) AccountListItemProvider(pAccountListView, __pPresentationModel);
+
+               pAccountListView->SetItemProvider(*__pAccountListEvent);
+
+               __pAccountPopup->AddControl(pAccountListView);
+
+               Button* pViewButton = new (std::nothrow) Button();
+               pViewButton->Construct(Rectangle(0, popupClientBounds.height - H_ACCOUNT_POPUP_BUTTON, popupClientBounds.width / 2 - W_POPUP_ITEM_GAP, H_ACCOUNT_POPUP_BUTTON),
+                                                                                                       ResourceManager::GetString(L"IDS_PB_OPT_VIEW"));
+               pViewButton->SetActionId(IDA_POPUP_VIEW_OK);
+               pViewButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(popupClientBounds.width / 2 + W_POPUP_ITEM_GAP, popupClientBounds.height - H_ACCOUNT_POPUP_BUTTON,
+                                                                                                       popupClientBounds.width / 2 - W_POPUP_ITEM_GAP, H_ACCOUNT_POPUP_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetActionId(IDA_POPUP_VIEW_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pAccountPopup->AddControl(pViewButton);
+               __pAccountPopup->AddControl(pCancelButton);
+       }
+
+       __pAccountPopup->SetShowState(true);
+       __pAccountPopup->Show();
+}
+
+void
+ContactListPanel::HideAccountPopup(void)
+{
+       delete __pAccountPopup;
+       __pAccountPopup = null;
+
+       Invalidate(true);
+}
+
+void
+ContactListPanel::OnFastScrollIndexSelected (Tizen::Ui::Control& source, Tizen::Base::String& index)
+{
+       __pListView->ScrollToItem(__pPresentationModel->GetKeyIndex(index), -1);
+       __pListView->Invalidate(false);
+}
+
+void
+ContactListPanel::OnFocusGained(const Tizen::Ui::Control& source)
+{
+       if (source.Equals(*__pSearchBar))
+       {
+               if (__pListView->GetShowState() == true )
+               {
+                       int groupCount   = __pPresentationModel->GetKeyCount();
+                       bool isContextItemOpenend = false;
+
+                       for (int i = 0; i < groupCount; i++)
+                       {
+                               int contactCount = __pPresentationModel->GetContactCount(i);
+                               for (int j = 0; j < contactCount; j++)
+                               {
+                                       if (__pListView->IsContextItemOpened(i, j) == true)
+                                       {
+                                               isContextItemOpenend = true;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (isContextItemOpenend == true)
+                       {
+                               __pListView->UpdateList();
+                       }
+               }
+               else if (__pSearchListView->GetShowState() == true )
+               {
+                       int groupCount   = 0;
+                       bool isContextItemOpenend = false;
+
+                       if (__pSearchListEvent == null)
+                       {
+                               return;
+                       }
+                       groupCount   = __pSearchListEvent->GetGroupCount();
+                       for (int i = 0; i < groupCount; i++)
+                       {
+                               int contactCount = __pSearchListEvent->GetItemCount(i);
+                               for (int j = 0; j < contactCount; j++)
+                               {
+                                       if (__pSearchListView->IsContextItemOpened(i, j) == true)
+                                       {
+                                               isContextItemOpenend = true;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (isContextItemOpenend == true)
+                       {
+                               __pSearchListView->UpdateList();
+                       }
+               }
+       }
+}
+
+void
+ContactListPanel::OnFocusLost(const Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListPanel::ShowContactValuePopup(int groupIndex, int itemIndex)
+{
+       delete __pMultipleContactValuePopup;
+       __pMultipleContactValuePopup = new (std::nothrow) Popup();
+       __pMultipleContactValuePopup->Construct(true, Dimension(W_CONTACT_VALUE_POPUP, H_CONTACT_VALUE_POPUP));
+       __pMultipleContactValuePopup->SetTitleText(__pPresentationModel->GetName(groupIndex, itemIndex));
+       __pMultipleContactValuePopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pMultipleContactValuePopup->GetClientAreaBounds();
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, popupClientBounds.width, H_CONTACT_VALUE_POPUP_LIST_VIEW));
+       pListView->SetItemProvider(*__pContactValueListEvent);
+       pListView->AddListViewItemEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pListView);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((popupClientBounds.width - W_CLOSE_BUTTON) / 2, Y_CLOSE_BUTTON, W_CLOSE_BUTTON, H_CLOSE_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCancelButton->SetActionId(IDA_POPUP_CONTACT_VALUE_CLOSE);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pCancelButton);
+       __pMultipleContactValuePopup->SetShowState(true);
+       __pMultipleContactValuePopup->Show();
+}
+
+void
+ContactListPanel::HideContactValuePopup(void)
+{
+       if (__pMultipleContactValuePopup != null)
+       {
+               __pMultipleContactValuePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+ContactListPanel::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+       result r = pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+       AppLogDebug("[%s] The return result from SendAppControlResult(), AppCtrlResult value : %d.", GetErrorMessage(r), appCtrlResult);
+
+       UiApp::GetInstance()->Terminate();
+}
+
+void
+ContactListPanel::AddContactValueOnList(const Tizen::Base::Collection::IList* pList, const Tizen::Base::String& keyType, int index, Tizen::Base::Collection::HashMap* pReturnValue)
+{
+       int blankIndex = 0;
+
+       String value(*(static_cast<const String *>(pList->GetAt(index))));
+       value.LastIndexOf(CHARACTER_SPACE, value.GetLength()-1, blankIndex);
+       value.Remove(0, blankIndex + 1);
+
+       ArrayList* pValueList = new (std::nothrow) ArrayList();
+       pValueList->Construct();
+       pValueList->Add(new (std::nothrow) String(value));
+
+       pReturnValue->Add(new (std::nothrow) String(keyType), pValueList);
+}
+
+result
+ContactListPanel::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& argument, const Tizen::Base::String& type)
+{
+       result r = E_SUCCESS;
+
+       if (__pAppControl != null)
+       {
+               return E_FAILURE;
+       }
+
+       String uri;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)))
+       {
+               uri.Append(INPUT_URI_TEL);
+               uri.Append(argument);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_CALL_TYPE), new (std::nothrow) String(type));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TO), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TYPE), new (std::nothrow) String(type));
+       }
+
+       __pAppControl = AppManager::FindAppControlN(appId, operationId);
+       if (__pAppControl != null)
+       {
+               r = __pAppControl->Start(&uri, null, &extraData, null);
+               if (IsFailed(r))
+               {
+                       AppLogDebug("[%s] Unable to launch app control", GetErrorMessage(r));
+               }
+               else
+               {
+                       if (__pListView->GetShowState() == true)
+                       {
+                               __pListView->SetEnabled(false);
+                       }
+
+                       if (__pSearchListView->GetShowState() == true)
+                       {
+                               __pSearchListView->SetEnabled(false);
+                       }
+               }
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
+
+void
+ContactListPanel::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListPanel::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, clientBounds.width, clientBounds.height - H_SEARCHBAR));
+}
+
+void
+ContactListPanel::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, clientBounds.width, clientBounds.height - H_SEARCHBAR));
+}
+
+void
+ContactListPanel::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, clientBounds.width, clientBounds.height - H_SEARCHBAR));
+}
+
+void
+ContactListPanel::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+       if (keypadAction == KEYPAD_ACTION_SEARCH)
+       {
+               __pSearchBar->HideKeypad();
+       }
+}
+
+void
+ContactListPanel::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       if (__pListView->GetShowState() == true)
+       {
+               __pListView->SetFocus();
+       }
+       else if (__pSearchListView->GetShowState() == true)
+       {
+               __pSearchListView->SetFocus();
+       }
+
+       if(__pPresentationModel->GetContactCount() > 0)
+       {
+               __pOptionMenu->SetShowState(true);
+               __pOptionMenu->Show();
+       }
+}
+
+void
+ContactListPanel::OnForeground(void)
+{
+       AppLogDebug("OnForeground");
+       delete __pAppControl;
+       __pAppControl = null;
+
+       if (__pListView->IsEnabled() == false)
+       {
+               __pListView->SetEnabled(true);
+       }
+
+       if (__pSearchListView->IsEnabled() == false)
+       {
+               __pSearchListView->SetEnabled(true);
+       }
+}
+
+void
+ContactListPanel::OnBackground(void)
+{
+}
+
+void
+ContactListPanel::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       if (source.Equals(*__pListView))
+       {
+               __pListView->SetFocus();
+       }
+       else if (source.Equals(*__pSearchListView))
+       {
+               __pSearchListView->SetFocus();
+       }
+}
+
+void
+ContactListPanel::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactListPanel::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactListPanel::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactListPanel::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+bool
+ContactListPanel::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactListPanel::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pDeletePopup && __pDeletePopup->GetShowState() == true)
+               {
+                       HideDeletePopup();
+                       return true;
+               }
+               else if (__pMultipleContactValuePopup && __pMultipleContactValuePopup->GetShowState() == true)
+               {
+                       HideContactValuePopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+ContactListPanel::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+ContactListPanel::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
diff --git a/src/CtContactListPresentationModel.cpp b/src/CtContactListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..0340ffa
--- /dev/null
@@ -0,0 +1,1140 @@
+//
+// 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       CtContactListPresentationModel.cpp
+ * @brief      This is the implementation file for the ContactListPresentationModel class.
+ */
+
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FMedia.h>
+#include <FSocial.h>
+#include "CtContactListPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtIContactEventListener.h"
+#include "CtResourceManager.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+static const int VCARD_STRING_LENGTH = 26;
+
+static const wchar_t* VCARD_PATH_FORMAT = L"data/Ct%04d%02d%02d%02d%02d%02d.vcf";
+static const wchar_t* KEY_SHARP = L"#";
+
+ContactListPresentationModel* ContactListPresentationModel::__pInstance = null;
+
+ContactListPresentationModel*
+ContactListPresentationModel::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+
+       return __pInstance;
+}
+
+void
+ContactListPresentationModel::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) ContactListPresentationModel();
+       result r = __pInstance->Construct();
+       TryCatch(r == E_SUCCESS, , "[%s] Construction failed", GetErrorMessage(r));
+
+       std::atexit(DestroyInstance);
+       return;
+
+CATCH:
+       delete __pInstance;
+       __pInstance = null;
+}
+
+void
+ContactListPresentationModel::DestroyInstance(void)
+{
+       delete __pInstance;
+}
+
+ContactListPresentationModel::ContactListPresentationModel(void)
+       : _pContactList(null)
+       , _pContactChangeListenerList(null)
+       , _pGroupIndexList(null)
+       , _pAddressbook(null)
+       , __pSearchedContactList(null)
+       , __pExcludedContactIdList(null)
+       , __searchedText()
+       , __isContactChanged(true)
+{
+}
+
+ContactListPresentationModel::~ContactListPresentationModel(void)
+{
+       if (_pContactList != null)
+       {
+               _pContactList->RemoveAll(true);
+               delete _pContactList;
+       }
+
+       if (__pSearchedContactList != null)
+       {
+               __pSearchedContactList->RemoveAll(true);
+               delete __pSearchedContactList;
+       }
+
+       if (__pExcludedContactIdList != null)
+       {
+               __pExcludedContactIdList->RemoveAll(true);
+               delete __pExcludedContactIdList;
+       }
+
+       if (_pContactChangeListenerList != null)
+       {
+               _pContactChangeListenerList->RemoveAll(false);
+               delete _pContactChangeListenerList;
+       }
+
+       delete _pAddressbook;
+       delete _pGroupIndexList;
+}
+
+result
+ContactListPresentationModel::Construct(void)
+{
+       if (_pAddressbook != null)
+       {
+               AppLogDebug("ContactListPresentationModel is already constructed.");
+               return E_SUCCESS;
+       }
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       _pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       TryReturn(_pAddressbook != null, E_FAILURE, "No address book")
+
+       _pAddressbook->SetAddressbookChangeEventListener(this);
+
+       _pContactChangeListenerList = new (std::nothrow) ArrayList();
+       _pContactChangeListenerList->Construct();
+
+       return E_SUCCESS;
+}
+
+result
+ContactListPresentationModel::InitializeContactList(Tizen::Base::Collection::IList* pContactIdList)
+{
+       if (__pExcludedContactIdList != null)
+       {
+               delete __pExcludedContactIdList;
+       }
+       __pExcludedContactIdList = pContactIdList;
+
+       return CreateContactList();
+}
+
+result
+ContactListPresentationModel::CreateContactList(void)
+{
+       result r = E_SUCCESS;
+
+       if (_pContactList == null)
+       {
+               _pContactList = new (std::nothrow) MultiHashMap();
+               _pContactList->Construct();
+       }
+       else
+       {
+               _pContactList->RemoveAll(true);
+       }
+
+       if (_pGroupIndexList == null)
+       {
+               _pGroupIndexList = new (std::nothrow) ArrayList();
+               _pGroupIndexList->Construct();
+       }
+       else
+       {
+               _pGroupIndexList->RemoveAll(false);
+       }
+
+       IList* pContactList = AddressbookManager::GetInstance()->GetAllPersonsN();
+       TryReturn(pContactList != null, E_FAILURE, "[E_FAILURE] Unable to get persons.");
+
+       if (__pExcludedContactIdList != null)
+       {
+               IBidirectionalEnumerator* pIdEnum = __pExcludedContactIdList->GetBidirectionalEnumeratorN();
+               pIdEnum->ResetLast();
+               while (pIdEnum->MovePrevious() == E_SUCCESS)
+               {
+                       Integer* pPersonId = static_cast<Integer*>(pIdEnum->GetCurrent());
+
+                       for (int index = pContactList->GetCount() - 1; index >= 0; index--)
+                       {
+                               Person* pPerson = static_cast<Person *>(pContactList->GetAt(index));
+                               if (pPerson != null && pPersonId != null &&
+                                       pPerson->GetId() == pPersonId->ToInt())
+                               {
+                                       pContactList->RemoveAt(index, true);
+                                       break;
+                               }
+                       }
+               }
+
+               delete pIdEnum;
+       }
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               TrimListForAppControl(pContactList);
+       }
+
+       IEnumerator* pEnum = pContactList->GetEnumeratorN();
+       TryReturn(pEnum, E_FAILURE, "No contact");
+
+       bool isNotUsedSharpKey = true;
+       String* pKey = null;
+       String* pSharpKey = new (std::nothrow) String(KEY_SHARP);
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               Person* pPerson = static_cast<Person*>(pEnum->GetCurrent());
+               if (pPerson == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String displayName = pPerson->GetDisplayName();
+               String firstCharacter;
+
+               displayName.SubString(0, 1, firstCharacter);
+               firstCharacter.ToUpper();
+
+               if (pKey == null || firstCharacter.CompareTo(*pKey) != 0)
+               {
+                       if (firstCharacter[0] >= L'A' && firstCharacter[0] <= L'Z')
+                       {
+                               if (_pGroupIndexList->Contains(firstCharacter))
+                               {
+                                       int index;
+
+                                       _pGroupIndexList->IndexOf(firstCharacter, index);
+                                       pKey = static_cast<String *>(_pGroupIndexList->GetAt(index));
+                                       if (pKey == null)
+                                       {
+                                               break;
+                                       }
+                               }
+                               else
+                               {
+                                       pKey = new (std::nothrow) String(firstCharacter);
+                                       _pGroupIndexList->Add(*pKey);
+                               }
+                       }
+                       else
+                       {
+                               isNotUsedSharpKey = false;
+                               pKey = pSharpKey;
+
+                               if (_pGroupIndexList->Contains(*pKey) == false)
+                               {
+                                       _pGroupIndexList->Add(*pKey);
+                               }
+                       }
+               }
+               _pContactList->Add(*pKey, *pPerson);
+       }
+
+       _pGroupIndexList->Sort(StringComparer());
+
+       delete pEnum;
+       delete pContactList;
+
+       if (isNotUsedSharpKey)
+       {
+               delete pSharpKey;
+       }
+
+       return r;
+}
+
+result
+ContactListPresentationModel::TrimListForAppControl(Tizen::Base::Collection::IList*& pContactList)
+{
+       TryReturn(pContactList != null, E_INVALID_ARG, "Invalid argument");
+
+       IList* pSelectedList = null;
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+
+               pSelectedList = pAddressbookManager->SearchN(mainFilter);
+               TryReturn(pSelectedList != null, E_FAILURE, "Unable to get the list contained phone number");
+
+               pContactList->RemoveAll(true);
+               pContactList->AddItems(*pSelectedList);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+
+               pSelectedList = pAddressbookManager->SearchN(mainFilter);
+               TryReturn(pSelectedList != null, E_FAILURE, "Unable to get the list contained email");
+
+               pContactList->RemoveAll(true);
+               pContactList->AddItems(*pSelectedList);
+       }
+
+       return E_SUCCESS;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetKey(int groupIndex)
+{
+       String* key = static_cast<String *>(_pGroupIndexList->GetAt(groupIndex));
+
+       if (key == null)
+       {
+               return String();
+       }
+
+       return *key;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetAllKeys(void)
+{
+       String allKeys;
+       IEnumerator* pEnum = _pGroupIndexList->GetEnumeratorN();
+
+       if (pEnum == null)
+       {
+               return String();
+       }
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               String* pKey = static_cast<String *>(pEnum->GetCurrent());
+
+               allKeys.Append(*pKey);
+       }
+
+       delete pEnum;
+
+       return allKeys;
+}
+
+int
+ContactListPresentationModel::GetKeyCount(void)
+{
+       return _pGroupIndexList->GetCount();
+}
+
+int
+ContactListPresentationModel::GetKeyIndex(const Tizen::Base::String& key)
+{
+       int index;
+
+       _pGroupIndexList->IndexOf(key, index);
+
+       return index;
+}
+
+Tizen::Social::Person*
+ContactListPresentationModel::GetPersonAt(int groupIndex, int itemIndex)
+{
+       int count = 0;
+       Person* pPerson = null;
+       IEnumerator* pEnum = _pContactList->GetValuesN(GetKey(groupIndex));
+
+       if (pEnum == null)
+       {
+               return null;
+       }
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               if (itemIndex == count++)
+               {
+                       pPerson = static_cast<Person *>(pEnum->GetCurrent());
+                       break;
+               }
+       }
+
+       delete pEnum;
+
+       return pPerson;
+}
+
+result
+ContactListPresentationModel::GetContactItemInfoN(int groupIndex, int itemIndex, Tizen::Base::String& name, Tizen::Graphics::Bitmap*& pThumbnail)
+{
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+
+       if (pPerson == null)
+       {
+               return E_FAILURE;
+       }
+
+       name = pPerson->GetDisplayName();
+       if (name.IsEmpty())
+       {
+               Email email = pPerson->GetPrimaryEmail();
+               name.Append(email.GetEmail());
+       }
+       String thumbnailPath = pPerson->GetThumbnailPath();
+
+       if (thumbnailPath.IsEmpty() == false)
+       {
+               ImageBuffer thumbnailImageBuffer;
+               result r = thumbnailImageBuffer.Construct(thumbnailPath);
+               if (r == E_SUCCESS)
+               {
+                       pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_NONE);
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+int
+ContactListPresentationModel::GetContactCount(void)
+{
+       return _pContactList->GetCount();
+}
+
+int
+ContactListPresentationModel::GetContactCount(int groupIndex)
+{
+       int count = 0;
+
+       _pContactList->GetCount(GetKey(groupIndex), count);
+
+       return count;
+}
+
+result
+ContactListPresentationModel::RemoveContact(int groupIndex, int itemIndex, bool isUpdated)
+{
+       __isContactChanged = isUpdated;
+
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+
+       if (pPerson == null)
+       {
+               return E_FAILURE;
+       }
+
+       return AddressbookManager::GetInstance()->RemovePerson(pPerson->GetId());
+}
+
+Tizen::Social::RecordId
+ContactListPresentationModel::GetContactId(int groupIndex, int itemIndex)
+{
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+
+       if (pPerson == null)
+       {
+               return INVALID_RECORD_ID;
+       }
+
+       IList* pContactList = AddressbookManager::GetInstance()->GetContactsByPersonN(pPerson->GetId());
+       if (pContactList == null)
+       {
+               return INVALID_RECORD_ID;
+       }
+
+       Contact* pContact = static_cast<Contact *>(pContactList->GetAt(0));
+       if (pContact == null)
+       {
+               return INVALID_RECORD_ID;
+       }
+
+       RecordId contactId = pContact->GetRecordId();
+
+       pContactList->RemoveAll(true);
+       delete pContactList;
+       pContactList = null;
+
+       return contactId;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetName(int groupIndex, int itemIndex)
+{
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+
+       if (pPerson == null)
+       {
+               return null;
+       }
+
+       return pPerson->GetDisplayName();
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetDefaultPhoneNumber(int groupIndex, int itemIndex)
+{
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+       if (pPerson == null)
+       {
+               return String();
+       }
+
+       PhoneNumber phoneNumber = pPerson->GetPrimaryPhoneNumber();
+
+       return phoneNumber.GetPhoneNumber();
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetDefaultEmail(int groupIndex, int itemIndex)
+{
+       String emailString;
+
+       Contact* pContact = _pAddressbook->GetContactN(GetContactId(groupIndex, itemIndex));
+       if (pContact == null)
+       {
+               return emailString;
+       }
+
+       //[TODO] should change to default email or rename this function
+       IList* pEmailList = pContact->GetValuesN(CONTACT_MPROPERTY_ID_EMAILS);
+       if (pEmailList == null)
+       {
+               delete pContact;
+
+               return emailString;
+       }
+
+       Email* pEmail = static_cast<Email*>(pEmailList->GetAt(0));
+       if (pEmail == null)
+       {
+               pEmailList->RemoveAll(true);
+               delete pEmailList;
+               delete pContact;
+
+               return emailString;
+       }
+
+       emailString = pEmail->GetEmail();
+
+       pEmailList->RemoveAll(true);
+       delete pEmailList;
+       delete pContact;
+
+       return emailString;
+}
+
+Tizen::Base::Collection::IList*
+ContactListPresentationModel::GetAllPhoneNumbersN(int groupIndex, int itemIndex)
+{
+       Contact* pContact = _pAddressbook->GetContactN(GetContactId(groupIndex, itemIndex));
+       if (pContact == null)
+       {
+               return null;
+       }
+       IList* pPhoneNumberList = pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+       if (pPhoneNumberList == null)
+       {
+               delete pContact;
+               return null;
+       }
+
+       ArrayList* pPhoneNumberInfoList = new (std::nothrow) ArrayList();
+       pPhoneNumberInfoList->Construct();
+       PhoneNumber* pPhoneNumber = null;
+
+       IEnumerator* pEnum = pPhoneNumberList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pPhoneNumber = static_cast<PhoneNumber *>(pEnum->GetCurrent());
+               if (pPhoneNumber != null)
+               {
+                       String phoneNumbersInfo(L"");
+
+                       switch (pPhoneNumber->GetType())
+                       {
+                       case PHONENUMBER_TYPE_HOME:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_HOME"));
+                               break;
+                       case PHONENUMBER_TYPE_WORK:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_WORK"));
+                               break;
+                       case PHONENUMBER_TYPE_MOBILE:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_MOBILE"));
+                               break;
+                       case PHONENUMBER_TYPE_HOME_FAX:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_FAX_HHOME"));
+                               break;
+                       case PHONENUMBER_TYPE_WORK_FAX:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_FAX_HWORK"));
+                               break;
+                       case PHONENUMBER_TYPE_PAGER:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_PAGER"));
+                               break;
+                       case PHONENUMBER_TYPE_OTHER:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_OTHER"));
+                               break;
+                       default:
+                               break;
+                       }
+                       phoneNumbersInfo.Append(CHARACTER_SPACE);
+                       phoneNumbersInfo.Append(pPhoneNumber->GetPhoneNumber());
+
+                       pPhoneNumberInfoList->Add(*(new (std::nothrow) String(phoneNumbersInfo)));
+               }
+       }
+
+       delete pEnum;
+       delete pContact;
+       pPhoneNumberList->RemoveAll(true);
+       delete pPhoneNumberList;
+
+       return pPhoneNumberInfoList;
+}
+
+Tizen::Base::Collection::IList*
+ContactListPresentationModel::GetAllEmailsN(int groupIndex, int itemIndex)
+{
+       Contact* pContact = _pAddressbook->GetContactN(GetContactId(groupIndex, itemIndex));
+       if (pContact == null)
+       {
+               return null;
+       }
+       IList* pEmailList = pContact->GetValuesN(CONTACT_MPROPERTY_ID_EMAILS);
+       if (pEmailList == null)
+       {
+               delete pContact;
+               return null;
+       }
+
+       ArrayList* pEmailInfoList = new (std::nothrow) ArrayList();
+       pEmailInfoList->Construct();
+       Email* pEmail = null;
+
+       IEnumerator* pEnum = pEmailList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pEmail = static_cast<Email *>(pEnum->GetCurrent());
+               if (pEmail != null)
+               {
+                       String EmailsInfo(L"");
+
+                       switch (pEmail->GetType())
+                       {
+                       case EMAIL_TYPE_PERSONAL:
+                               EmailsInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_HOME"));
+                               break;
+                       case EMAIL_TYPE_WORK:
+                               EmailsInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_WORK"));
+                               break;
+                       case EMAIL_TYPE_OTHER:
+                               EmailsInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_OTHER"));
+                               break;
+                       default:
+                               break;
+                       }
+                       EmailsInfo.Append(CHARACTER_SPACE);
+                       EmailsInfo.Append(pEmail->GetEmail());
+
+                       pEmailInfoList->Add(*(new (std::nothrow) String(EmailsInfo)));
+               }
+       }
+
+       delete pEnum;
+       delete pContact;
+       pEmailList->RemoveAll(true);
+       delete pEmailList;
+
+       return pEmailInfoList;
+}
+
+result
+ContactListPresentationModel::SetSearchText(const Tizen::Base::String& searchText, SearchType searchType)
+{
+       result r = E_SUCCESS;
+
+       if (__pSearchedContactList != null)
+       {
+               __pSearchedContactList->RemoveAll(true);
+               delete __pSearchedContactList;
+               __pSearchedContactList = null;
+       }
+
+       __pSearchedContactList = GetSearchedContactListN(searchText, searchType);
+
+       if (__pSearchedContactList != null)
+       {
+               r = searchText.ToLowerCase(__searchedText);
+       }
+
+       return r;
+}
+
+result
+ContactListPresentationModel::GetSearchedContactItemInfo(int index, Tizen::Base::String& name, Tizen::Graphics::Bitmap*& pThumbnail)
+{
+       if (__pSearchedContactList == null)
+       {
+               return E_FAILURE;
+       }
+       Person* pPerson = static_cast<Person *>(__pSearchedContactList->GetAt(index));
+       if (pPerson == null)
+       {
+               return E_FAILURE;
+       }
+
+       name = pPerson->GetDisplayName();
+       String thumbnailPath = pPerson->GetThumbnailPath();
+
+       if (thumbnailPath.IsEmpty() == false)
+       {
+               ImageBuffer thumbnailImageBuffer;
+               result r = thumbnailImageBuffer.Construct(pPerson->GetThumbnailPath());
+               if (r == E_SUCCESS)
+               {
+                       pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_NONE);
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+Tizen::Base::Collection::IList*
+ContactListPresentationModel::GetSearchedContactListN(const Tizen::Base::String& searchText, SearchType searchType)
+{
+       if (searchText.GetLength() == 0)
+       {
+               return null;
+       }
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       int phoneNumber;
+       IList* pSearchedList = null;
+
+       if (searchType != SEARCH_TYPE_HAS_EMAIL_ONLY)
+       {
+               IList* pSearchingPhoneNumberList = null;
+               AddressbookFilter phoneNumberFilter(AB_FI_TYPE_PHONE_CONTACT);
+               phoneNumberFilter.AppendString(FI_CONJ_OP_NONE, PHONE_CONTACT_FI_PR_PHONE, FI_STR_OP_CONTAIN, searchText);
+               phoneNumberFilter.AppendString(FI_CONJ_OP_OR, PHONE_CONTACT_FI_PR_DISPLAY_NAME, FI_STR_OP_CONTAIN, searchText);
+
+               pSearchingPhoneNumberList = pAddressbookManager->SearchN(phoneNumberFilter);
+               if (pSearchingPhoneNumberList == null)
+               {
+                       return null;
+               }
+
+               IEnumerator* pEnum = pSearchingPhoneNumberList->GetEnumeratorN();
+               if (pEnum == null)
+               {
+                       pSearchingPhoneNumberList->RemoveAll(true);
+                       delete pSearchingPhoneNumberList;
+
+                       return null;
+               }
+
+               ArrayList* pSearchedPersonsList = new (std::nothrow) ArrayList();
+               pSearchedPersonsList->Construct();
+
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       PhoneNumberContact* pPhoneNumberContact = static_cast<PhoneNumberContact *>(pEnum->GetCurrent());
+                       Person* pPerson = pAddressbookManager->GetPersonN(pPhoneNumberContact->GetPersonId());
+
+                       if (pPerson != null && pSearchedPersonsList->Contains(*pPerson) == false)
+                       {
+                               pSearchedPersonsList->Add(*pPerson);
+                       }
+               }
+
+               pSearchingPhoneNumberList->RemoveAll(true);
+               delete pSearchingPhoneNumberList;
+               delete pEnum;
+
+               pSearchedList = pSearchedPersonsList;
+
+               if (searchType != SEARCH_TYPE_HAS_PHONE_ONLY)
+               {
+                       IList* pDisplayNameSearchedList = null;
+                       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+                       mainFilter.AppendString(FI_CONJ_OP_NONE, PERSON_FI_PR_DISPLAY_NAME, FI_STR_OP_CONTAIN, searchText);
+                       mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, false);
+
+                       pDisplayNameSearchedList = pAddressbookManager->SearchN(mainFilter);
+                       pSearchedList->InsertItemsFrom(*pDisplayNameSearchedList, 0);
+               }
+       }
+       else
+       {
+               AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+               mainFilter.AppendString(FI_CONJ_OP_NONE, PERSON_FI_PR_DISPLAY_NAME, FI_STR_OP_CONTAIN, searchText);
+
+               if (searchType == SEARCH_TYPE_HAS_PHONE_ONLY)
+               {
+                       mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+               }
+               else if (searchType == SEARCH_TYPE_HAS_EMAIL_ONLY)
+               {
+                       mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+               }
+
+               pSearchedList = pAddressbookManager->SearchN(mainFilter);
+       }
+
+       for (int index = pSearchedList->GetCount() - 1; index >= 0; index--)
+       {
+               Person* pPerson = static_cast<Person *>(pSearchedList->GetAt(index));
+               if (__pExcludedContactIdList != null && pPerson != null)
+               {
+                       for (int idIndex = __pExcludedContactIdList->GetCount() - 1; idIndex >= 0; idIndex--)
+                       {
+                               Integer* pPersonId = static_cast<Integer*>(__pExcludedContactIdList->GetAt(idIndex));
+                               if (pPersonId != null && pPersonId->ToInt() == pPerson->GetId())
+                               {
+                                       pSearchedList->RemoveAt(index, true);
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return pSearchedList;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetSearchText(void)
+{
+       return __searchedText;
+}
+
+void
+ContactListPresentationModel::ResetSearchedContactList(void)
+{
+       if (__pSearchedContactList != null)
+       {
+               __pSearchedContactList->RemoveAll(true);
+               delete __pSearchedContactList;
+               __pSearchedContactList = null;
+       }
+}
+
+int
+ContactListPresentationModel::GetSearchedContactCount(void)
+{
+       if (__pSearchedContactList != null)
+       {
+               return __pSearchedContactList->GetCount();
+       }
+
+       return 0;
+}
+
+result
+ContactListPresentationModel::GetItemMainIndex(int searchedItemIndex, int& groupIndex, int& itemIndex)
+{
+       Person* pSearchedPerson = static_cast<Person *>(__pSearchedContactList->GetAt(searchedItemIndex));
+
+       if (pSearchedPerson == null)
+       {
+               return E_FAILURE;
+       }
+
+       int count = 0;
+       String firstCharacter;
+       String displayName = pSearchedPerson->GetDisplayName();
+       displayName.ToUpper();
+
+       if (displayName[0] >= L'A' && displayName[0] <= L'Z')
+       {
+               displayName.SubString(0, 1, firstCharacter);
+       }
+       else
+       {
+               firstCharacter.Append(KEY_SHARP);
+       }
+
+       IEnumerator* pEnum = _pContactList->GetValuesN(firstCharacter);
+       if (pEnum == null)
+       {
+               return E_FAILURE;
+       }
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               Person* pPerson = static_cast<Person *>(pEnum->GetCurrent());
+               if (pPerson == null)
+               {
+                       return E_FAILURE;
+               }
+
+               if (pSearchedPerson->GetId() == pPerson->GetId())
+               {
+                       _pGroupIndexList->IndexOf(firstCharacter, groupIndex);
+                       itemIndex = count;
+                       break;
+               }
+
+               count++;
+       }
+
+       delete pEnum;
+
+       return E_SUCCESS;
+}
+
+int
+ContactListPresentationModel::GetAddressbookCount(void)
+{
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       IList* pAddressbookList = pAddressbookManager->GetAllAddressbooksN();
+       if (pAddressbookList == null)
+       {
+               return -1;
+       }
+
+       int count = pAddressbookList->GetCount();
+       pAddressbookList->RemoveAll(true);
+       delete pAddressbookList;
+
+       return count;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetAddressbookName(int index)
+{
+       String returnString;
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       IList* pAddressbookList = pAddressbookManager->GetAllAddressbooksN();
+       if (pAddressbookList == null)
+       {
+               return returnString;
+       }
+
+       Addressbook* pAddressbook = static_cast<Addressbook *>(pAddressbookList->GetAt(index));
+       TryCatch(pAddressbook != null, , "Unable to get addressbook form addressbook manager");
+
+       //Todo : Return AccountId temporarily.
+       if (pAddressbook->GetId() == DEFAULT_ADDRESSBOOK_ID)
+       {
+               returnString.Append(ResourceManager::GetString(L"IDS_PB_BODY_PHONE"));
+       }
+       else
+       {
+               returnString.Append(pAddressbook->GetId());
+       }
+
+CATCH:
+       pAddressbookList->RemoveAll(true);
+       delete pAddressbookList;
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::GetCurrentAddressbook(void)
+{
+       String addressbookName;
+
+       if (_pAddressbook->GetId() == DEFAULT_ADDRESSBOOK_ID)
+       {
+               addressbookName.Append(ResourceManager::GetString(L"IDS_PB_BODY_PHONE"));
+       }
+       else
+       {
+               addressbookName.Append(_pAddressbook->GetId());
+       }
+
+       return addressbookName;
+}
+
+bool
+ContactListPresentationModel::IsContactInCategory(int groupIndex, int itemIndex, Tizen::Social::RecordId categoryId)
+{
+       bool isContactInCategory = false;
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+
+       if (pPerson == null)
+       {
+               return false;
+       }
+
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+       mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_PERSON_ID, FI_CMP_OP_EQUAL, pPerson->GetId());
+       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, categoryId);
+
+       IList* pList = AddressbookManager::GetInstance()->SearchN(mainFilter);
+
+       if (pList == null)
+       {
+               return false;
+       }
+
+       if (pList->GetCount() > 0)
+       {
+               isContactInCategory = true;
+       }
+       else
+       {
+               isContactInCategory = false;
+       }
+
+       pList->RemoveAll(true);
+       delete pList;
+
+       return isContactInCategory;
+}
+
+bool
+ContactListPresentationModel::IsContactInCategory(int groupIndex, Tizen::Social::RecordId categoryId)
+{
+       String key = GetKey(groupIndex);
+       int count;
+
+       _pContactList->GetCount(key, count);
+
+       for (int i = 0; i < count; i++)
+       {
+               if (IsContactInCategory(groupIndex, i, categoryId) == false)
+               {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+bool
+ContactListPresentationModel::IsSearchedContactInCategory(int index, Tizen::Social::RecordId categoryId)
+{
+       bool isContactInCategory = false;
+       Person* pPerson = static_cast<Person *>(__pSearchedContactList->GetAt(index));
+
+       if (pPerson == null)
+       {
+               return false;
+       }
+
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+       mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_PERSON_ID, FI_CMP_OP_EQUAL, pPerson->GetId());
+       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, categoryId);
+
+       IList* pList = AddressbookManager::GetInstance()->SearchN(mainFilter);
+
+       if (pList == null)
+       {
+               return false;
+       }
+
+       if (pList->GetCount() > 0)
+       {
+               isContactInCategory = true;
+       }
+       else
+       {
+               isContactInCategory = false;
+       }
+
+       pList->RemoveAll(true);
+       delete pList;
+
+       return isContactInCategory;
+}
+
+Tizen::Base::String
+ContactListPresentationModel::ExportToVcard(int groupIndex, int itemIndex)
+{
+       String vCardPath;
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       Contact* pContact = pAddressbookManager->GetContactN(GetContactId(groupIndex, itemIndex));
+       TryReturn(pContact != null, vCardPath, "[E_FAILURE] Unable to get the specific contact.");
+
+       DateTime currentDateTime;
+       SystemTime::GetCurrentTime(TIME_MODE_WALL, currentDateTime);
+
+       vCardPath.Format(VCARD_STRING_LENGTH, VCARD_PATH_FORMAT, currentDateTime.GetYear(), currentDateTime.GetMonth(), currentDateTime.GetDay(),
+                       currentDateTime.GetHour(), currentDateTime.GetMinute(), currentDateTime.GetSecond());
+
+       vCardPath = Application::GetInstance()->GetAppSharedPath() + vCardPath;
+
+       result r = pAddressbookManager->ExportContactToVcard(*pContact, vCardPath);
+
+       if (r != E_SUCCESS)
+       {
+               vCardPath.Clear();
+       }
+
+       delete pContact;
+
+       return vCardPath;
+}
+
+void
+ContactListPresentationModel::AddContactChangeListener(const IContactEventListener& listener)
+{
+       _pContactChangeListenerList->Add(listener);
+}
+
+void
+ContactListPresentationModel::RemoveContactChangeListener(const IContactEventListener& listener)
+{
+       _pContactChangeListenerList->Remove(listener, false);
+}
+
+void
+ContactListPresentationModel::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+       if (__isContactChanged == false)
+       {
+               __isContactChanged = true;
+
+               return;
+       }
+
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = _pContactChangeListenerList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener *>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnContactsChanged();
+       }
+
+       delete pEnum;
+}
+
+void
+ContactListPresentationModel::OnCategoriesChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+}
diff --git a/src/CtContactPresentationModel.cpp b/src/CtContactPresentationModel.cpp
new file mode 100644 (file)
index 0000000..3f734e4
--- /dev/null
@@ -0,0 +1,2239 @@
+//
+// 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       CtContactPresentationModel.cpp
+ * @brief      This is the implementation file for the ContactPresentationModel class.
+ */
+
+#include <FGraphics.h>
+#include <FLocales.h>
+#include "CtContactPresentationModel.h"
+#include "CtIContactEventListener.h"
+#include "CtResourceManager.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Io;
+using namespace Tizen::Locales;
+using namespace Tizen::Social;
+
+static const wchar_t* IDB_ACCOUNT_ICON_ICQ = L"C02_Icon_ICQ.png";
+static const wchar_t* IDB_ACCOUNT_ICON_YAHOO = L"C02_Icon_yahoo.png";
+static const wchar_t* IDB_ACCOUNT_ICON_MSN = L"C02_Icon_windows_live.png";
+static const wchar_t* IDB_ACCOUNT_ICON_OTHERS = L"C02_Icon_others.png";
+
+static const wchar_t* CHARACTER_HYPHEN = L"-";
+static const wchar_t* CHARACTER_EMPTY = L"";
+
+ContactPresentationModel::ContactPresentationModel(void)
+: __pAssignedCategoryList(null)
+, __pContactListenerList(null)
+, __pContact(null)
+, __pAddressbook(null)
+, __defaultNumberIndex(0)
+, __lastRemovedContactIndex(-1)
+, __lastRemovedEmailIndex(-1)
+, __newMode(false)
+, __isEditing(false)
+{
+}
+
+ContactPresentationModel::~ContactPresentationModel(void)
+{
+       delete __pAddressbook;
+       delete __pContact;
+
+       if (__pContactListenerList != null)
+       {
+               __pContactListenerList->RemoveAll(true);
+               delete __pContactListenerList;
+       }
+
+       if (__pAssignedCategoryList != null)
+       {
+               __pAssignedCategoryList->RemoveAll(true);
+               delete __pAssignedCategoryList;
+       }
+}
+
+result
+ContactPresentationModel::Construct(void)
+{
+       result r = E_SUCCESS;
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       if (__pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       r = __pAddressbook->SetAddressbookChangeEventListener(this);
+       TryCatch(r == E_SUCCESS, , "[%s] Unable to set event listener", GetErrorMessage(r));
+
+       __pContactListenerList = new (std::nothrow) ArrayList();
+       __pContactListenerList->Construct();
+
+       __pAssignedCategoryList = new (std::nothrow) ArrayList();
+       __pAssignedCategoryList->Construct();
+
+       return r;
+
+CATCH:
+       delete __pAddressbook;
+       __pAddressbook = null;
+
+       __pContactListenerList->RemoveAll();
+       delete __pContactListenerList;
+       __pContactListenerList = null;
+
+       __pAssignedCategoryList->RemoveAll();
+       delete __pAssignedCategoryList;
+       __pAssignedCategoryList = null;
+
+       return r;
+}
+
+result
+ContactPresentationModel::PrepareNewContact(void)
+{
+       __pContact = new (std::nothrow) Contact();
+
+       __newMode = true;
+
+       return E_SUCCESS;
+}
+
+result
+ContactPresentationModel::SetContactId(const Tizen::Social::RecordId contactId, bool isEditing)
+{
+       result r = E_SUCCESS;
+
+       delete __pContact;
+       __pContact = __pAddressbook->GetContactN(contactId);
+
+       r = GetLastResult();
+       TryReturn(__pContact != null && r == E_SUCCESS, r, "[%s] selected Contact is invalid", GetErrorMessage(r));
+
+       IList* pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+       if (pList == null)
+       {
+               return r;
+       }
+
+       Person* pPerson = AddressbookManager::GetInstance()->GetPersonN(__pContact->GetPersonId());
+       if (pPerson == null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+
+               return r;
+       }
+
+       PhoneNumber defaultNumber = pPerson->GetPrimaryPhoneNumber();
+
+       for (int i = 0; i < pList->GetCount(); i++)
+       {
+               PhoneNumber* pPhoneNumber = static_cast<PhoneNumber*>(pList->GetAt(i));
+               if (pPhoneNumber != null && pPhoneNumber->Equals(defaultNumber))
+               {
+                       __defaultNumberIndex = i;
+                       break;
+               }
+       }
+
+       if (isEditing)
+       {
+               __isEditing = isEditing;
+
+               IList* pAssignedCategoriesList = __pAddressbook->GetCategoriesByContactN(__pContact->GetRecordId());
+               if (pAssignedCategoriesList == null)
+               {
+                       return E_FAILURE;
+               }
+               IEnumerator* pEnum = pAssignedCategoriesList->GetEnumeratorN();
+               if (pEnum == null)
+               {
+                       return E_FAILURE;
+               }
+
+               for (int index = 0; pEnum->MoveNext() == E_SUCCESS; index++)
+               {
+                       Category* pCategory = static_cast<Category *>(pEnum->GetCurrent());
+
+                       if (pCategory != null)
+                       {
+                               AddContactToCategory(pCategory->GetRecordId());
+                       }
+               }
+
+               pAssignedCategoriesList->RemoveAll(true);
+               delete pAssignedCategoriesList;
+               delete pEnum;
+       }
+
+       pList->RemoveAll(true);
+       delete pList;
+       delete pPerson;
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetVcfPath(const Tizen::Base::String& filePath, bool isNewContact)
+{
+       __vcfPath = filePath;
+       __newMode = isNewContact;
+
+       IList* pPhoneNumberList = null;
+       IList* pList = AddressbookManager::GetInstance()->ParseContactsFromVcardN(filePath);
+       result r = GetLastResult();
+       TryCatch(r == E_SUCCESS && pList != null && pList->GetCount() > 0, r = E_FAILURE, "[%s] ParseContactsFromVcardN() failed", GetErrorMessage(r));
+
+       __pContact = static_cast<Contact*>(pList->GetAt(0));
+       TryCatch(__pContact != null, r = E_FAILURE, "[E_FAILURE] Unable to cast Contact");
+
+       pPhoneNumberList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+
+       if (pPhoneNumberList != null)
+       {
+               PhoneNumber* pPhoneNumber = static_cast<PhoneNumber*>(pPhoneNumberList->GetAt(0));
+               if (pPhoneNumber != null)
+               {
+                       Person* pPerson = AddressbookManager::GetInstance()->GetPersonN(__pContact->GetPersonId());
+                       if (pPerson != null)
+                       {
+                               pPerson->SetAsPrimaryPhoneNumber(*pPhoneNumber);
+                       }
+
+                       delete pPerson;
+               }
+               delete pPhoneNumberList;
+       }
+
+CATCH:
+       delete pList;
+
+       return r;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetVcfPath(void)
+{
+       return __vcfPath;
+}
+
+RecordId
+ContactPresentationModel::GetContactId(void)
+{
+       return __pContact->GetRecordId();
+}
+
+result
+ContactPresentationModel::AddContactToCategory(Tizen::Social::RecordId categoryId)
+{
+       result r = E_SUCCESS;
+
+       if (__newMode || __isEditing)
+       {
+               String* pCategoryStringId = new (std::nothrow) String();
+
+               pCategoryStringId->Append(categoryId);
+
+               r = __pAssignedCategoryList->Add(*pCategoryStringId);
+       }
+       else
+       {
+               r = AddressbookManager::GetInstance()->AddMemberToCategory(categoryId, __pContact->GetRecordId());
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::RemoveContactFromAllCategories(void)
+{
+       result r = E_SUCCESS;
+
+       if (__newMode || __isEditing)
+       {
+               if (__pAssignedCategoryList != null)
+               {
+                       __pAssignedCategoryList->RemoveAll(true);
+               }
+       }
+       else
+       {
+               TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+               IList* pCategoryList = __pAddressbook->GetCategoriesByContactN(__pContact->GetRecordId());
+               TryReturn(pCategoryList != null, E_FAILURE, "Unable to get category list");
+
+               IEnumerator* pEnum = pCategoryList->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       Category* pCategory = static_cast<Category*>(pEnum->GetCurrent());
+                       if (pCategory != null)
+                       {
+                               AddressbookManager::GetInstance()->RemoveMemberFromCategory(pCategory->GetRecordId(), __pContact->GetRecordId());
+                       }
+               }
+
+               delete pEnum;
+               pCategoryList->RemoveAll(true);
+               delete pCategoryList;
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::RemoveContact(void)
+{
+       return __pAddressbook->RemoveContact(__pContact->GetRecordId());
+}
+
+bool
+ContactPresentationModel::IsContactRemoved(void)
+{
+       return (__pContact ? false : true);
+}
+
+result
+ContactPresentationModel::AddContact(void)
+{
+       return __pAddressbook->AddContact(*__pContact);
+}
+
+result
+ContactPresentationModel::UpdateContact(void)
+{
+       return __pAddressbook->UpdateContact(*__pContact);
+}
+
+String
+ContactPresentationModel::GetValue(DetailProperty id, int index)
+{
+       String returnString;
+       IList* pList = null;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       switch (id)
+       {
+       case DETAIL_PROPERTY_GROUP:
+               returnString = GetCategory();
+               break;
+       case DETAIL_PROPERTY_RINGTONE:
+               returnString = GetRingtone();
+               break;
+       case DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER:
+               {
+                       DetailPhoneNumberType type;
+                       returnString = GetDefaultNumber(type);
+               }
+               break;
+       case DETAIL_PROPERTY_PHONE_NUMBER:
+               {
+                       DetailPhoneNumberType type;
+                       returnString = GetPhoneNumber(index, type);
+               }
+               break;
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       DetailEmailType type;
+                       returnString = GetEmail(index, type);
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       DetailImAddressType type;
+                       returnString = GetImAddress(index, type);
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS: //fall through
+       case DETAIL_PROPERTY_ADDRESS_POSTAL_CODE: //fall through
+       case DETAIL_PROPERTY_ADDRESS_COUNTRY: //fall through
+       case DETAIL_PROPERTY_ADDRESS_PROVINCE: //fall through
+       case DETAIL_PROPERTY_ADDRESS_CITY: //fall through
+       case DETAIL_PROPERTY_ADDRESS_STREET:
+               {
+                       DetailAddressType type;
+                       returnString = GetAddress(id, index, type);
+               }
+               break;
+       case DETAIL_PROPERTY_BIRTHDAY:
+               {
+                       returnString = GetDateTime(id);
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       DetailUrlType type;
+                       returnString = GetUrl(index, type);
+               }
+               break;
+       case DETAIL_PROPERTY_NOTE:
+               {
+                       IList* pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_NOTES);
+
+                       if (pList == null)
+                       {
+                               break;
+                       }
+
+                       String* pNote = static_cast<String *>(pList->GetAt(0));
+                       if (pNote == null)
+                       {
+                               break;
+                       }
+
+                       returnString = *pNote;
+               }
+               break;
+       case DETAIL_PROPERTY_DISPLAY_NAME:
+               {
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_DISPLAY_NAME, returnString);
+               }
+               break;
+       case DETAIL_PROPERTY_FIRST_NAME:
+               {
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_FIRST_NAME, returnString);
+               }
+               break;
+       case DETAIL_PROPERTY_LAST_NAME:
+               {
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_LAST_NAME, returnString);
+               }
+               break;
+       case DETAIL_PROPERTY_MIDDLE_NAME:
+               {
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_MIDDLE_NAME, returnString);
+               }
+               break;
+       case DETAIL_PROPERTY_NICK_NAME:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_NICKNAMES);
+
+                       if (pList == null)
+                       {
+                               break;
+                       }
+
+                       String* pNickName = static_cast<String *>(pList->GetAt(0));
+                       if (pNickName == null)
+                       {
+                               break;
+                       }
+
+                       returnString = *pNickName;
+               }
+               break;
+       case DETAIL_PROPERTY_NAME_SUFFIX:
+               {
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_NAME_SUFFIX, returnString);
+               }
+               break;
+       case DETAIL_PROPERTY_JOB_TITLE:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_ORGANIZATIONS);
+
+                       if (pList == null)
+                       {
+                               break;
+                       }
+
+                       Organization* pOrganization = static_cast<Organization *>(pList->GetAt(0));
+                       if (pOrganization == null)
+                       {
+                               break;
+                       }
+
+                       returnString = pOrganization->GetJobTitle();
+               }
+               break;
+       case DETAIL_PROPERTY_DEPARTMENT:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_ORGANIZATIONS);
+
+                       if (pList == null)
+                       {
+                               break;
+                       }
+
+                       Organization* pOrganization = static_cast<Organization *>(pList->GetAt(0));
+                       if (pOrganization == null)
+                       {
+                               break;
+                       }
+
+                       returnString = pOrganization->GetDepartment();
+               }
+               break;
+       case DETAIL_PROPERTY_COMPANY:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_ORGANIZATIONS);
+
+                       if (pList == null)
+                       {
+                               break;
+                       }
+
+                       Organization* pOrganization = static_cast<Organization *>(pList->GetAt(0));
+                       if (pOrganization == null)
+                       {
+                               break;
+                       }
+
+                       returnString = pOrganization->GetName();
+               }
+               break;
+       case DETAIL_PROPERTY_THUMBNAIL:
+               {
+                       returnString = __pContact->GetThumbnailPath();
+               }
+               break;
+       default:
+               break;
+       }
+
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+       }
+
+       return returnString;
+}
+
+result
+ContactPresentationModel::GetDisplayName(Tizen::Base::String& name)
+{
+       result r = E_SUCCESS;
+       name.Clear();
+
+       TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+       if (__vcfPath.IsEmpty() == true)
+       {
+               Person* pPerson = AddressbookManager::GetInstance()->GetPersonN(__pContact->GetPersonId());
+               TryReturn(pPerson != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+               name = pPerson->GetDisplayName();
+       }
+       else
+       {
+               String firstName = GetValue(DETAIL_PROPERTY_FIRST_NAME);
+               String middleName = GetValue(DETAIL_PROPERTY_MIDDLE_NAME);
+               String lastName = GetValue(DETAIL_PROPERTY_LAST_NAME);
+               String suffix = GetValue(DETAIL_PROPERTY_NAME_SUFFIX);
+
+               if (firstName.IsEmpty() == false)
+               {
+                       name = (firstName);
+               }
+               if (middleName.IsEmpty() == false)
+               {
+                       if (name.IsEmpty() == false)
+                       {
+                               name += CHARACTER_SPACE;
+                       }
+                       name += (middleName);
+               }
+               if (lastName.IsEmpty() == false)
+               {
+                       if (name.IsEmpty() == false)
+                       {
+                               name += CHARACTER_SPACE;
+                       }
+                       name += (lastName);
+               }
+               if (suffix.IsEmpty() == false)
+               {
+                       if (name.IsEmpty() == false)
+                       {
+                               name += DELIMITER_COMMA;
+                               name += CHARACTER_SPACE;
+                       }
+                       name += suffix;
+               }
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::GetBirthday(Tizen::Base::DateTime& value)
+{
+       result r = E_SUCCESS;
+
+       TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+       IList* pEventList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_EVENTS);
+       if (pEventList == null)
+       {
+               return E_FAILURE;
+       }
+
+       ContactEvent* pBirthday = static_cast<ContactEvent *>(pEventList->GetAt(0));
+       if (pBirthday == null)
+       {
+               return E_FAILURE;
+       }
+
+       value = pBirthday->GetDate();
+
+       pEventList->RemoveAll(true);
+       delete pEventList;
+
+       return r;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetType(DetailProperty id, int index)
+{
+       String returnString;
+       String value;
+
+       switch (id)
+       {
+       case DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER:
+               {
+                       DetailPhoneNumberType type;
+
+                       value = GetDefaultNumber(type);
+                       returnString = GetPhoneNumberTypeString(type);
+               }
+               break;
+       case DETAIL_PROPERTY_PHONE_NUMBER:
+               {
+                       DetailPhoneNumberType type;
+
+                       value = GetPhoneNumber(index, type);
+                       returnString = GetPhoneNumberTypeString(type);
+               }
+               break;
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       DetailEmailType type;
+
+                       value = GetEmail(index, type);
+                       returnString = GetEmailTypeString(type);
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       DetailImAddressType type;
+
+                       value = GetImAddress(index, type);
+                       returnString = GetImAddressTypeString(type);
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       DetailAddressType type;
+
+                       value = GetAddress(id, index, type);
+                       returnString = GetAddressTypeString(type);
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       DetailUrlType type;
+
+                       value = GetUrl(index, type);
+                       returnString = GetUrlTypeString(type);
+
+               }
+               break;
+       default:
+               break;
+       }
+       return returnString;
+}
+
+Tizen::Graphics::Bitmap*
+ContactPresentationModel::GetThumbnailN(void)
+{
+       TryReturn(__pContact != null, null, "[E_FAILURE] The contact is invalid.");
+
+       return __pContact->GetThumbnailN();
+}
+
+Tizen::Graphics::Bitmap*
+ContactPresentationModel::GetAccountIconN(const Tizen::Base::String& account)
+{
+       if (account.Equals(IM_ADDRESS_YAHOO, true))
+       {
+               return ResourceManager::GetBitmapN(IDB_ACCOUNT_ICON_YAHOO);
+       }
+       else if (account.Equals(IM_ADDRESS_MSN, true))
+       {
+               return ResourceManager::GetBitmapN(IDB_ACCOUNT_ICON_MSN);
+       }
+       else if (account.Equals(IM_ADDRESS_ICQ, true))
+       {
+               return ResourceManager::GetBitmapN(IDB_ACCOUNT_ICON_ICQ);
+       }
+//     else if (account.Equals(IM_ADDRESS_AIM, true))
+//     {
+//             //[TODO]
+//     }
+//     else if (account.Equals(IM_ADDRESS_SKYPE, true))
+//     {
+//             //[TODO]
+//     }
+//     else if (account.Equals(IM_ADDRESS_QQ, true))
+//     {
+//             //[TODO]
+//     }
+//     else if (account.Equals(IM_ADDRESS_GOOGLE_TALK, true))
+//     {
+//             //[TODO]
+//     }
+//     else if (account.Equals(IM_ADDRESS_JABBER, true))
+//     {
+//             //[TODO]
+//     }
+       else
+       {
+               return ResourceManager::GetBitmapN(IDB_ACCOUNT_ICON_OTHERS);
+       }
+
+       return null;
+}
+
+int
+ContactPresentationModel::GetMultiValuesCount(DetailProperty id)
+{
+       int returnValue = 0;
+       IList* pList = null;
+
+       TryReturn(__pContact != null, returnValue, "[E_FAILURE] The contact is invalid.");
+
+       switch (id)
+       {
+       case DETAIL_PROPERTY_PHONE_NUMBER:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+                       if (pList != null)
+                       {
+                               returnValue = pList->GetCount();
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_EMAILS);
+                       if (pList != null)
+                       {
+                               returnValue = pList->GetCount();
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_IMADDRESSES);
+                       if (pList != null)
+                       {
+                               returnValue = pList->GetCount();
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_ADDRESSES);
+                       if (pList != null)
+                       {
+                               returnValue = pList->GetCount();
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_URLS);
+                       if (pList != null)
+                       {
+                               returnValue = pList->GetCount();
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+       }
+
+       return returnValue;
+}
+
+int
+ContactPresentationModel::GetCategoryCount(void)
+{
+       return __pAddressbook->GetCategoryCount();
+}
+
+Tizen::Base::Collection::IList*
+ContactPresentationModel::GetAssignedCategoryIdListN(void)
+{
+       IEnumerator* pEnum = null;
+       ArrayList* pCategoryList = new (std::nothrow) ArrayList();
+       pCategoryList->Construct();
+
+       if (__newMode || __isEditing)
+       {
+               pEnum = __pAssignedCategoryList->GetEnumeratorN();
+
+               for (int index = 0; pEnum->MoveNext() == E_SUCCESS; index++)
+               {
+                       String* pCategoryStringId = static_cast<String *>(pEnum->GetCurrent());
+
+                       if (pCategoryStringId != null)
+                       {
+                               String* pRetrunCategoryStringId = new (std::nothrow) String(*pCategoryStringId);
+
+                               pCategoryList->Add(*pRetrunCategoryStringId);
+                       }
+               }
+
+               delete pEnum;
+
+               return pCategoryList;
+       }
+       else
+       {
+               IList* pList = __pAddressbook->GetCategoriesByContactN(__pContact->GetRecordId());
+
+               if (pList != null)
+               {
+                       pEnum = pList->GetEnumeratorN();
+
+                       for (int index = 0; pEnum->MoveNext() == E_SUCCESS; index++)
+                       {
+                               Category* pCategory = static_cast<Category *>(pEnum->GetCurrent());
+
+                               if (pCategory != null)
+                               {
+                                       String* pRetrunCategoryStringId = new (std::nothrow) String();
+
+                                       pRetrunCategoryStringId->Append(pCategory->GetRecordId());
+                                       pCategoryList->Add(*pRetrunCategoryStringId);
+                               }
+                       }
+
+                       pList->RemoveAll(true);
+                       delete pList;
+                       delete pEnum;
+               }
+
+               return pCategoryList;
+       }
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetCategory(void)
+{
+       String returnString;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       if (__newMode || __isEditing)
+       {
+               IEnumerator* pEnum = __pAssignedCategoryList->GetEnumeratorN();
+               Category* pCategory = null;
+               String* pCategoryStringId = null;
+               RecordId categoryId;
+
+               for (int index = 0; pEnum->MoveNext() == E_SUCCESS; index++)
+               {
+                       pCategoryStringId = static_cast<String*>(pEnum->GetCurrent());
+
+                       if (pCategoryStringId != null)
+                       {
+                               Integer::Parse(*pCategoryStringId, categoryId);
+                               pCategory = __pAddressbook->GetCategoryN(categoryId);
+
+                               String categoryName;
+                               if (pCategory != null)
+                               {
+                                       categoryName = pCategory->GetName();
+
+                                       if (index == 0)
+                                       {
+                                               returnString = categoryName;
+                                       }
+                                       else if (index > 0)
+                                       {
+                                               returnString += L", ";
+                                               returnString += categoryName;
+                                       }
+                               }
+                               delete pCategory;
+                       }
+               }
+               delete pEnum;
+       }
+       else
+       {
+               Category* pCategory = null;
+               IList* pCategoryList = __pAddressbook->GetCategoriesByContactN(__pContact->GetRecordId());
+               if (pCategoryList == null)
+               {
+                       return returnString;
+               }
+
+               IEnumerator* pEnum = pCategoryList->GetEnumeratorN();
+               for (int index = 0; pEnum->MoveNext() == E_SUCCESS; index++)
+               {
+                       pCategory = static_cast<Category*>(pEnum->GetCurrent());
+
+                       String categoryName;
+                       if (pCategory != null)
+                       {
+                               categoryName = pCategory->GetName();
+
+                               if (index == 0)
+                               {
+                                       returnString = categoryName;
+                               }
+                               else if (index > 0)
+                               {
+                                       returnString += L", ";
+                                       returnString += categoryName;
+                               }
+                       }
+               }
+
+               delete pEnum;
+               pCategoryList->RemoveAll(true);
+               delete pCategoryList;
+       }
+
+       return returnString;
+}
+
+result
+ContactPresentationModel::GetDefaultCategoryName(Tizen::Base::String& categoryName)
+{
+       if (categoryName.Equals(DEFAULT_GROUP_FAMILY, true))
+       {
+               categoryName.Clear();
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FAMILY");
+       }
+       else if (categoryName.Equals(DEFAULT_GROUP_FRIENDS, true))
+       {
+               categoryName.Clear();
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FRIENDS");
+       }
+       else if (categoryName.Equals(DEFAULT_GROUP_COWORKERS, true))
+       {
+               categoryName.Clear();
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_CO_WORKERS");
+       }
+
+       return E_SUCCESS;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetRingtone(void)
+{
+       String returnString;
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       result r = __pContact->GetValue(CONTACT_PROPERTY_ID_RINGTONE, returnString);
+       TryReturn(r == E_SUCCESS, String(), "[E_FAILURE] Unable to get value");
+       
+       if (returnString.IsEmpty())
+       {
+               returnString = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT");
+       }
+       else
+       {
+               File file;
+               bool isFileExisting;
+               isFileExisting = file.IsFileExist(returnString);
+               if(!isFileExisting)
+               {
+                       SetValue(DETAIL_PROPERTY_RINGTONE, String());
+                       UpdateContact();
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT");
+               }
+       }
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetDefaultNumber(DetailPhoneNumberType& type)
+{
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       String returnString;
+
+       IList* pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+       TryReturn(pList != null, String(), "[E_FAILURE] The contact doesn't have a phone number at least.");
+
+       PhoneNumber* pPhoneNumber = static_cast<PhoneNumber*>(pList->GetAt(__defaultNumberIndex));
+       if (pPhoneNumber != null)
+       {
+               returnString = pPhoneNumber->GetPhoneNumber();
+               if (returnString.Contains(CHARACTER_HYPHEN))
+               {
+                       returnString.Replace(CHARACTER_HYPHEN, CHARACTER_EMPTY);
+               }
+               type = (DetailPhoneNumberType)pPhoneNumber->GetType();
+       }
+
+       pList->RemoveAll(true);
+       delete pList;
+
+       return returnString;
+}
+
+int
+ContactPresentationModel::GetDefaultNumberIndex(void)
+{
+       return __defaultNumberIndex;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetPhoneNumber(int index, DetailPhoneNumberType& type)
+{
+       String returnString;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       if (index == -1)
+       {
+               return returnString;
+       }
+
+       IList* pPhoneNumberList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+       AppAssert(pPhoneNumberList);
+
+       PhoneNumber* pNumber = static_cast<PhoneNumber *>(pPhoneNumberList->GetAt(index));
+       if (pNumber != null)
+       {
+               returnString = pNumber->GetPhoneNumber();
+
+               if (returnString.Contains(CHARACTER_HYPHEN))
+               {
+                       returnString.Replace(CHARACTER_HYPHEN, CHARACTER_EMPTY);
+               }
+               type = (DetailPhoneNumberType)pNumber->GetType();
+       }
+
+       pPhoneNumberList->RemoveAll(true);
+       delete pPhoneNumberList;
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetEmail(int index, DetailEmailType& type)
+{
+       String returnString;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       if (index == -1)
+       {
+               return returnString;
+       }
+
+       IList* pEmailList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_EMAILS);
+       AppAssert(pEmailList);
+
+       Email* pEmail = static_cast<Email *>(pEmailList->GetAt(index));
+       if (pEmail != null)
+       {
+               returnString = pEmail->GetEmail();
+               type = (DetailEmailType)pEmail->GetType();
+       }
+
+       pEmailList->RemoveAll(true);
+       delete pEmailList;
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetImAddress(int index, DetailImAddressType& type)
+{
+       String returnString;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       if (index == -1)
+       {
+               return returnString;
+       }
+
+       IList* pImAddressList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_IMADDRESSES);
+       AppAssert(pImAddressList);
+
+       ImAddress* pImAddress =  static_cast<ImAddress *>(pImAddressList->GetAt(index));
+       if (pImAddress != null)
+       {
+               returnString = pImAddress->GetImAddress();
+
+               String typeString = pImAddress->GetServiceProviderName();
+
+               if (typeString.Equals(IM_ADDRESS_AIM, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_AIM;
+               }
+               else if (typeString.Equals(IM_ADDRESS_MSN, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_MSN;
+               }
+               else if (typeString.Equals(IM_ADDRESS_YAHOO, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_YAHOO;
+               }
+               else if (typeString.Equals(IM_ADDRESS_SKYPE, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_SKYPE;
+               }
+               else if (typeString.Equals(IM_ADDRESS_QQ, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_QQ;
+               }
+               else if (typeString.Equals(IM_ADDRESS_GOOGLE_TALK, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_GOOGLE_TALK;
+               }
+               else if (typeString.Equals(IM_ADDRESS_ICQ, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_ICQ;
+               }
+               else if (typeString.Equals(IM_ADDRESS_JABBER, true))
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_JABBER;
+               }
+               else
+               {
+                       type = DETAIL_IM_ADDRESS_TYPE_OTHER;
+               }
+       }
+
+       pImAddressList->RemoveAll(true);
+       delete pImAddressList;
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetAddress(DetailProperty id, int index, DetailAddressType& type)
+{
+       String returnString;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       if (index == -1)
+       {
+               return returnString;
+       }
+
+       IList* pAddressList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_ADDRESSES);
+       AppAssert(pAddressList);
+
+       Address* pAddress = static_cast<Address *>(pAddressList->GetAt(index));
+       if (pAddress != null)
+       {
+               String street = pAddress->GetStreet();
+               String city = pAddress->GetCity();
+               String state = pAddress->GetState();
+               String country = pAddress->GetCountry();
+               String postalCode = pAddress->GetPostalCode();
+
+               switch (id)
+               {
+               case DETAIL_PROPERTY_ADDRESS_POSTAL_CODE:
+                       returnString = postalCode;
+                       break;
+               case DETAIL_PROPERTY_ADDRESS_COUNTRY:
+                       returnString = country;
+                       break;
+               case DETAIL_PROPERTY_ADDRESS_PROVINCE:
+                       returnString = state;
+                       break;
+               case DETAIL_PROPERTY_ADDRESS_CITY:
+                       returnString = city;
+                       break;
+               case DETAIL_PROPERTY_ADDRESS_STREET:
+                       returnString = street;
+                       break;
+               case DETAIL_PROPERTY_ADDRESS:
+                       if (postalCode.IsEmpty() == false)
+                       {
+                               returnString.Append(postalCode);
+                               returnString.Append(CHARACTER_SPACE);
+                       }
+                       if (country.IsEmpty() == false)
+                       {
+                               returnString.Append(country);
+                               returnString.Append(CHARACTER_SPACE);
+                       }
+                       if (state.IsEmpty() == false)
+                       {
+                               returnString.Append(state);
+                               returnString.Append(CHARACTER_SPACE);
+                       }
+                       if (city.IsEmpty() == false)
+                       {
+                               returnString.Append(city);
+                               returnString.Append(CHARACTER_SPACE);
+                       }
+                       if (street.IsEmpty() == false)
+                       {
+                               returnString.Append(street);
+                       }
+                       break;
+               default:
+                       break;
+               }
+
+               type = (DetailAddressType)pAddress->GetType();
+       }
+
+       pAddressList->RemoveAll(true);
+       delete pAddressList;
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetDateTime(DetailProperty id)
+{
+       result r = E_SUCCESS;
+       String returnString;
+       int day = 0;
+       int year = 0;
+       String month;
+       DateTimeSymbols dateTimeSymbols;
+
+       r = dateTimeSymbols.Construct(CALENDAR_GREGORIAN);
+       TryReturn(r == E_SUCCESS, String(), "[E_FAILURE] Given locale is not supported.");
+       const IList* pMonthList = dateTimeSymbols.GetShortMonths();
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       DateTime* pDateTime = new (std::nothrow) DateTime();
+
+       if (id == DETAIL_PROPERTY_BIRTHDAY)
+       {
+               const Object* pGettingMonth = null;
+
+               r = GetBirthday(*pDateTime);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to get value", GetErrorMessage(r));
+
+               day = pDateTime->GetDay();
+               year = pDateTime->GetYear();
+
+               pGettingMonth = pMonthList->GetAt(pDateTime->GetMonth() - 1);
+               TryCatch(pGettingMonth != null, , "[E_FAILURE] Unable to get a month", GetErrorMessage(r));
+
+               month.Append(*static_cast<String*>(const_cast<Object*>(pGettingMonth)));
+
+               returnString.Append(day);
+               returnString.Append(CHARACTER_SPACE);
+               returnString.Append(month);
+               returnString.Append(CHARACTER_SPACE);
+               returnString.Append(year);
+       }
+
+CATCH:
+       delete pDateTime;
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetUrl(int index, DetailUrlType& type)
+{
+       String returnString;
+
+       TryReturn(__pContact != null, String(), "[E_FAILURE] The contact is invalid.");
+
+       IList* pUrlList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_URLS);
+       if (pUrlList == null)
+       {
+               return returnString;
+       }
+
+       Url* pUrl = static_cast<Url*>(pUrlList->GetAt(index));
+       if (pUrl != null)
+       {
+               returnString = pUrl->GetUrl();
+               type = (DetailUrlType)pUrl->GetType();
+       }
+
+       pUrlList->RemoveAll(true);
+       delete pUrlList;
+
+       return returnString;
+}
+
+void
+ContactPresentationModel::AddContactChangeListener(const IContactEventListener& listener)
+{
+       __pContactListenerList->Add(listener);
+}
+
+void
+ContactPresentationModel::RemoveContactChangeListener(const IContactEventListener& listener)
+{
+       __pContactListenerList->Remove(listener, false);
+}
+
+void
+ContactPresentationModel::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+       if (__newMode == false && __isEditing == false)
+       {
+               if (__pContact != null)
+               {
+                       SetContactId(__pContact->GetRecordId());
+               }
+       }
+       else if (__isEditing)
+       {
+               IEnumerator* pEnum = contactChangeInfoList.GetEnumeratorN();
+
+               if (pEnum != null && __pContact != null)
+               {
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               const ContactChangeInfo* pChangeInfo = static_cast<const ContactChangeInfo *>(pEnum->GetCurrent());
+
+                               if (pChangeInfo != null && pChangeInfo->GetChangeType() == RECORD_CHANGE_TYPE_REMOVED && __pContact->GetRecordId() == pChangeInfo->GetContactId())
+                               {
+                                       SetContactId(INVALID_RECORD_ID);
+                                       break;
+                               }
+                       }
+                       delete pEnum;
+               }
+       }
+
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pContactListenerList->GetEnumeratorN();
+       while(pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnContactsChanged();
+       }
+
+       delete pEnum;
+}
+
+void
+ContactPresentationModel::OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList)
+{
+       IEnumerator* pEnumCategory = categoryChangeInfoList.GetEnumeratorN();
+
+       if (pEnumCategory != null && __pContact != null && __pAssignedCategoryList != null)
+       {
+               while (pEnumCategory->MoveNext() == E_SUCCESS)
+               {
+                       const CategoryChangeInfo* pChangeInfo = static_cast<const CategoryChangeInfo *>(pEnumCategory->GetCurrent());
+
+                       if (pChangeInfo != null && pChangeInfo->GetChangeType() == RECORD_CHANGE_TYPE_REMOVED)
+                       {
+                               RecordId id = pChangeInfo->GetCategoryId();
+
+                               String* pcurCategoryStringId = new (std::nothrow) String();
+
+                               pcurCategoryStringId->Append(id);
+
+                               IEnumerator* pEnum = __pAssignedCategoryList->GetEnumeratorN();
+
+                               for (int index = 0; pEnum->MoveNext() == E_SUCCESS; index++)
+                               {
+                                       String* pCategoryStringId = static_cast<String*>(pEnum->GetCurrent());
+
+                                       if (pCategoryStringId != null)
+                                       {
+                                               if (pcurCategoryStringId->Equals(*pCategoryStringId, false) == true)
+                                               {
+                                                       __pAssignedCategoryList->Remove(*pCategoryStringId, true);
+                                               }
+                                       }
+                               }
+
+                               delete pEnum;
+                       }
+               }
+
+               delete pEnumCategory;
+       }
+
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pContactListenerList->GetEnumeratorN();
+       while(pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnCategoriesChanged();
+       }
+
+       delete pEnum;
+}
+
+result
+ContactPresentationModel::SetValue(DetailProperty id, const Tizen::Base::String& value, int index)
+{
+       result r = E_SUCCESS;
+
+       TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+       String trimmedString(value);
+       trimmedString.Trim();
+
+       Email email = Email();
+       ImAddress imAddress = ImAddress();
+       Url url = Url();
+       PhoneNumber phoneNumber = PhoneNumber();
+
+       switch (id)
+       {
+       case DETAIL_PROPERTY_RINGTONE:
+               {
+                       r = __pContact->SetValue(CONTACT_PROPERTY_ID_RINGTONE, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER:
+               {
+                       __defaultNumberIndex = index;
+               }
+               break;
+       case DETAIL_PROPERTY_PHONE_NUMBER:
+               {
+                       r = SetPhoneNumber(DETAIL_PHONENUMBER_TYPE_MOBILE, trimmedString, index);
+               }
+               break;
+       case DETAIL_PROPERTY_EMAIL:
+               {
+                       r = SetEmail(DETAIL_EMAIL_TYPE_HOME, trimmedString, index);
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       r = SetImAddress(DETAIL_IM_ADDRESS_TYPE_MSN, trimmedString, index);
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS: //fall through
+       case DETAIL_PROPERTY_ADDRESS_POSTAL_CODE: //fall through
+       case DETAIL_PROPERTY_ADDRESS_COUNTRY: //fall through
+       case DETAIL_PROPERTY_ADDRESS_PROVINCE: //fall through
+       case DETAIL_PROPERTY_ADDRESS_CITY: //fall through
+       case DETAIL_PROPERTY_ADDRESS_STREET:
+               {
+                       SetAddress(id, trimmedString);
+                       __pContact->RemoveAt(CONTACT_MPROPERTY_ID_ADDRESSES, index);
+                       r = __pContact->SetAddressAt(index, __address);
+                       if (r != E_SUCCESS)
+                       {
+                               r = __pContact->AddAddress(__address);
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       SetUrl(DETAIL_URL_TYPE_HOME, trimmedString, index);
+               }
+               break;
+       case DETAIL_PROPERTY_NOTE:
+               {
+                       if (value.IsEmpty() == true)
+                       {
+                               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_NOTES, index);
+
+                               return r;
+                       }
+
+                       r = __pContact->SetNoteAt(index, value);
+                       if (r != E_SUCCESS)
+                       {
+                               r = __pContact->AddNote(value);
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_DISPLAY_NAME:
+               {
+                       r = __pContact->SetValue(CONTACT_PROPERTY_ID_DISPLAY_NAME, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_FIRST_NAME:
+               {
+                       r = __pContact->SetValue(CONTACT_PROPERTY_ID_FIRST_NAME, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_LAST_NAME:
+               {
+                       r = __pContact->SetValue(CONTACT_PROPERTY_ID_LAST_NAME, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_MIDDLE_NAME:
+               {
+                       r = __pContact->SetValue(CONTACT_PROPERTY_ID_MIDDLE_NAME, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_NICK_NAME:
+               {
+                       if (trimmedString.IsEmpty() == true)
+                       {
+                               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_NICKNAMES, index);
+
+                               return r;
+                       }
+
+                       r = __pContact->SetNicknameAt(index, trimmedString);
+                       if (r != E_SUCCESS)
+                       {
+                               r = __pContact->AddNickname(trimmedString);
+                       }
+               }
+               break;
+       case DETAIL_PROPERTY_NAME_SUFFIX:
+               {
+                       r = __pContact->SetValue(CONTACT_PROPERTY_ID_NAME_SUFFIX, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_JOB_TITLE:
+               {
+                       r = SetOrganization(DETAIL_PROPERTY_JOB_TITLE, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_DEPARTMENT:
+               {
+                       r = SetOrganization(DETAIL_PROPERTY_DEPARTMENT, trimmedString);
+               }
+               break;
+       case DETAIL_PROPERTY_COMPANY:
+               {
+                       r = SetOrganization(DETAIL_PROPERTY_COMPANY, trimmedString);
+               }
+               break;
+       default:
+               break;
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::AddAddressBook(void)
+{
+       result r = E_SUCCESS;
+
+       if (__newMode == true)
+       {
+               r = AddContact();
+
+               RecordId newPersonId;
+               AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+               IList* pList = pAddressbookManager->GetContactsByPersonN(__pContact->GetPersonId());
+
+               if (pList != null && pList->GetCount() > 1)
+               {
+                       r = pAddressbookManager->UnlinkContact(__pContact->GetPersonId(), __pContact->GetRecordId(), newPersonId);
+               }
+
+               delete pList;
+       }
+       else
+       {
+               r = UpdateContact();
+       }
+
+       if (r == E_SUCCESS)
+       {
+               IList* pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+               TryReturn(pList != null, r, "[E_FAILURE] The contact doesn't have a phone number at least.");
+
+               PhoneNumber* pPhoneNumber = static_cast<PhoneNumber*>(pList->GetAt(__defaultNumberIndex));
+               if (pPhoneNumber != null)
+               {
+                       Person* pPerson = AddressbookManager::GetInstance()->GetPersonN(__pContact->GetPersonId());
+                       if (pPerson != null)
+                       {
+                               pPerson->SetAsPrimaryPhoneNumber(*pPhoneNumber);
+                               UpdateContact();
+                       }
+                       delete pPerson;
+               }
+
+               pList->RemoveAll(true);
+               delete pList;
+       }
+
+       if (__newMode || __isEditing)
+       {
+               if (__isEditing == true)
+               {
+                       __isEditing = false;
+                       RemoveContactFromAllCategories();
+                       __isEditing = true;
+               }
+
+               IEnumerator* pEnum = __pAssignedCategoryList->GetEnumeratorN();
+               String* pCategoryStringId = null;
+               RecordId categoryId;
+
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pCategoryStringId = static_cast<String*>(pEnum->GetCurrent());
+
+                       if (pCategoryStringId != null)
+                       {
+                               Integer::Parse(*pCategoryStringId, categoryId);
+                               r = __pAddressbook->AddMemberToCategory(categoryId, __pContact->GetRecordId());
+                       }
+               }
+               delete pEnum;
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetAddress(DetailProperty id, const Tizen::Base::String& value)
+{
+       result r = E_SUCCESS;
+
+       switch (id)
+       {
+       case DETAIL_PROPERTY_ADDRESS_POSTAL_CODE:
+               r = __address.SetPostalCode(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_COUNTRY:
+               r = __address.SetCountry(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_PROVINCE:
+               r = __address.SetState(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_CITY:
+               r = __address.SetCity(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_STREET:
+               r = __address.SetStreet(value);
+               break;
+       default:
+               break;
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetBirthday(const Tizen::Base::DateTime& value)
+{
+       result r = E_SUCCESS;
+
+       TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+       ContactEvent birthday;
+       birthday.SetDate(value);
+
+       r = __pContact->SetEventAt(0, birthday);
+       if (r != E_SUCCESS)
+       {
+               r = __pContact->AddEvent(birthday);
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::RemoveBirthday(void)
+{
+       result r = E_SUCCESS;
+
+       TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+       r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_EVENTS, 0);
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetPhoneNumber(DetailPhoneNumberType type, const Tizen::Base::String& value, int index)
+{
+       result r = E_SUCCESS;
+
+       if(index==0)
+       {
+               __lastRemovedContactIndex=-1;
+       }
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_PHONE_NUMBERS, index);
+               __lastRemovedContactIndex=index;
+
+               return r;
+       }
+
+       PhoneNumber phoneNumber;
+       phoneNumber.SetPhoneNumber(value);
+       phoneNumber.SetType((PhoneNumberType)type);
+
+       if(__lastRemovedContactIndex!=-1 && index>__lastRemovedContactIndex)
+       {
+               r = __pContact->SetPhoneNumberAt(index-1, phoneNumber);
+       }
+       else
+       {
+               r = __pContact->SetPhoneNumberAt(index, phoneNumber);
+       }
+
+       if (r != E_SUCCESS)
+       {
+               r = __pContact->AddPhoneNumber(phoneNumber);
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetEmail(DetailEmailType type, const Tizen::Base::String& value, int index)
+{
+       result r = E_SUCCESS;
+
+       if (index==0)
+       {
+               __lastRemovedEmailIndex = -1;
+       }
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_EMAILS, index);
+               __lastRemovedEmailIndex = index;
+
+               return r;
+       }
+
+       Email email;
+       email.SetEmail(value);
+       email.SetType((EmailType)type);
+
+
+       if (__lastRemovedEmailIndex >= 0 && __lastRemovedEmailIndex < index)
+       {
+               r = __pContact->SetEmailAt(index - 1, email);
+       }
+       else
+       {
+               r = __pContact->SetEmailAt(index, email);
+       }
+
+
+       if (r != E_SUCCESS)
+       {
+               r = __pContact->AddEmail(email);
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetAddress(DetailAddressType type, const Tizen::Base::String& value, int index, DetailProperty property)
+{
+       result r = E_SUCCESS;
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_ADDRESSES, index);
+
+               return r;
+       }
+
+       Address address;
+       address.SetType((AddressType)type);
+
+       switch (property)
+       {
+       case DETAIL_PROPERTY_ADDRESS_POSTAL_CODE:
+               address.SetPostalCode(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_COUNTRY:
+               address.SetCountry(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_PROVINCE:
+               address.SetState(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_CITY:
+               address.SetCity(value);
+               break;
+       case DETAIL_PROPERTY_ADDRESS_STREET:
+               address.SetStreet(value);
+               break;
+       default:
+               break;
+       }
+
+
+       r = __pContact->SetAddressAt(index, address);
+       if (r != E_SUCCESS)
+       {
+               r = __pContact->AddAddress(address);
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetUrl(DetailUrlType type, const Tizen::Base::String& value, int index)
+{
+       result r = E_SUCCESS;
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_URLS, index);
+
+               return r;
+       }
+
+       Url url;
+       url.SetType(UrlType(type));
+       url.SetUrl(value);
+
+       r = __pContact->SetUrlAt(index, url);
+       if (r != E_SUCCESS)
+       {
+               r = __pContact->AddUrl(url);
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetImAddress(DetailImAddressType type, const Tizen::Base::String& value, int index)
+{
+       result r = E_SUCCESS;
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_IMADDRESSES, index);
+
+               return r;
+       }
+
+       ImAddress imAddress;
+       imAddress.SetImAddress(value);
+       imAddress.SetServiceProviderName(GetImAddressTypeString(type));
+       r = __pContact->SetImAddressAt(index, imAddress);
+
+       if (r != E_SUCCESS)
+       {
+               r = __pContact->AddImAddress(imAddress);
+       }
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetThumbnail(const Tizen::Base::String& filePath)
+{
+       result r = E_SUCCESS;
+
+       TryReturn(__pContact != null, E_FAILURE, "[E_FAILURE] The contact is invalid.");
+
+       r = __pContact->SetThumbnail(filePath);
+
+       return r;
+}
+
+result
+ContactPresentationModel::SetOrganization(DetailProperty id, const Tizen::Base::String& value)
+{
+       TryReturn((id >= DETAIL_PROPERTY_JOB_TITLE && id <= DETAIL_PROPERTY_COMPANY), E_FAILURE, "[E_FAILURE] Unable to set the specific id");
+
+       result r = E_SUCCESS;
+
+       IList* pList = __pContact->GetValuesN(CONTACT_MPROPERTY_ID_ORGANIZATIONS);
+
+       if (pList == null)
+       {
+               return E_FAILURE;
+       }
+
+       if (pList->GetCount() == 0)
+       {
+               if (value.IsEmpty())
+               {
+                       return E_SUCCESS;
+               }
+
+               Organization organization;
+
+               switch (id)
+               {
+               case DETAIL_PROPERTY_JOB_TITLE:
+                       {
+                               organization.SetJobTitle(value);
+                       }
+                       break;
+               case DETAIL_PROPERTY_DEPARTMENT:
+                       {
+                               organization.SetDepartment(value);
+                       }
+                       break;
+               case DETAIL_PROPERTY_COMPANY:
+                       {
+                               organization.SetName(value);
+                       }
+                       break;
+               }
+
+               r = __pContact->AddOrganization(organization);
+       }
+       else
+       {
+               Organization* pOrganization = static_cast<Organization *>(pList->GetAt(0));
+               if (pOrganization == null)
+               {
+                       return E_FAILURE;
+               }
+
+               switch (id)
+               {
+               case DETAIL_PROPERTY_JOB_TITLE:
+                       {
+                               pOrganization->SetJobTitle(value);
+                       }
+                       break;
+               case DETAIL_PROPERTY_DEPARTMENT:
+                       {
+                               pOrganization->SetDepartment(value);
+                       }
+                       break;
+               case DETAIL_PROPERTY_COMPANY:
+                       {
+                               pOrganization->SetName(value);
+                       }
+                       break;
+               }
+
+               if (pOrganization->GetJobTitle().IsEmpty() && pOrganization->GetDepartment().IsEmpty() && pOrganization->GetName().IsEmpty())
+               {
+                       r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_ORGANIZATIONS, 0);
+               }
+               else
+               {
+                       if (value.IsEmpty())
+                       {
+                               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_ORGANIZATIONS, 0);
+
+                               if (r == E_SUCCESS)
+                               {
+                                       r = __pContact->AddOrganization(*pOrganization);
+                               }
+                       }
+                       else
+                       {
+                               r = __pContact->SetOrganizationAt(0, *pOrganization);
+                       }
+               }
+       }
+
+       pList->RemoveAll(true);
+       delete pList;
+
+       return r;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetPhoneNumberTypeString(DetailPhoneNumberType type)
+{
+       String returnString;
+
+       switch (type)
+       {
+       case DETAIL_PHONENUMBER_TYPE_HOME:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_HOME");
+               }
+               break;
+       case DETAIL_PHONENUMBER_TYPE_WORK:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_WORK");
+               }
+               break;
+       case DETAIL_PHONENUMBER_TYPE_MOBILE:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_MOBILE");
+               }
+               break;
+       case DETAIL_PHONENUMBER_TYPE_HOME_FAX:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_FAX_HHOME");
+               }
+               break;
+       case DETAIL_PHONENUMBER_TYPE_WORK_FAX:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_FAX_HWORK");
+               }
+               break;
+       case DETAIL_PHONENUMBER_TYPE_PAGER:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_PAGER");
+               }
+               break;
+       case DETAIL_PHONENUMBER_TYPE_OTHER:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_OTHER");
+               }
+               break;
+       }
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetEmailTypeString(DetailEmailType type)
+{
+       String returnString;
+
+       switch (type)
+       {
+       case DETAIL_EMAIL_TYPE_HOME:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_HOME");
+               }
+               break;
+       case DETAIL_EMAIL_TYPE_WORK:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_WORK");
+               }
+               break;
+       case DETAIL_EMAIL_TYPE_OTHER:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_OTHER");
+               }
+               break;
+       }
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetAddressTypeString(DetailAddressType type)
+{
+       String returnString;
+
+       switch (type)
+       {
+       case DETAIL_ADDRESS_TYPE_HOME:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_HOME");
+               }
+               break;
+       case DETAIL_ADDRESS_TYPE_WORK:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_WORK");
+               }
+               break;
+       case DETAIL_ADDRESS_TYPE_OTHER:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_OTHER");
+               }
+               break;
+       }
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetUrlTypeString(DetailUrlType type)
+{
+       String returnString;
+
+       switch (type)
+       {
+       case DETAIL_URL_TYPE_HOME:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_HOME");
+               }
+               break;
+       case DETAIL_URL_TYPE_WORK:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_WORK");
+               }
+               break;
+       case DETAIL_URL_TYPE_OTHER:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_OTHER");
+               }
+               break;
+       }
+
+       return returnString;
+}
+
+Tizen::Base::String
+ContactPresentationModel::GetImAddressTypeString(DetailImAddressType type)
+{
+       String returnString;
+
+       switch (type)
+       {
+       case DETAIL_IM_ADDRESS_TYPE_AIM:
+               {
+                       returnString = IM_ADDRESS_AIM;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_MSN:
+               {
+                       returnString = IM_ADDRESS_MSN;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_YAHOO:
+               {
+                       returnString = IM_ADDRESS_YAHOO;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_SKYPE:
+               {
+                       returnString = IM_ADDRESS_SKYPE;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_QQ:
+               {
+                       returnString = IM_ADDRESS_QQ;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_GOOGLE_TALK:
+               {
+                       returnString = IM_ADDRESS_GOOGLE_TALK;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_ICQ:
+               {
+                       returnString = IM_ADDRESS_ICQ;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_JABBER:
+               {
+                       returnString = IM_ADDRESS_JABBER;
+               }
+               break;
+       case DETAIL_IM_ADDRESS_TYPE_OTHER:
+               {
+                       returnString = ResourceManager::GetString(L"IDS_PB_BODY_OTHER");
+               }
+               break;
+       }
+
+       return returnString;
+}
+
+DetailPhoneNumberType
+ContactPresentationModel::GetPhoneNumberType(int index)
+{
+       DetailPhoneNumberType type;
+       String value;
+
+       value = GetPhoneNumber(index, type);
+
+       return type;
+}
+
+DetailEmailType
+ContactPresentationModel::GetEmailType(int index)
+{
+       DetailEmailType type;
+       String value;
+
+       value = GetEmail(index, type);
+
+       return type;
+}
+
+DetailAddressType
+ContactPresentationModel::GetAddressType(DetailProperty id, int index)
+{
+       DetailAddressType type;
+       String value;
+
+       value = GetAddress(id, index, type);
+
+       return type;
+}
+
+DetailUrlType
+ContactPresentationModel::GetUrlType(int index)
+{
+       DetailUrlType type;
+       String value;
+
+       value = GetUrl(index, type);
+
+       return type;
+}
+
+DetailImAddressType
+ContactPresentationModel::GetImAddressType(int index)
+{
+       DetailImAddressType type;
+       String value;
+
+       value = GetImAddress(index, type);
+
+       return type;
+}
+
+void
+ContactPresentationModel::SetAsFavorite(bool isFavorite)
+{
+       AddressbookManager::GetInstance()->SetPersonAsFavorite(__pContact->GetPersonId(), isFavorite);
+}
+
+bool
+ContactPresentationModel::IsFavorite(void)
+{
+       bool isFavorite = false;
+       PersonId personId = __pContact->GetPersonId();
+
+       Person* pPerson = AddressbookManager::GetInstance()->GetPersonN(personId);
+       if (pPerson == null)
+       {
+               return false;
+       }
+
+       isFavorite = pPerson->IsFavorite();
+
+       delete pPerson;
+
+       return isFavorite;
+}
diff --git a/src/CtContactSelectorForm.cpp b/src/CtContactSelectorForm.cpp
new file mode 100644 (file)
index 0000000..3f75e53
--- /dev/null
@@ -0,0 +1,688 @@
+//
+// 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       CtContactSelectorForm.cpp
+ * @brief      This is the implementation file for the ContactSelectorForm class.
+ */
+
+#include <FApp.h>
+#include <FSocial.h>
+#include "CtContactsApp.h"
+#include "CtContactSelectorForm.h"
+#include "CtContactListItem.h"
+#include "CtContactListPresentationModel.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtSearchListEventListener.h"
+#include "CtSearchListItem.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_DONE = 0;
+static const int IDA_FOOTER_CANCEL = 1;
+static const int IDA_CHECK_SELECT_ALL_CHECKED = 10;
+static const int IDA_CHECK_SELECT_ALL_UNCHECKED = 11;
+
+static const int H_SEARCHBAR = 86;
+static const int H_SELECT_ALL = 112;
+static const int H_GROUP_ITEM = 76;
+static const int H_BOTTOM_LABEL = 48;
+static const int X_LIST_ITEM_TEXT_MARGIN = 32;
+static const int H_CHECK_LABEL = 72;
+static const int Y_CHECK_LABEL = 20;
+
+static const int FONT_SIZE_BOTTOM_LABEL = 32;
+
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<68, 68, 68>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_CHECK_LABEL_BG = Color32<220, 218, 211>::Value;
+
+ContactSelectorForm::ContactSelectorForm(void)
+: __pPresentationModel(null)
+, __pSelectAll(null)
+, __pListView(null)
+, __pSearchListView(null)
+, __pCheckLabel(null)
+, __pBottomLabel(null)
+, __pSearchBar(null)
+, __pSearchListEvent(null)
+{
+}
+
+ContactSelectorForm::~ContactSelectorForm(void)
+{
+}
+
+void
+ContactSelectorForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
+}
+
+result
+ContactSelectorForm::OnInitializing(void)
+{
+       Header* pHeader = GetHeader();
+       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_PB_HEADER_SELECT_CONTACTS"));
+
+       SetFormBackEventListener(this);
+
+       CreateFooterButton();
+
+       __pPresentationModel = ContactListPresentationModel::GetInstance();
+
+       __pCheckLabel = new (std::nothrow) Label();
+       __pCheckLabel->Construct(Rectangle(0, H_SEARCHBAR + Y_CHECK_LABEL, GetClientAreaBounds().width, H_CHECK_LABEL), L"");
+       __pCheckLabel->SetBackgroundColor(COLOR_CHECK_LABEL_BG);
+       AddControl(__pCheckLabel);
+
+       __pSelectAll = new (std::nothrow) CheckButton();
+       __pSelectAll->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_NONE);
+       __pSelectAll->SetText(ResourceManager::GetString(L"IDS_COM_BODY_SELECT_ALL"));
+       __pSelectAll->SetActionId(IDA_CHECK_SELECT_ALL_CHECKED, IDA_CHECK_SELECT_ALL_UNCHECKED);
+       __pSelectAll->AddActionEventListener(*this);
+       AddControl(__pSelectAll);
+
+       __pListView = new (std::nothrow) GroupedListView();
+       __pListView->Construct(Rectangle(0, H_SELECT_ALL + H_SEARCHBAR, GetClientAreaBounds().width,
+                                                                                       GetClientAreaBounds().height - (H_SEARCHBAR + H_SELECT_ALL + H_BOTTOM_LABEL)), GROUPED_LIST_VIEW_STYLE_INDEXED, true, true);
+       __pListView->SetItemProvider(*this);
+       __pListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pListView->AddFastScrollListener(*this);
+       __pListView->AddGroupedListViewItemEventListener(*this);
+       __pListView->AddTouchEventListener(*this);
+       AddControl(__pListView);
+
+       __pSearchBar = new (std::nothrow) SearchBar();
+       __pSearchBar->Construct(Rectangle(0, 0, GetClientAreaBounds().width, H_SEARCHBAR));
+       __pSearchBar->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_SEARCH"));
+       __pSearchBar->AddSearchBarEventListener(*this);
+       __pSearchBar->AddTextEventListener(*this);
+       __pSearchBar->AddKeypadEventListener(*this);
+       __pSearchBar->SetContentAreaSize(Dimension(0, 0));
+
+       __pSearchListEvent = new (std::nothrow) SearchListEventListener(LIST_ANNEX_STYLE_MARK, __pPresentationModel);
+       AddControl(__pSearchBar);
+
+       __pSearchListView = new (std::nothrow) GroupedListView();
+       __pSearchListView->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
+       __pSearchListView->SetItemProvider(*__pSearchListEvent);
+       __pSearchListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pSearchListView->AddGroupedListViewItemEventListener(*this);
+       __pSearchListView->AddTouchEventListener(*this);
+       __pSearchListView->SetShowState(false);
+       AddControl(__pSearchListView);
+
+       __pBottomLabel = new (std::nothrow) Label();
+       __pBottomLabel->Construct(FloatRectangle(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL, GetClientAreaBoundsF().width, H_BOTTOM_LABEL),
+                                                                                                               ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + INITIAL_SELECTED_COUNT);
+       __pBottomLabel->SetBackgroundColor(Color(COLOR_BOTTOM_LABEL_BG));
+       __pBottomLabel->SetTextColor(Color(COLOR_BOTTOM_LABEL_FONT));
+       __pBottomLabel->SetTextConfig(FONT_SIZE_BOTTOM_LABEL, LABEL_TEXT_STYLE_BOLD);
+       __pBottomLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       __pBottomLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       AddControl(__pBottomLabel);
+
+       return E_SUCCESS;
+}
+
+result
+ContactSelectorForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       if (__pSearchListEvent != null)
+       {
+               delete __pSearchListEvent;
+       }
+       return r;
+}
+
+void
+ContactSelectorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SceneManager *pSceneManager = SceneManager::GetInstance();
+       pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+}
+
+void
+ContactSelectorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       result r = E_SUCCESS;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (actionId)
+       {
+       case IDA_CHECK_SELECT_ALL_CHECKED:
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, true);
+                               }
+                       }
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_UNCHECKED:
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                               }
+                       }
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_FOOTER_DONE:
+               {
+                       ArrayList* contactIdList = new (std::nothrow) ArrayList();
+                       contactIdList->Construct();
+
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
+                               {
+                                       bool isChecked  = false;
+                                       isChecked = __pListView->IsItemChecked(groupIndex, itemIndex);
+                                       if (isChecked == true)
+                                       {
+                                               RecordId contactId = __pPresentationModel->GetContactId(groupIndex, itemIndex);
+                                               contactIdList->Add(*(new (std::nothrow) Integer(contactId)));
+                                       }
+                               }
+                       }
+
+                       pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), contactIdList);
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactSelectorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       if (pArgs != null)
+       {
+               __pPresentationModel->InitializeContactList(pArgs);
+
+               String fastScrollIndex;
+               for (int i = 0; i < __pPresentationModel->GetContactCount(); i++)
+               {
+                       fastScrollIndex.Append(__pPresentationModel->GetKey(i));
+               }
+
+               __pListView->SetFastScrollIndex(fastScrollIndex, false);
+
+               Footer* pFooter = GetFooter();
+               pFooter->SetItemEnabled(1, false);
+       }
+
+       UpdateBottomLabel();
+       __pPresentationModel->AddContactChangeListener(*this);
+}
+
+void
+ContactSelectorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       __pPresentationModel->RemoveContactChangeListener(*this);
+}
+
+void
+ContactSelectorForm::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode)
+{
+       if (mode == SEARCH_BAR_MODE_NORMAL)
+       {
+               int count = __pPresentationModel->GetSearchedContactCount();
+               bool isChecked = true;
+
+               for (int i = 0; i < count; i++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(i, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, i));
+               }
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pListView->SetShowState(true);
+               __pListView->Invalidate(true);
+               __pCheckLabel->SetShowState(true);
+               __pSelectAll->SetShowState(true);
+               __pSelectAll->SetSelected(isChecked);
+               __pSearchListView->SetShowState(false);
+               __pPresentationModel->ResetSearchedContactList();
+               __pSearchListView->UpdateList();
+
+               UpdateBottomLabel();
+       }
+}
+
+void
+ContactSelectorForm::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       String searchText = __pSearchBar->GetText();
+       searchText.Trim();
+
+       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+
+       if (searchText.GetLength() != 0)
+       {
+               __pCheckLabel->SetShowState(false);
+               __pSelectAll->SetShowState(false);
+               __pListView->SetShowState(false);
+               __pSearchListView->SetShowState(true);
+
+               __pSearchListView->UpdateList();
+
+               int count = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+                       __pSearchListView->SetItemChecked(0, index, __pListView->IsItemChecked(groupIndex, itemIndex));
+               }
+
+               __pSearchListView->Invalidate(true);
+       }
+       else
+       {
+               __pCheckLabel->SetShowState(true);
+               __pSelectAll->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pSearchListView->SetShowState(false);
+
+               int count = __pPresentationModel->GetSearchedContactCount();
+               bool isChecked = true;
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pSelectAll->SetSelected(isChecked);
+               __pListView->Invalidate(true);
+       }
+       UpdateBottomLabel();
+}
+
+void
+ContactSelectorForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+int
+ContactSelectorForm::GetGroupCount(void)
+{
+       return __pPresentationModel->GetKeyCount();
+}
+
+int
+ContactSelectorForm::GetItemCount(int groupIndex)
+{
+       int contactCount = __pPresentationModel->GetContactCount(groupIndex);
+       if (contactCount == 0)
+       {
+               contactCount = -1;
+       }
+
+       return contactCount;
+}
+
+Tizen::Ui::Controls::ListItemBase*
+ContactSelectorForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String name;
+       Bitmap* pThumbnail = null;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), LIST_ANNEX_STYLE_MARK);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), pContactsApp->GetListItemSingleLineHeight()), 0, *(static_cast<ICustomElement *>(pCustomElement)));
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::GroupItem*
+ContactSelectorForm::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(__pPresentationModel->GetKey(groupIndex), null);
+
+       return pItem;
+}
+
+bool
+ContactSelectorForm::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
+       pCustomItem->RemoveAllElements();
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+ContactSelectorForm::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+ContactSelectorForm::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+ContactSelectorForm::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state)
+{
+       if (&listView == __pListView)
+       {
+               if (listView.IsItemChecked(groupIndex, itemIndex) == true)
+               {
+                       bool isChecked = true;
+                       for (int groupIndex = 0; groupIndex < listView.GetGroupCount() && isChecked == true; groupIndex++)
+                       {
+                               for (int itemIndex = 0; itemIndex < listView.GetItemCountAt(groupIndex); itemIndex++)
+                               {
+                                       if (listView.IsItemChecked(groupIndex, itemIndex) == false)
+                                       {
+                                               isChecked = false;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       __pSelectAll->SetSelected(isChecked);
+               }
+               else
+               {
+                       __pSelectAll->SetSelected(false);
+               }
+       }
+       else if (&listView == __pSearchListView)
+       {
+               int count = __pPresentationModel->GetSearchedContactCount();
+
+               for (int i = 0; i < count; i++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(i, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, i));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+ContactSelectorForm::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+ContactSelectorForm::OnContactsChanged(void)
+{
+       result r = E_SUCCESS;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+}
+
+void
+ContactSelectorForm::OnCategoriesChanged(void)
+{
+}
+
+result
+ContactSelectorForm::CreateFooterButton()
+{
+       result r = E_SUCCESS;
+
+       Footer* pFooter = GetFooter();
+       pFooter->RemoveAllItems();
+       pFooter->AddActionEventListener(*this);
+
+       FooterItem footerItemCancel;
+       FooterItem footerItemDone;
+
+       footerItemCancel.Construct(IDA_FOOTER_CANCEL);
+       footerItemDone.Construct(IDA_FOOTER_DONE);
+
+       footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+       footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+
+       pFooter->AddItem(footerItemCancel);
+       pFooter->AddItem(footerItemDone);
+
+       return r;
+}
+
+void
+ContactSelectorForm::UpdateBottomLabel(void)
+{
+       int selectedCount = 0;
+       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+       {
+               for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                       {
+                               selectedCount++;
+                       }
+               }
+       }
+
+       String string = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       string.Append(L" (");
+       string.Append(selectedCount);
+       string.Append(L")");
+       __pBottomLabel->SetText(string);
+       __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+       __pBottomLabel->Invalidate(false);
+
+       Footer* pFooter = GetFooter();
+       if (selectedCount > 0 && __pBottomLabel->GetShowState() == false)
+       {
+               __pBottomLabel->SetShowState(true);
+               __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height - H_BOTTOM_LABEL);
+               __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height - H_BOTTOM_LABEL);
+               pFooter->SetItemEnabled(1, true);
+       }
+       else if (selectedCount == 0 && __pBottomLabel->GetShowState() == true)
+       {
+               __pBottomLabel->SetShowState(false);
+               __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height + H_BOTTOM_LABEL);
+               __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height + H_BOTTOM_LABEL);
+               pFooter->SetItemEnabled(1, false);
+       }
+
+       pFooter->Invalidate(true);
+}
+
+void
+ContactSelectorForm::OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index)
+{
+       __pListView->ScrollToItem(__pPresentationModel->GetKeyIndex(index), -1);
+       __pListView->Invalidate(false);
+}
+
+void
+ContactSelectorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactSelectorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+ContactSelectorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+
+               UpdateBottomLabel();
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+ContactSelectorForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+ContactSelectorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+       if (keypadAction == KEYPAD_ACTION_SEARCH)
+       {
+               __pSearchBar->HideKeypad();
+       }
+}
+
+void
+ContactSelectorForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       GroupedListView* pList = static_cast<GroupedListView*>(&const_cast<Control&>(source));
+       if (pList != null)
+       {
+               pList->SetFocus();
+       }
+}
+
+void
+ContactSelectorForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactSelectorForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactSelectorForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactSelectorForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
diff --git a/src/CtContactValueListItemProvider.cpp b/src/CtContactValueListItemProvider.cpp
new file mode 100644 (file)
index 0000000..4b84dbe
--- /dev/null
@@ -0,0 +1,67 @@
+//
+// 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       CtContactValueListItemProvider.cpp
+ * @brief      This is the implementation file for the ContactValueListItemProvider class.
+ */
+
+#include "CtContactValueListItemProvider.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+
+static const int H_ITEM = 112;
+
+ContactValueListItemProvider::ContactValueListItemProvider(Tizen::Base::Collection::IList* pContactValueList)
+: __pContactValueList(pContactValueList)
+{
+}
+
+ContactValueListItemProvider::~ContactValueListItemProvider(void)
+{
+       if (__pContactValueList != null)
+       {
+               __pContactValueList->RemoveAll(true);
+               delete __pContactValueList;
+       }
+}
+
+Tizen::Ui::Controls::ListItemBase*
+ContactValueListItemProvider::CreateItem(int index, int itemWidth)
+{
+       SimpleItem* pItem = new (std::nothrow) SimpleItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), LIST_ANNEX_STYLE_NORMAL);
+       pItem->SetElement(*static_cast<String *>(__pContactValueList->GetAt(index)));
+
+       return pItem;
+}
+
+bool
+ContactValueListItemProvider::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+
+       return true;
+}
+
+int
+ContactValueListItemProvider::GetItemCount(void)
+{
+       return __pContactValueList->GetCount();
+}
diff --git a/src/CtContactsApp.cpp b/src/CtContactsApp.cpp
new file mode 100644 (file)
index 0000000..9d43cce
--- /dev/null
@@ -0,0 +1,793 @@
+//
+// 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       CtContactsApp.cpp
+ * @brief      This is the implementation file for the ContactsApp class.
+ */
+
+#include <FIo.h>
+#include "CtContactsApp.h"
+#include "CtContactListPresentationModel.h"
+#include "CtGroupContactListPresentationModel.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+#include "CtMainFrame.h"
+#include "CtResourceManager.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Io;
+using namespace Tizen::System;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+
+static const wchar_t* SELECTION_MODE = L"selectionMode";
+static const wchar_t* SELECTION_MODE_SINGLE = L"single";
+static const wchar_t* SELECTION_MODE_MULTIPLE = L"multiple";
+static const wchar_t* RETURN_TYPE = L"returnType";
+static const wchar_t* PHONE = L"phone";
+static const wchar_t* EMAIL = L"email";
+static const wchar_t* URL = L"url";
+static const wchar_t* VIEW_TYPE = L"viewType";
+static const wchar_t* CONTACT_ID = L"contactId";
+static const wchar_t* PATH = L"path";
+static const wchar_t* VALUE_VIEW_TYPE_CONTACT = L"contact";
+static const wchar_t* VALUE_VIEW_TYPE_VCF = L"vcf";
+static const wchar_t* VIEW_MIME_TYPE_VCF = L"text/vcard";
+static const wchar_t* VIEW_URI_VCF_PREFIX = L"file:///";
+
+static const wchar_t* FONT_SIZE_STR_NORMAL = L"medium";
+
+static const int LIST_ITEM_SINGLE_LINE_NORMAL_HEIGHT = 112;
+static const int FONT_SIZE_NORMAL = 44;
+
+ContactsApp::ContactsApp(void)
+ : __initialSceneId(IDSCN_CONTACT_LIST)
+ , __pArgs(null)
+ , __operationId(L"")
+ , __selectionMode(APP_CONTROL_SELECTION_MODE_NONE)
+ , __returnType(APP_CONTROL_RETURN_TYPE_NONE)
+ , __requestId(0)
+{
+       __listenerList.Construct();
+}
+
+ContactsApp::~ContactsApp(void)
+{
+}
+
+UiApp*
+ContactsApp::CreateInstance(void)
+{
+       static ContactsApp* pContactsAppInstance = null;
+       if (pContactsAppInstance == null)
+       {
+               pContactsAppInstance = new (std::nothrow) ContactsApp();
+       }
+
+       return pContactsAppInstance;
+}
+
+bool
+ContactsApp::OnAppInitializing(Tizen::App::AppRegistry& appRegistry)
+{
+       AppControlProviderManager* pProviderManager = AppControlProviderManager::GetInstance();
+       result r = pProviderManager->SetAppControlProviderEventListener(this);
+       TryReturn(r == E_SUCCESS, false, "[%s] Failed to set AppControlProviderEventListener", GetErrorMessage(r));
+
+       r = SettingInfo::AddSettingEventListener(*this);
+       if (IsFailed(r))
+       {
+               AppLogDebug("[%s] Failed to add SettingEventListener", GetErrorMessage(r));
+       }
+
+       return true;
+}
+
+bool
+ContactsApp::OnAppInitialized(void)
+{
+       InitializeFontSize();
+
+       MainFrame* pContactFrame = new (std::nothrow) MainFrame();
+       pContactFrame->Construct();
+       pContactFrame->SetName(ResourceManager::GetString(L"IDS_COM_BODY_CONTACTS"));
+       AddFrame(*pContactFrame);
+
+       return true;
+}
+
+bool
+ContactsApp::OnAppWillTerminate(void)
+{
+       return true;
+}
+
+bool
+ContactsApp::OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination)
+{
+       result r = SettingInfo::RemoveSettingEventListener(*this);
+       if (IsFailed(r))
+       {
+               AppLogDebug("[%s] Failed to remove SettingEventListener", GetErrorMessage(r));
+       }
+
+       return true;
+}
+
+void
+ContactsApp::OnForeground(void)
+{
+       IEnumerator* pEnum = __listenerList.GetEnumeratorN();
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               IContactsAppStateChangeEventListener* pInterface = static_cast<IContactsAppStateChangeEventListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+
+                       return;
+               }
+               pInterface->OnForeground();
+       }
+       delete pEnum;
+}
+
+void
+ContactsApp::OnBackground(void)
+{
+       IEnumerator* pEnum = __listenerList.GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               IContactsAppStateChangeEventListener* pInterface = static_cast<IContactsAppStateChangeEventListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+
+                       return;
+               }
+               pInterface->OnBackground();
+       }
+       delete pEnum;
+}
+
+void
+ContactsApp::OnLowMemory(void)
+{
+}
+
+void
+ContactsApp::OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel)
+{
+}
+
+void
+ContactsApp::OnScreenOn(void)
+{
+}
+
+void
+ContactsApp::OnScreenOff(void)
+{
+}
+
+void
+ContactsApp::OnAppCheckpointing(Tizen::App::AppRegistry& appRegistry)
+{
+}
+
+void
+ContactsApp::OnSettingChanged(Tizen::Base::String& key)
+{
+       if (key.Equals(SETTING_KEY_LANGUAGE, false) == true || key.Equals(SETTING_KEY_COUNTRY, false) == true || key.Equals(SETTING_KEY_FONTSIZE, false) == true)
+       {
+               if (__operationId.Equals(OPERATION_ID_PICK, true))
+               {
+                       result r = AppControlProviderManager::GetInstance()->SendAppControlResult(__requestId, APP_CTRL_RESULT_TERMINATED, null);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to return result.", GetErrorMessage(r));
+               }
+               Terminate();
+       }
+}
+
+void
+ContactsApp::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("reqId : %ld, operationId : %ls", reqId, operationId.GetPointer());
+
+       if (pExtraData != null)
+       {
+               IMapEnumerator* pEnum = pExtraData->GetMapEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       String* pKey = static_cast<String*>(pEnum->GetKey());
+                       String* pValue = static_cast<String*>(pEnum->GetValue());
+
+                       AppLogDebug("extraData : %ls:%ls", pKey->GetPointer(), pValue->GetPointer());
+               }
+               delete pEnum;
+       }
+
+       result r = E_SUCCESS;
+
+       ArrayList* pArgs = new (std::nothrow) ArrayList();
+       pArgs->Construct();
+
+       if (operationId.Equals(CONTACT_OPERATION_ID_MAIN, true))
+       {
+               __operationId = L"";
+       }
+       else if (operationId.Equals(CONTACT_OPERATION_ID_PICK, true))
+       {
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the pick operation, the (key,value) pairs should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               const String* pItemType = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_TYPE)));
+               if (pItemType == null || pItemType->Equals(ITEM_TYPE_PERSON, true) == false)
+               {
+                       AppLogDebug("To launch AppControl by the pick operation, the item type should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               const String* pValue = null;
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_SELECTION_MODE)));
+               if (pValue == null || pValue->GetPointer() == null)
+               {
+                       AppLogDebug("To launch AppControl by the pick operation, the selection mode should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               String* pSelectionMode = new (std::nothrow) String(SELECTION_MODE);
+               pSelectionMode->Append(DELIMITER);
+               pSelectionMode->Append(*pValue);
+               pArgs->Add(pSelectionMode);
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_RESULT_TYPE)));
+               if (pValue == null ||  pValue->GetPointer() == null)
+               {
+                       AppLogDebug("To launch AppControl by the pick operation, the selection mode should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+                       Terminate();
+
+                       return;
+               }
+
+               String* pReturnType = new (std::nothrow) String(RETURN_TYPE);
+               pReturnType->Append(DELIMITER);
+               pReturnType->Append(*pValue);
+               pArgs->Add(pReturnType);
+
+               r = InitializeAppControl(pArgs);
+               if (IsFailed(r))
+               {
+                       AppLogDebug("[%s] initializing app control failed", GetErrorMessage(r));
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               if (__selectionMode == APP_CONTROL_SELECTION_MODE_SINGLE)
+               {
+                       __initialSceneId = IDSCN_CONTACT_LIST;
+               }
+               else if (__selectionMode == APP_CONTROL_SELECTION_MODE_MULTI)
+               {
+                       __initialSceneId = IDSCN_CONTACT_LIST_EDITOR;
+               }
+               __operationId = OPERATION_ID_PICK;
+       }
+       else if (operationId.Equals(CONTACT_OPERATION_ID_ADD, true))
+       {
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the add operation, the (key,value) pairs should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               const String* pItemType = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_TYPE)));
+               if (pItemType == null || pItemType->Equals(ITEM_TYPE_CONTACT, true) == false)
+               {
+                       AppLogDebug("To launch AppControl by the add operation, the item type should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               String* pKey = null;
+               const String* pValue = null;
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_PHONE)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(PHONE);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_EMAIL)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(EMAIL);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_URL)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(URL);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               __initialSceneId = IDSCN_CONTACT_EDITOR;
+               __operationId = OPERATION_ID_ADD;
+       }
+       else if (operationId.Equals(CONTACT_OPERATION_ID_EDIT, true))
+       {
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the edit operation, the (key,value) pairs should be input.");
+                       Terminate();
+
+                       return;
+               }
+
+               const String* pItemType = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_TYPE)));
+               if (pItemType == null || pItemType->Equals(ITEM_TYPE_PERSON, true) == false)
+               {
+                       AppLogDebug("To launch AppControl by the edit operation, the item type should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               String* pKey = null;
+               const String* pValue = null;
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_ID)));
+               if (pValue == null || pValue->GetPointer() == null)
+               {
+                       AppLogDebug("To launch AppControl by the edit operation, the item_id should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               pKey = new (std::nothrow) String(RETURN_TYPE_ITEM_ID);
+               pKey->Append(DELIMITER);
+               pKey->Append(*pValue);
+               pArgs->Add(pKey);
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_PHONE)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(PHONE);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_EMAIL)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(EMAIL);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_URL)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(URL);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               __initialSceneId = IDSCN_CONTACT_EDITOR;
+               __operationId = OPERATION_ID_EDIT;
+       }
+       else if (operationId.Equals(CONTACT_OPERATION_ID_CHOOSE, true))
+       {
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the choose operation, the (key,value) pairs should be input.");
+                       Terminate();
+
+                       return;
+               }
+
+               const String* pItemType = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_TYPE)));
+               if (pItemType == null || pItemType->Equals(ITEM_TYPE_PERSON, true) == false)
+               {
+                       AppLogDebug("To launch AppControl by the edit operation, the item type should be input.");
+                       r = AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+
+                       Terminate();
+
+                       return;
+               }
+
+               String* pKey = null;
+               const String* pValue = null;
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_PHONE)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(PHONE);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_EMAIL)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(EMAIL);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_URL)));
+               if (pValue && pValue->GetPointer())
+               {
+                       pKey = new (std::nothrow) String(URL);
+                       pKey->Append(DELIMITER);
+                       pKey->Append(*pValue);
+                       pArgs->Add(pKey);
+               }
+
+               __initialSceneId = IDSCN_CONTACT_LIST;
+               __operationId = OPERATION_ID_EDIT;
+       }
+       else if (operationId.Equals(CONTACT_OPERATION_ID_VIEW, true))
+       {
+               String* pErrorType = null;
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the view operation, the (key,value) pairs should be input.");
+                       Terminate();
+
+                       return;
+               }
+
+               const String* pItemType = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_TYPE)));
+               if (pItemType == null || pItemType->Equals(ITEM_TYPE_PERSON, true) == false)
+               {
+                       AppLogDebug("To launch AppControl by the view operation, the item type should be input.");
+                       pErrorType = new (std::nothrow) String(ResourceManager::GetString(L"IDS_RSSR_BODY_INVALID_FORMAT"));
+               }
+
+               String* pViewType = new (std::nothrow) String(VIEW_TYPE);
+               pViewType->Append(DELIMITER);
+               pViewType->Append(VALUE_VIEW_TYPE_CONTACT);
+               pArgs->Add(pViewType);
+
+               const String* pValue = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_KEY_ITEM_ID)));
+               if (pValue == null || pValue->GetPointer() == null)
+               {
+                       AppLogDebug("To launch AppControl by the view operation, the itemId should be input.");
+                       if (pErrorType == null)
+                       {
+                               pErrorType = new (std::nothrow) String(ResourceManager::GetString(L"IDS_RSSR_BODY_INVALID_FORMAT"));
+                       }
+               }
+
+               String* pKey = new (std::nothrow) String(CONTACT_ID);
+               pKey->Append(DELIMITER);
+               if (pValue != null)
+               {
+                       pKey->Append(*pValue);
+               }
+               pArgs->Add(pKey);
+               pArgs->Add(pErrorType);
+
+               __initialSceneId = IDSCN_CONTACT_DETAILS;
+               __operationId = OPERATION_ID_VIEW;
+       }
+       else if (operationId.Equals(OPERATION_ID_VIEW, true))
+       {
+               String* pErrorType = null;
+               String vcfPrefix(VIEW_URI_VCF_PREFIX);
+               String path;
+               String mimeType;
+
+               if (pUriData == null)
+               {
+                       AppLogDebug("To launch AppControl by the view operation, the uri data should be input.");
+                       pErrorType = new (std::nothrow) String(ResourceManager::GetString(L"IDS_RSSR_BODY_INVALID_FORMAT"));
+               }
+               else
+               {
+                       if (pMimeType != null)
+                       {
+                               mimeType.Append(*pMimeType);
+                       }
+
+                       if (pUriData->StartsWith(vcfPrefix, 0))
+                       {
+                               pUriData->SubString(vcfPrefix.GetLength() - 1, pUriData->GetLength() - vcfPrefix.GetLength() + 1, path);
+                               mimeType.Clear();
+                               mimeType.Append(VIEW_MIME_TYPE_VCF);
+                       }
+                       else
+                       {
+                               path.Append(*pUriData);
+                       }
+
+                       if (mimeType.Equals(VIEW_MIME_TYPE_VCF, true) == false)
+                       {
+                               AppLogDebug("The MIME type is wrong.");
+                               pErrorType = new (std::nothrow) String(ResourceManager::GetString(L"IDS_RSSR_BODY_INVALID_FORMAT"));
+                       }
+                       else if (File::IsFileExist(path) == false)
+                       {
+                               AppLogDebug("The vcf file does not exist.");
+                               pErrorType = new (std::nothrow) String(ResourceManager::GetString(L"IDS_MP_POP_INVALID_FILE"));
+                       }
+               }
+
+               String* pViewType = new (std::nothrow) String(VIEW_TYPE);
+               pViewType->Append(DELIMITER);
+               pViewType->Append(VALUE_VIEW_TYPE_VCF);
+
+               pArgs->Add(pViewType);
+
+               String* pKey = new (std::nothrow) String(PATH);
+               pKey->Append(DELIMITER);
+               pKey->Append(path);
+
+               pArgs->Add(pKey);
+
+               pArgs->Add(pErrorType);
+
+               __initialSceneId = IDSCN_CONTACT_DETAILS;
+               __operationId = OPERATION_ID_VIEW;
+       }
+       else if (operationId.Equals(OPERATION_ID_CONFIGURE, true))
+       {
+               __initialSceneId = IDSCN_SETTINGS;
+               __operationId = OPERATION_ID_CONFIGURE;
+       }
+       else
+       {
+               AppLogDebug("Invalid OperationId");
+               __operationId = L"";
+       }
+
+       __pArgs = pArgs;
+       __requestId = reqId;
+}
+
+result
+ContactsApp::InitializeAppControl(Tizen::Base::Collection::IList* pArgs)
+{
+       TryReturn(pArgs != null, E_INVALID_ARG, "[E_INVALID_ARG] app control argument is invalid");
+
+       String key;
+       String value;
+       String* pArgString = static_cast<String*>(pArgs->GetAt(0));
+       TryReturn(pArgString, E_FAILURE, "[E_FAILURE] Unable to cast argument string");
+       result r = ParseAppControlArgument(*pArgString, key, value);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to parse the argument", GetErrorMessage(r));
+
+       if (key.Equals(SELECTION_MODE, true))
+       {
+               if (value.Equals(SELECTION_MODE_SINGLE, true))
+               {
+                       __selectionMode = APP_CONTROL_SELECTION_MODE_SINGLE;
+               }
+               else if (value.Equals(SELECTION_MODE_MULTIPLE, true))
+               {
+                       __selectionMode = APP_CONTROL_SELECTION_MODE_MULTI;
+               }
+               else
+               {
+                       AppLogDebug("selectionMode of AppControl[PICK] should be either single or multiple. [%ls] has been input", value.GetPointer());
+                       return E_FAILURE;
+               }
+       }
+
+       pArgString = static_cast<String*>(pArgs->GetAt(1));
+       TryReturn(pArgString, E_FAILURE, "[E_FAILURE] Unable to cast argument string");
+       r = ParseAppControlArgument(*pArgString, key, value);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to parse the argument", GetErrorMessage(r));
+
+       if (key.Equals(RETURN_TYPE, true))
+       {
+               if (value.Equals(RETURN_TYPE_PHONE, true))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_PHONE;
+               }
+               else if (value.Equals(RETURN_TYPE_EMAIL, true))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_EMAIL;
+               }
+               else if (value.Equals(RETURN_TYPE_ITEM_ID, true))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_ITEM_ID;
+               }
+               else if (value.Equals(RETURN_TYPE_VCARD, true))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_VCARD;
+               }
+               else
+               {
+                       AppLogDebug("returnType of AppControl[PICK] should be one of {phone, email, contactId, and vcard}. [%ls] has been input", value.GetPointer());
+                       return E_FAILURE;
+               }
+       }
+
+       if (__returnType == APP_CONTROL_RETURN_TYPE_VCARD && __selectionMode == APP_CONTROL_SELECTION_MODE_MULTI)
+       {
+               return E_FAILURE;
+       }
+
+       return E_SUCCESS;
+}
+
+result
+ContactsApp::ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content)
+{
+       result r = E_SUCCESS;
+
+       if (argument.IsEmpty() || argument.Contains(DELIMITER) == false)
+       {
+               return E_FAILURE;
+       }
+
+       StringTokenizer stringToken(argument, DELIMITER);
+
+       r = stringToken.GetNextToken(type);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get type", GetErrorMessage(r));
+
+       r = stringToken.GetNextToken(content);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get content", GetErrorMessage(r));
+
+       return r;
+}
+
+Tizen::Base::String
+ContactsApp::GetOperationId(void)
+{
+       return __operationId;
+}
+
+AppControlSelectionMode
+ContactsApp::GetSelectionMode(void)
+{
+       return __selectionMode;
+}
+
+AppControlReturnType
+ContactsApp::GetReturnType(void)
+{
+       return __returnType;
+}
+
+RequestId
+ContactsApp::GetRequestId(void)
+{
+       return __requestId;
+}
+
+Tizen::Ui::Scenes::SceneId
+ContactsApp::GetInitialSceneId(void)
+{
+       return __initialSceneId;
+}
+
+Tizen::Base::Collection::IList*
+ContactsApp::GetArguments(void)
+{
+       return __pArgs;
+}
+
+void
+ContactsApp::InitializeFontSize(void)
+{
+       String fontSizeStr = "";
+       SettingInfo::GetValue("http://tizen.org/setting/font.size", fontSizeStr);
+       __fontSize = Tizen::Ui::UiConfiguration::GetFontSize(fontSizeStr);
+       if (__fontSize <= 0)
+       {
+               __fontSize = FONT_SIZE_NORMAL;
+       }
+       AppLogDebug("__fontSize = %d", __fontSize);
+}
+
+int
+ContactsApp::GetFontSize(void)
+{
+       return __fontSize;
+}
+
+int
+ContactsApp::GetListItemSingleLineHeight(void)
+{
+       int listItemHeight = LIST_ITEM_SINGLE_LINE_NORMAL_HEIGHT;
+       listItemHeight += (__fontSize - Tizen::Ui::UiConfiguration::GetFontSize(FONT_SIZE_STR_NORMAL));
+       return listItemHeight;
+}
+
+int
+ContactsApp::GetFontHeightOffset(void)
+{
+       return (__fontSize - Tizen::Ui::UiConfiguration::GetFontSize(FONT_SIZE_STR_NORMAL));
+}
+
+
+void
+ContactsApp::AddContactsAppChangeEventListener(const IContactsAppStateChangeEventListener& listener)
+{
+       __listenerList.Add(listener);
+}
+
+void
+ContactsApp::RemoveContactsAppChangeEventListener(const IContactsAppStateChangeEventListener& listener)
+{
+       __listenerList.Remove(listener);
+}
diff --git a/src/CtFavoriteListEditorPanel.cpp b/src/CtFavoriteListEditorPanel.cpp
new file mode 100644 (file)
index 0000000..32d89ef
--- /dev/null
@@ -0,0 +1,873 @@
+//
+// 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       CtFavoriteListEditorPanel.cpp
+ * @brief      This is the implementation file for the FavoriteListEditorPanel class.
+ */
+
+#include "CtContactsApp.h"
+#include "CtCommonUtil.h"
+#include "CtFavoriteListEditorPanel.h"
+#include "CtFavoriteListPresentationModel.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+static const int IDA_FOOTER_REMOVE_FAVORITE = 0;
+static const int IDA_FOOTER_CANCEL = 1;
+static const int IDA_FOOTER_DONE = 2;
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+static const int IDA_POPUP_CONTACT_VALUE_CLOSE = 20;
+
+static const int W_INITAIL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int W_ICONLISTVIEW_LEFT_MARGIN = 14;
+static const int W_ICONLISTVIEW_RIGHT_MARGIN = 10;
+static const int W_ICONLISTVIEW_ITEM = 216;
+static const int H_ICONLISTVIEW_ITEM = 216;
+static const int H_TEXT_BACKGROUND = 64;
+static const int H_TEXT_SPACE = 96;
+static const int W_ITEM_SPACE = 24;
+static const int H_ITEM_SPACE = 24;
+static const int W_CONTACT_VALUE_POPUP = 688;
+static const int H_CONTACT_VALUE_POPUP = 532;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 338;
+static const int Y_CLOSE_BUTTON = 358;
+static const int W_CLOSE_BUTTON = 394;
+static const int H_CLOSE_BUTTON = 74;
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+static const int H_BOTTOM_LABEL = 48;
+static const int W_NAME_TEXT_MARGIN = 10;
+
+static const int FONT_SIZE_WITH_THUMBNAIL = 24;
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+static const int FONT_SIZE = 40;
+static const int FONT_SIZE_BOTTOM_LABEL = 32;
+
+static const wchar_t* IDB_NO_FAVORITES = L"00_Nocontents_picture.png";
+
+static const unsigned int COLOR_ITEM_BACKGROUND = Color32<201, 201, 201>::Value;
+static const unsigned int COLOR_ITEM_TEXT_BACKGROUND = Color32<0, 0, 0, 89>::Value;
+static const unsigned int COLOR_TEXT_WITH_THUMBNAIL = Color32<249, 249, 249>::Value;
+static const unsigned int COLOR_TEXT = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_LINE = Color32<225, 225, 225, 26>::Value;
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<68, 68, 68>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<255, 255, 255>::Value;
+
+FavoriteListEditorPanel::FavoriteListEditorPanel(void)
+: __pFavoriteListView(null)
+, __pMultipleContactValuePopup(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pBottomLabel(null)
+, __pTempContactValueHashMap(null)
+, __pPresentationModel(null)
+, __pContactValueListProvider(null)
+{
+}
+
+FavoriteListEditorPanel::~FavoriteListEditorPanel(void)
+{
+}
+
+void
+FavoriteListEditorPanel::Initialize(void)
+{
+       Construct(Rectangle(0, 0, W_INITAIL_PANEL, H_INITIAL_PANEL));
+}
+
+result
+FavoriteListEditorPanel::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       FloatRectangle clientBounds = ((MainForm*)pForm)->GetClientBounds();
+
+       SetBounds(FloatRectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = FavoriteListPresentationModel::GetInstance();
+
+       __pFavoriteListView = new (std::nothrow) IconListView();
+       __pFavoriteListView->Construct(Rectangle(0, 0, clientBounds.width, clientBounds.height - H_BOTTOM_LABEL), Dimension(W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM), ICON_LIST_VIEW_STYLE_MARK);
+       __pFavoriteListView->SetItemProvider(*this);
+       __pFavoriteListView->AddIconListViewItemEventListener(*this);
+       __pFavoriteListView->SetItemLayoutHorizontalAlignment(ALIGNMENT_LEFT);
+       __pFavoriteListView->SetItemLayoutVerticalAlignment(ALIGNMENT_TOP);
+       __pFavoriteListView->SetItemSpacing(W_ITEM_SPACE, H_ITEM_SPACE);
+       __pFavoriteListView->SetMargin(MARGIN_TYPE_LEFT, W_ICONLISTVIEW_LEFT_MARGIN);
+       __pFavoriteListView->SetMargin(MARGIN_TYPE_RIGHT, W_ICONLISTVIEW_RIGHT_MARGIN);
+       __pFavoriteListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_LEFT);
+       __pFavoriteListView->SetTouchAnimationEnabled(false);
+
+       AddControl(__pFavoriteListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_FAVORITES);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, clientBounds.width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_NO_FAVOURITES"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pBottomLabel = new (std::nothrow) Label();
+       __pBottomLabel->Construct(FloatRectangle(0, clientBounds.height - H_BOTTOM_LABEL, clientBounds.width, H_BOTTOM_LABEL),
+                                                               ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + INITIAL_SELECTED_COUNT);
+       __pBottomLabel->SetBackgroundColor(Color(COLOR_BOTTOM_LABEL_BG));
+       __pBottomLabel->SetTextColor(Color(COLOR_BOTTOM_LABEL_FONT));
+       __pBottomLabel->SetTextConfig(FONT_SIZE_BOTTOM_LABEL, LABEL_TEXT_STYLE_BOLD);
+       __pBottomLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       __pBottomLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       AddControl(__pBottomLabel);
+
+       __pTempContactValueHashMap = new (std::nothrow) HashMap();
+       __pTempContactValueHashMap->Construct();
+
+       return r;
+}
+
+result
+FavoriteListEditorPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       if (__pTempContactValueHashMap != null)
+       {
+               __pTempContactValueHashMap->RemoveAll(true);
+               delete __pTempContactValueHashMap;
+       }
+
+       delete __pMultipleContactValuePopup;
+
+       return r;
+}
+
+void
+FavoriteListEditorPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                       }
+               }
+               break;
+       case IDA_HEADER_GROUPS:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_HEADER_FAVORITES:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                       }
+               }
+               break;
+       case IDA_FOOTER_REMOVE_FAVORITE:
+               {
+                       RemoveFavorites();
+                       pSceneManager->GoBackward(BackwardSceneTransition());
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       pSceneManager->GoBackward(BackwardSceneTransition());
+               }
+               break;
+       case IDA_FOOTER_DONE:
+               {
+                       ReturnMultipleValues();
+               }
+               break;
+       case IDA_POPUP_CONTACT_VALUE_CLOSE:
+               {
+                       HideContactValuePopup();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+FavoriteListEditorPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveAllItems();
+       pFooter->RemoveAllButtons();
+       pFooter->AddActionEventListener(*this);
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               FloatRectangle clientBounds = ((MainForm*)pForm)->GetClientBounds();
+
+               SetBounds(FloatRectangle(0, 0, clientBounds.width, clientBounds.height));
+
+               pFooter->SetShowState(true);
+
+               __pPresentationModel->InitializeFavoriteList(pContactsApp->GetReturnType());
+               __pFavoriteListView->UpdateList();
+
+               FooterItem footerItemDone;
+               footerItemDone.Construct(IDA_FOOTER_DONE);
+               footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+               pFooter->AddItem(footerItemDone);
+
+               if (__pPresentationModel->GetFavoriteCount() > 0)
+               {
+                       for (int index = 0; index < __pPresentationModel->GetFavoriteCount(); index++)
+                       {
+                               __pFavoriteListView->SetItemChecked(index, false);
+                       }
+
+                       pFooter->SetItemEnabled(0, false);
+
+                       __pFavoriteListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(0, false);
+                       __pFavoriteListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+       }
+       else
+       {
+               for (int index = 0; index < __pPresentationModel->GetFavoriteCount(); index++)
+               {
+                       __pFavoriteListView->SetItemChecked(index, false);
+               }
+
+               __pPresentationModel->InitializeFavoriteList();
+               __pFavoriteListView->UpdateList();
+
+               if (__pPresentationModel->GetFavoriteCount() > 0)
+               {
+                       __pFavoriteListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+               else
+               {
+                       __pFavoriteListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+
+               FooterItem footerItemCancel;
+               footerItemCancel.Construct(IDA_FOOTER_CANCEL);
+               footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pFooter->AddItem(footerItemCancel);
+
+               FooterItem footerItemRemove;
+               footerItemRemove.Construct(IDA_FOOTER_REMOVE_FAVORITE);
+               footerItemRemove.SetText(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"));
+               pFooter->AddItem(footerItemRemove);
+               pFooter->SetItemEnabled(1, false);
+       }
+
+       UpdateBottomLabel();
+
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       delete pArgs;
+}
+
+void
+FavoriteListEditorPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+}
+
+void
+FavoriteListEditorPanel::OnContactsChanged(void)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       HideContactValuePopup();
+
+       Footer* pFooter = pForm->GetFooter();
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               int favoriteCount = __pPresentationModel->GetFavoriteCount();
+               for (int index = 0; index < favoriteCount; index++)
+               {
+                       __pFavoriteListView->SetItemChecked(index, false);
+               }
+
+               __pPresentationModel->InitializeFavoriteList(pContactsApp->GetReturnType());
+
+               if (__pPresentationModel->GetFavoriteCount() > 0)
+               {
+                       pFooter->SetItemEnabled(0, false);
+                       pFooter->Invalidate(true);
+
+                       __pFavoriteListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+                       __pBottomLabel->SetShowState(true);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(0, false);
+
+                       __pFavoriteListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+       }
+       else
+       {
+               for (int index = 0; index < __pPresentationModel->GetFavoriteCount(); index++)
+               {
+                       __pFavoriteListView->SetItemChecked(index, false);
+               }
+
+               __pPresentationModel->InitializeFavoriteList();
+
+               if (__pPresentationModel->GetFavoriteCount() > 0)
+               {
+                       pFooter->SetItemEnabled(1, false);
+                       pFooter->Invalidate(true);
+
+                       __pFavoriteListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+                       __pBottomLabel->SetShowState(true);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(1, false);
+                       __pFavoriteListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+       }
+
+       __pFavoriteListView->UpdateList();
+
+       UpdateBottomLabel();
+}
+
+void
+FavoriteListEditorPanel::OnCategoriesChanged(void)
+{
+}
+
+void
+FavoriteListEditorPanel::OnIconListViewItemReordered(Tizen::Ui::Controls::IconListView &iconListView, int indexFrom, int indexTo)
+{
+}
+
+void
+FavoriteListEditorPanel::OnIconListViewItemStateChanged(Tizen::Ui::Controls::IconListView &iconListView, int index, Tizen::Ui::Controls::IconListViewItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE ||
+                       pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       IList* pList = __pPresentationModel->GetMultiValuesN(pContactsApp->GetReturnType(), index);
+                       if (pList == null)
+                       {
+                               HashMap* pReturnValue = new (std::nothrow) HashMap();
+                               pReturnValue->Construct();
+
+                               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+                               return;
+                       }
+
+                       if (iconListView.IsItemChecked(index) == true)
+                       {
+                               if (pList->GetCount() > 1)
+                               {
+                                       iconListView.SetItemChecked(index, false);
+                                       __pContactValueListProvider = new (std::nothrow) ContactValueListItemProvider(pList);
+                                       ShowContactValuePopup(index);
+                               }
+                               else if (pList->GetCount() == 1)
+                               {
+                                       String* pReturnValue = static_cast<String*>(pList->GetAt(0));
+                                       int blankIndex = 0;
+                                       pReturnValue->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                       pReturnValue->Remove(0, blankIndex + 1);
+                                       __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(index)), *(new (std::nothrow) String(*pReturnValue)));
+                                       delete pList;
+                               }
+
+                       }
+                       else
+                       {
+                               __pTempContactValueHashMap->Remove(Integer(index), true);
+                       }
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+FavoriteListEditorPanel::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+FavoriteListEditorPanel::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int selectedIndex = -1;
+       Integer::Parse(listView.GetName(), selectedIndex);
+
+       IList* pList = __pPresentationModel->GetMultiValuesN(pContactsApp->GetReturnType(), selectedIndex);
+       if (pList == null)
+       {
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+               return;
+       }
+
+       String* pReturnValueInfo = static_cast<String*>(pList->GetAt(index));
+       int blankIndex = 0;
+       pReturnValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+       pReturnValueInfo->Remove(0, blankIndex + 1);
+       __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(selectedIndex)), *(new (std::nothrow) String(*pReturnValueInfo)));
+
+       delete pList;
+
+       __pFavoriteListView->SetItemChecked(selectedIndex, true);
+       HideContactValuePopup();
+       UpdateBottomLabel();
+}
+
+void
+FavoriteListEditorPanel::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+Tizen::Ui::Controls::IconListViewItem*
+FavoriteListEditorPanel::CreateItem(int index)
+{
+       Bitmap* pThumbnail = null;
+       String name;
+       Font textFont;
+       Color textColor;
+       int textHeight;
+       int textY;
+       TextHorizontalAlignment alignment = TEXT_ALIGNMENT_LEFT;
+
+       if (__pPresentationModel->GetFavoriteItemInfo(index, name, pThumbnail) != E_SUCCESS)
+       {
+               return null;
+       }
+
+       Canvas* pCanvas = new (std::nothrow) Canvas();
+       pCanvas->Construct(Rectangle(0, 0, W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM));
+       pCanvas->Clear();
+
+       if (pThumbnail != null)
+       {
+               textFont.Construct(FONT_STYLE_BOLD , FONT_SIZE_WITH_THUMBNAIL);
+               textY = H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND;
+               textHeight = H_TEXT_BACKGROUND;
+               textColor = Color(COLOR_TEXT_WITH_THUMBNAIL);
+
+               pCanvas->DrawBitmap(pCanvas->GetBounds(), *pThumbnail, Rectangle(0, 0, pThumbnail->GetWidth(), pThumbnail->GetHeight()));
+               pCanvas->SetForegroundColor(Color(COLOR_LINE));
+               pCanvas->DrawLine(Point(0, H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND), Point(W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND));
+               pCanvas->FillRectangle(Color(COLOR_ITEM_TEXT_BACKGROUND), Rectangle(0, H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND, W_ICONLISTVIEW_ITEM, H_TEXT_BACKGROUND));
+       }
+       else
+       {
+               textFont.Construct(FONT_STYLE_BOLD , FONT_SIZE);
+               textY = (H_ICONLISTVIEW_ITEM / 2) - (H_TEXT_SPACE / 2);
+               textHeight = H_TEXT_SPACE;
+               textColor = Color(COLOR_TEXT);
+               alignment = TEXT_ALIGNMENT_CENTER;
+
+               pCanvas->FillRectangle(Color(COLOR_ITEM_BACKGROUND), pCanvas->GetBounds());
+       }
+
+       EnrichedText* pEnrichedTextName = new (std::nothrow) EnrichedText();
+       pEnrichedTextName->Construct(Dimension(W_ICONLISTVIEW_ITEM - (W_NAME_TEXT_MARGIN * 2), textHeight));
+       pEnrichedTextName->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedTextName->SetHorizontalAlignment(alignment);
+       pEnrichedTextName->SetTextWrapStyle(TEXT_WRAP_WORD_WRAP);
+       pEnrichedTextName->SetTextAbbreviationEnabled(true);
+
+       TextElement* pTextElementName = new (std::nothrow) TextElement();
+       pTextElementName->Construct(name);
+       pTextElementName->SetFont(textFont);
+       pTextElementName->SetTextColor(textColor);
+
+       pEnrichedTextName->Add(*pTextElementName);
+
+       pCanvas->DrawText(Point(W_NAME_TEXT_MARGIN, textY), *pEnrichedTextName);
+
+       Bitmap* pBitmapItem = new (std::nothrow) Bitmap();
+       pBitmapItem->Construct(*pCanvas, Rectangle(0, 0, W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM));
+
+       IconListViewItem* pFavoriteItem = new (std::nothrow) IconListViewItem();
+       pFavoriteItem->Construct(*pBitmapItem);
+
+       delete pThumbnail;
+       delete pCanvas;
+       delete pBitmapItem;
+       delete pEnrichedTextName;
+       delete pTextElementName;
+
+       return pFavoriteItem;
+}
+
+bool
+FavoriteListEditorPanel::DeleteItem(int index, Tizen::Ui::Controls::IconListViewItem *pItem)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+int
+FavoriteListEditorPanel::GetItemCount(void)
+{
+       return __pPresentationModel->GetFavoriteCount();
+}
+
+void
+FavoriteListEditorPanel::RemoveFavorites(void)
+{
+       result r = E_SUCCESS;
+
+       for (int i = 0; i < __pPresentationModel->GetFavoriteCount(); i++)
+       {
+               if (__pFavoriteListView->IsItemChecked(i))
+               {
+                       r = __pPresentationModel->SetAsFavorite(__pPresentationModel->GetContactId(i), false);
+
+                       if (r == E_STORAGE_FULL)
+                       {
+                               CommonUtil::showMemoryFullMessageBox();
+                               break;
+                       }
+               }
+       }
+}
+
+void
+FavoriteListEditorPanel::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+       result r = pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+       AppLogDebug("[%s] The return result from SendAppControlResult(), AppCtrlResult value : %d.", GetErrorMessage(r), appCtrlResult);
+
+       UiApp::GetInstance()->Terminate();
+}
+
+void
+FavoriteListEditorPanel::ReturnMultipleValues(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               String keyType;
+               ArrayList* pValueList = new (std::nothrow) ArrayList();
+               pValueList->Construct();
+
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_ITEM_ID)
+               {
+                       for (int index = 0; index < __pPresentationModel->GetFavoriteCount(); index++)
+                       {
+                               if (__pFavoriteListView->IsItemChecked(index))
+                               {
+                                       int contactId = __pPresentationModel->GetContactId(index);
+                                       pValueList->Add(new (std::nothrow) String(Integer::ToString(contactId)));
+                               }
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), pValueList);
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+
+                       return;
+               }
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       keyType.Append(CONTACT_KEY_PHONE);
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       keyType.Append(CONTACT_KEY_EMAIL);
+               }
+               else
+               {
+                       delete pValueList;
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+                       return;
+               }
+
+               IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+               while (pMapEnum->MoveNext() == E_SUCCESS)
+               {
+                       String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                       pValueList->Add(new (std::nothrow) String(*pValue));
+               }
+               delete pMapEnum;
+
+               pReturnValue->Add(new (std::nothrow) String(keyType), pValueList);
+
+               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+       }
+}
+
+void
+FavoriteListEditorPanel::ShowContactValuePopup(int index)
+{
+       String name;
+       Bitmap* pEmpty = null;
+
+       delete __pMultipleContactValuePopup;
+       __pMultipleContactValuePopup = new (std::nothrow) Popup();
+       __pMultipleContactValuePopup->Construct(true, Dimension(W_CONTACT_VALUE_POPUP, H_CONTACT_VALUE_POPUP));
+       __pPresentationModel->GetFavoriteItemInfo(index, name, pEmpty);
+       __pMultipleContactValuePopup->SetTitleText(name);
+       __pMultipleContactValuePopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pMultipleContactValuePopup->GetClientAreaBounds();
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, popupClientBounds.width, H_CONTACT_VALUE_POPUP_LIST_VIEW));
+       pListView->SetItemProvider(*__pContactValueListProvider);
+       pListView->AddListViewItemEventListener(*this);
+       pListView->SetName(String(Integer::ToString(index)));
+
+       __pMultipleContactValuePopup->AddControl(pListView);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((popupClientBounds.width - W_CLOSE_BUTTON) / 2, Y_CLOSE_BUTTON, W_CLOSE_BUTTON, H_CLOSE_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCancelButton->SetActionId(IDA_POPUP_CONTACT_VALUE_CLOSE);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pCancelButton);
+       __pMultipleContactValuePopup->SetShowState(true);
+       __pMultipleContactValuePopup->Show();
+}
+
+void
+FavoriteListEditorPanel::HideContactValuePopup(void)
+{
+       if (__pMultipleContactValuePopup)
+       {
+               __pMultipleContactValuePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+FavoriteListEditorPanel::UpdateBottomLabel(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int selectedCount = 0;
+       int favoriteCount = __pPresentationModel->GetFavoriteCount();
+       int fotterItemIndex = 1;
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               fotterItemIndex = 0;
+       }
+
+       for (int index = 0; index < favoriteCount; index++)
+       {
+               if (__pFavoriteListView->IsItemChecked(index))
+               {
+                       selectedCount++;
+               }
+       }
+
+       String string = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       string.Append(L" (");
+       string.Append(selectedCount);
+       string.Append(L")");
+       __pBottomLabel->SetText(string);
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       FloatRectangle clientBounds = ((MainForm*)pForm)->GetClientBounds();
+
+       Footer* pFooter = pForm->GetFooter();
+
+       if (selectedCount > 0)
+       {
+               if(__pBottomLabel->GetShowState() == false)
+               {
+                       __pBottomLabel->SetShowState(true);
+                       __pFavoriteListView->SetSize(__pFavoriteListView->GetSizeF().width, clientBounds.height - H_BOTTOM_LABEL);
+               }
+               pFooter->SetItemEnabled(fotterItemIndex, true);
+       }
+       else if (selectedCount == 0)
+       {
+               if(__pBottomLabel->GetShowState() == true)
+               {
+                       __pBottomLabel->SetShowState(false);
+                       __pFavoriteListView->SetSize(__pFavoriteListView->GetSizeF().width, clientBounds.height);
+               }
+               pFooter->SetItemEnabled(fotterItemIndex, false);
+       }
+       __pBottomLabel->Invalidate(true);
+       pFooter->Invalidate(true);
+}
+
+bool
+FavoriteListEditorPanel::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+FavoriteListEditorPanel::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pMultipleContactValuePopup && __pMultipleContactValuePopup->GetShowState() == true)
+               {
+                       HideContactValuePopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+FavoriteListEditorPanel::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+FavoriteListEditorPanel::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
diff --git a/src/CtFavoriteListPanel.cpp b/src/CtFavoriteListPanel.cpp
new file mode 100644 (file)
index 0000000..8d47641
--- /dev/null
@@ -0,0 +1,1034 @@
+//
+// 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       CtFavoriteListPanel.cpp
+ * @brief      This is the implementation file for the FavoriteListPanel class.
+ */
+
+#include <FApp.h>
+#include "CtContactsApp.h"
+#include "CtContactValueListItemProvider.h"
+#include "CtFavoriteListPanel.h"
+#include "CtFavoriteListPresentationModel.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+#include "CtCommonUtil.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+static const int IDA_FOOTER_ADD_FAVORITE = 1;
+static const int IDA_MORE_EDIT_FAVORITE = 2;
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+static const int IDA_POPUP_CONTACT_VALUE_CLOSE = 20;
+static const int IDA_FAVORITE_QUICK_MENU = 21;
+static const int IDA_CONTEXTMENU_CALL = 30;
+static const int IDA_CONTEXTMENU_MESSAGE = 31;
+static const int IDA_CONTEXTMENU_VIDEO_CALL = 32;
+static const int IDA_CONTEXTMENU_REMOVE = 33;
+
+static const wchar_t* IDB_NO_FAVORITES = L"00_Nocontents_picture.png";
+static const wchar_t* IDB_QUICK_MENU = L"00_button_expand_closed_press.png";
+
+static const int W_INITAIL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int W_ICONLISTVIEW_ITEM = 239;
+static const int H_ICONLISTVIEW_ITEM = 239;
+static const int H_TEXT_BACKGROUND = 64;
+static const int H_TEXT_SPACE = 96;
+static const int W_CONTACT_VALUE_POPUP = 688;
+static const int H_CONTACT_VALUE_POPUP = 532;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 338;
+static const int Y_CLOSE_BUTTON = 358;
+static const int W_CLOSE_BUTTON = 394;
+static const int H_CLOSE_BUTTON = 74;
+static const int W_QUICK_MENU_BUTTON = 74;
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+static const int W_ITEM_SPACE = 1;
+static const int H_ITEM_SPACE = 1;
+static const int W_NAME_TEXT_MARGIN = 10;
+
+static const int FONT_SIZE_WITH_THUMBNAIL = 24;
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+static const int FONT_SIZE = 40;
+
+static const unsigned int COLOR_ITEM_BACKGROUND = Color32<201, 201, 201>::Value;
+static const unsigned int COLOR_ITEM_TEXT_BACKGROUND = Color32<0, 0, 0, 89>::Value;
+static const unsigned int COLOR_TEXT_WITH_THUMBNAIL = Color32<249, 249, 249>::Value;
+static const unsigned int COLOR_TEXT = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_LINE = Color32<225, 225, 225, 26>::Value;
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+
+static const wchar_t* INPUT_KEY_CALL_TYPE = L"http://tizen.org/appcontrol/data/call/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TYPE = L"http://tizen.org/appcontrol/data/message/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TO = L"http://tizen.org/appcontrol/data/to";
+static const wchar_t* INPUT_TYPE_VIDEO = L"video";
+static const wchar_t* INPUT_TYPE_VOICE = L"voice";
+static const wchar_t* INPUT_TYPE_SMS = L"sms";
+static const wchar_t* INPUT_URI_TEL = L"tel:";
+
+FavoriteListPanel::FavoriteListPanel(void)
+: __isAppControlLaunching(false)
+, __scrolledDistance(0)
+, __selectedItemIndex(0)
+, __pAppControl(null)
+, __pContextMenuAction(null)
+, __pOptionMenu(null)
+, __pFavoriteListView(null)
+, __pMultipleContactValuePopup(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pPresentationModel(null)
+, __pContactValueListProvider(null)
+{
+}
+
+FavoriteListPanel::~FavoriteListPanel(void)
+{
+}
+
+void
+FavoriteListPanel::Initialize(void)
+{
+       Construct(Rectangle(0, 0, W_INITAIL_PANEL, H_INITIAL_PANEL));
+}
+
+result
+FavoriteListPanel::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       FloatRectangle clientBounds = ((MainForm*)pForm)->GetClientBounds();
+       SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = FavoriteListPresentationModel::GetInstance();
+
+       __pFavoriteListView = new (std::nothrow) IconListView();
+       __pFavoriteListView->Construct(Rectangle(0, 0, clientBounds.width, clientBounds.height), Dimension(W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM));
+       __pFavoriteListView->SetItemProvider(*this);
+       __pFavoriteListView->AddIconListViewItemEventListener(*this);
+       __pFavoriteListView->AddScrollEventListener(*this);
+       __pFavoriteListView->SetItemLayoutHorizontalAlignment(ALIGNMENT_LEFT);
+       __pFavoriteListView->SetItemLayoutVerticalAlignment(ALIGNMENT_TOP);
+       __pFavoriteListView->SetItemSpacing(W_ITEM_SPACE, H_ITEM_SPACE);
+       __pFavoriteListView->SetMargin(MARGIN_TYPE_LEFT, 0);
+       __pFavoriteListView->SetMargin(MARGIN_TYPE_RIGHT, 0);
+       __pFavoriteListView->SetTouchAnimationEnabled(false);
+
+       AddControl(__pFavoriteListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_FAVORITES);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, clientBounds.width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_NO_FAVOURITES"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_SK_EDIT"), IDA_MORE_EDIT_FAVORITE);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+
+       return r;
+}
+
+result
+FavoriteListPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       delete __pAppControl;
+       delete __pContextMenuAction;
+       delete __pMultipleContactValuePopup;
+
+       return r;
+}
+
+void
+FavoriteListPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                       }
+               }
+               break;
+       case IDA_HEADER_GROUPS:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_HEADER_FAVORITES:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+               }
+               break;
+       case IDA_FOOTER_ADD_FAVORITE:
+               {
+                       if (CommonUtil::isMemoryAvailable() == false)
+                       {
+                               CommonUtil::showMemoryFullMessageBox();
+                               return;
+                       }
+
+                       ArrayList* pArgList = new (std::nothrow) ArrayList();
+                       pArgList->Construct();
+
+                       for (int i = 0; i < __pPresentationModel->GetFavoriteCount(); i++)
+                       {
+                               pArgList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetContactId(i))));
+                       }
+
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_SELECTOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgList);
+               }
+               break;
+       case IDA_MORE_EDIT_FAVORITE:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST_EDITOR));
+               }
+               break;
+       case IDA_POPUP_CONTACT_VALUE_CLOSE:
+               {
+                       HideContactValuePopup();
+               }
+               break;
+       case IDA_CONTEXTMENU_CALL:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(__selectedItemIndex);
+                       LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, phoneNumber, INPUT_TYPE_VOICE);
+               }
+               break;
+       case IDA_CONTEXTMENU_MESSAGE:
+       {
+               if (!(__pPresentationModel->GetDefaultPhoneNumber(__selectedItemIndex).IsEmpty()))
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(__selectedItemIndex);
+                       LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, phoneNumber, INPUT_TYPE_SMS);
+               }
+               else if (!(__pPresentationModel->GetDefaultEmail(__selectedItemIndex).IsEmpty()))
+               {
+                       String emailId = __pPresentationModel->GetDefaultEmail(__selectedItemIndex);
+                       LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, emailId, null);
+               }
+       }
+               break;
+       case IDA_CONTEXTMENU_VIDEO_CALL:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(__selectedItemIndex);
+                       LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, phoneNumber, INPUT_TYPE_VIDEO);
+               }
+               break;
+       case IDA_CONTEXTMENU_REMOVE:
+               {
+                       __pPresentationModel->SetAsFavorite(__pPresentationModel->GetContactId(__selectedItemIndex), false);
+                       __pPresentationModel->InitializeFavoriteList();
+
+                       const Form* pForm = dynamic_cast<Form*>(GetParent());
+                       AppAssert(pForm);
+                       Footer* pFooter = pForm->GetFooter();
+                       if (__pPresentationModel->GetContactCount() > __pPresentationModel->GetFavoriteCount())
+                       {
+                               pFooter->SetItemEnabled(0, true);
+                               pFooter->Invalidate(true);
+                       }
+
+                       if (__pPresentationModel->GetFavoriteCount() == 0)
+                       {
+                               __pFavoriteListView->SetShowState(false);
+                               __pEmptyImageLabel->SetShowState(true);
+                               __pEmptyCommentLabel->SetShowState(true);
+                               pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+                       }
+
+                       __pFavoriteListView->UpdateList();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+FavoriteListPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       __isAppControlLaunching = false;
+
+       if (previousSceneId.Equals(IDSCN_CONTACT_SELECTOR, true) && pArgs != null)
+       {
+               Integer* pContactId = null;
+               IEnumerator* pEnum = pArgs->GetEnumeratorN();
+
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pContactId = static_cast<Integer*>(pEnum->GetCurrent());
+                       if (pContactId != null)
+                       {
+                               __pPresentationModel->SetAsFavorite(pContactId->ToInt(), true);
+                       }
+               }
+               delete pEnum;
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Form *pEventForm = const_cast<Form*>(pForm);
+       pEventForm->SetFormMenuEventListener(this);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->AddActionEventListener(*this);
+
+       FloatRectangle clientBounds = ((MainForm*)pForm)->GetClientBounds();
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               pFooter->SetShowState(false);
+
+               SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height + pFooter->GetHeight()));
+               __pFavoriteListView->SetSize(__pFavoriteListView->GetWidthF(), clientBounds.height + pFooter->GetHeight());
+
+               Invalidate(true);
+
+               pEventForm->SetFormMenuEventListener(null);
+               __pPresentationModel->InitializeFavoriteList(pContactsApp->GetReturnType());
+       }
+       else
+       {
+               __pPresentationModel->InitializeFavoriteList();
+
+               FooterItem footerItemAdd;
+               footerItemAdd.Construct(IDA_FOOTER_ADD_FAVORITE);
+               footerItemAdd.SetText(ResourceManager::GetString(L"IDS_PB_OPT_ADD_TO_FAVORITES"));
+               int count = pFooter->GetItemCount();
+               if (count == 0)
+               {
+                       pFooter->AddItem(footerItemAdd);
+               }
+               else if (count == 1)
+               {
+                       pFooter->SetItemAt(0, footerItemAdd);
+               }
+               else
+               {
+                       pFooter->SetItemAt(0, footerItemAdd);
+                       pFooter->RemoveItemAt(1);
+                       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+               }
+
+               if (__pPresentationModel->GetContactCount() <= __pPresentationModel->GetFavoriteCount())
+               {
+                       pFooter->SetItemEnabled(0, false);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(0, true);
+               }
+
+               if (__pPresentationModel->GetFavoriteCount() > 0 )
+               {
+                       pForm->SetFormMenuEventListener(this);
+               }
+               else
+               {
+                       pForm->SetFormMenuEventListener(null);
+               }
+
+               pContactsApp->AddContactsAppChangeEventListener(*this);
+       }
+
+       if (__pPresentationModel->GetFavoriteCount() > 0)
+       {
+               __pFavoriteListView->SetShowState(true);
+               __pEmptyImageLabel->SetShowState(false);
+               __pEmptyCommentLabel->SetShowState(false);
+
+               __pFavoriteListView->UpdateList();
+       }
+       else
+       {
+               __pFavoriteListView->SetShowState(false);
+               __pEmptyImageLabel->SetShowState(true);
+               __pEmptyCommentLabel->SetShowState(true);
+       }
+
+       __pPresentationModel->AddContactChangeListener(*this);
+}
+
+void
+FavoriteListPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Form *pEventForm = const_cast<Form*>(pForm);
+       pEventForm->SetFormMenuEventListener(null);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+
+       delete __pAppControl;
+       __pAppControl = null;
+}
+
+void
+FavoriteListPanel::OnIconListViewItemReordered(Tizen::Ui::Controls::IconListView &iconListView, int indexFrom, int indexTo)
+{
+}
+
+void
+FavoriteListPanel::OnIconListViewItemStateChanged(Tizen::Ui::Controls::IconListView &iconListView, int index, Tizen::Ui::Controls::IconListViewItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_ITEM_ID)
+               {
+                       String contactId;
+                       ArrayList* pValueList = new (std::nothrow) ArrayList();
+                       pValueList->Construct();
+
+                       contactId.Append(__pPresentationModel->GetContactId(index));
+                       pValueList->Add(new (std::nothrow) String(contactId));
+
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), pValueList);
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+
+                       return;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_VCARD)
+               {
+                       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       String vCardPath = __pPresentationModel->ExportToVcard(index);
+
+                       if (vCardPath.IsEmpty())
+                       {
+                               appCtrlResult = APP_CTRL_RESULT_FAILED;
+                       }
+                       else
+                       {
+                               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PATH), new (std::nothrow) String(vCardPath));
+                       }
+                       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+
+                       return;
+               }
+
+               IList* pList = __pPresentationModel->GetMultiValuesN(pContactsApp->GetReturnType(), index);
+               if (pList == null)
+               {
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+                       return;
+               }
+
+               if (pList->GetCount() > 1)
+               {
+                       __pContactValueListProvider = new (std::nothrow) ContactValueListItemProvider(pList);
+                       ShowContactValuePopup(index);
+               }
+               else if (pList->GetCount() == 1)
+               {
+                       String keyType;
+
+                       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                       {
+                               keyType.Append(CONTACT_KEY_PHONE);
+                       }
+                       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                       {
+                               keyType.Append(CONTACT_KEY_EMAIL);
+                       }
+                       else
+                       {
+                               return;
+                       }
+
+                       String* pReturnInfo = static_cast<String*>(pList->GetAt(0));
+                       int blankIndex = 0;
+                       ArrayList* pValueList = new (std::nothrow) ArrayList();
+                       pValueList->Construct();
+
+                       pReturnInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                       pReturnInfo->Remove(0, blankIndex + 1);
+
+                       pValueList->Add(new (std::nothrow) String(*pReturnInfo));
+                       pReturnValue->Add(new (std::nothrow) String(keyType), pValueList);
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                       delete pList;
+               }
+
+               delete pReturnValue;
+       }
+       else
+       {
+               if (__isAppControlLaunching == true)
+               {
+                       return;
+               }
+
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               ArrayList* pContactId = new (std::nothrow) ArrayList();
+               pContactId->Construct();
+
+               pContactId->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetContactId(index))));
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_DETAILS, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pContactId);
+       }
+}
+
+void
+FavoriteListPanel::OnIconListViewOverlayBitmapSelected(Tizen::Ui::Controls::IconListView& iconListView, int index, int overlayBitmapId)
+{
+       if(__isAppControlLaunching == true)
+       {
+               return;
+       }
+       if (__pContextMenuAction != null)
+       {
+               delete __pContextMenuAction;
+       }
+
+       if (overlayBitmapId == IDA_FAVORITE_QUICK_MENU)
+       {
+               const Form* pForm = dynamic_cast<Form*>(GetParent());
+               AppAssert(pForm);
+
+               Point itemPosition(W_ICONLISTVIEW_ITEM * (index % iconListView.GetItemCountPerAxis() + 1) - (W_QUICK_MENU_BUTTON / 2), pForm->GetClientAreaBounds().y + H_ICONLISTVIEW_ITEM * (index / iconListView.GetItemCountPerAxis() + 1) - __scrolledDistance);
+
+               __pContextMenuAction = new (std::nothrow) ContextMenu();
+               __pContextMenuAction->Construct(itemPosition, CONTEXT_MENU_STYLE_GRID, CONTEXT_MENU_ANCHOR_DIRECTION_DOWNWARD);
+
+               if (__pPresentationModel->GetDefaultPhoneNumber(index).IsEmpty() == false)
+               {
+                       __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_CALL"), IDA_CONTEXTMENU_CALL);
+#if __SUPPORT_VIDEO_CALL
+                       __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), IDA_CONTEXTMENU_VIDEO_CALL);
+#endif
+               }
+               if ((__pPresentationModel->GetDefaultPhoneNumber(index).IsEmpty() == false)||(__pPresentationModel->GetDefaultEmail(index).IsEmpty() == false))
+               {
+                       __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), IDA_CONTEXTMENU_MESSAGE);
+               }
+               __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"), IDA_CONTEXTMENU_REMOVE);
+               __pContextMenuAction->AddActionEventListener(*this);
+               __pContextMenuAction->SetFocusable(true);
+               __pContextMenuAction->Show();
+               __selectedItemIndex = index;
+       }
+}
+
+void
+FavoriteListPanel::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       if(__pPresentationModel->GetFavoriteCount() > 0)
+       {
+               __pOptionMenu->SetShowState(true);
+               __pOptionMenu->Show();
+       }
+}
+
+Tizen::Ui::Controls::IconListViewItem*
+FavoriteListPanel::CreateItem(int index)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       Bitmap* pThumbnail = null;
+       Bitmap* pBitmapQuickMenu = null;
+       String name;
+       Font textFont;
+       Color textColor;
+       int textY;
+       int textHeight;
+       int textWidth = W_ICONLISTVIEW_ITEM - (W_NAME_TEXT_MARGIN * 2);
+       TextHorizontalAlignment alignment = TEXT_ALIGNMENT_LEFT;
+
+       if (__pPresentationModel->GetFavoriteItemInfo(index, name, pThumbnail) != E_SUCCESS)
+       {
+               return null;
+       }
+
+       Canvas* pCanvas = new (std::nothrow) Canvas();
+       pCanvas->Construct(Rectangle(0, 0, W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM));
+       pCanvas->Clear();
+
+       if (pThumbnail != null)
+       {
+               textFont.Construct(FONT_STYLE_BOLD , FONT_SIZE_WITH_THUMBNAIL);
+               textY = H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND;
+               textHeight = H_TEXT_BACKGROUND;
+               textColor = Color(COLOR_TEXT_WITH_THUMBNAIL);
+
+               if (pContactsApp->GetOperationId() != OPERATION_ID_PICK)
+               {
+                       textWidth = W_ICONLISTVIEW_ITEM - W_QUICK_MENU_BUTTON - W_NAME_TEXT_MARGIN;
+               }
+
+               pCanvas->DrawBitmap(pCanvas->GetBounds(), *pThumbnail, Rectangle(0, 0, pThumbnail->GetWidth(), pThumbnail->GetHeight()));
+               pCanvas->SetForegroundColor(Color(COLOR_LINE));
+               pCanvas->DrawLine(Point(0, H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND), Point(W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND));
+               pCanvas->FillRectangle(Color(COLOR_ITEM_TEXT_BACKGROUND), Rectangle(0, H_ICONLISTVIEW_ITEM - H_TEXT_BACKGROUND, W_ICONLISTVIEW_ITEM, H_TEXT_BACKGROUND));
+       }
+       else
+       {
+               textFont.Construct(FONT_STYLE_BOLD , FONT_SIZE);
+               textY = (H_ICONLISTVIEW_ITEM / 2) - (H_TEXT_SPACE / 2);
+               textHeight = H_TEXT_SPACE;
+               textColor = Color(COLOR_TEXT);
+               alignment = TEXT_ALIGNMENT_CENTER;
+
+               pCanvas->FillRectangle(Color(COLOR_ITEM_BACKGROUND), pCanvas->GetBounds());
+       }
+
+       EnrichedText* pEnrichedTextName = new (std::nothrow) EnrichedText();
+       pEnrichedTextName->Construct(Dimension(textWidth, textHeight));
+       pEnrichedTextName->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedTextName->SetHorizontalAlignment(alignment);
+       pEnrichedTextName->SetTextWrapStyle(TEXT_WRAP_WORD_WRAP);
+       pEnrichedTextName->SetTextAbbreviationEnabled(true);
+
+       TextElement* pTextElementName = new (std::nothrow) TextElement();
+       pTextElementName->Construct(name);
+       pTextElementName->SetFont(textFont);
+       pTextElementName->SetTextColor(textColor);
+
+       pEnrichedTextName->Add(*pTextElementName);
+
+       pCanvas->DrawText(Point(W_NAME_TEXT_MARGIN, textY), *pEnrichedTextName);
+
+       Bitmap* pBitmapItem = new (std::nothrow) Bitmap();
+       pBitmapItem->Construct(*pCanvas, Rectangle(0, 0, W_ICONLISTVIEW_ITEM, H_ICONLISTVIEW_ITEM));
+
+       IconListViewItem* pFavoriteItem = new (std::nothrow) IconListViewItem();
+       pFavoriteItem->Construct(*pBitmapItem);
+
+       if (pContactsApp->GetOperationId() != OPERATION_ID_PICK)
+       {
+               pBitmapQuickMenu = ResourceManager::GetBitmapN(IDB_QUICK_MENU);
+
+               if (pBitmapQuickMenu != null)
+               {
+                       pFavoriteItem->SetOverlayBitmap(IDA_FAVORITE_QUICK_MENU, pBitmapQuickMenu, ALIGNMENT_RIGHT, ALIGNMENT_BOTTOM);
+               }
+       }
+
+       delete pThumbnail;
+       delete pBitmapQuickMenu;
+       delete pCanvas;
+       delete pBitmapItem;
+       delete pEnrichedTextName;
+       delete pTextElementName;
+
+       return pFavoriteItem;
+}
+
+bool
+FavoriteListPanel::DeleteItem(int index, Tizen::Ui::Controls::IconListViewItem *pItem)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+int
+FavoriteListPanel::GetItemCount(void)
+{
+       return __pPresentationModel->GetFavoriteCount();
+}
+
+void
+FavoriteListPanel::OnContactsChanged(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       HideContactValuePopup();
+       if (__pContextMenuAction != null)
+       {
+               delete __pContextMenuAction;
+               __pContextMenuAction = null;
+       }
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               __pPresentationModel->InitializeFavoriteList(pContactsApp->GetReturnType());
+       }
+       else
+       {
+               __pPresentationModel->InitializeFavoriteList();
+       }
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Footer* pFooter = pForm->GetFooter();
+
+       if (__pPresentationModel->GetContactCount() <= __pPresentationModel->GetFavoriteCount())
+       {
+               pFooter->SetItemEnabled(0, false);
+               pFooter->Invalidate(true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, true);
+               pFooter->Invalidate(true);
+       }
+
+       if (__pPresentationModel->GetFavoriteCount() > 0)
+       {
+               pForm->SetFormMenuEventListener(this);
+       }
+       else
+       {
+               pForm->SetFormMenuEventListener(null);
+       }
+
+       if (__pPresentationModel->GetFavoriteCount() > 0)
+       {
+               __pFavoriteListView->SetShowState(true);
+               __pEmptyImageLabel->SetShowState(false);
+               __pEmptyCommentLabel->SetShowState(false);
+       }
+       else
+       {
+               __pFavoriteListView->SetShowState(false);
+               __pEmptyImageLabel->SetShowState(true);
+               __pEmptyCommentLabel->SetShowState(true);
+       }
+       __pFavoriteListView->UpdateList();
+}
+
+void
+FavoriteListPanel::OnCategoriesChanged(void)
+{
+}
+
+void
+FavoriteListPanel::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+FavoriteListPanel::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       HashMap* pReturnValue = new (std::nothrow) HashMap();
+       pReturnValue->Construct();
+
+       String keyType;
+       int selectedIndex = -1;
+       Integer::Parse(listView.GetName(), selectedIndex);
+
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               keyType.Append(CONTACT_KEY_PHONE);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               keyType.Append(CONTACT_KEY_EMAIL);
+       }
+       else
+       {
+               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+               return;
+       }
+
+       IList* pList = __pPresentationModel->GetMultiValuesN(pContactsApp->GetReturnType(), selectedIndex);
+       String* pReturnInfo = static_cast<String *>(pList->GetAt(index));
+       int blankIndex = 0;
+       ArrayList* pValueList = new (std::nothrow) ArrayList();
+       pValueList->Construct();
+
+       pReturnInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+       pReturnInfo->Remove(0, blankIndex + 1);
+       pValueList->Add(new (std::nothrow) String(*pReturnInfo));
+       pReturnValue->Add(new (std::nothrow) String(keyType), pValueList);
+
+       delete pList;
+
+       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+}
+
+void
+FavoriteListPanel::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+FavoriteListPanel::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+       result r = pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+       AppLogDebug("[%s] The return result from SendAppControlResult(), AppCtrlResult value : %d.", GetErrorMessage(r), appCtrlResult);
+
+       UiApp::GetInstance()->Terminate();
+}
+
+void
+FavoriteListPanel::ShowContactValuePopup(int index)
+{
+       String name;
+       Bitmap* pEmpty = null;
+
+       delete __pMultipleContactValuePopup;
+       __pMultipleContactValuePopup = new (std::nothrow) Popup();
+       __pMultipleContactValuePopup->Construct(true, Dimension(W_CONTACT_VALUE_POPUP, H_CONTACT_VALUE_POPUP));
+       __pPresentationModel->GetFavoriteItemInfo(index, name, pEmpty);
+       __pMultipleContactValuePopup->SetTitleText(name);
+       __pMultipleContactValuePopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pMultipleContactValuePopup->GetClientAreaBounds();
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, popupClientBounds.width, H_CONTACT_VALUE_POPUP_LIST_VIEW));
+       pListView->SetItemProvider(*__pContactValueListProvider);
+       pListView->AddListViewItemEventListener(*this);
+       pListView->SetName(String(Integer::ToString(index)));
+
+       __pMultipleContactValuePopup->AddControl(pListView);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((popupClientBounds.width - W_CLOSE_BUTTON) / 2, Y_CLOSE_BUTTON, W_CLOSE_BUTTON, H_CLOSE_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCancelButton->SetActionId(IDA_POPUP_CONTACT_VALUE_CLOSE);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pCancelButton);
+       __pMultipleContactValuePopup->SetShowState(true);
+       __pMultipleContactValuePopup->Show();
+}
+
+void
+FavoriteListPanel::HideContactValuePopup(void)
+{
+       if (__pMultipleContactValuePopup)
+       {
+               __pMultipleContactValuePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+FavoriteListPanel::OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+       if (type == SCROLL_END_EVENT_END_BOTTOM)
+       {
+               if (type == SCROLL_END_EVENT_END_BOTTOM)
+               {
+                       IconListView* iconListView = static_cast<IconListView*>(&source);
+
+                       int listViewHeight = iconListView->GetHeight();
+                       int ItemHeight = H_ICONLISTVIEW_ITEM;
+                       int noOfItems = __pPresentationModel->GetFavoriteCount();
+
+                       int NoOfRows = noOfItems/iconListView->GetItemCountPerAxis();
+                       if(noOfItems%iconListView->GetItemCountPerAxis() != 0)
+                       {
+                               NoOfRows = NoOfRows + 1;
+                       }
+
+                       int TotalHeight = NoOfRows * ItemHeight;
+
+                       __scrolledDistance = TotalHeight - listViewHeight;
+               }
+       }
+       else if (type == SCROLL_END_EVENT_END_TOP)
+       {
+               __scrolledDistance = 0;
+       }
+}
+
+void
+FavoriteListPanel::OnScrollPositionChanged (Tizen::Ui::Control &source, int scrollPos)
+{
+       __scrolledDistance = scrollPos;
+}
+
+void
+FavoriteListPanel::OnScrollStopped (Tizen::Ui::Control &source)
+{
+}
+
+result
+FavoriteListPanel::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& argument, const Tizen::Base::String& type)
+{
+       result r = E_SUCCESS;
+
+       if (__pAppControl != null)
+       {
+               return E_FAILURE;
+       }
+
+       String uri;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)))
+       {
+               uri.Append(INPUT_URI_TEL);
+               uri.Append(argument);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_CALL_TYPE), new (std::nothrow) String(type));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TO), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+
+       __pAppControl = AppManager::FindAppControlN(appId, operationId);
+       if (__pAppControl != null)
+       {
+               r = __pAppControl->Start(&uri, null, &extraData, null);
+               if (IsFailed(r))
+               {
+                       AppLogDebug("[%s] Unable to launch app control", GetErrorMessage(r));
+               }
+               else
+               {
+                       __isAppControlLaunching = true;
+               }
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
+
+void
+FavoriteListPanel::OnForeground(void)
+{
+       __pFavoriteListView->SetEnabled(true);
+       __pFavoriteListView->UpdateList();
+       
+       delete __pAppControl;
+       __pAppControl = null;
+
+       __isAppControlLaunching = false;
+}
+
+void
+FavoriteListPanel::OnBackground(void)
+{
+}
+
+bool
+FavoriteListPanel::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+FavoriteListPanel::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pMultipleContactValuePopup && __pMultipleContactValuePopup->GetShowState() == true)
+               {
+                       HideContactValuePopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+FavoriteListPanel::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+FavoriteListPanel::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
diff --git a/src/CtFavoriteListPresentationModel.cpp b/src/CtFavoriteListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..ccc1f7b
--- /dev/null
@@ -0,0 +1,487 @@
+//
+// 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       CtFavoriteListPresentationModel.cpp
+ * @brief      This is the implementation file for the FavoriteListPresentationModel class.
+ */
+
+#include <FApp.h>
+#include <FMedia.h>
+#include "CtFavoriteListPresentationModel.h"
+#include "CtIContactEventListener.h"
+#include "CtResourceManager.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+static const int VCARD_STRING_LENGTH = 26;
+
+static const wchar_t* VCARD_PATH_FORMAT = L"data/Ct%04d%02d%02d%02d%02d%02d.vcf";
+
+FavoriteListPresentationModel* FavoriteListPresentationModel::__pInstance = null;
+
+FavoriteListPresentationModel*
+FavoriteListPresentationModel::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+
+       return __pInstance;
+}
+
+void
+FavoriteListPresentationModel::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) FavoriteListPresentationModel();
+       result r = __pInstance->Construct();
+       TryCatch(r == E_SUCCESS, , "[%s] Construction Failed", GetErrorMessage(r));
+
+       std::atexit(DestroyInstance);
+       return;
+
+CATCH:
+       delete __pInstance;
+       __pInstance = null;
+}
+
+void
+FavoriteListPresentationModel::DestroyInstance(void)
+{
+       delete __pInstance;
+}
+
+FavoriteListPresentationModel::FavoriteListPresentationModel(void)
+: __pFavoriteList(null)
+,__pContactListenerList(null)
+,__pAddressbook(null)
+{
+
+}
+FavoriteListPresentationModel::~FavoriteListPresentationModel(void)
+{
+       delete __pAddressbook;
+
+       if (__pContactListenerList != null)
+       {
+               __pContactListenerList->RemoveAll(true);
+               delete __pContactListenerList;
+       }
+
+       if (__pFavoriteList != null)
+       {
+               __pFavoriteList->RemoveAll(true);
+               delete __pFavoriteList;
+       }
+}
+
+result
+FavoriteListPresentationModel::Construct(void)
+{
+       result r = E_SUCCESS;
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       if (__pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       r = __pAddressbook->SetAddressbookChangeEventListener(this);
+       TryCatch(r == E_SUCCESS, , "[%s] Unable to set event listener", GetErrorMessage(r));
+
+       __pContactListenerList = new (std::nothrow) ArrayList();
+       __pContactListenerList->Construct();
+
+       if (__pFavoriteList != null)
+       {
+               AppLogDebug("FavoriteListPresentationModel is already constructed.");
+
+               return E_SUCCESS;
+       }
+
+       r = InitializeFavoriteList();
+
+       return r;
+
+CATCH:
+       delete __pAddressbook;
+       __pAddressbook = null;
+
+       __pContactListenerList->RemoveAll();
+       delete __pContactListenerList;
+       __pContactListenerList = null;
+
+       return r;
+}
+
+int
+FavoriteListPresentationModel::GetFavoriteCount(void)
+{
+       return __pFavoriteList->GetCount();
+}
+
+int
+FavoriteListPresentationModel::GetContactCount(void)
+{
+       int contactCount = 0;
+       IList* pList = AddressbookManager::GetInstance()->GetAllContactsN();
+       if (pList != null)
+       {
+               contactCount = pList->GetCount();
+               delete pList;
+       }
+
+       return contactCount;
+}
+
+result
+FavoriteListPresentationModel::GetFavoriteItemInfo(int index, Tizen::Base::String& name, Tizen::Graphics::Bitmap*& pThumbnail)
+{
+       Person* pPerson = static_cast<Person *>(__pFavoriteList->GetAt(index));
+       if (pPerson == null)
+       {
+               return E_FAILURE;
+       }
+
+       name = pPerson->GetDisplayName();
+       String thumbnailPath = pPerson->GetThumbnailPath();
+
+       if (thumbnailPath.IsEmpty() == false)
+       {
+               ImageBuffer thumbnailImageBuffer;
+               result r = thumbnailImageBuffer.Construct(thumbnailPath);
+               if (r == E_SUCCESS)
+               {
+                       pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_NONE);
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+Tizen::Base::Collection::IList*
+FavoriteListPresentationModel::GetMultiValuesN(AppControlReturnType returnType, int index)
+{
+       Person* pPerson = static_cast<Person*>(__pFavoriteList->GetAt(index));
+       IList* pContactList = null;
+       if (pPerson != null)
+       {
+               pContactList = AddressbookManager::GetInstance()->GetContactsByPersonN(pPerson->GetId());
+       }
+
+       if (pContactList == null)
+       {
+               return null;
+       }
+
+       Contact* pContact = static_cast<Contact*>(pContactList->GetAt(0));
+       if (pContact == null)
+       {
+               delete pContactList;
+               return null;
+       }
+
+       ArrayList* pReturnList = new (std::nothrow) ArrayList();
+       pReturnList->Construct();
+
+       IList* pMultiValues = null;
+       IEnumerator* pEnum = null;
+       if (returnType == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               pMultiValues = pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+               if (pMultiValues != null)
+               {
+                       pEnum = pMultiValues->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               PhoneNumber* pPhoneNumber = static_cast<PhoneNumber*>(pEnum->GetCurrent());
+                               if (pPhoneNumber != null)
+                               {
+                                       String phoneNumberInfo;
+                                       switch(pPhoneNumber->GetType())
+                                       {
+                                       case PHONENUMBER_TYPE_HOME:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_HOME"));
+                                               break;
+                                       case PHONENUMBER_TYPE_WORK:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_WORK"));
+                                               break;
+                                       case PHONENUMBER_TYPE_MOBILE:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_MOBILE"));
+                                               break;
+                                       case PHONENUMBER_TYPE_HOME_FAX:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_FAX_HHOME"));
+                                               break;
+                                       case PHONENUMBER_TYPE_WORK_FAX:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_FAX_HWORK"));
+                                               break;
+                                       case PHONENUMBER_TYPE_PAGER:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_PAGER"));
+                                               break;
+                                       case PHONENUMBER_TYPE_OTHER:
+                                               phoneNumberInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_OTHER"));
+                                               break;
+                                       default:
+                                               break;
+                                       }
+                                       phoneNumberInfo.Append(CHARACTER_SPACE);
+                                       phoneNumberInfo.Append(pPhoneNumber->GetPhoneNumber());
+
+                                       pReturnList->Add(*(new (std::nothrow) String(phoneNumberInfo)));
+                               }
+                       }
+               }
+       }
+       else if (returnType == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               pMultiValues = pContact->GetValuesN(CONTACT_MPROPERTY_ID_EMAILS);
+               if (pMultiValues != null)
+               {
+                       pEnum = pMultiValues->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               Email* pEmail = static_cast<Email*>(pEnum->GetCurrent());
+                               if (pEmail != null)
+                               {
+                                       String emailInfo;
+                                       switch(pEmail->GetType())
+                                       {
+                                       case EMAIL_TYPE_PERSONAL:
+                                               emailInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_HOME"));
+                                               break;
+                                       case EMAIL_TYPE_WORK:
+                                               emailInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_WORK"));
+                                               break;
+                                       case EMAIL_TYPE_OTHER:
+                                               emailInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_OTHER"));
+                                               break;
+                                       default:
+                                               break;
+                                       }
+                                       emailInfo.Append(CHARACTER_SPACE);
+                                       emailInfo.Append(pEmail->GetEmail());
+
+                                       pReturnList->Add(*(new (std::nothrow) String(emailInfo)));
+                               }
+                       }
+               }
+       }
+
+       delete pEnum;
+       delete pMultiValues;
+       delete pContactList;
+
+       return pReturnList;
+}
+
+Tizen::Social::RecordId
+FavoriteListPresentationModel::GetContactId(int index)
+{
+       Person* pPerson = static_cast<Person *>(__pFavoriteList->GetAt(index));
+       if (pPerson == null)
+       {
+               return INVALID_RECORD_ID;
+       }
+
+       IList* pList = AddressbookManager::GetInstance()->GetContactsByPersonN(pPerson->GetId());
+       if (pList == null)
+       {
+               return INVALID_RECORD_ID;
+       }
+
+       Contact* pContact = static_cast<Contact *>(pList->GetAt(0));
+       if (pContact == null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+
+               return INVALID_RECORD_ID;
+       }
+
+       RecordId contactId = pContact->GetRecordId();
+
+       pList->RemoveAll(true);
+       delete pList;
+
+       return contactId;
+}
+
+result
+FavoriteListPresentationModel::SetAsFavorite(Tizen::Social::RecordId contactId, bool isFavorite)
+{
+       result r = E_SUCCESS;
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       Contact* pContact = pAddressbookManager->GetContactN(contactId);
+       if (pContact == null)
+       {
+               return E_FAILURE;
+       }
+
+       r = pAddressbookManager->SetPersonAsFavorite(pContact->GetPersonId(), isFavorite);
+
+       return r;
+}
+
+result
+FavoriteListPresentationModel::InitializeFavoriteList(AppControlReturnType returnType)
+{
+       result r = E_SUCCESS;
+
+       if (__pFavoriteList != null)
+       {
+               __pFavoriteList->RemoveAll(true);
+               __pFavoriteList = null;
+       }
+
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+       if (returnType == APP_CONTROL_RETURN_TYPE_NONE || returnType == APP_CONTROL_RETURN_TYPE_ITEM_ID || returnType == APP_CONTROL_RETURN_TYPE_VCARD)
+       {
+               __pFavoriteList = AddressbookManager::GetInstance()->GetFavoritePersonsN();
+       }
+       else if (returnType == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+               mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_IS_FAVORITE, FI_CMP_OP_EQUAL, true);
+               __pFavoriteList = AddressbookManager::GetInstance()->SearchN(mainFilter);
+       }
+       else if (returnType == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+               mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_IS_FAVORITE, FI_CMP_OP_EQUAL, true);
+               __pFavoriteList = AddressbookManager::GetInstance()->SearchN(mainFilter);
+       }
+
+       if (__pFavoriteList == null)
+       {
+               r = E_FAILURE;
+       }
+
+       return r;
+}
+
+Tizen::Base::String
+FavoriteListPresentationModel::GetDefaultEmail(int index)
+{
+       Person* pPerson = static_cast<Person *>(__pFavoriteList->GetAt(index));
+       if (pPerson == null)
+       {
+               return String();
+       }
+
+       Email email = pPerson->GetPrimaryEmail();
+       return email.GetEmail();
+}
+
+
+Tizen::Base::String
+FavoriteListPresentationModel::GetDefaultPhoneNumber(int index)
+{
+       Person* pPerson = static_cast<Person *>(__pFavoriteList->GetAt(index));
+       if (pPerson == null)
+       {
+               return String();
+       }
+
+       PhoneNumber phoneNumber = pPerson->GetPrimaryPhoneNumber();
+       return phoneNumber.GetPhoneNumber();
+}
+
+Tizen::Base::String
+FavoriteListPresentationModel::ExportToVcard(int index)
+{
+       String vCardPath;
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       Contact* pContact = pAddressbookManager->GetContactN(GetContactId(index));
+       TryReturn(pContact != null, vCardPath, "[E_FAILURE] Unable to get the specific contact.");
+
+       DateTime currentDateTime;
+       SystemTime::GetCurrentTime(TIME_MODE_WALL, currentDateTime);
+
+       vCardPath.Format(VCARD_STRING_LENGTH, VCARD_PATH_FORMAT, currentDateTime.GetYear(), currentDateTime.GetMonth(), currentDateTime.GetDay(),
+                       currentDateTime.GetHour(), currentDateTime.GetMinute(), currentDateTime.GetSecond());
+
+       vCardPath = Application::GetInstance()->GetAppSharedPath() + vCardPath;
+
+       result r = pAddressbookManager->ExportContactToVcard(*pContact, vCardPath);
+
+       if (r != E_SUCCESS)
+       {
+               vCardPath.Clear();
+       }
+
+       delete pContact;
+
+       return vCardPath;
+}
+
+void
+FavoriteListPresentationModel::AddContactChangeListener(const IContactEventListener& listener)
+{
+       __pContactListenerList->Add(listener);
+}
+
+void
+FavoriteListPresentationModel::RemoveContactChangeListener(const IContactEventListener& listener)
+{
+       __pContactListenerList->Remove(listener, false);
+}
+
+void
+FavoriteListPresentationModel::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pContactListenerList->GetEnumeratorN();
+       while(pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnContactsChanged();
+       }
+
+       delete pEnum;
+}
+void
+FavoriteListPresentationModel::OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList)
+{
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pContactListenerList->GetEnumeratorN();
+       while(pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnCategoriesChanged();
+       }
+
+       delete pEnum;
+}
diff --git a/src/CtFormFactory.cpp b/src/CtFormFactory.cpp
new file mode 100644 (file)
index 0000000..95d5a9d
--- /dev/null
@@ -0,0 +1,141 @@
+//
+// 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       CtFormFactory.cpp
+ * @brief      This is the implementation file for the FormFactory class.
+ */
+
+#include "CtContactDetailsForm.h"
+#include "CtContactEditorForm.h"
+#include "CtContactSelectorForm.h"
+#include "CtFormFactory.h"
+#include "CtGroupContactListEditorForm.h"
+#include "CtGroupContactListForm.h"
+#include "CtGroupEditorForm.h"
+#include "CtGroupSelectorForm.h"
+#include "CtMainForm.h"
+#include "CtSettingsForm.h"
+#include "CtTypes.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)
+{
+       result r = E_SUCCESS;
+
+       Form* pNewForm = null;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       if (formId == IDC_FORM_MAIN)
+       {
+               MainForm* pForm = new (std::nothrow) MainForm();
+               pForm->Initialize();
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_CONTACT_SELECTOR)
+       {
+               ContactSelectorForm* pForm = new (std::nothrow) ContactSelectorForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_CONTACT_DETAILS)
+       {
+               ContactDetailsForm* pForm = new (std::nothrow) ContactDetailsForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_CONTACT_EDITOR)
+       {
+               ContactEditorForm* pForm = new (std::nothrow) ContactEditorForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_GROUP_SELECTOR)
+       {
+               GroupSelectorForm* pForm = new (std::nothrow) GroupSelectorForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_GROUP_EDITOR)
+       {
+               GroupEditorForm* pForm = new (std::nothrow) GroupEditorForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_SETTINGS)
+       {
+               SettingsForm* pForm = new (std::nothrow) SettingsForm();
+               pForm->Initialize();
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_GROUP_CONTACT_LIST)
+       {
+               GroupContactListForm* pForm = new (std::nothrow) GroupContactListForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+       else if (formId == IDC_FORM_GROUP_CONTACT_LIST_EDITOR)
+       {
+               GroupContactListEditorForm* pForm = new (std::nothrow) GroupContactListEditorForm();
+               pForm->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               TryCatch(r == E_SUCCESS, delete pForm, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewForm = pForm;
+       }
+
+       return pNewForm;
+
+CATCH:
+       return null;
+}
diff --git a/src/CtGroupContactListEditorForm.cpp b/src/CtGroupContactListEditorForm.cpp
new file mode 100644 (file)
index 0000000..7d4d25a
--- /dev/null
@@ -0,0 +1,1399 @@
+//
+// 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       CtGroupContactListEditorForm.cpp
+ * @brief      This is the implementation file for the GroupContactListEditorForm class.
+ */
+
+#include "CtContactListItem.h"
+#include "CtContactsApp.h"
+#include "CtGroupContactListEditorForm.h"
+#include "CtGroupContactListPresentationModel.h"
+#include "CtResourceManager.h"
+#include "CtSearchListEventListener.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+static const int IDA_FOOTER_REMOVE = 0;
+static const int IDA_FOOTER_CANCEL = 1;
+static const int IDA_FOOTER_DONE = 2;
+static const int IDA_CHECK_SELECT_ALL_CHECKED = 10;
+static const int IDA_CHECK_SELECT_ALL_UNCHECKED = 11;
+static const int IDA_POPUP_CONTACT_VALUE_CLOSE = 20;
+
+static const wchar_t* IDB_NO_CONTENTS = L"00_Nocontents_text.png";
+
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+static const int H_GROUP_ITEM = 76;
+static const int H_LIST_ITEM = 112;
+static const int H_SELECT_ALL = 112;
+static const int H_SEARCHBAR = 86;
+static const int H_BOTTOM_LABEL = 48;
+static const int W_CONTACT_VALUE_POPUP = 688;
+static const int H_CONTACT_VALUE_POPUP = 532;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 338;
+static const int Y_CLOSE_BUTTON = 358;
+static const int H_CLOSE_BUTTON = 74;
+static const int W_CLOSE_BUTTON = 394;
+static const int X_LIST_ITEM_TEXT_MARGIN = 32;
+static const int H_CHECK_LABEL = 72;
+static const int Y_CHECK_LABEL = 20;
+
+static const int FONT_SIZE_BOTTOM_LABEL = 32;
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<68, 68, 68>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+static const unsigned int COLOR_CHECK_LABEL_BG = Color32<220, 218, 211>::Value;
+
+static const int LIST_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int LIST_VIEW_MASK = 0xFFFF;
+
+static const wchar_t* INPUT_KEY_MESSAGE_TYPE = L"http://tizen.org/appcontrol/data/message/type";
+static const wchar_t* INPUT_KEY_TO = L"http://tizen.org/appcontrol/data/to";
+static const wchar_t* INPUT_TYPE_SMS = L"sms";
+
+GroupContactListEditorForm::GroupContactListEditorForm(void)
+: __pContactValueListEvent(null)
+, __pPresentationModel(null)
+, __pSearchListEvent(null)
+, __pAppControl(null)
+, __pTempContactValueHashMap(null)
+, __pSearchBar(null)
+, __pSelectAllButton(null)
+, __pListView(null)
+, __pSearchListView(null)
+, __pCheckLabel(null)
+, __pBottomLabel(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pMultipleContactValuePopup(null)
+, __launchType(0)
+, __selectedIndex(-1)
+, __selectedSearchIndex(-1)
+{
+}
+
+GroupContactListEditorForm::~GroupContactListEditorForm(void)
+{
+}
+
+void
+GroupContactListEditorForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
+}
+
+result
+GroupContactListEditorForm::OnInitializing(void)
+{
+       SetFormBackEventListener(this);
+
+       __pPresentationModel = GroupContactListPresentationModel::GetInstance();
+
+       __pCheckLabel = new (std::nothrow) Label();
+       __pCheckLabel->Construct(Rectangle(0, H_SEARCHBAR + Y_CHECK_LABEL, GetClientAreaBounds().width, H_CHECK_LABEL), L"");
+       __pCheckLabel->SetBackgroundColor(COLOR_CHECK_LABEL_BG);
+       AddControl(__pCheckLabel);
+
+       __pSelectAllButton = new (std::nothrow) CheckButton();
+       __pSelectAllButton->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_NONE);
+       __pSelectAllButton->SetText(ResourceManager::GetString(L"IDS_COM_BODY_SELECT_ALL"));
+       __pSelectAllButton->SetActionId(IDA_CHECK_SELECT_ALL_CHECKED, IDA_CHECK_SELECT_ALL_UNCHECKED);
+       __pSelectAllButton->AddActionEventListener(*this);
+       AddControl(__pSelectAllButton);
+
+       __pListView = new (std::nothrow) GroupedListView();
+       __pListView->Construct(Rectangle(0, H_SEARCHBAR + H_SELECT_ALL, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_SELECT_ALL - H_BOTTOM_LABEL), GROUPED_LIST_VIEW_STYLE_INDEXED, true, true);
+       __pListView->SetItemProvider(*this);
+       __pListView->AddFastScrollListener(*this);
+       __pListView->AddGroupedListViewItemEventListener(*this);
+       __pListView->AddTouchEventListener(*this);
+       AddControl(__pListView);
+
+       __pSearchBar = new (std::nothrow) SearchBar();
+       __pSearchBar->Construct(Rectangle(0, 0, GetClientAreaBounds().width, H_SEARCHBAR));
+       __pSearchBar->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_SEARCH"));
+       __pSearchBar->AddSearchBarEventListener(*this);
+       __pSearchBar->AddTextEventListener(*this);
+       __pSearchBar->AddKeypadEventListener(*this);
+       __pSearchBar->SetContentAreaSize(Dimension(0, 0));
+
+       __pSearchListEvent = new (std::nothrow) SearchListEventListener(LIST_ANNEX_STYLE_MARK, __pPresentationModel);
+       AddControl(__pSearchBar);
+
+       __pSearchListView = new (std::nothrow) GroupedListView();
+       __pSearchListView->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
+       __pSearchListView->SetItemProvider(*__pSearchListEvent);
+       __pSearchListView->AddGroupedListViewItemEventListener(*this);
+       __pSearchListView->AddTouchEventListener(*this);
+       __pSearchListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pSearchListView->SetShowState(false);
+       AddControl(__pSearchListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_CONTENTS);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, GetClientAreaBounds().width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pBottomLabel = new (std::nothrow) Label();
+       __pBottomLabel->Construct(FloatRectangle(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL, GetClientAreaBoundsF().width, H_BOTTOM_LABEL),
+                                                                                                       ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + INITIAL_SELECTED_COUNT);
+       __pBottomLabel->SetBackgroundColor(Color(COLOR_BOTTOM_LABEL_BG));
+       __pBottomLabel->SetTextColor(Color(COLOR_BOTTOM_LABEL_FONT));
+       __pBottomLabel->SetTextConfig(FONT_SIZE_BOTTOM_LABEL, LABEL_TEXT_STYLE_BOLD);
+       __pBottomLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       __pBottomLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       AddControl(__pBottomLabel);
+
+       __pTempContactValueHashMap = new (std::nothrow) HashMap();
+       __pTempContactValueHashMap->Construct();
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListEditorForm::OnTerminating(void)
+{
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+       if (__pContactValueListEvent)
+       {
+               delete __pContactValueListEvent;
+       }
+
+       delete __pAppControl;
+       __pTempContactValueHashMap->RemoveAll(true);
+       delete __pTempContactValueHashMap;
+       delete __pSearchListEvent;
+       delete __pMultipleContactValuePopup;
+
+       return E_SUCCESS;
+}
+
+void
+GroupContactListEditorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+}
+
+void
+GroupContactListEditorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (actionId)
+       {
+       case IDA_FOOTER_REMOVE:
+               {
+                       RemoveSelectedContacts();
+                       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_CONTACT_LIST));
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_CONTACT_LIST));
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_CHECKED:
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, true);
+
+                                       int index = 0;
+                                       index |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+                                       index |= itemIndex;
+                                       Integer hashMapIndex(index);
+
+                                       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE || __launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+                                       {
+                                               if (__pTempContactValueHashMap->GetValue(hashMapIndex) == null)
+                                               {
+                                                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                                                       __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(index)), *(new (std::nothrow) String(phoneNumber)));
+                                               }
+                                       }
+                                       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL || __launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+                                       {
+                                               if (__pTempContactValueHashMap->GetValue(hashMapIndex) == null)
+                                               {
+                                                       String email = __pPresentationModel->GetDefaultEmail(groupIndex, itemIndex);
+                                                       __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(index)), *(new (std::nothrow) String(email)));
+                                               }
+                                       }
+                               }
+                       }
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_UNCHECKED:
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                               }
+                       }
+                       __pTempContactValueHashMap->RemoveAll(true);
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_FOOTER_DONE:
+               {
+                       if (__launchType == ID_GROUP_CONTACT_SELECT_MESSAGE ||
+                               __launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+                       {
+                               LaunchAppControl();
+                       }
+                       else
+                       {
+                               ReturnMultipleValues();
+                       }
+               }
+               break;
+       case IDA_POPUP_CONTACT_VALUE_CLOSE:
+               {
+                       HideContactValuePopup();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupContactListEditorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList *pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pArgs != null)
+       {
+               Integer* pCategoryId = null;
+
+               IEnumerator* pEnum = pArgs->GetEnumeratorN();
+               if (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pCategoryId = static_cast<Integer*>(pEnum->GetCurrent());
+               }
+               if (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       Integer* pItemTypeForLaunchAppControl = static_cast<Integer*>(pEnum->GetCurrent());
+                       if (pItemTypeForLaunchAppControl != null)
+                       {
+                               __launchType = pItemTypeForLaunchAppControl->ToInt();
+                       }
+               }
+
+               if (pCategoryId != null)
+               {
+                       Header* pHeader = GetHeader();
+                       if (pCategoryId->ToInt() == ID_GROUP_CONTACT_NOT_ASSIGNED)
+                       {
+                               if (__launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+                               {
+                                       __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID, GROUP_CONTACT_LAUNCH_TYPE_MESSAGE);
+                               }
+                               else if (__launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+                               {
+                                       __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID, GROUP_CONTACT_LAUNCH_TYPE_EMAIL);
+                               }
+                               else
+                               {
+                                       __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID);
+                               }
+                               pHeader->SetTitleText(ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED"));
+                       }
+                       else
+                       {
+                               if (__launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+                               {
+                                       __pPresentationModel->InitializeGroupContactList(pCategoryId->ToInt(), GROUP_CONTACT_LAUNCH_TYPE_MESSAGE);
+                               }
+                               else if (__launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+                               {
+                                       __pPresentationModel->InitializeGroupContactList(pCategoryId->ToInt(), GROUP_CONTACT_LAUNCH_TYPE_EMAIL);
+                               }
+                               else
+                               {
+                                       __pPresentationModel->InitializeGroupContactList(pCategoryId->ToInt());
+                               }
+                               pHeader->SetTitleText(__pPresentationModel->GetCategoryName());
+                       }
+
+                       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+               }
+               delete pEnum;
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+
+       Footer* pFooter = GetFooter();
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK || __launchType != 0)
+       {
+               AppLogDebug("kamesh: OPERATION_ID_PICK || __launchType != 0");
+               pFooter->SetShowState(true);
+
+               FooterItem footerItemDone;
+               footerItemDone.Construct(IDA_FOOTER_DONE);
+               footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+               pFooter->AddItem(footerItemDone);
+               pFooter->SetItemEnabled(0, false);
+
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pCheckLabel->SetShowState(false);
+                       __pSelectAllButton->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+       }
+       else
+       {
+               FooterItem footerItemCancel;
+               footerItemCancel.Construct(IDA_FOOTER_CANCEL);
+               footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+
+               FooterItem footerItemRemove;
+               footerItemRemove.Construct(IDA_FOOTER_REMOVE);
+               footerItemRemove.SetText(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"));
+
+               pFooter->AddItem(footerItemCancel);
+               pFooter->AddItem(footerItemRemove);
+               pFooter->SetItemEnabled(1, false);
+       }
+
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+       UpdateBottomLabel();
+
+       __pPresentationModel->AddContactChangeListener(*this);
+       pFooter->AddActionEventListener(*this);
+}
+
+void
+GroupContactListEditorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+       }
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (__launchType != 0)
+       {
+               pContactsApp->RemoveContactsAppChangeEventListener(*this);
+
+               delete __pAppControl;
+               __pAppControl = null;
+       }
+       else
+       {
+               pContactsApp->RemoveContactsAppChangeEventListener(*this);
+       }
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+}
+
+void
+GroupContactListEditorForm::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode)
+{
+       if (mode == SEARCH_BAR_MODE_NORMAL)
+       {
+               int searchedCount = __pPresentationModel->GetSearchedContactCount();
+               bool isChecked = true;
+
+               for (int index = 0; index < searchedCount; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pListView->SetShowState(true);
+               __pListView->Invalidate(true);
+               __pCheckLabel->SetShowState(true);
+               __pSelectAllButton->SetShowState(true);
+               __pSelectAllButton->SetSelected(isChecked);
+               __pSearchListView->SetShowState(false);
+               __pPresentationModel->ResetSearchedContactList();
+               __pSearchListView->UpdateList();
+
+               UpdateBottomLabel();
+       }
+}
+
+void
+GroupContactListEditorForm::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       String searchText = __pSearchBar->GetText();
+       searchText.Trim();
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE  || __launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL || __launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+       }
+       else
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+       }
+
+       if (searchText.GetLength() != 0)
+       {
+               __pCheckLabel->SetShowState(false);
+               __pSelectAllButton->SetShowState(false);
+               __pListView->SetShowState(false);
+               __pSearchListView->SetShowState(true);
+
+               __pSearchListView->UpdateList();
+
+               int searchedCount = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < searchedCount; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+                       __pSearchListView->SetItemChecked(0, index, __pListView->IsItemChecked(groupIndex, itemIndex));
+               }
+
+               __pSearchListView->Invalidate(true);
+       }
+       else
+       {
+               __pCheckLabel->SetShowState(true);
+               __pSelectAllButton->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pSearchListView->SetShowState(false);
+
+               int count = __pPresentationModel->GetSearchedContactCount();
+               bool isChecked = true;
+
+               for (int index = 0; index < count; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pSelectAllButton->SetSelected(isChecked);
+               __pListView->Invalidate(true);
+       }
+}
+
+void
+GroupContactListEditorForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+int
+GroupContactListEditorForm::GetGroupCount(void)
+{
+       return __pPresentationModel->GetKeyCount();
+}
+
+int
+GroupContactListEditorForm::GetItemCount(int groupIndex)
+{
+       return __pPresentationModel->GetContactCount(groupIndex);
+}
+
+Tizen::Ui::Controls::ListItemBase*
+GroupContactListEditorForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String name;
+       Bitmap* pThumbnail = null;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_LIST_ITEM + pContactsApp->GetFontHeightOffset()), LIST_ANNEX_STYLE_MARK);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), H_LIST_ITEM + pContactsApp->GetFontHeightOffset()), 0, *(static_cast<ICustomElement*>(pCustomElement)));
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::GroupItem*
+GroupContactListEditorForm::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(__pPresentationModel->GetKey(groupIndex), null);
+
+       return pItem;
+}
+
+bool
+GroupContactListEditorForm::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
+       pCustomItem->RemoveAllElements();
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+GroupContactListEditorForm::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+GroupContactListEditorForm::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+GroupContactListEditorForm::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int mainGroupIndex = groupIndex;
+       int mainItemIndex = itemIndex;
+
+       if (listView.Equals(*__pSearchListView) == true)
+       {
+               __selectedSearchIndex = 0;
+               __selectedSearchIndex |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+               __selectedSearchIndex |= itemIndex;
+
+               __pPresentationModel->GetItemMainIndex(itemIndex, mainGroupIndex, mainItemIndex);
+       }
+
+       __selectedIndex = 0;
+       __selectedIndex |= mainGroupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+       __selectedIndex |= mainItemIndex;
+       
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK ||
+               __launchType == ID_GROUP_CONTACT_SELECT_MESSAGE ||
+               __launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+       {
+               if (listView.IsItemChecked(groupIndex, itemIndex) == true)
+               {
+                       IList* pList = null;
+                       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE ||
+                               __launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+                       {
+                               pList = __pPresentationModel->GetAllPhoneNumbersN(mainGroupIndex, mainItemIndex);
+
+                               if (pList == null)
+                               {
+                                       ReturnResultFailed();
+                               }
+                               else
+                               {
+                                       if (pList->GetCount() > 1)
+                                       {
+                                               listView.SetItemChecked(groupIndex, itemIndex, false);
+                                               __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                               ShowContactValuePopup(mainGroupIndex, mainItemIndex);
+                                       }
+                                       else if (pList->GetCount() == 1)
+                                       {
+                                               String* pContactValueInfo = static_cast<String *>(pList->GetAt(0));
+                                               int blankIndex = 0;
+                                               pContactValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                               pContactValueInfo->Remove(0, blankIndex + 1);
+                                               __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(__selectedIndex)), *(new (std::nothrow) String(*pContactValueInfo)));
+                                               pList->RemoveAll(true);
+                                               delete pList;
+                                       }
+                               }
+                       }
+                       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL ||
+                                       __launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+                       {
+                               pList = __pPresentationModel->GetAllEmailsN(mainGroupIndex, mainItemIndex);
+
+                               if (pList == null)
+                               {
+                                       ReturnResultFailed();
+                               }
+                               else
+                               {
+                                       if (pList->GetCount() > 1)
+                                       {
+                                               listView.SetItemChecked(groupIndex, itemIndex, false);
+                                               __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                               ShowContactValuePopup(mainGroupIndex, mainItemIndex);
+                                       }
+                                       else if (pList->GetCount() == 1)
+                                       {
+                                               String* pContactValueInfo = static_cast<String *>(pList->GetAt(0));
+                                               int blankIndex = 0;
+                                               pContactValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                               pContactValueInfo->Remove(0, blankIndex + 1);
+                                               __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(__selectedIndex)), *(new (std::nothrow) String(*pContactValueInfo)));
+                                               pList->RemoveAll(true);
+                                               delete pList;
+                                       }
+                               }
+                       }
+               }
+               else
+               {
+                       Integer keyIndex(__selectedIndex);
+                       __pTempContactValueHashMap->Remove(keyIndex, true);
+               }
+       }
+
+       if (listView.Equals(*__pListView) == true)
+       {
+               if (listView.IsItemChecked(groupIndex, itemIndex) == true)
+               {
+                       bool isChecked = true;
+                       for (int groupIndex = 0; groupIndex < listView.GetGroupCount() && isChecked == true; groupIndex++)
+                       {
+                               int itemCount = listView.GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       if (listView.IsItemChecked(groupIndex, itemIndex) == false)
+                                       {
+                                               isChecked = false;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       __pSelectAllButton->SetSelected(isChecked);
+               }
+               else if (listView.IsItemChecked(groupIndex, itemIndex) == false)
+               {
+                       __pSelectAllButton->SetSelected(false);
+               }
+       }
+       else if (listView.Equals(*__pSearchListView) == true)
+       {
+               int searchedCount = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < searchedCount; index++)
+               {
+                       int groupIndex = 0;
+                       int itemIndex = 0;
+
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+GroupContactListEditorForm::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+GroupContactListEditorForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+GroupContactListEditorForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int groupIndex = (__selectedIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+       int itemIndex = __selectedIndex & LIST_VIEW_MASK;
+
+       IList* pList = null;
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE ||
+               __launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+       {
+               pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL ||
+                        __launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+       {
+               pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+       }
+
+       if (pList == null)
+       {
+               ReturnResultFailed();
+       }
+       else
+       {
+               String* pContactValueInfo = static_cast<String *>(pList->GetAt(index));
+               int blankIndex = 0;
+               pContactValueInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+               pContactValueInfo->Remove(0, blankIndex + 1);
+               __pTempContactValueHashMap->Add(*(new (std::nothrow) Integer(__selectedIndex)), *(new (std::nothrow) String(*pContactValueInfo)));
+       }
+
+       delete pList;
+
+       HideContactValuePopup();
+
+       if (__pListView->GetShowState() == true)
+       {
+               __pListView->SetItemChecked(groupIndex, itemIndex, true);
+
+               bool isChecked = true;
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+                       for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                       {
+                               if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
+                               {
+                                       isChecked = false;
+                                       break;
+                               }
+                       }
+               }
+
+               __pSelectAllButton->SetSelected(isChecked);
+       }
+       else
+       {
+               groupIndex = (__selectedSearchIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+               itemIndex = __selectedSearchIndex & LIST_VIEW_MASK;
+               __pSearchListView->SetItemChecked(groupIndex, itemIndex, true);
+
+               int searchedCount = __pPresentationModel->GetSearchedContactCount();
+
+               for (int index = 0; index < searchedCount; index++)
+               {
+                       __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
+
+                       __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+GroupContactListEditorForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+GroupContactListEditorForm::OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index)
+{
+       __pListView->ScrollToItem(__pPresentationModel->GetKeyIndex(index), -1);
+       __pListView->Invalidate(false);
+}
+
+void
+GroupContactListEditorForm::OnContactsChanged(void)
+{
+       HideContactValuePopup();
+
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+               SetFocus();
+       }
+       __pPresentationModel->InitializeContactList();
+       if (__pPresentationModel->GetContactCount() == 0)
+       {
+               __pSearchBar->SetShowState(false);
+               __pListView->SetShowState(false);
+               __pCheckLabel->SetShowState(false);
+               __pSelectAllButton->SetShowState(false);
+               __pEmptyImageLabel->SetShowState(true);
+               __pEmptyCommentLabel->SetShowState(true);
+               __pBottomLabel->SetShowState(false);
+       }
+       else
+       {
+               __pSearchBar->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pCheckLabel->SetShowState(true);
+               __pSelectAllButton->SetShowState(true);
+               __pEmptyImageLabel->SetShowState(false);
+               __pEmptyCommentLabel->SetShowState(false);
+               __pBottomLabel->SetShowState(true);
+       }
+
+       __pSelectAllButton->SetSelected(false);
+
+       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+       {
+               int itemCount = __pListView->GetItemCountAt(groupIndex);
+               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                       {
+                               __pListView->SetItemChecked(groupIndex, itemIndex, false);
+                       }
+               }
+       }
+       UpdateBottomLabel();
+       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+       __pListView->UpdateList();
+       Invalidate(true);
+}
+
+void
+GroupContactListEditorForm::OnCategoriesChanged(void)
+{
+       SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST,
+                                                                                       SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_DESTROY_OPTION_DESTROY));
+}
+
+result
+GroupContactListEditorForm::RemoveSelectedContacts(void)
+{
+       for (int groupIndex = __pListView->GetGroupCount() - 1; groupIndex >= 0 ; groupIndex--)
+       {
+               int itemCount = __pListView->GetItemCountAt(groupIndex) - 1;
+               for (int itemIndex = itemCount; itemIndex >= 0; itemIndex--)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex))
+                       {
+                               __pPresentationModel->RemoveContactFromCategory(groupIndex, itemIndex);
+                       }
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListEditorForm::UpdateBottomLabel(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int selectedCount = 0;
+       int fotterItemIndex = 1;
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK || __launchType != 0)
+       {
+               fotterItemIndex = 0;
+       }
+
+       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+       {
+               int itemCount = __pListView->GetItemCountAt(groupIndex);
+               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+               {
+                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                       {
+                               selectedCount++;
+                       }
+               }
+       }
+
+       String selected = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       selected.Append(L" (");
+       selected.Append(selectedCount);
+       selected.Append(L")");
+       __pBottomLabel->SetText(selected);
+       __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+       __pBottomLabel->Invalidate(false);
+
+       Footer* pFooter = GetFooter();
+
+       if (selectedCount > 0)
+       {
+               if(__pBottomLabel->GetShowState() == false)
+               {
+                       __pBottomLabel->SetShowState(true);
+                       __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height - H_BOTTOM_LABEL);
+                       __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height - H_BOTTOM_LABEL);
+               }
+               pFooter->SetItemEnabled(fotterItemIndex, true);
+       }
+       else if (selectedCount == 0)
+       {
+               if (__pBottomLabel->GetShowState() == true)
+               {
+                       __pBottomLabel->SetShowState(false);
+                       __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height + H_BOTTOM_LABEL);
+                       __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height + H_BOTTOM_LABEL);
+               }
+               pFooter->SetItemEnabled(fotterItemIndex, false);
+       }
+
+       pFooter->Invalidate(true);
+
+       return E_SUCCESS;
+}
+
+void
+GroupContactListEditorForm::ShowContactValuePopup(int groupIndex, int itemIndex)
+{
+       delete __pMultipleContactValuePopup;
+       __pMultipleContactValuePopup = new (std::nothrow) Popup();
+       __pMultipleContactValuePopup->Construct(true, Dimension(W_CONTACT_VALUE_POPUP, H_CONTACT_VALUE_POPUP));
+       __pMultipleContactValuePopup->SetTitleText(__pPresentationModel->GetName(groupIndex, itemIndex));
+       __pMultipleContactValuePopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pMultipleContactValuePopup->GetClientAreaBounds();
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, popupClientBounds.width, H_CONTACT_VALUE_POPUP_LIST_VIEW));
+       pListView->SetItemProvider(*__pContactValueListEvent);
+       pListView->AddListViewItemEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pListView);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((popupClientBounds.width - W_CLOSE_BUTTON) / 2, Y_CLOSE_BUTTON, W_CLOSE_BUTTON, H_CLOSE_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCancelButton->SetActionId(IDA_POPUP_CONTACT_VALUE_CLOSE);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pCancelButton);
+       __pMultipleContactValuePopup->SetShowState(true);
+       __pMultipleContactValuePopup->Show();
+}
+
+void
+GroupContactListEditorForm::HideContactValuePopup(void)
+{
+       if (__pMultipleContactValuePopup)
+       {
+               __pMultipleContactValuePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+void
+GroupContactListEditorForm::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+       result r = pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+       AppLogDebug("[%s] The return result from SendAppControlResult(), AppCtrlResult value : %d.", GetErrorMessage(r), appCtrlResult);
+
+       UiApp::GetInstance()->Terminate();
+}
+
+void
+GroupContactListEditorForm::ReturnMultipleValues(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               ArrayList* pValueList = new (std::nothrow) ArrayList();
+               pValueList->Construct();
+
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pValueList->Add(new (std::nothrow) String(*pValue));
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PHONE), pValueList);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pValueList->Add(new (std::nothrow) String(*pValue));
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_EMAIL), pValueList);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_ITEM_ID)
+               {
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                                       {
+                                               String contactId;
+                                               contactId.Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                                               pValueList->Add(new (std::nothrow) String(contactId));
+                                       }
+                               }
+                       }
+                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), pValueList);
+               }
+               else
+               {
+                       delete pValueList;
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+                       return;
+               }
+
+               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+       }
+}
+
+void
+GroupContactListEditorForm::ReturnResultFailed(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, null);
+}
+
+result
+GroupContactListEditorForm::LaunchAppControl(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pAppControl != null)
+       {
+               return E_FAILURE;
+       }
+
+       HashMap extraData;
+       extraData.Construct();
+
+       if (__launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+       {
+               __pAppControl = AppManager::FindAppControlN(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE);
+
+               String toValue;
+
+               IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+               while (pMapEnum->MoveNext() == E_SUCCESS)
+               {
+                       String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                       int index = -1;
+                       pValue->IndexOf(DELIMITER_SEMICOLON, 0, index);
+                       if (index >= 0)
+                       {
+                               pValue->SubString(0, index, *pValue);
+                       }
+                       index = -1;
+                       pValue->IndexOf(DELIMITER_COMMA, 0, index);
+                       if (index >= 0)
+                       {
+                               pValue->SubString(0, index, *pValue);
+                       }
+
+                       toValue.Append(*pValue);
+                       toValue.Append(DELIMITER_COMMA);
+               }
+               delete pMapEnum;
+
+               toValue.Remove(toValue.GetLength() - 1, 1);
+
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(toValue));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+       else if (__launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+       {
+               __pAppControl = AppManager::FindAppControlN(PROVIDER_ID_EMAIL, OPERATION_ID_COMPOSE);
+
+               String toValue;
+
+               IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+               while (pMapEnum->MoveNext() == E_SUCCESS)
+               {
+                       String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                       toValue.Append(*pValue);
+                       toValue.Append(DELIMITER_SEMICOLON);
+               }
+               delete pMapEnum;
+
+               toValue.Remove(toValue.GetLength() - 1, 1);
+
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(toValue));
+       }
+
+       if (__pAppControl != null)
+       {
+               r = __pAppControl->Start(null, null, &extraData, null);
+               if (IsFailed(r))
+               {
+                       AppLogDebug("[%s] Unable to launch app control", GetErrorMessage(r));
+               }
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
+
+void
+GroupContactListEditorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListEditorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+GroupContactListEditorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+
+               UpdateBottomLabel();
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+GroupContactListEditorForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       if (__pBottomLabel->GetShowState() == true)
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
+               __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
+               __pBottomLabel->Invalidate(true);
+       }
+       else
+       {
+               __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
+       }
+}
+
+void
+GroupContactListEditorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+       if (keypadAction == KEYPAD_ACTION_SEARCH)
+       {
+               __pSearchBar->HideKeypad();
+       }
+}
+
+void
+GroupContactListEditorForm::OnForeground(void)
+{
+       bool isContactPresent = true;
+
+       if (__pListView->GetGroupCount() > 0)
+       {
+               for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+               {
+                       int itemCount = __pListView->GetItemCountAt(groupIndex);
+
+                       if (itemCount == 0)
+                       {
+                               isContactPresent = false;
+                       }
+                       else
+                       {
+                               isContactPresent = true;
+                       }
+               }
+       }
+       else
+       {
+               isContactPresent = false;
+       }
+
+       if (isContactPresent == false)
+       {
+               __pSelectAllButton->SetEnabled(false);
+       }
+       else
+       {
+               __pSelectAllButton->SetEnabled(true);
+
+       }
+
+       __pSelectAllButton->Invalidate(true);
+}
+
+void
+GroupContactListEditorForm::OnBackground(void)
+{
+       if (__pAppControl != null)
+       {
+               AppLogDebug("__pAppControl != null");
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+               pSceneManager->GoBackward(BackwardSceneTransition());
+       }
+}
+
+void
+GroupContactListEditorForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       GroupedListView* pList = static_cast<GroupedListView*>(&const_cast<Control&>(source));
+       if (pList != null)
+       {
+               pList->SetFocus();
+       }
+}
+
+void
+GroupContactListEditorForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupContactListEditorForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupContactListEditorForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupContactListEditorForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+bool
+GroupContactListEditorForm::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+GroupContactListEditorForm::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pMultipleContactValuePopup && __pMultipleContactValuePopup->GetShowState() == true)
+               {
+                       HideContactValuePopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+GroupContactListEditorForm::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+GroupContactListEditorForm::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
diff --git a/src/CtGroupContactListForm.cpp b/src/CtGroupContactListForm.cpp
new file mode 100644 (file)
index 0000000..46f3431
--- /dev/null
@@ -0,0 +1,1386 @@
+//
+// 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       CtGroupContactListForm.cpp
+ * @brief      This is the implementation file for the GroupContactListForm class.
+ */
+
+#include "CtContactListItem.h"
+#include "CtContactsApp.h"
+#include "CtGroupContactListForm.h"
+#include "CtGroupContactListPresentationModel.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtSearchListEventListener.h"
+#include "CtSearchListItem.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_ADD_MEMBER = 11;
+static const int IDA_MORE_REMOVE = 12;
+static const int IDA_LIST_ELEMENT_DELETE = 40;
+static const int IDA_LIST_ELEMENT_CALL = 41;
+static const int IDA_LIST_ELEMENT_MESSAGE = 42;
+static const int IDA_LIST_ELEMENT_VIDEO_CALL = 43;
+static const int IDA_POPUP_DELETE_YES = 30;
+static const int IDA_POPUP_DELETE_CANCEL = 31;
+static const int IDA_POPUP_CONTACT_VALUE_CLOSE = 32;
+
+static const wchar_t* IDB_NO_CONTENTS = L"00_Nocontents_text.png";
+
+static const int H_SEARCHBAR = 86;
+static const int H_GROUP_ITEM = 76;
+
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+static const int W_DELETE_BUTTON_GAP = 20;
+static const int W_CONTACT_VALUE_POPUP = 688;
+static const int H_CONTACT_VALUE_POPUP = 532;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 338;
+static const int Y_CLOSE_BUTTON = 358;
+static const int H_CLOSE_BUTTON = 74;
+static const int W_CLOSE_BUTTON = 394;
+
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+
+static const RequestId  REQ_ID_MOVE_TO_GROUP_LIST = 1000;
+
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_NORMAL = Color32<213, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_BUTTON_TEXT = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_NORMAL = Color32<208, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_TEXT = Color32<248, 246, 239>::Value;
+
+static const int LIST_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int LIST_VIEW_MASK = 0xFFFF;
+
+static const wchar_t* INPUT_KEY_CALL_TYPE = L"http://tizen.org/appcontrol/data/call/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TYPE = L"http://tizen.org/appcontrol/data/message/type";
+static const wchar_t* INPUT_KEY_MESSAGE_TO = L"http://tizen.org/appcontrol/data/to";
+static const wchar_t* INPUT_TYPE_VIDEO = L"video";
+static const wchar_t* INPUT_TYPE_VOICE = L"voice";
+static const wchar_t* INPUT_TYPE_SMS = L"sms";
+static const wchar_t* INPUT_URI_TEL = L"tel:";
+
+GroupContactListForm::GroupContactListForm(void)
+ : __pAppControl(null)
+ , __pListView(null)
+ , __pSearchListView(null)
+ , __pSearchBar(null)
+ , __pDeletePopup(null)
+ , __pMultipleContactValuePopup(null)
+ , __pEmptyImageLabel(null)
+ , __pEmptyCommentLabel(null)
+ , __pOptionMenu(null)
+ , __categoryId(0)
+ , __pContactValueListEvent(null)
+ , __pPresentationModel(null)
+ , __pSearchListEvent(null)
+ , __isCategoryUpdating(false)
+ , __sweptItemIndex(-1)
+ , __selectedIndex(-1)
+{
+}
+
+GroupContactListForm::~GroupContactListForm(void)
+{
+}
+
+void
+GroupContactListForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
+}
+
+result
+GroupContactListForm::OnInitializing(void)
+{
+       Footer* pFooter = GetFooter();
+       pFooter->AddActionEventListener(*this);
+
+       SetFormBackEventListener(this);
+       SetFormMenuEventListener(this);
+
+       __pPresentationModel = GroupContactListPresentationModel::GetInstance();
+
+       __pListView = new (std::nothrow) GroupedListView();
+       __pListView->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR), GROUPED_LIST_VIEW_STYLE_INDEXED, true, true);
+       __pListView->SetItemProvider(*this);
+       __pListView->AddFastScrollListener(*this);
+       __pListView->AddGroupedListViewItemEventListener(*this);
+       __pListView->AddTouchEventListener(*this);
+       AddControl(__pListView);
+
+       __pSearchBar = new (std::nothrow) SearchBar();
+       __pSearchBar->Construct(Rectangle(0, 0, GetClientAreaBounds().width, H_SEARCHBAR));
+       __pSearchBar->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_SEARCH"));
+       __pSearchBar->AddSearchBarEventListener(*this);
+       __pSearchBar->AddFocusEventListener(*this);
+       __pSearchBar->AddTextEventListener(*this);
+       __pSearchBar->AddKeypadEventListener(*this);
+       __pSearchBar->SetContentAreaSize(Dimension(0, 0));
+
+       __pSearchListEvent = new (std::nothrow) SearchListEventListener(LIST_ANNEX_STYLE_NORMAL, __pPresentationModel);
+       AddControl(__pSearchBar);
+
+       __pSearchListView = new (std::nothrow) GroupedListView();
+       __pSearchListView->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
+       __pSearchListView->SetItemProvider(*__pSearchListEvent);
+       __pSearchListView->AddGroupedListViewItemEventListener(*this);
+       __pSearchListView->AddTouchEventListener(*this);
+       __pSearchListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pSearchListView->SetShowState(false);
+       __pListView->AddTouchEventListener(*this);
+       AddControl(__pSearchListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_CONTENTS);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, GetClientAreaBounds().width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"), IDA_MORE_REMOVE);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+       if (__pDeletePopup != null)
+       {
+               delete __pDeletePopup;
+       }
+       if (__pSearchListEvent != null)
+       {
+               delete __pSearchListEvent;
+       }
+       delete __pAppControl;
+       delete __pOptionMenu;
+       delete __pMultipleContactValuePopup;
+
+       return r;
+}
+
+void
+GroupContactListForm::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       if (__pListView->GetShowState() == true)
+       {
+               __pListView->SetFocus();
+       }
+       else if (__pSearchListView->GetShowState() == true)
+       {
+               __pSearchListView->SetFocus();
+       }
+
+       if(__pPresentationModel->GetContactCount() > 0)
+       {
+               __pOptionMenu->SetShowState(true);
+               __pOptionMenu->Show();
+       }
+}
+
+void
+GroupContactListForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+}
+
+void
+GroupContactListForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+       }
+
+       switch (actionId)
+       {
+       case IDA_FOOTER_ADD_MEMBER:
+               {
+                       ArrayList* pArgList = new (std::nothrow) ArrayList();
+                       pArgList->Construct();
+
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
+                       {
+                               for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
+                               {
+                                       pArgList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetContactId(groupIndex, itemIndex))));
+                               }
+                       }
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_SELECTOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgList);
+               }
+               break;
+       case IDA_MORE_REMOVE:
+               {
+                       ArrayList* pArgList = new (std::nothrow) ArrayList();
+                       pArgList->Construct();
+                       pArgList->Add(*(new (std::nothrow) Integer(__categoryId)));
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_CONTACT_LIST_EDITOR), pArgList);
+               }
+               break;
+       case IDA_POPUP_DELETE_YES:
+               {
+                       int groupIndex = (__sweptItemIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+                       int itemIndex = __sweptItemIndex & LIST_VIEW_MASK;
+
+                       __pPresentationModel->RemoveContactFromCategory(groupIndex, itemIndex);
+                       HideDeletePopup();
+               }
+               break;
+       case IDA_POPUP_DELETE_CANCEL:
+               {
+                       HideDeletePopup();
+               }
+               break;
+       case IDA_POPUP_CONTACT_VALUE_CLOSE:
+               {
+                       HideContactValuePopup();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupContactListForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pArgs != null)
+       {
+               if (previousSceneId.Equals(IDSCN_GROUP_LIST, true))
+               {
+                       Integer* pCategoryId = null;
+                       IEnumerator* pEnum = pArgs->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               pCategoryId = static_cast<Integer*>(pEnum->GetCurrent());
+                               if (pCategoryId != null)
+                               {
+                                       __categoryId = pCategoryId->ToInt();
+
+                                       if (__categoryId == ID_GROUP_CONTACT_NOT_ASSIGNED)
+                                       {
+                                               __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID);
+                                               GetFooter()->SetShowState(false);
+                                       }
+                                       else
+                                       {
+                                               __pPresentationModel->InitializeGroupContactList(__categoryId);
+                                               GetFooter()->SetShowState(true);
+                                       }
+                                       __pListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight());
+                                       __pSearchListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight());
+                                       Invalidate(true);
+                               }
+                       }
+                       delete pEnum;
+               }
+               else if (previousSceneId.Equals(IDSCN_CONTACT_SELECTOR, true))
+               {
+                       result r = __pPresentationModel->AddContactToCategory(pArgs);
+
+                       if (r == E_SUCCESS)
+                       {
+                               __isCategoryUpdating = true;
+                       }
+               }
+
+               pArgs->RemoveAll(true);
+               delete pArgs;
+
+       }
+
+       if (previousSceneId.Equals(IDSCN_CONTACT_DETAILS, true))
+       {
+               if (__categoryId == ID_GROUP_CONTACT_NOT_ASSIGNED)
+               {
+                       __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID);
+               }
+               else
+               {
+                       result r = __pPresentationModel->InitializeGroupContactList(__categoryId);
+                       if (r == E_FAILURE)
+                       {
+                               SendUserEvent(REQ_ID_MOVE_TO_GROUP_LIST, null);
+                               return;
+                       }
+               }
+       }
+
+       if (__categoryId == ID_GROUP_CONTACT_NOT_ASSIGNED && __pSearchListEvent != null)
+       {
+               __pSearchListEvent->SetShowDeleteOption(false);
+       }
+
+       if (__pPresentationModel->IsCategoryValid())
+       {
+               String groupName = __pPresentationModel->GetCategoryName();
+
+               Header* pHeader = GetHeader();
+               pHeader->SetTitleText(groupName);
+
+               Footer* pFooter = GetFooter();
+               SetFormMenuEventListener(null);
+
+               if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+               {
+                       pFooter->SetShowState(false);
+                       __pListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - H_SEARCHBAR );
+                       __pSearchListView->SetSize(__pSearchListView->GetWidth(), GetClientAreaBounds().height - H_SEARCHBAR);
+                       Invalidate(true);
+
+                       if (__pPresentationModel->GetContactCount() == 0)
+                       {
+                               __pSearchBar->SetShowState(false);
+                               __pListView->SetShowState(false);
+                               __pEmptyImageLabel->SetShowState(true);
+                               __pEmptyCommentLabel->SetShowState(true);
+                       }
+                       __pPresentationModel->AddContactChangeListener(*this);
+                       return;
+               }
+
+               if (__categoryId != ID_GROUP_CONTACT_NOT_ASSIGNED)
+               {
+                       if (pFooter->GetItemCount() == 0)
+                       {
+                               FooterItem footerItemAdd;
+                               footerItemAdd.Construct(IDA_FOOTER_ADD_MEMBER);
+                               footerItemAdd.SetText(ResourceManager::GetString(L"IDS_PB_SK_ADD_MEMBER"));
+                               pFooter->AddItem(footerItemAdd);
+                       }
+
+                       if (__pPresentationModel->GetAllContactsCount() <= __pPresentationModel->GetContactCount())
+                       {
+                               pFooter->SetItemEnabled(0, false);
+                       }
+                       else
+                       {
+                               pFooter->SetItemEnabled(0, true);
+                       }
+
+                       if (__pPresentationModel->GetContactCount() > 0)
+                       {
+                               SetFormMenuEventListener(this);
+                       }
+                       else
+                       {
+                               SetFormMenuEventListener(null);
+                       }
+               }
+
+               if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       __pSearchBar->SetShowState(true);
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+
+                       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+                       __pListView->UpdateList();
+
+                       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT && __pSearchBar->GetTextLength() != 0)
+                       {
+                               String searchText = __pSearchBar->GetText();
+                               searchText.Trim();
+
+                               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+                               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+                               }
+                               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+                               }
+                               else
+                               {
+                                       __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+                               }
+                               __pSearchListView->UpdateList();
+                               __pListView->SetShowState(false);
+                               __pSearchListView->SetShowState(true);
+                       }
+                       else
+                       {
+                               __pListView->SetShowState(true);
+                               __pSearchListView->SetShowState(false);
+                       }
+               }
+               else
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pSearchListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+       }
+       else
+       {
+               if (previousSceneId.Equals(IDSCN_CONTACT_SELECTOR, true))
+               {
+                       SendUserEvent(REQ_ID_MOVE_TO_GROUP_LIST, null);
+                       return;
+               }
+       }
+       __pPresentationModel->AddContactChangeListener(*this);
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+}
+
+void
+GroupContactListForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+
+       delete __pAppControl;
+       __pAppControl = null;
+}
+
+void
+GroupContactListForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList* pArgs)
+{
+       if (requestId == REQ_ID_MOVE_TO_GROUP_LIST)
+       {
+               SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST));
+       }
+}
+
+int
+GroupContactListForm::GetGroupCount(void)
+{
+       return __pPresentationModel->GetKeyCount();
+}
+
+int
+GroupContactListForm::GetItemCount(int groupIndex)
+{
+       return __pPresentationModel->GetContactCount(groupIndex);
+}
+
+Tizen::Ui::Controls::ListItemBase*
+GroupContactListForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String name;
+       Bitmap* pThumbnail = null;
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), LIST_ANNEX_STYLE_NORMAL);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth, pContactsApp->GetListItemSingleLineHeight()), 0, *(static_cast<ICustomElement*>(pCustomElement)));
+
+       if (pContactsApp->GetOperationId().IsEmpty() == false)
+       {
+               return pItem;
+       }
+
+       bool isCallEnabled = true;
+       bool isMessageEnabled = true;
+       if (__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty())
+       {
+               isCallEnabled = false;
+       }
+
+       if ((__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty()) && (__pPresentationModel->GetDefaultEmail(groupIndex, itemIndex).IsEmpty()))
+       {
+               isMessageEnabled = false;
+       }
+
+       ListContextItem* pItemContext = new (std::nothrow) ListContextItem();
+       pItemContext->Construct();
+       pItemContext->AddElement(IDA_LIST_ELEMENT_CALL, ResourceManager::GetString(L"IDS_COM_BODY_CALL"), isCallEnabled);
+       pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), isMessageEnabled);
+#if __SUPPORT_VIDEO_CALL
+       pItemContext->AddElement(IDA_LIST_ELEMENT_VIDEO_CALL, ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), isEnabled);
+#endif
+       if (__categoryId != ID_GROUP_CONTACT_NOT_ASSIGNED)
+       {
+               pItemContext->AddElement(IDA_LIST_ELEMENT_DELETE, ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+       }
+       pItemContext->SetElementBackgroundColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL, COLOR_DELETE_ELEMENT_NORMAL);
+       pItemContext->SetElementBackgroundColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED, COLOR_DELETE_ELEMENT_PRESSED);
+       pItemContext->SetElementTextColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL, COLOR_DELETE_ELEMENT_TEXT);
+
+       pItem->SetContextItem(pItemContext);
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::GroupItem*
+GroupContactListForm::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(__pPresentationModel->GetKey(groupIndex), null);
+
+       return pItem;
+}
+
+bool
+GroupContactListForm::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
+       pCustomItem->RemoveAllElements();
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+GroupContactListForm::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+GroupContactListForm::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+       int index = 0;
+
+       if (listView.Equals(*__pSearchListView) == true)
+       {
+               __pPresentationModel->GetItemMainIndex(itemIndex, groupIndex, itemIndex);
+       }
+
+       index |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+       index |= itemIndex;
+
+       __sweptItemIndex = index;
+
+       switch (elementId)
+       {
+       case IDA_LIST_ELEMENT_DELETE:
+               {
+                       ShowDeletePopup();
+               }
+               break;
+       case IDA_LIST_ELEMENT_CALL:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                       LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, phoneNumber, INPUT_TYPE_VOICE);
+               }
+               break;
+       case IDA_LIST_ELEMENT_MESSAGE:
+               {
+                       if (!(__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty()))
+                       {
+                               String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                               LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, phoneNumber, INPUT_TYPE_SMS);
+                       }
+                       else if (!(__pPresentationModel->GetDefaultEmail(groupIndex, itemIndex).IsEmpty()))
+                       {
+                               String emailId = __pPresentationModel->GetDefaultEmail(groupIndex, itemIndex);
+                               LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, emailId, null);
+                       }
+               }
+               break;
+       case IDA_LIST_ELEMENT_VIDEO_CALL:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                       LaunchAppControl(PROVIDER_ID_PHONE, OPERATION_ID_CALL, phoneNumber, INPUT_TYPE_VIDEO);
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupContactListForm::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (listView.Equals(*__pSearchListView) == true)
+       {
+               __pPresentationModel->GetItemMainIndex(itemIndex, groupIndex, itemIndex);
+       }
+
+       int index = 0;
+
+       index |= groupIndex << LIST_VIEW_GROUP_INDEX_SHIFT;
+       index |= itemIndex;
+
+       __selectedIndex = index;
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               IList* pList = null;
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+
+                       if (pList == null)
+                       {
+                               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+                       }
+                       else
+                       {
+                               if (pList->GetCount() > 1)
+                               {
+                                       __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                       ShowContactValuePopup(groupIndex, itemIndex);
+                               }
+                               else if (pList->GetCount() == 1)
+                               {
+                                       String* pPhoneNumberInfo = static_cast<String *>(pList->GetAt(0));
+                                       int blankIndex = 0;
+                                       ArrayList* pValueList = new (std::nothrow) ArrayList();
+                                       pValueList->Construct();
+
+                                       pPhoneNumberInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                       pPhoneNumberInfo->Remove(0, blankIndex + 1);
+                                       pValueList->Add(new (std::nothrow) String(*pPhoneNumberInfo));
+                                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PHONE), pValueList);
+
+                                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                                       delete pList;
+                               }
+                       }
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+
+                       if (pList == null)
+                       {
+                               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+                       }
+                       else
+                       {
+                               if (pList->GetCount() > 1)
+                               {
+                                       __pContactValueListEvent = new (std::nothrow) ContactValueListItemProvider(pList);
+                                       ShowContactValuePopup(groupIndex, itemIndex);
+                               }
+                               else if (pList->GetCount() == 1)
+                               {
+                                       String* pEmailInfo = static_cast<String *>(pList->GetAt(0));
+                                       int blankIndex = 0;
+                                       ArrayList* pValueList = new (std::nothrow) ArrayList();
+                                       pValueList->Construct();
+
+                                       pEmailInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                       pEmailInfo->Remove(0, blankIndex + 1);
+                                       pValueList->Add(new (std::nothrow) String(*pEmailInfo));
+                                       pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_EMAIL), pValueList);
+
+                                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                                       delete pList;
+                               }
+                       }
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_ITEM_ID)
+               {
+                       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       RecordId contactId = __pPresentationModel->GetContactId(groupIndex, itemIndex);
+                       if (contactId == INVALID_RECORD_ID)
+                       {
+                               appCtrlResult = APP_CTRL_RESULT_FAILED;
+                       }
+                       else
+                       {
+                               String contactIdString;
+                               ArrayList* pValueList = new (std::nothrow) ArrayList();
+                               pValueList->Construct();
+
+                               contactIdString.Append(contactId);
+                               pValueList->Add(new (std::nothrow) String(contactIdString));
+                               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), pValueList);
+                       }
+
+                       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_VCARD)
+               {
+                       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       String vCardPath = __pPresentationModel->ExportToVcard(groupIndex, itemIndex);
+
+                       if (vCardPath.IsEmpty())
+                       {
+                               appCtrlResult = APP_CTRL_RESULT_FAILED;
+                       }
+                       else
+                       {
+                               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PATH), new (std::nothrow) String(vCardPath));
+                       }
+
+                       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+               }
+
+               delete pReturnValue;
+       }
+       else
+       {
+               ArrayList* pContactId = new (std::nothrow) ArrayList();
+               pContactId->Construct();
+
+               pContactId->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetContactId(groupIndex, itemIndex))));
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_DETAILS, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pContactId);
+       }
+}
+
+void
+GroupContactListForm::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+GroupContactListForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+GroupContactListForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       IList* pList = null;
+
+       HashMap* pReturnValue = new (std::nothrow) HashMap();
+       pReturnValue->Construct();
+
+       int groupIndex = (__selectedIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+       int itemIndex = __selectedIndex & LIST_VIEW_MASK;
+
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+               String* pPhoneNumberInfo = static_cast<String *>(pList->GetAt(index));
+               int blankIndex = 0;
+               ArrayList* pValueList = new (std::nothrow) ArrayList();
+               pValueList->Construct();
+
+               pPhoneNumberInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+               pPhoneNumberInfo->Remove(0, blankIndex + 1);
+               pValueList->Add(new (std::nothrow) String(*pPhoneNumberInfo));
+               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_PHONE), pValueList);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+               String* pEmailInfo = static_cast<String *>(pList->GetAt(index));
+               int blankIndex = 0;
+               ArrayList* pValueList = new (std::nothrow) ArrayList();
+               pValueList->Construct();
+
+               pEmailInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+               pEmailInfo->Remove(0, blankIndex + 1);
+               pValueList->Add(new (std::nothrow) String(*pEmailInfo));
+               pReturnValue->Add(new (std::nothrow) String(CONTACT_KEY_EMAIL), pValueList);
+       }
+
+       delete pList;
+
+       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+}
+
+void
+GroupContactListForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+GroupContactListForm::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, SearchBarMode mode)
+{
+       if (mode == SEARCH_BAR_MODE_NORMAL)
+       {
+               __pListView->SetShowState(true);
+               __pSearchListView->SetShowState(false);
+               __pPresentationModel->ResetSearchedContactList();
+               __pSearchListView->UpdateList();
+               __pListView->UpdateList();
+       }
+       else
+       {
+               //[TODO] to restore swept item.
+               // need to be fixed with better idea..
+               Rectangle bounds = __pListView->GetBounds();
+               __pListView->SetBounds(bounds.x, bounds.y, bounds.width, bounds.height + 1);
+               __pListView->Invalidate(true);
+               __pListView->SetBounds(bounds);
+       }
+}
+
+void
+GroupContactListForm::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       String searchText = __pSearchBar->GetText();
+       searchText.Trim();
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_PHONE_ONLY);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_HAS_EMAIL_ONLY);
+       }
+       else
+       {
+               __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
+       }
+
+       if (searchText.GetLength() != 0)
+       {
+               __pSearchListView->SetShowState(true);
+               __pListView->SetShowState(false);
+       }
+       else
+       {
+               __pSearchListView->SetShowState(false);
+               __pListView->SetShowState(true);
+       }
+
+       __pSearchListView->UpdateList();
+}
+
+void
+GroupContactListForm::OnFastScrollIndexSelected (Tizen::Ui::Control& source, Tizen::Base::String& index)
+{
+       __pListView->ScrollToItem(__pPresentationModel->GetKeyIndex(index), -1);
+       __pListView->Invalidate(false);
+}
+
+void
+GroupContactListForm::OnFocusGained(const Tizen::Ui::Control& source)
+{
+       if (source.Equals(*__pSearchBar))
+       {
+               if (__pListView->GetShowState() == true )
+               {
+                       int groupCount   = __pPresentationModel->GetKeyCount();
+                       bool isContextItemOpenend = false;
+
+                       for (int i = 0; i < groupCount; i++)
+                       {
+                               int contactCount = __pPresentationModel->GetContactCount(i);
+                               for (int j = 0; j < contactCount; j++)
+                               {
+                                       if (__pListView->IsContextItemOpened(i, j) == true)
+                                       {
+                                               isContextItemOpenend = true;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (isContextItemOpenend == true)
+                       {
+                               __pListView->UpdateList();
+                       }
+               }
+               else if (__pSearchListView->GetShowState() == true )
+               {
+                       int groupCount   = 0;
+                       bool isContextItemOpenend = false;
+
+                       if (__pSearchListEvent == null)
+                       {
+                               return;
+                       }
+                       groupCount   = __pSearchListEvent->GetGroupCount();
+                       for (int i = 0; i < groupCount; i++)
+                       {
+                               int contactCount = __pSearchListEvent->GetItemCount(i);
+                               for (int j = 0; j < contactCount; j++)
+                               {
+                                       if (__pSearchListView->IsContextItemOpened(i, j) == true)
+                                       {
+                                               isContextItemOpenend = true;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (isContextItemOpenend == true)
+                       {
+                               __pSearchListView->UpdateList();
+                       }
+               }
+       }
+}
+
+void
+GroupContactListForm::OnFocusLost(const Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListForm::OnContactsChanged(void)
+{
+       HideContactValuePopup();
+       HideDeletePopup();
+
+       if (__isCategoryUpdating)
+       {
+               __isCategoryUpdating = false;
+
+               return;
+       }
+
+       if (__categoryId == ID_GROUP_CONTACT_NOT_ASSIGNED)
+       {
+               __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID);
+       }
+       else
+       {
+               __pPresentationModel->InitializeGroupContactList(__categoryId);
+       }
+
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+               SetFocus();
+       }
+
+       if (__categoryId != ID_GROUP_CONTACT_NOT_ASSIGNED)
+       {
+               Footer* pFooter = GetFooter();
+
+               if (__pPresentationModel->GetAllContactsCount() <= __pPresentationModel->GetContactCount())
+               {
+                       pFooter->SetItemEnabled(0, false);
+                       pFooter->Invalidate(true);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(0, true);
+                       pFooter->Invalidate(true);
+               }
+
+               if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       SetFormMenuEventListener(this);
+               }
+               else
+               {
+                       SetFormMenuEventListener(null);
+               }
+       }
+
+       if (__pPresentationModel->GetContactCount() > 0)
+       {
+               __pSearchBar->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pEmptyImageLabel->SetShowState(false);
+               __pEmptyCommentLabel->SetShowState(false);
+
+               __pPresentationModel->InitializeContactList();
+               __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+               __pListView->UpdateList();
+       }
+       else
+       {
+               __pSearchBar->SetShowState(false);
+               __pListView->SetShowState(false);
+               __pEmptyImageLabel->SetShowState(true);
+               __pEmptyCommentLabel->SetShowState(true);
+       }
+}
+
+void
+GroupContactListForm::OnCategoriesChanged(void)
+{
+       if (__pPresentationModel->IsCategoryValid() == false)
+       {
+               SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST));
+       }
+}
+
+void
+GroupContactListForm::ShowDeletePopup(void)
+{
+       if (__pDeletePopup == null)
+       {
+               __pDeletePopup = new (std::nothrow) Popup();
+               __pDeletePopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_POPUP));
+               __pDeletePopup->SetPropagatedKeyEventListener(this);
+
+               Rectangle popupClientBounds = __pDeletePopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_LABEL, W_DELETE_LABEL, H_DELETE_LABEL), ResourceManager::GetString(L"IDS_COM_POP_DELETE_Q"));
+               pLabel->SetTextConfig(FONT_SIZE_DELETE_CONFIRM, LABEL_TEXT_STYLE_NORMAL);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+               Button* pDeleteButton = new (std::nothrow) Button();
+               pDeleteButton->Construct(Rectangle(X_DELETE_LABEL + W_DELETE_BUTTON + W_DELETE_BUTTON_GAP, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+               pDeleteButton->SetColor(BUTTON_STATUS_NORMAL, COLOR_DELETE_BUTTON_NORMAL);
+               pDeleteButton->SetColor(BUTTON_STATUS_PRESSED, COLOR_DELETE_BUTTON_PRESSED);
+               pDeleteButton->SetTextColor(COLOR_DELETE_BUTTON_TEXT);
+               pDeleteButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pDeleteButton->SetActionId(IDA_POPUP_DELETE_YES);
+               pDeleteButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(X_DELETE_LABEL, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetTextSize(FONT_SIZE_DELETE_BUTTON);
+               pCancelButton->SetActionId(IDA_POPUP_DELETE_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pDeletePopup->AddControl(pLabel);
+               __pDeletePopup->AddControl(pDeleteButton);
+               __pDeletePopup->AddControl(pCancelButton);
+       }
+
+       __pDeletePopup->SetShowState(true);
+       __pDeletePopup->Show();
+}
+
+void
+GroupContactListForm::HideDeletePopup(void)
+{
+       if (__pDeletePopup != null)
+       {
+               __pDeletePopup->SetShowState(false);
+               Invalidate(true);
+       }
+
+       delete __pContactValueListEvent;
+       __pContactValueListEvent = null;
+}
+
+void
+GroupContactListForm::ShowContactValuePopup(int groupIndex, int itemIndex)
+{
+       delete __pMultipleContactValuePopup;
+       __pMultipleContactValuePopup = new (std::nothrow) Popup();
+       __pMultipleContactValuePopup->Construct(true, Dimension(W_CONTACT_VALUE_POPUP, H_CONTACT_VALUE_POPUP));
+       __pMultipleContactValuePopup->SetTitleText(__pPresentationModel->GetName(groupIndex, itemIndex));
+       __pMultipleContactValuePopup->SetPropagatedKeyEventListener(this);
+
+       Rectangle popupClientBounds = __pMultipleContactValuePopup->GetClientAreaBounds();
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, popupClientBounds.width, H_CONTACT_VALUE_POPUP_LIST_VIEW));
+       pListView->SetItemProvider(*__pContactValueListEvent);
+       pListView->AddListViewItemEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pListView);
+
+       Button* pCancelButton = new (std::nothrow) Button();
+       pCancelButton->Construct(Rectangle((popupClientBounds.width - W_CLOSE_BUTTON) / 2, Y_CLOSE_BUTTON, W_CLOSE_BUTTON, H_CLOSE_BUTTON), ResourceManager::GetString(L"IDS_COM_POP_CLOSE"));
+       pCancelButton->SetActionId(IDA_POPUP_CONTACT_VALUE_CLOSE);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pMultipleContactValuePopup->AddControl(pCancelButton);
+       __pMultipleContactValuePopup->SetShowState(true);
+       __pMultipleContactValuePopup->Show();
+}
+
+void
+GroupContactListForm::HideContactValuePopup(void)
+{
+       if (__pMultipleContactValuePopup != null)
+       {
+               __pMultipleContactValuePopup->SetShowState(false);
+               Invalidate(true);
+       }
+}
+
+result
+GroupContactListForm::ParseAppControlArgument(const Tizen::Base::String& argument, Tizen::Base::String& type, Tizen::Base::String& content)
+{
+       result r = E_SUCCESS;
+
+       if (argument.IsEmpty() || argument.Contains(DELIMITER) == false)
+       {
+               return E_FAILURE;
+       }
+
+       StringTokenizer stringToken(argument, DELIMITER);
+
+       r = stringToken.GetNextToken(type);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get type", GetErrorMessage(r));
+
+       r = stringToken.GetNextToken(content);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to get content", GetErrorMessage(r));
+
+       return r;
+}
+
+void
+GroupContactListForm::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+
+       result r = pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+       AppLogDebug("[%s] The return result from SendAppControlResult(), AppCtrlResult value : %d.", GetErrorMessage(r), appCtrlResult);
+
+       UiApp::GetInstance()->Terminate();
+}
+
+result
+GroupContactListForm::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, const Tizen::Base::String& argument, const Tizen::Base::String& type)
+{
+       result r = E_SUCCESS;
+
+       if (__pAppControl != null)
+       {
+               return E_FAILURE;
+       }
+
+       String uri;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)))
+       {
+               uri.Append(INPUT_URI_TEL);
+               uri.Append(argument);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_CALL_TYPE), new (std::nothrow) String(type));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TO), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MESSAGE_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+
+       __pAppControl = AppManager::FindAppControlN(appId, operationId);
+       if (__pAppControl != null)
+       {
+               r = __pAppControl->Start(&uri, null, &extraData, null);
+               if (IsFailed(r))
+               {
+                       AppLogDebug("[%s] Unable to launch app control", GetErrorMessage(r));
+               }
+               else
+               {
+                       if (__pListView->GetShowState() == true)
+                       {
+                               __pListView->SetEnabled(false);
+                       }
+
+                       if (__pSearchListView->GetShowState() == true)
+                       {
+                               __pSearchListView->SetEnabled(false);
+                       }
+               }
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
+
+void
+GroupContactListForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       __pSearchListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight());
+}
+
+void
+GroupContactListForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       if (__categoryId == ID_GROUP_CONTACT_NOT_ASSIGNED)
+       {
+               __pPresentationModel->InitializeGroupContactList(Tizen::Social::INVALID_RECORD_ID);
+               GetFooter()->SetShowState(false);
+       }
+       else
+       {
+               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+               __pPresentationModel->InitializeGroupContactList(__categoryId);
+               if (pContactsApp->GetOperationId() != OPERATION_ID_PICK)
+               {
+                       GetFooter()->SetShowState(true);
+               }
+       }
+       __pListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight());
+       __pSearchListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight());
+       Invalidate(true);
+}
+
+void
+GroupContactListForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       __pSearchListView->SetSize(__pListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight());
+}
+
+void
+GroupContactListForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+       if (keypadAction == KEYPAD_ACTION_SEARCH)
+       {
+               __pSearchBar->HideKeypad();
+       }
+}
+
+void
+GroupContactListForm::OnForeground(void)
+{
+       delete __pAppControl;
+       __pAppControl = null;
+
+       if (__pListView->IsEnabled() == false)
+       {
+               __pListView->SetEnabled(true);
+       }
+
+       if (__pSearchListView->IsEnabled() == false)
+       {
+               __pSearchListView->SetEnabled(true);
+       }
+}
+
+void
+GroupContactListForm::OnBackground(void)
+{
+}
+
+void
+GroupContactListForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       GroupedListView* pList = static_cast<GroupedListView*>(&const_cast<Control&>(source));
+       if (pList != null)
+       {
+               pList->SetFocus();
+       }
+}
+
+void
+GroupContactListForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupContactListForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupContactListForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupContactListForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+bool
+GroupContactListForm::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+GroupContactListForm::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pMultipleContactValuePopup && __pMultipleContactValuePopup->GetShowState() == true)
+               {
+                       HideContactValuePopup();
+                       return true;
+               }
+               else if (__pDeletePopup && __pDeletePopup->GetShowState() == true)
+               {
+                       HideDeletePopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+GroupContactListForm::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+GroupContactListForm::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
diff --git a/src/CtGroupContactListPresentationModel.cpp b/src/CtGroupContactListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..a3b35d6
--- /dev/null
@@ -0,0 +1,813 @@
+//
+// 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       CtGroupContactListPresentationModel.cpp
+ * @brief      This is the implementation file for the GroupContactListPresentationModel class.
+ */
+
+#include <FSocial.h>
+#include "CtContactsApp.h"
+#include "CtGroupContactListPresentationModel.h"
+#include "CtIContactEventListener.h"
+#include "CtResourceManager.h"
+#include "CtTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Social;
+
+static const wchar_t* KEY_SHARP = L"#";
+
+GroupContactListPresentationModel* GroupContactListPresentationModel::__pInstance = null;
+
+GroupContactListPresentationModel*
+GroupContactListPresentationModel::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+
+       return __pInstance;
+}
+
+void
+GroupContactListPresentationModel::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) GroupContactListPresentationModel();
+       result r = __pInstance->Construct();
+       TryCatch(r == E_SUCCESS, , "[%s] Construction Failed", GetErrorMessage(r));
+
+       std::atexit(DestroyInstance);
+       return;
+
+CATCH:
+       delete __pInstance;
+       __pInstance = null;
+}
+
+void
+GroupContactListPresentationModel::DestroyInstance(void)
+{
+       delete __pInstance;
+}
+
+GroupContactListPresentationModel::GroupContactListPresentationModel(void)
+ : __categoryId(INVALID_RECORD_ID)
+ , __groupContactLaunchType(GROUP_CONTACT_LAUNCH_TYPE_NONE)
+{
+}
+
+GroupContactListPresentationModel::~GroupContactListPresentationModel(void)
+{
+}
+
+result
+GroupContactListPresentationModel::Construct(void)
+{
+       result r = E_SUCCESS;
+
+       if (_pAddressbook != null)
+       {
+               AppLogDebug("ContactListPresentationModel is already constructed.");
+               return E_SUCCESS;
+       }
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       _pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       if (_pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       r = _pAddressbook->SetAddressbookChangeEventListener(this);
+       TryCatch(r == E_SUCCESS, , "[%s] Unable to set event listener.", GetErrorMessage(r));
+
+       _pContactChangeListenerList = new (std::nothrow) ArrayList();
+       _pContactChangeListenerList->Construct();
+
+       return r;
+
+CATCH:
+       delete _pAddressbook;
+       _pAddressbook = null;
+
+       if (_pContactList != null)
+       {
+               _pContactList->RemoveAll(true);
+
+               delete _pContactList;
+               _pContactList = null;
+       }
+
+       delete _pContactChangeListenerList;
+       _pContactChangeListenerList = null;
+
+       return r;
+}
+
+result
+GroupContactListPresentationModel::InitializeGroupContactList(Tizen::Social::RecordId categoryId, GroupContactLaunchType launchType)
+{
+       __categoryId = categoryId;
+       __groupContactLaunchType = launchType;
+
+
+       return CreateContactList();
+}
+
+Tizen::Base::String
+GroupContactListPresentationModel::GetName(int groupIndex, int itemIndex)
+{
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+
+       if (pPerson == null)
+       {
+               return null;
+       }
+
+       return pPerson->GetDisplayName();
+}
+
+Tizen::Base::Collection::IList*
+GroupContactListPresentationModel::GetAllPhoneNumbersN(int groupIndex, int itemIndex)
+{
+       Contact* pContact = _pAddressbook->GetContactN(GetContactId(groupIndex, itemIndex));
+       if (pContact == null)
+       {
+               return null;
+       }
+       IList* pPhoneNumberList = pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+       if (pPhoneNumberList == null)
+       {
+               delete pContact;
+               return null;
+       }
+
+       ArrayList* pPhoneNumberInfoList = new (std::nothrow) ArrayList();
+       pPhoneNumberInfoList->Construct();
+       PhoneNumber* pPhoneNumber = null;
+
+       IEnumerator* pEnum = pPhoneNumberList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pPhoneNumber = static_cast<PhoneNumber *>(pEnum->GetCurrent());
+               if (pPhoneNumber != null)
+               {
+                       String phoneNumbersInfo(L"");
+
+                       switch (pPhoneNumber->GetType())
+                       {
+                       case PHONENUMBER_TYPE_HOME:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_HOME"));
+                               break;
+                       case PHONENUMBER_TYPE_WORK:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_WORK"));
+                               break;
+                       case PHONENUMBER_TYPE_MOBILE:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_MOBILE"));
+                               break;
+                       case PHONENUMBER_TYPE_HOME_FAX:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_FAX_HHOME"));
+                               break;
+                       case PHONENUMBER_TYPE_WORK_FAX:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_FAX_HWORK"));
+                               break;
+                       case PHONENUMBER_TYPE_PAGER:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_PAGER"));
+                               break;
+                       case PHONENUMBER_TYPE_OTHER:
+                               phoneNumbersInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_OTHER"));
+                               break;
+                       default:
+                               break;
+                       }
+                       phoneNumbersInfo.Append(CHARACTER_SPACE);
+                       phoneNumbersInfo.Append(pPhoneNumber->GetPhoneNumber());
+
+                       pPhoneNumberInfoList->Add(*(new (std::nothrow) String(phoneNumbersInfo)));
+               }
+       }
+
+       delete pEnum;
+       delete pContact;
+       pPhoneNumberList->RemoveAll(true);
+       delete pPhoneNumberList;
+
+       return pPhoneNumberInfoList;
+}
+
+Tizen::Base::Collection::IList*
+GroupContactListPresentationModel::GetAllEmailsN(int groupIndex, int itemIndex)
+{
+       Contact* pContact = _pAddressbook->GetContactN(GetContactId(groupIndex, itemIndex));
+       if (pContact == null)
+       {
+               return null;
+       }
+       IList* pEmailList = pContact->GetValuesN(CONTACT_MPROPERTY_ID_EMAILS);
+       if (pEmailList == null)
+       {
+               delete pContact;
+               return null;
+       }
+
+       ArrayList* pEmailInfoList = new (std::nothrow) ArrayList();
+       pEmailInfoList->Construct();
+       Email* pEmail = null;
+
+       IEnumerator* pEnum = pEmailList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pEmail = static_cast<Email *>(pEnum->GetCurrent());
+               if (pEmail != null)
+               {
+                       String EmailsInfo(L"");
+
+                       switch (pEmail->GetType())
+                       {
+                       case EMAIL_TYPE_PERSONAL:
+                               EmailsInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_HOME"));
+                               break;
+                       case EMAIL_TYPE_WORK:
+                               EmailsInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_WORK"));
+                               break;
+                       case EMAIL_TYPE_OTHER:
+                               EmailsInfo.Append(ResourceManager::GetString(L"IDS_PB_BODY_OTHER"));
+                               break;
+                       default:
+                               break;
+                       }
+                       EmailsInfo.Append(CHARACTER_SPACE);
+                       EmailsInfo.Append(pEmail->GetEmail());
+
+                       pEmailInfoList->Add(*(new (std::nothrow) String(EmailsInfo)));
+               }
+       }
+
+       delete pEnum;
+       delete pContact;
+       pEmailList->RemoveAll(true);
+       delete pEmailList;
+
+       return pEmailInfoList;
+}
+
+Tizen::Social::Person*
+GroupContactListPresentationModel::GetPersonAt(int groupIndex, int itemIndex)
+{
+       int count = 0;
+       Person* pPerson = null;
+       IEnumerator* pEnum = _pContactList->GetValuesN(GetKey(groupIndex));
+
+       TryReturn(pEnum, null, "No contact")
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               if (itemIndex == count++)
+               {
+                       pPerson = static_cast<Person *>(pEnum->GetCurrent());
+                       break;
+               }
+       }
+
+       delete pEnum;
+
+       return pPerson;
+}
+
+result
+GroupContactListPresentationModel::CreateContactList(void)
+{
+       result r = E_SUCCESS;
+
+       if (_pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       if (_pContactList == null)
+       {
+               _pContactList = new (std::nothrow) MultiHashMap();
+               _pContactList->Construct();
+       }
+       else
+       {
+               _pContactList->RemoveAll(true);
+       }
+
+       if (_pGroupIndexList == null)
+       {
+               _pGroupIndexList = new (std::nothrow) ArrayList();
+               _pGroupIndexList->Construct();
+       }
+       else
+       {
+               _pGroupIndexList->RemoveAll(false);
+       }
+
+       IList* pContactList = AddressbookManager::GetInstance()->GetPersonsByCategoryN(__categoryId);
+       if (pContactList == null)
+       {
+               return E_FAILURE;
+       }
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               TrimListForAppControl(pContactList);
+       }
+
+       if (__groupContactLaunchType != GROUP_CONTACT_LAUNCH_TYPE_NONE)
+       {
+               TrimListForLaunch(pContactList);
+       }
+
+       IEnumerator* pEnum = pContactList->GetEnumeratorN();
+       if (pEnum == null)
+       {
+               return E_FAILURE;
+       }
+
+       bool isNotUsedSharpKey = true;
+       String* pSharpKey = new (std::nothrow) String(KEY_SHARP);
+       String* pKey = null;
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               Person* pPerson = static_cast<Person *>(pEnum->GetCurrent());
+               if (pPerson == null)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               String displayName = pPerson->GetDisplayName();
+               String firstCharacter;
+
+               displayName.SubString(0, 1, firstCharacter);
+               firstCharacter.ToUpper();
+
+               if (pKey == null || firstCharacter.CompareTo(*pKey) != 0)
+               {
+                       if (*(firstCharacter.GetPointer()) >= L'A' && *(firstCharacter.GetPointer()) <= L'Z')
+                       {
+                               if (_pGroupIndexList->Contains(firstCharacter))
+                               {
+                                       int index;
+
+                                       _pGroupIndexList->IndexOf(firstCharacter, index);
+                                       pKey = static_cast<String *>(_pGroupIndexList->GetAt(index));
+                                       if (pKey == null)
+                                       {
+                                               break;
+                                       }
+                               }
+                               else
+                               {
+                                       pKey = new (std::nothrow) String(firstCharacter);
+                                       _pGroupIndexList->Add(*pKey);
+                               }
+                       }
+                       else
+                       {
+                               isNotUsedSharpKey = false;
+                               pKey = pSharpKey;
+
+                               if (_pGroupIndexList->Contains(*pKey) == false)
+                               {
+                                       _pGroupIndexList->Add(*pKey);
+                               }
+                       }
+               }
+               _pContactList->Add(*pKey, *pPerson);
+       }
+
+       _pGroupIndexList->Sort(StringComparer());
+
+       delete pEnum;
+       delete pContactList;
+
+       if (isNotUsedSharpKey)
+       {
+               delete pSharpKey;
+       }
+
+       return r;
+}
+
+result
+GroupContactListPresentationModel::TrimListForAppControl(Tizen::Base::Collection::IList*& pContactList)
+{
+       TryReturn(pContactList != null, E_INVALID_ARG, "Invalid argument");
+
+       IList* pSelectedList = null;
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+               if (__categoryId != INVALID_RECORD_ID)
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, __categoryId);
+               }
+               else
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, 0);
+               }
+
+               pSelectedList = pAddressbookManager->SearchN(mainFilter);
+               TryReturn(pSelectedList != null, E_FAILURE, "Unable to get the list contained phone number");
+
+               pContactList->RemoveAll(true);
+               pContactList->AddItems(*pSelectedList);
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+               if (__categoryId != INVALID_RECORD_ID)
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, __categoryId);
+               }
+               else
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, 0);
+               }
+
+               pSelectedList = pAddressbookManager->SearchN(mainFilter);
+               TryReturn(pSelectedList != null, E_FAILURE, "Unable to get the list contained email");
+
+               pContactList->RemoveAll(true);
+               pContactList->AddItems(*pSelectedList);
+       }
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListPresentationModel::TrimListForLaunch(Tizen::Base::Collection::IList*& pContactList)
+{
+       result r = E_SUCCESS;
+
+       TryReturn(pContactList != null, E_INVALID_ARG, "Invalid argument");
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       IList* pSelectedList = null;
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+
+       if (__groupContactLaunchType == GROUP_CONTACT_LAUNCH_TYPE_MESSAGE)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+
+               if (__categoryId == INVALID_RECORD_ID)
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, __categoryId);
+               }
+               else
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, __categoryId);
+               }
+
+               pSelectedList = pAddressbookManager->SearchN(mainFilter);
+               TryReturn(pSelectedList != null, E_FAILURE, "[E_FAIURE] Unable to get the list contained phone number");
+       }
+       else if (__groupContactLaunchType == GROUP_CONTACT_LAUNCH_TYPE_EMAIL)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_NONE, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+
+               if (__categoryId == INVALID_RECORD_ID)
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, __categoryId);
+               }
+               else
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_AND, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, __categoryId);
+               }
+
+               pSelectedList = pAddressbookManager->SearchN(mainFilter);
+               TryReturn(pSelectedList != null, E_FAILURE, "[E_FAILURE] Unable to get the list contained email");
+       }
+
+       pContactList->RemoveAll(true);
+       pContactList->AddItems(*pSelectedList);
+
+       return r;
+}
+
+Tizen::Base::String
+GroupContactListPresentationModel::GetCategoryName(void)
+{
+       String categoryName;
+
+       if (__categoryId != INVALID_RECORD_ID)
+       {
+               Category* pCategory = _pAddressbook->GetCategoryN(__categoryId);
+               if (pCategory == null)
+               {
+                       return categoryName;
+               }
+
+               categoryName = pCategory->GetName();
+
+               delete pCategory;
+       }
+       else
+       {
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+       }
+
+       return categoryName;
+}
+
+int
+GroupContactListPresentationModel::GetAllContactsCount(void)
+{
+       return _pAddressbook->GetContactCount();
+}
+
+bool
+GroupContactListPresentationModel::IsCategoryValid(void)
+{
+       if (__categoryId != INVALID_RECORD_ID)
+       {
+               Category* pCategory = _pAddressbook->GetCategoryN(__categoryId);
+               if (pCategory != null)
+               {
+                       delete pCategory;
+                       return true;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+result
+GroupContactListPresentationModel::AddContactToCategory(Tizen::Base::Collection::IList* pList)
+{
+       if (pList == null)
+       {
+               return E_FAILURE;
+       }
+
+       Category* pCategory = _pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory == null)
+       {
+               return E_FAILURE;
+       }
+
+       Integer* pContactId = null;
+       IEnumerator* pEnum = pList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pContactId = static_cast<Integer*>(pEnum->GetCurrent());
+               if (pContactId != null)
+               {
+                       pCategory->AddMember(pContactId->ToInt());
+               }
+       }
+       delete pEnum;
+
+       _pAddressbook->UpdateCategory(*pCategory);
+       CreateContactList();
+
+       delete pCategory;
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListPresentationModel::RemoveContactFromCategory(int groupIndex, int itemIndex)
+{
+       Category* pCategory = _pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory == null)
+       {
+               return E_FAILURE;
+       }
+
+       Person* pPerson = GetPersonAt(groupIndex, itemIndex);
+       if (pPerson == null)
+       {
+               delete pCategory;
+               return E_FAILURE;
+       }
+
+       _pAddressbook->RemoveMemberFromCategory(pCategory->GetRecordId(), GetContactId(groupIndex, itemIndex));
+       _pAddressbook->UpdateCategory(*pCategory);
+
+       CreateContactList();
+
+       delete pCategory;
+
+       return E_SUCCESS;
+}
+
+void
+GroupContactListPresentationModel::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+       IContactEventListener* pInterface = null;
+       if (_pContactChangeListenerList != null)
+       {
+               IEnumerator* pEnum = _pContactChangeListenerList->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pInterface = static_cast<IContactEventListener *>(pEnum->GetCurrent());
+                       if (pInterface == null)
+                       {
+                               delete pEnum;
+                               return;
+                       }
+                       pInterface->OnContactsChanged();
+               }
+
+               delete pEnum;
+       }
+}
+
+void
+GroupContactListPresentationModel::OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList)
+{
+       IContactEventListener* pInterface = null;
+       if (_pContactChangeListenerList != null)
+       {
+               IEnumerator* pEnum = _pContactChangeListenerList->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pInterface = static_cast<IContactEventListener *>(pEnum->GetCurrent());
+                       if (pInterface == null)
+                       {
+                               delete pEnum;
+                               return;
+                       }
+                       pInterface->OnCategoriesChanged();
+               }
+
+               delete pEnum;
+       }
+}
+
+Tizen::Base::Collection::IList*
+GroupContactListPresentationModel::GetSearchedContactListN(const Tizen::Base::String& searchText, SearchType searchType)
+{
+       if (searchText.GetLength() == 0)
+       {
+               return null;
+       }
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       int phoneNumber = 0;
+       IList* pSearchedList = null;
+
+       if (Integer::Parse(searchText, phoneNumber) == E_SUCCESS && searchType != SEARCH_TYPE_HAS_EMAIL_ONLY)
+       {
+               IList* pSearchingPhoneNumberList = null;
+               AddressbookFilter phoneNumberFilter(AB_FI_TYPE_PHONE_CONTACT);
+               phoneNumberFilter.AppendString(FI_CONJ_OP_NONE, PHONE_CONTACT_FI_PR_PHONE, FI_STR_OP_CONTAIN, searchText);
+               phoneNumberFilter.AppendString(FI_CONJ_OP_OR, PHONE_CONTACT_FI_PR_DISPLAY_NAME, FI_STR_OP_CONTAIN, searchText);
+
+               pSearchingPhoneNumberList = pAddressbookManager->SearchN(phoneNumberFilter);
+               if (pSearchingPhoneNumberList == null)
+               {
+                       return null;
+               }
+
+               IEnumerator* pEnum = pSearchingPhoneNumberList->GetEnumeratorN();
+               if (pEnum == null)
+               {
+                       pSearchingPhoneNumberList->RemoveAll(true);
+                       delete pSearchingPhoneNumberList;
+
+                       return null;
+               }
+
+               ArrayList* pSearchedPersonsList = new (std::nothrow) ArrayList();
+               pSearchedPersonsList->Construct();
+
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       PhoneNumberContact* pPhoneNumberContact = static_cast<PhoneNumberContact *>(pEnum->GetCurrent());
+                       Person* pPerson = pAddressbookManager->GetPersonN(pPhoneNumberContact->GetPersonId());
+
+                       if (pPerson != null && pSearchedPersonsList->Contains(*pPerson) == false)
+                       {
+                               IList* pCategoryList = pAddressbookManager->GetCategoriesByPersonN(pPerson->GetId());
+
+                               if (__categoryId == INVALID_RECORD_ID)
+                               {
+                                       if (pCategoryList == null || pCategoryList->GetCount() == 0)
+                                       {
+                                               pSearchedPersonsList->Add(*pPerson);
+                                       }
+                                       else
+                                       {
+                                               delete pPerson;
+                                       }
+                               }
+                               else
+                               {
+                                       if (pCategoryList != null)
+                                       {
+                                               IEnumerator* pCategoryEnum = pCategoryList->GetEnumeratorN();
+                                               bool isAdded = false;
+
+                                               while (pCategoryEnum->MoveNext() == E_SUCCESS)
+                                               {
+                                                       Category* pCategory = static_cast<Category *>(pCategoryEnum->GetCurrent());
+                                                       if (pCategory != null && pCategory->GetRecordId() == __categoryId)
+                                                       {
+                                                               pSearchedPersonsList->Add(*pPerson);
+                                                               isAdded = true;
+                                                       }
+                                               }
+
+                                               if (isAdded == false)
+                                               {
+                                                       delete pPerson;
+                                               }
+
+                                               delete pCategoryEnum;
+                                       }
+                               }
+
+                               if (pCategoryList != null)
+                               {
+                                       pCategoryList->RemoveAll(true);
+                                       delete pCategoryList;
+                               }
+                       }
+               }
+
+               pSearchingPhoneNumberList->RemoveAll(true);
+               delete pSearchingPhoneNumberList;
+               delete pEnum;
+
+               pSearchedList = pSearchedPersonsList;
+
+               if (searchType != SEARCH_TYPE_HAS_PHONE_ONLY)
+               {
+                       IList* pDisplayNameSearchedList = null;
+                       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+
+                       if (__categoryId != INVALID_RECORD_ID)
+                       {
+                               mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, __categoryId);
+                       }
+                       else
+                       {
+                               mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, INVALID_RECORD_ID);
+                       }
+                       mainFilter.AppendString(FI_CONJ_OP_AND, PERSON_FI_PR_DISPLAY_NAME, FI_STR_OP_CONTAIN, searchText);
+                       mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, false);
+
+                       pDisplayNameSearchedList = pAddressbookManager->SearchN(mainFilter);
+                       pSearchedList->InsertItemsFrom(*pDisplayNameSearchedList, 0);
+               }
+       }
+       else
+       {
+               AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+               if (__categoryId != INVALID_RECORD_ID)
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, __categoryId);
+               }
+               else
+               {
+                       mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, INVALID_RECORD_ID);
+               }
+               mainFilter.AppendString(FI_CONJ_OP_AND, PERSON_FI_PR_DISPLAY_NAME, FI_STR_OP_CONTAIN, searchText);
+
+               if (searchType == SEARCH_TYPE_HAS_PHONE_ONLY)
+               {
+                       mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+               }
+               else if (searchType == SEARCH_TYPE_HAS_EMAIL_ONLY)
+               {
+                       mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+               }
+
+               pSearchedList = pAddressbookManager->SearchN(mainFilter);
+       }
+
+       return pSearchedList;
+}
diff --git a/src/CtGroupEditorForm.cpp b/src/CtGroupEditorForm.cpp
new file mode 100644 (file)
index 0000000..b48c9be
--- /dev/null
@@ -0,0 +1,1292 @@
+//
+// 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       CtGroupEditorForm.cpp
+ * @brief      This is the implementation file for the GroupEditorForm class.
+ */
+
+#include <FApp.h>
+#include <FMedia.h>
+#include "CtContactsApp.h"
+#include "CtGroupEditorForm.h"
+#include "CtGroupPresentationModel.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+#include "CtCommonUtil.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Io;
+using namespace Tizen::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+static const int IDA_HEADER_SAVE = 0;
+static const int IDA_BUTTON_GALLERY = 10;
+static const int IDA_BUTTON_TAKE_PHOTO = 11;
+static const int IDA_BUTTON_REMOVE = 12;
+static const int IDA_BUTTON_RINGTONE_CLEAR = 13;
+static const int IDA_POPUP_DISCARD_CHANGES_OK = 20;
+static const int IDA_POPUP_DISCARD_CHANGES_CANCEL = 21;
+
+static const wchar_t* IDB_ICON_ADD_NORMAL = L"C02_caller_id_icon_add.png";
+static const wchar_t* IDB_ICON_ADD_PRESSED = L"C02_caller_id_icon_add_press.png";
+static const wchar_t* IDB_ICON_CAMERA_NORMAL = L"C02_caller_id_icon_camera.png";
+static const wchar_t* IDB_ICON_CAMERA_PRESSED = L"C02_caller_id_icon_camera_press.png";
+static const wchar_t* IDB_ICON_REMOVE_NORMAL = L"00_button_expand_minus_press.png";
+static const wchar_t* IDB_ICON_REMOVE_PRESSED = L"00_button_expand_minus_press.png";
+static const wchar_t* IDB_REMOVE_BG_NORMAL = L"00_circle_button_delete.png";
+static const wchar_t* IDB_REMOVE_BG_PRESSED = L"00_circle_button_delete_press.png";
+static const wchar_t* IDB_DETAILS_RESET_NORMAL = L"00_button_refresh.png";
+static const wchar_t* IDB_DETAILS_RESET_PRESSED = L"00_button_refresh_press.png";
+
+static const int H_ITEM = 128;
+static const int H_THUMBNAIL = 360;
+static const int Y_THUMBNAIL = 49;
+static const int H_ICON_BUTTON = 74;
+static const int Y_REMOVE_BUTTON = 26;
+static const int X_REMOVE_BUTTON_MARGIN = 40;
+static const int X_REFRESH_BUTTON_MARGIN = 88;
+
+static const int X_RINGTONE_TEXT = 3;
+static const int Y_RINGTONE_TITLE = 10;
+static const int Y_RINGTONE_NAME = 68;
+static const int W_RINGTONE_TEXT = 600;
+static const int H_RINGTONE_TITLE = 58;
+static const int H_RINGTONE_NAME = 60;
+
+static const int X_GROUP_TEXT_GAP = 5;
+static const int H_GROUP_TEXT_GAP = 10;
+
+static const unsigned int COLOR_GUIDE_TEXT = Color32<255, 0, 0>::Value;
+static const unsigned int COLOR_RINGTONE_TITLE = Color32<128, 128, 128>::Value;
+static const unsigned int COLOR_THUMBNAIL = Color32<239, 237, 229>::Value;
+static const unsigned int COLOR_TABLE_BG = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_ITEM_TITLE = Color32<128, 128, 128>::Value;
+static const unsigned int COLOR_ITEM_VALUE = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_ITEM_PRESSED = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_PRESSED = Color32<87, 135, 194>::Value;
+
+static const int ITEM_COUNT = 3;
+
+static const int FONT_SIZE_RINGTONE_TITLE = 32;
+
+static const wchar_t* INPUT_DATA_SELECTION_MODE_SINGLE = L"single";
+static const wchar_t* INPUT_KEY_SELECTION_MODE = L"http://tizen.org/appcontrol/data/selection_mode";
+static const wchar_t* INPUT_KEY_IMAGEVIEWER_MODE = L"http://tizen.org/appcontrol/data/image/crop_mode";
+static const wchar_t* INPUT_KEY_ALLOW_SWITCH = L"http://tizen.org/appcontrol/data/camera/allow_switch";
+static const wchar_t* INPUT_MIME_TYPE_CAMERA = L"image/jpg";
+static const wchar_t* INPUT_MIME_TYPE_GALLERY = L"image/*";
+static const wchar_t* INPUT_MIME_TYPE_AUDIO = L"audio/*";
+static const wchar_t* INPUT_VALUE_FALSE = L"false";
+static const wchar_t* INPUT_VALUE_IMAGEVIEWER_TYPE = L"fit_to_screen";
+static const wchar_t* OUTPUT_KEY_SELECTED = L"http://tizen.org/appcontrol/data/selected";
+static const wchar_t* THUMBNAIL_LABEL = L"thumbnail";
+static const wchar_t* THUMBNAIL_EMPTY_LABEL = L"emptyThumbnail";
+static const wchar_t* ADD_BUTTON = L"add";
+static const wchar_t* CAMERA_BUTTON = L"camera";
+static const wchar_t* REMOVE_BUTTON = L"remove";
+static const wchar_t* SD_CARD_UNMOUNTED = L"Unmounted";
+
+static const wchar_t* GROUP_EDITOR_LABEL_TITLE = L"GroupLabelTitle";
+static const wchar_t* GROUP_EDITOR_LABEL_VALUE = L"GroupLabelValue";
+static const wchar_t* GROUP_EDITOR_STYLE_PANEL = L"GroupStylePanel";
+
+GroupEditorForm::GroupEditorForm(void)
+ : __pPresentationModel(null)
+ , __pTableView(null)
+ , __pFileEventManager(null)
+ , __isEditMode(false)
+ , __isSaved(false)
+ , __isGroupsChanged(false)
+ , __pDiscardChangesPopup(null)
+{
+}
+
+GroupEditorForm::~GroupEditorForm(void)
+{
+}
+
+void
+GroupEditorForm::Initialize(void)
+{
+       Construct(L"IDL_GROUP_EDITOR_FORM");
+}
+
+result
+GroupEditorForm::OnInitializing(void)
+{
+       Footer* pFooter = GetFooter();
+       pFooter->AddActionEventListener(*this);
+       SetFormBackEventListener(this);
+       DeviceManager::AddDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
+
+       __pTableView = new (std::nothrow) TableView();
+       __pTableView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height), true, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
+       __pTableView->SetItemProvider(this);
+       __pTableView->AddTableViewItemEventListener(*this);
+       AddControl(__pTableView);
+
+       return E_SUCCESS;
+}
+
+result
+GroupEditorForm::OnTerminating(void)
+{
+       __pTableView->SetItemProvider(null);
+
+       delete __pPresentationModel;
+       delete __pFileEventManager;
+
+       if (__pDiscardChangesPopup != null)
+       {
+               delete __pDiscardChangesPopup;
+       }
+
+       DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
+
+       return E_SUCCESS;
+}
+
+void
+GroupEditorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       SetFocus();
+
+       Footer* pFooter = GetFooter();
+       FooterItemStatus status;
+       pFooter->GetItemStatus(0, status);
+
+       if (status != FOOTER_ITEM_STATUS_DISABLED && __isGroupsChanged == true)
+       {
+               ShowDiscardChangesPopup();
+               return;
+       }
+
+       result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+}
+
+void
+GroupEditorForm::ShowDiscardChangesPopup(void)
+{
+       if (__pDiscardChangesPopup == null)
+       {
+               __pDiscardChangesPopup = new (std::nothrow) Popup();
+               __pDiscardChangesPopup->Construct(false, Dimension(W_SAVE_POPUP, H_SAVE_POPUP));
+               __pDiscardChangesPopup->SetPropagatedKeyEventListener(this);
+
+               Rectangle popupClientBounds = __pDiscardChangesPopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(X_SAVE_LABEL, Y_SAVE_LABEL, W_SAVE_LABEL, H_SAVE_LABEL), ResourceManager::GetString(L"IDS_PB_POP_DISCARD_CHANGES_Q"));
+               pLabel->SetTextConfig(FONT_SIZE_SAVE_CONFIRM, LABEL_TEXT_STYLE_NORMAL);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+               Button* pSaveButton = new (std::nothrow) Button();
+               pSaveButton->Construct(Rectangle(X_SAVE_LABEL + W_SAVE_BUTTON + W_POPUP_ITEM_GAP, Y_SAVE_BUTTON, W_SAVE_BUTTON, H_SAVE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_OK"));
+               pSaveButton->SetTextSize(FONT_SIZE_SAVE_BUTTON);
+               pSaveButton->SetActionId(IDA_POPUP_DISCARD_CHANGES_OK);
+               pSaveButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(X_SAVE_LABEL, Y_SAVE_BUTTON, W_SAVE_BUTTON, H_SAVE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pCancelButton->SetTextSize(FONT_SIZE_SAVE_BUTTON);
+               pCancelButton->SetActionId(IDA_POPUP_DISCARD_CHANGES_CANCEL);
+               pCancelButton->AddActionEventListener(*this);
+
+               __pDiscardChangesPopup->AddControl(pLabel);
+               __pDiscardChangesPopup->AddControl(pSaveButton);
+               __pDiscardChangesPopup->AddControl(pCancelButton);
+       }
+
+       __pDiscardChangesPopup->SetShowState(true);
+       __pDiscardChangesPopup->Show();
+}
+
+void
+GroupEditorForm::HideDiscardChangesPopup(void)
+{
+       __pDiscardChangesPopup->SetShowState(false);
+       Invalidate(true);
+}
+
+void
+GroupEditorForm::OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId)
+{
+       String thumbnailPath = __pPresentationModel->GetThumbnailPath();
+       if (thumbnailPath.Equals(path, false) == true)
+       {
+               __pPresentationModel->SetThumbnailPath(String());
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               __pTableView->RefreshItem(1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else
+       {
+               String ringtonePath = __pPresentationModel->GetRingtone();
+               if (ringtonePath.Equals(path, false) == true )
+               {
+                       __pPresentationModel->SetRingtone(String());
+                       __pTableView->RefreshItem(2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               }
+       }
+}
+
+void
+GroupEditorForm::OnDeviceStateChanged(Tizen::System::DeviceType deviceType, const Tizen::Base::String &state)
+{
+       if (deviceType != DEVICE_TYPE_STORAGE_CARD || __pPresentationModel->GetThumbnailPath().IsEmpty())
+       {
+               return;
+       }
+
+       if (state.Equals(SD_CARD_UNMOUNTED, false) && File::IsFileExist(__pPresentationModel->GetThumbnailPath()) == false)
+       {
+               __pPresentationModel->SetThumbnailPath(L"");
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+}
+
+
+void
+GroupEditorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       switch (actionId)
+       {
+       case IDA_HEADER_SAVE:
+               {
+                       result r = E_SUCCESS;
+
+                       if (CommonUtil::isMemoryAvailable() == false)
+                       {
+                               CommonUtil::showMemoryFullMessageBox();
+                               return;
+                       }
+
+                       __pTableView->RefreshItem(1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+                       if (__pPresentationModel->IsDefaultCategory() == false && __pPresentationModel->IsDuplicatedCategory() == true)
+                       {
+                               Footer* pFooter = GetFooter();
+                               pFooter->SetItemEnabled(0, false);
+                               break;
+                       }
+
+                       if (__isEditMode)
+                       {
+                               r = __pPresentationModel->UpdateCategory();
+                               if (r == E_FAILURE)
+                               {
+                                       __isSaved = true;
+                                       OnCategoriesChanged();
+                               }
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to update category", GetErrorMessage(r));
+                       }
+                       else
+                       {
+                               r = __pPresentationModel->AddCategory();
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to add category", GetErrorMessage(r));
+                       }
+
+                       SetFocus();
+                       __isSaved = true;
+               }
+               break;
+       case IDA_BUTTON_GALLERY:
+               {
+                       LaunchAppControl(PROVIDER_ID_GALLERY, OPERATION_ID_PICK);
+               }
+               break;
+       case IDA_BUTTON_TAKE_PHOTO:
+               {
+                       LaunchAppControl(PROVIDER_ID_CAMERA, OPERATION_ID_CREATE_CONTENT);
+               }
+               break;
+       case IDA_BUTTON_REMOVE:
+               {
+                       __pPresentationModel->SetThumbnailPath(String());
+                       __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+                       __pTableView->RefreshItem(1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+                       if (__pFileEventManager != null)
+                       {
+                               delete __pFileEventManager;
+                               __pFileEventManager = null;
+                       }
+               }
+               break;
+       case IDA_BUTTON_RINGTONE_CLEAR:
+               {
+                       __pPresentationModel->SetRingtone(String());
+                       __pTableView->RefreshItem(2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               }
+               break;
+       case IDA_POPUP_DISCARD_CHANGES_OK:
+               {
+                       HideDiscardChangesPopup();
+                       SetFocus();
+
+                       SceneManager* pSceneManager = SceneManager::GetInstance();
+                       result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_POPUP_DISCARD_CHANGES_CANCEL:
+               {
+                       HideDiscardChangesPopup();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupEditorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                  const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+
+       RecordId categoryId = INVALID_RECORD_ID;
+
+       if (pArgs != null)
+       {
+               IEnumerator* pEnum = pArgs->GetEnumeratorN();
+               if (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       Integer* pCategoryId = static_cast<Integer*>(pEnum->GetCurrent());
+                       if (pCategoryId != null)
+                       {
+                               categoryId = pCategoryId->ToInt();
+                               __isEditMode = true;
+                       }
+               }
+               delete pEnum;
+
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+
+       __pPresentationModel = new (std::nothrow) GroupPresentationModel();
+       __pPresentationModel->Construct(categoryId);
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       Header* pHeader = GetHeader();
+       if (__isEditMode)
+       {
+               pHeader->SetTitleText(ResourceManager::GetString(L"IDS_PB_OPT2_EDIT_GROUPS"));
+       }
+       else
+       {
+               pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+       }
+
+       Footer* pFooter = GetFooter();
+       if (__isEditMode)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, false);
+       }
+
+}
+
+void
+GroupEditorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+
+       __pPresentationModel->RemoveContactChangeListener(*this);
+}
+
+int
+GroupEditorForm::GetItemCount(void)
+{
+       return ITEM_COUNT;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+GroupEditorForm::CreateItem(int itemIndex, int itemWidth)
+{
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Label* pSubjectLabel = null;
+       Label* pContentLabel = null;
+       int itemHeight = H_ITEM + pContactsApp->GetFontHeightOffset();
+
+       if (itemIndex == 0)
+       {
+               itemHeight = Y_THUMBNAIL * 2 + H_THUMBNAIL;
+       }
+
+       TableViewItem* pItem = new (std::nothrow) TableViewItem();
+       pItem->Construct(Dimension(itemWidth, itemHeight), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+
+       if (itemIndex == 0)
+       {
+               Label* pThumbnailLabel = new (std::nothrow) Label();
+               pThumbnailLabel->Construct(Rectangle((itemWidth - H_THUMBNAIL) / 2, Y_THUMBNAIL, H_THUMBNAIL, H_THUMBNAIL), L"");
+               pThumbnailLabel->SetName(THUMBNAIL_LABEL);
+               pItem->AddControl(pThumbnailLabel);
+               Label* pEmptyThumbnailLabel = new (std::nothrow) Label();
+               pEmptyThumbnailLabel->Construct(Rectangle((itemWidth - H_THUMBNAIL) / 2, Y_THUMBNAIL, H_THUMBNAIL, H_THUMBNAIL), L"");
+               pEmptyThumbnailLabel->SetName(THUMBNAIL_EMPTY_LABEL);
+               pEmptyThumbnailLabel->SetBackgroundColor(COLOR_THUMBNAIL);
+               pItem->AddControl(pEmptyThumbnailLabel);
+
+               if (__pPresentationModel->GetThumbnailPath().IsEmpty() == false)
+               {
+                       Bitmap* pThumbnail = null;
+                       ImageBuffer thumbnailImageBuffer;
+                       result r = thumbnailImageBuffer.Construct(__pPresentationModel->GetThumbnailPath());
+                       if (r == E_SUCCESS)
+                       {
+                               pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_NONE);
+                       }
+                       pThumbnailLabel->SetBackgroundBitmap(*pThumbnail);
+                       delete pThumbnail;
+
+                       pEmptyThumbnailLabel->SetShowState(false);
+               }
+
+               Button* pButtonAdd = new (std::nothrow) Button();
+               pButtonAdd->Construct(Rectangle((itemWidth - H_ICON_BUTTON) / 2, (H_THUMBNAIL - H_ICON_BUTTON) / 2 + Y_THUMBNAIL, H_ICON_BUTTON, H_ICON_BUTTON), L"");
+               pButtonAdd->SetActionId(IDA_BUTTON_GALLERY);
+               pButtonAdd->AddActionEventListener(*this);
+               pButtonAdd->SetName(ADD_BUTTON);
+               Bitmap* pIconNormal = ResourceManager::GetBitmapN(IDB_ICON_ADD_NORMAL);
+               Bitmap* pIconPressed = ResourceManager::GetBitmapN(IDB_ICON_ADD_PRESSED);
+               if (pIconNormal != null)
+               {
+                       pButtonAdd->SetNormalBackgroundBitmap(*pIconNormal);
+                       delete pIconNormal;
+               }
+               if (pIconPressed != null)
+               {
+                       pButtonAdd->SetPressedBackgroundBitmap(*pIconPressed);
+                       delete pIconPressed;
+               }
+               pItem->AddControl(pButtonAdd);
+               pItem->SetIndividualSelectionEnabled(pButtonAdd, true);
+
+               Button* pButtonCamera = new (std::nothrow) Button();
+               pButtonCamera->Construct(Rectangle((itemWidth - H_THUMBNAIL) / 2 + H_THUMBNAIL, Y_THUMBNAIL + H_THUMBNAIL - H_ICON_BUTTON, H_ICON_BUTTON, H_ICON_BUTTON), L"");
+               pButtonCamera->SetActionId(IDA_BUTTON_TAKE_PHOTO);
+               pButtonCamera->AddActionEventListener(*this);
+               pButtonCamera->SetName(CAMERA_BUTTON);
+               pIconNormal = ResourceManager::GetBitmapN(IDB_ICON_CAMERA_NORMAL);
+               pIconPressed = ResourceManager::GetBitmapN(IDB_ICON_CAMERA_PRESSED);
+               if (pIconNormal != null)
+               {
+                       pButtonCamera->SetNormalBackgroundBitmap(*pIconNormal);
+                       delete pIconNormal;
+               }
+               if (pIconPressed != null)
+               {
+                       pButtonCamera->SetPressedBackgroundBitmap(*pIconPressed);
+                       delete pIconPressed;
+               }
+               pItem->AddControl(pButtonCamera);
+               pItem->SetIndividualSelectionEnabled(pButtonCamera, true);
+
+               Button* pButtonRemove = new (std::nothrow) Button();
+               pButtonRemove->Construct(Rectangle((itemWidth - H_THUMBNAIL) / 2 - X_REMOVE_BUTTON_MARGIN, Y_REMOVE_BUTTON, H_ICON_BUTTON, H_ICON_BUTTON), L"");
+               pButtonRemove->SetActionId(IDA_BUTTON_REMOVE);
+               pButtonRemove->AddActionEventListener(*this);
+               pButtonRemove->SetName(REMOVE_BUTTON);
+               pIconNormal = ResourceManager::GetBitmapN(IDB_ICON_REMOVE_NORMAL);
+               pIconPressed = ResourceManager::GetBitmapN(IDB_ICON_REMOVE_PRESSED);
+               if (pIconNormal != null)
+               {
+                       pButtonRemove->SetNormalBitmap(Point(0, 0), *pIconNormal);
+                       delete pIconNormal;
+               }
+               if (pIconPressed != null)
+               {
+                       pButtonRemove->SetPressedBitmap(Point(0, 0), *pIconPressed);
+                       delete pIconPressed;
+               }
+
+               pIconNormal = ResourceManager::GetBitmapN(IDB_REMOVE_BG_NORMAL);
+               pIconPressed = ResourceManager::GetBitmapN(IDB_REMOVE_BG_PRESSED);
+               if (pIconNormal != null)
+               {
+                       pButtonRemove->SetNormalBackgroundBitmap(*pIconNormal);
+                       delete pIconNormal;
+               }
+               if (pIconPressed != null)
+               {
+                       pButtonRemove->SetPressedBackgroundBitmap(*pIconPressed);
+                       delete pIconPressed;
+               }
+               pItem->AddControl(pButtonRemove);
+               pItem->SetIndividualSelectionEnabled(pButtonRemove, true);
+
+               if (__pPresentationModel->GetThumbnailPath().IsEmpty() == true)
+               {
+                       pButtonRemove->SetShowState(false);
+               }
+               else
+               {
+                       pButtonAdd->SetShowState(false);
+               }
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+       }
+       else if (itemIndex == 1)
+       {
+               EditField* pEditField = new (std::nothrow) EditField();
+               pEditField->Construct(Rectangle(X_GROUP_TEXT_GAP, X_GROUP_TEXT_GAP, itemWidth - H_GROUP_TEXT_GAP, H_ITEM + pContactsApp->GetFontHeightOffset() - H_GROUP_TEXT_GAP), EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, EDIT_FIELD_TITLE_STYLE_TOP, !__pPresentationModel->IsDefaultCategory());
+               pEditField->AddTextEventListener(*this);
+               pEditField->AddKeypadEventListener(*this);
+               pEditField->SetText(__pPresentationModel->GetCategoryName());
+               pEditField->SetTitleText(ResourceManager::GetString(L"IDS_PB_BODY_GROUP_NAME_ABB"));
+               pEditField->SetTextSize(pContactsApp->GetFontSize());
+               pEditField->SetEnabled(!__pPresentationModel->IsDefaultCategory());
+
+               if (__isEditMode == true)
+               {
+                       String categoryName = __pPresentationModel->GetCategoryName();
+                       pEditField->SetText(categoryName);
+               }
+
+               pItem->SetBackgroundColor(COLOR_THUMBNAIL, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+               pItem->SetBackgroundColor(COLOR_THUMBNAIL, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+               pItem->AddControl(pEditField);
+               pItem->SetIndividualSelectionEnabled(pEditField, true);
+       }
+       else if (itemIndex == 2)
+       {
+               Panel* pGroupStyle = new (std::nothrow) Panel();
+               pGroupStyle->Construct(Rectangle(0, 0, itemWidth , itemHeight), GROUP_STYLE_NONE);
+               pGroupStyle->SetName(GROUP_EDITOR_STYLE_PANEL);
+               pGroupStyle->SetBackgroundColor(COLOR_THUMBNAIL);
+               pGroupStyle->AddTouchEventListener(*this);
+               pItem->AddKeyEventListener(*this);
+               pItem->AddControl(pGroupStyle);
+
+               pSubjectLabel = new (std::nothrow) Label();
+               pSubjectLabel->Construct(Rectangle(X_RINGTONE_TEXT, Y_RINGTONE_TITLE, W_RINGTONE_TEXT, H_RINGTONE_TITLE),
+                                                                                                       ResourceManager::GetString(L"IDS_PB_BODY_RINGTONE"));
+               pSubjectLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pSubjectLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pSubjectLabel->SetTextColor(Color(COLOR_RINGTONE_TITLE));
+               pSubjectLabel->SetTextConfig(FONT_SIZE_RINGTONE_TITLE, LABEL_TEXT_STYLE_BOLD);
+               pSubjectLabel->SetName(GROUP_EDITOR_LABEL_TITLE);
+               pSubjectLabel->AddTouchEventListener(*this);
+               pGroupStyle->AddControl(pSubjectLabel);
+
+               int index = 0;
+               String ringtonePath = __pPresentationModel->GetRingtone();
+               String trimmedPath;
+
+               if (ringtonePath.IsEmpty() == true)
+               {
+                       trimmedPath = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT");
+               }
+               else
+               {
+                       ringtonePath.LastIndexOf(L"/", ringtonePath.GetLength() - 1, index);
+                       if (index != 0)
+                       {
+                               ringtonePath.SubString(index + 1, trimmedPath);
+                       }
+               }
+
+               pContentLabel = new (std::nothrow) Label();
+               pContentLabel->Construct(Rectangle(X_RINGTONE_TEXT, Y_RINGTONE_NAME, W_RINGTONE_TEXT, H_RINGTONE_NAME + pContactsApp->GetFontHeightOffset()), trimmedPath);
+               pContentLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pContentLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pContentLabel->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+               pContentLabel->SetName(GROUP_EDITOR_LABEL_VALUE);
+               pContentLabel->AddTouchEventListener(*this);
+               pGroupStyle->AddControl(pContentLabel);
+
+               Button* pClearButton = new (std::nothrow) Button();
+               pClearButton->Construct(Rectangle(itemWidth - X_REFRESH_BUTTON_MARGIN, (pItem->GetHeight() - H_ICON_BUTTON) / 2, H_ICON_BUTTON, H_ICON_BUTTON));
+               pClearButton->SetActionId(IDA_BUTTON_RINGTONE_CLEAR);
+               pClearButton->AddActionEventListener(*this);
+
+               Bitmap* pReset = ResourceManager::GetBitmapN(IDB_DETAILS_RESET_NORMAL);
+               if (pReset != null)
+               {
+                       pClearButton->SetNormalBitmap(Point(0, 0), *pReset);
+                       delete pReset;
+               }
+               pReset = ResourceManager::GetBitmapN(IDB_DETAILS_RESET_PRESSED);
+               if (pReset != null)
+               {
+                       pClearButton->SetPressedBitmap(Point(0, 0), *pReset);
+                       delete pReset;
+               }
+
+               pItem->AddControl(pClearButton);
+               pItem->SetIndividualSelectionEnabled(pClearButton, true);
+
+               pItem->SetBackgroundColor(COLOR_THUMBNAIL, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       }
+
+       return pItem;
+}
+
+bool
+GroupEditorForm::DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       delete pItem;
+       return true;
+}
+
+void
+GroupEditorForm::UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       if (pItem == null)
+       {
+               return;
+       }
+
+       if (itemIndex == 0)
+       {
+               Button* pRemoveButton = static_cast<Button*>(pItem->GetControl(REMOVE_BUTTON, false));
+               Button* pAddButton = static_cast<Button*>(pItem->GetControl(ADD_BUTTON, false));
+               Label* pThumbnailLabel = static_cast<Label*>(pItem->GetControl(THUMBNAIL_LABEL, false));
+               Label* pThumbnailEmptyLabel = static_cast<Label*>(pItem->GetControl(THUMBNAIL_EMPTY_LABEL, false));
+               if (pRemoveButton == null || pAddButton == null ||
+                       pThumbnailLabel == null || pThumbnailEmptyLabel == null)
+               {
+                       return;
+               }
+
+               if (__pPresentationModel->GetThumbnailPath().IsEmpty() == true)
+               {
+                       pRemoveButton->SetShowState(false);
+                       pThumbnailLabel->SetShowState(false);
+                       pThumbnailEmptyLabel->SetShowState(true);
+                       pAddButton->SetShowState(true);
+               }
+               else
+               {
+                       pAddButton->SetShowState(false);
+                       pThumbnailEmptyLabel->SetShowState(false);
+                       pThumbnailLabel->SetShowState(true);
+                       pRemoveButton->SetShowState(true);
+
+                       Bitmap* pThumbnail = null;
+                       ImageBuffer thumbnailImageBuffer;
+                       result r = thumbnailImageBuffer.Construct(__pPresentationModel->GetThumbnailPath());
+                       if (r == E_SUCCESS)
+                       {
+                               pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_ARGB8888, BUFFER_SCALING_NONE);
+                       }
+                       pThumbnailLabel->SetBackgroundBitmap(*pThumbnail);
+                       delete pThumbnail;
+
+                       pThumbnailLabel->Invalidate(false);
+               }
+       }
+       else if (itemIndex == 1)
+       {
+               EditField* pEditField = static_cast<EditField*>(pItem->GetControl(0));
+               if (pEditField == null)
+               {
+                       return;
+               }
+
+               String groupName = pEditField->GetText();
+               groupName.Trim();
+
+               if (groupName.GetLength() > 0)
+               {
+                       Footer* pFooter = GetFooter();
+                       pFooter->SetItemEnabled(0, true);
+                       pFooter->Invalidate(true);
+               }
+
+               if (__pPresentationModel->IsDefaultCategory() == false && __pPresentationModel->IsDuplicatedCategory() == true)
+               {
+                       pEditField->SetEnabled(true);
+                       pEditField->Clear();
+                       pEditField->SetGuideTextColor(Color(COLOR_GUIDE_TEXT));
+                       pEditField->SetGuideText(ResourceManager::GetString(L"IDS_PB_POP_GROUP_ALREADY_IN_USE"));
+                       pEditField->SetFocus();
+                       pEditField->Invalidate(false);
+               }
+       }
+       else if (itemIndex == 2)
+       {
+               int index = 0;
+               String ringtonePath = __pPresentationModel->GetRingtone();
+               String trimmedPath;
+
+               if (ringtonePath.IsEmpty() == true)
+               {
+                       trimmedPath = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT");
+               }
+               else
+               {
+                       ringtonePath.LastIndexOf(L"/", ringtonePath.GetLength() - 1, index);
+                       if (index != 0)
+                       {
+                               ringtonePath.SubString(index + 1, trimmedPath);
+                       }
+               }
+
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pRingtoneName = static_cast<Label*>(pPanel->GetControl(1));
+
+               if (pRingtoneName == null)
+               {
+                       return;
+               }
+
+               if (pRingtoneName != null)
+               {
+                       pRingtoneName->SetText(trimmedPath);
+                       pRingtoneName->Invalidate(true);
+               }
+       }
+}
+
+int
+GroupEditorForm::GetDefaultItemHeight(void)
+{
+       return H_ITEM;
+}
+
+void
+GroupEditorForm::OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+       if (status == TABLE_VIEW_ITEM_STATUS_SELECTED && itemIndex == 2)
+       {
+               LaunchAppControl(PROVIDER_ID_FILEMANAGER, OPERATION_ID_PICK);
+       }
+}
+
+void
+GroupEditorForm::OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
+{
+}
+
+void
+GroupEditorForm::OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo)
+{
+}
+
+void
+GroupEditorForm::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       EditField* pEditField = const_cast<EditField *>(static_cast<const EditField *>(&source));
+       if (pEditField == null)
+       {
+               return;
+       }
+
+       String existingCategoryName = __pPresentationModel->GetCategoryName();
+       String name = pEditField->GetText();
+
+       if (name.IsEmpty())
+       {
+               pEditField->SetGuideText(String(CHARACTER_SPACE));
+               pEditField->Invalidate(false);
+
+               Footer* pFooter = GetFooter();
+               pFooter->SetItemEnabled(0, false);
+               pFooter->Invalidate(true);
+               return;
+       }
+       name.Trim();
+       __pPresentationModel->SetCategoryName(name);
+
+       bool isSaveEnabled = false;
+       wchar_t ch;
+       __isGroupsChanged = false;
+
+       for (int index = 0; index < name.GetLength(); index++)
+       {
+               name.GetCharAt(index, ch);
+
+               if (ch != L' ')
+               {
+                       isSaveEnabled = true;
+                       __isGroupsChanged = true;
+                       break;
+               }
+       }
+
+       Footer* pFooter = GetFooter();
+
+       pFooter->SetItemEnabled(0, isSaveEnabled);
+       pFooter->Invalidate(true);
+}
+
+void
+GroupEditorForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupEditorForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_EDITOR_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_EDITOR_LABEL_TITLE, true) || source.GetName().Equals(GROUP_EDITOR_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_PRESSED);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_PRESSED);
+
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+GroupEditorForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_EDITOR_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_EDITOR_LABEL_TITLE, true) || source.GetName().Equals(GROUP_EDITOR_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               pPanel->Invalidate(true);
+       }
+
+}
+
+void
+GroupEditorForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       Panel* pPanel = null;
+
+       if (source.GetName().Equals(GROUP_EDITOR_STYLE_PANEL, true))
+       {
+               pPanel = static_cast<Panel*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(GROUP_EDITOR_LABEL_TITLE, true) || source.GetName().Equals(GROUP_EDITOR_LABEL_VALUE, true))
+       {
+               pPanel = static_cast<Panel*>(source.GetParent());
+       }
+
+       if (pPanel != null)
+       {
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL);
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_TITLE, true));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+GroupEditorForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupEditorForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupEditorForm::OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupEditorForm::OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       if (keyCode == KEY_ENTER )
+       {
+               TableViewItem* pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+               String valueString;
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_VALUE, true));
+
+               if (pLabelValue == null)
+               {
+                       return;
+               }
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_TITLE, true));
+
+               if (pLabelTitle == null)
+               {
+                       return;
+               }
+
+               pPanel->SetBackgroundColor(COLOR_PRESSED);
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+               pLabelTitle->SetTextColor(COLOR_ITEM_PRESSED);
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+GroupEditorForm::OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       if (keyCode == KEY_ENTER )
+       {
+
+               TableViewItem* pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+               String valueString;
+               Panel* pPanel = static_cast<Panel*>(pItem->GetControl(0));
+
+               if (pPanel == null)
+               {
+                       return;
+               }
+
+               Label* pLabelValue = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_VALUE, true));
+
+               if (pLabelValue == null)
+               {
+                       return;
+               }
+
+               Label* pLabelTitle = static_cast<Label*>(pPanel->GetControl(GROUP_EDITOR_LABEL_TITLE, true));
+
+               if (pLabelTitle == null)
+               {
+                       return;
+               }
+
+               pPanel->SetBackgroundColor(COLOR_THUMBNAIL);
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_VALUE));
+               pLabelTitle->SetTextColor(COLOR_ITEM_TITLE);
+               pPanel->Invalidate(true);
+       }
+}
+
+void
+GroupEditorForm::OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+
+}
+
+bool
+GroupEditorForm::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+GroupEditorForm::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       if (keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC)
+       {
+               if (__pDiscardChangesPopup && __pDiscardChangesPopup->GetShowState() == true)
+               {
+                       HideDiscardChangesPopup();
+                       return true;
+               }
+       }
+       return false;
+}
+
+bool
+GroupEditorForm::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+GroupEditorForm::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+void
+GroupEditorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupEditorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+}
+
+void
+GroupEditorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupEditorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+void
+GroupEditorForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+}
+
+void
+GroupEditorForm::OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData)
+{
+       AppLogDebug("ENTER");
+
+       SetEnabled(true);
+       Invalidate(true);
+
+       TryReturnVoid(appControlResult == APP_CTRL_RESULT_SUCCEEDED, "[E_FAILURE] The result of an appcontrol is not succeeded.");
+       TryReturnVoid(pExtraData != null, "[E_FAILURE] The extra data is null.");
+
+       const String *pResultString = null;
+       const ArrayList* pResultList = dynamic_cast<const ArrayList*>(pExtraData->GetValue(String(OUTPUT_KEY_SELECTED)));
+       if (pResultList != null)
+       {
+               pResultString = static_cast<const String*>(pResultList->GetAt(0));
+       }
+       else
+       {
+               pResultString = static_cast<const String*>(pExtraData->GetValue(String(OUTPUT_KEY_SELECTED)));
+       }
+       TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               __pPresentationModel->SetThumbnailPath(*pResultString);
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__pFileEventManager == null)
+               {
+                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                       __pFileEventManager->Construct(*this);
+               }
+               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+               __isGroupsChanged = true;
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               int width = 0;
+               int height = 0;
+               ImageFormat imageFormat;
+               result r = ImageBuffer::GetImageInfo(*pResultString, imageFormat, width, height);
+
+               if (appControlResult == APP_CTRL_RESULT_FAILED || r != E_SUCCESS)
+               {
+                       int modalResult = 0;
+                       MessageBox unsupportedMessageBox;
+                       unsupportedMessageBox.Construct(L"", ResourceManager::GetString(L"IDS_MP_POP_INVALID_FILE"), MSGBOX_STYLE_NONE, 3000);
+                       unsupportedMessageBox.ShowAndWait(modalResult);
+
+                       return;
+               }
+
+               __pPresentationModel->SetThumbnailPath(*pResultString);
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__pFileEventManager == null)
+               {
+                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                       __pFileEventManager->Construct(*this);
+               }
+               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+               __isGroupsChanged = true;
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               __pPresentationModel->SetRingtone(*pResultString);
+               __pTableView->RefreshItem(2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__pFileEventManager == null)
+               {
+                       __pFileEventManager = new (std::nothrow) FileEventManager();
+                       __pFileEventManager->Construct(*this);
+               }
+               __pFileEventManager->AddPath(*pResultString, FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF);
+               __isGroupsChanged = true;
+       }
+
+       AppLogDebug("EXIT");
+}
+
+result
+GroupEditorForm::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId)
+{
+       result r = E_SUCCESS;
+
+       SetFocus();
+
+       String uri;
+       String mimeType;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_CAMERA);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_ALLOW_SWITCH), new (std::nothrow) String(INPUT_VALUE_FALSE));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_GALLERY);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_DATA_SELECTION_MODE_SINGLE));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_IMAGEVIEWER_MODE), new (std::nothrow) String(INPUT_VALUE_IMAGEVIEWER_TYPE));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               mimeType.Append(INPUT_MIME_TYPE_AUDIO);
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_DATA_SELECTION_MODE_SINGLE));
+       }
+
+       AppControl* pAppControl = AppManager::FindAppControlN(appId, operationId);
+
+       if (pAppControl != null)
+       {
+               r = pAppControl->Start(&uri, &mimeType, &extraData, this);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to launch app control", GetErrorMessage(r));
+
+               SetEnabled(false);
+               Invalidate(true);
+       }
+
+CATCH:
+       extraData.RemoveAll(true);
+       delete pAppControl;
+
+       return r;
+}
+
+void
+GroupEditorForm::OnContactsChanged(void)
+{
+}
+
+void
+GroupEditorForm::OnCategoriesChanged(void)
+{
+       result r = E_SUCCESS;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       SceneId previousSceneId;
+       IListT<SceneId>* pHistoryList = pSceneManager->GetSceneHistoryN();
+       if (pHistoryList != null)
+       {
+               int count = pHistoryList->GetCount();
+               r = pHistoryList->GetAt(count - 1, previousSceneId);
+               delete pHistoryList;
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to get previous scene id", GetErrorMessage(r));
+       }
+
+       if (previousSceneId.Equals(IDSCN_CONTACT_DETAILS, true) || previousSceneId.Equals(IDSCN_CONTACT_EDITOR, true))
+       {
+               if (__pPresentationModel->GetCategoryCount() > 0)
+               {
+                       ArrayList* pArg = new (std::nothrow) ArrayList();
+                       pArg->Construct();
+                       pArg->Add(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId()));
+
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), pArg);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+
+                       return;
+               }
+       }
+
+       if (__isSaved)
+       {
+               r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+       }
+}
+
+void
+GroupEditorForm::OnForeground(void)
+{
+       if ( File::IsFileExist(__pPresentationModel->GetThumbnailPath()) == false)
+       {
+               __pPresentationModel->SetThumbnailPath(L"");
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       if (IsEnabled() == false)
+       {
+               result r = SetEnabled(true);
+               AppLogDebug("Form Enabled = %s", GetErrorMessage(r));
+               Invalidate(true);
+       }
+}
+
+void
+GroupEditorForm::OnBackground(void)
+{
+}
diff --git a/src/CtGroupListEditorPanel.cpp b/src/CtGroupListEditorPanel.cpp
new file mode 100644 (file)
index 0000000..47ff26e
--- /dev/null
@@ -0,0 +1,720 @@
+//
+// 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       CtGroupListEditorPanel.cpp
+ * @brief      This is the implementation file for the GroupListEditorPanel class.
+ */
+
+#include <FSocial.h>
+#include "CtContactListItem.h"
+#include "CtGroupListEditorPanel.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_REMOVE = 1;
+static const int IDA_FOOTER_CANCEL = 2;
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+static const int IDA_BUTTON_EDIT_GROUP = 20;
+static const int IDA_CHECK_SELECT_ALL_CHECKED = 30;
+static const int IDA_CHECK_SELECT_ALL_UNCHECKED = 31;
+
+static const wchar_t* IDB_BUTTON_CIRCLE_NORMAL = L"00_circle_button.png";
+static const wchar_t* IDB_BUTTON_CIRCLE_PRESSED = L"00_circle_button_press.png";
+static const wchar_t* IDB_BUTTON_RENAME_NORMAL = L"00_button_rename.png";
+static const wchar_t* IDB_BUTTON_RENAME_PRESSED = L"00_button_rename_press.png";
+
+static const unsigned int COLOR_CHECK_LABEL_BG = Color32<220, 218, 211>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<68, 68, 68>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<255, 255, 255>::Value;
+
+static const int FONT_SIZE_BOTTOM_LABEL = 32;
+
+static const int H_SELECT_ALL = 112;
+static const int H_ITEM = 112;
+static const int H_GROUP_ITEM = 84;
+static const int W_INITIAL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int W_THUMBNAIL = 112;
+static const int W_BUTTON_EDIT_GROUP = 72;
+static const int H_BUTTON_EDIT_GROUP = 72;
+static const int Y_BUTTON_GAP = 20;
+static const int X_THUMBNAIL_GAP = 16;
+static const int X_LIST_ITEM_TEXT_MARGIN = 64;
+static const int H_BOTTOM_LABEL = 48;
+static const int W_ELEMENT_GAP = 16;
+
+GroupListEditorPanel::GroupListEditorPanel(void)
+: __pSelectAll(null)
+, __pTableView(null)
+, __pCheckLabel(null)
+, __pBottomLabel(null)
+, __pPresentationModel(null)
+, __pSavedCategoryList(null)
+{
+}
+
+GroupListEditorPanel::~GroupListEditorPanel(void)
+{
+}
+
+void
+GroupListEditorPanel::Initialize(void)
+{
+       Construct(Rectangle(0, 0, W_INITIAL_PANEL, H_INITIAL_PANEL));
+}
+
+result
+GroupListEditorPanel::OnInitializing(void)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       FloatRectangle clientBounds = pForm->GetClientAreaBoundsF();
+       SetBounds(FloatRectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = GroupListPresentationModel::GetInstance();
+
+       __pCheckLabel = new (std::nothrow) Label();
+       __pCheckLabel->Construct(Rectangle(0, Y_BUTTON_GAP, clientBounds.width, H_BUTTON_EDIT_GROUP), L"");
+       __pCheckLabel->SetBackgroundColor(COLOR_CHECK_LABEL_BG);
+       AddControl(__pCheckLabel);
+
+       __pSelectAll = new (std::nothrow) CheckButton();
+       __pSelectAll->Construct(Rectangle(0, 0, clientBounds.width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_NONE);
+       __pSelectAll->SetText(ResourceManager::GetString(L"IDS_COM_BODY_SELECT_ALL"));
+       __pSelectAll->SetActionId(IDA_CHECK_SELECT_ALL_CHECKED, IDA_CHECK_SELECT_ALL_UNCHECKED);
+       __pSelectAll->AddActionEventListener(*this);
+       AddControl(__pSelectAll);
+
+       __pTableView = new (std::nothrow) GroupedTableView();
+       __pTableView->Construct(Rectangle(0, H_SELECT_ALL, clientBounds.width, clientBounds.height - H_SELECT_ALL - H_BOTTOM_LABEL), true, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
+       __pTableView->SetItemProvider(this);
+       __pTableView->AddGroupedTableViewItemEventListener(*this);
+       AddControl(__pTableView);
+
+       __pBottomLabel = new (std::nothrow) Label();
+       __pBottomLabel->Construct(FloatRectangle(0, clientBounds.height - H_BOTTOM_LABEL, clientBounds.width, H_BOTTOM_LABEL),
+                                                                                                       ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + INITIAL_SELECTED_COUNT);
+       __pBottomLabel->SetBackgroundColor(Color(COLOR_BOTTOM_LABEL_BG));
+       __pBottomLabel->SetTextColor(Color(COLOR_BOTTOM_LABEL_FONT));
+       __pBottomLabel->SetTextConfig(FONT_SIZE_BOTTOM_LABEL, LABEL_TEXT_STYLE_BOLD);
+       __pBottomLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       __pBottomLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       AddControl(__pBottomLabel);
+
+       if (__pSavedCategoryList == null)
+       {
+               __pSavedCategoryList = new (std::nothrow) ArrayList();
+               __pSavedCategoryList->Construct();
+       }
+
+       return E_SUCCESS;
+}
+
+result
+GroupListEditorPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveGroupChangeListener(*this);
+       }
+
+       if (__pSavedCategoryList != null)
+       {
+               __pSavedCategoryList->RemoveAll(true);
+               delete __pSavedCategoryList;
+               __pSavedCategoryList = null;
+       }
+
+       return r;
+}
+
+void
+GroupListEditorPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                       }
+               }
+               break;
+       case IDA_HEADER_GROUPS:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_HEADER_FAVORITES:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                       }
+               }
+               break;
+       case IDA_FOOTER_REMOVE:
+               {
+                       int categoryCount = __pTableView->GetItemCountAt(0);
+
+                       for (int index = categoryCount - 1; index >= 0; index--)
+                       {
+                               if (__pTableView->IsItemChecked(0, index) == true)
+                               {
+                                       __pPresentationModel->RemoveCategory(index);
+                               }
+                       }
+                       __pPresentationModel->UpdateCategoryList();
+
+                       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       pSceneManager->GoBackward(BackwardSceneTransition());
+               }
+               break;
+       case IDA_BUTTON_EDIT_GROUP:
+               {
+                       int index = -1;
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+
+                       Integer::Parse(source.GetName(), index);
+                       pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(index))));
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_CHECKED:
+               {
+                       for (int i = 0; i < __pTableView->GetItemCountAt(0); i++)
+                       {
+                               __pTableView->SetItemChecked(0, i, true);
+                       }
+                       __pTableView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_CHECK_SELECT_ALL_UNCHECKED:
+               {
+                       for (int i = 0; i < __pTableView->GetItemCountAt(0); i++)
+                       {
+                               __pTableView->SetItemChecked(0, i, false);
+                       }
+                       __pTableView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupListEditorPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                  const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveAllItems();
+       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+       pForm->SetFormMenuEventListener(null);
+       pFooter->AddActionEventListener(*this);
+
+       FooterItem footerCancel;
+       footerCancel.Construct(IDA_FOOTER_CANCEL);
+       footerCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+       pFooter->AddItem(footerCancel);
+
+       FooterItem footerRemove;
+       footerRemove.Construct(IDA_FOOTER_REMOVE);
+       footerRemove.SetText(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"));
+       pFooter->AddItem(footerRemove);
+
+       __pTableView->UpdateTableView();
+
+       if (previousSceneId.Equals(IDSCN_GROUP_EDITOR, true) == false)
+       {
+               __pSelectAll->SetSelected(false);
+               for (int i = 0; i < __pTableView->GetItemCountAt(0); i++)
+               {
+                       __pTableView->SetItemChecked(0, i, false);
+               }
+       }
+       else if (previousSceneId.Equals(IDSCN_GROUP_EDITOR, true) == true)
+       {
+               ResetSelectedItems();
+       }
+
+       __pPresentationModel->AddGroupChangeListener(*this);
+       UpdateBottomLabel();
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+GroupListEditorPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+
+       __pPresentationModel->RemoveGroupChangeListener(*this);
+
+       if (__pSavedCategoryList != null)
+       {
+               __pSavedCategoryList->RemoveAll(true);
+               SaveCategoryList();
+       }
+}
+
+Tizen::Ui::Controls::TableViewGroupItem*
+GroupListEditorPanel::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       TableViewSimpleGroupItem* pItem = new (std::nothrow) TableViewSimpleGroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetItemContents(ResourceManager::GetString(L"IDS_PB_BODY_PHONE"));
+       pItem->SetEnabled(false);
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+GroupListEditorPanel::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String groupNameString;
+       String contactCountString;
+       Bitmap* pThumbnail = null;
+       Bitmap* pBgBitmap = null;
+       Bitmap* pBitmap = null;
+       bool isNotAssinged = false;
+       int adjustedNameWidth;
+       Dimension countSize;
+       Dimension groupNameSize;
+       Font font;
+       IList* pList = null;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TableViewItem* pItem = new (std::nothrow) TableViewItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), TABLE_VIEW_ANNEX_STYLE_MARK);
+
+       result r = __pPresentationModel->UpdatePersonList(itemIndex);
+       TryReturn(r == E_SUCCESS, null, "[%s] Unable to update person list", GetErrorMessage(r));
+
+       if (__pPresentationModel->GetCategoryCount() == itemIndex)
+       {
+               isNotAssinged = true;
+               groupNameString = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+               contactCountString = L"(" + Integer::ToString(__pPresentationModel->GetContactCountInNotAssignedCategory()) + L")";
+       }
+       else
+       {
+               groupNameString = __pPresentationModel->GetCategoryName(itemIndex);
+               contactCountString = L"(" + Integer::ToString(__pPresentationModel->GetContactCountInCategoryN(itemIndex, pList)) + L")";
+       }
+
+       font.Construct(FONT_STYLE_PLAIN, pContactsApp->GetFontSize());
+       font.GetTextExtent(contactCountString, contactCountString.GetLength(), countSize);
+       font.GetTextExtent(groupNameString, groupNameString.GetLength(), groupNameSize);
+
+       adjustedNameWidth = itemWidth - (TableViewItem::GetAnnexWidth(TABLE_VIEW_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN + W_BUTTON_EDIT_GROUP + W_THUMBNAIL + (X_THUMBNAIL_GAP * 2) + (countSize.width + W_ELEMENT_GAP * 2));
+       if (groupNameSize.width < adjustedNameWidth)
+       {
+               adjustedNameWidth = groupNameSize.width + W_ELEMENT_GAP + 1;
+       }
+
+       Label* pLabelGroupName = new (std::nothrow) Label();
+       pLabelGroupName->Construct(Rectangle(0, Y_BUTTON_GAP, adjustedNameWidth, H_BUTTON_EDIT_GROUP + pContactsApp->GetFontHeightOffset()), groupNameString);
+       pLabelGroupName->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pLabelGroupName->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pLabelGroupName->SetMargin(0, 0);
+       pItem->AddControl(pLabelGroupName);
+
+       Label* pLabelCount = new (std::nothrow) Label();
+       pLabelCount->Construct(Rectangle(adjustedNameWidth, Y_BUTTON_GAP, countSize.width + W_ELEMENT_GAP + 1, H_BUTTON_EDIT_GROUP + pContactsApp->GetFontHeightOffset()), contactCountString);
+       pLabelCount->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pLabelCount->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+       pLabelCount->SetMargin(0, 0);
+       pItem->AddControl(pLabelCount);
+
+       int editButtonX = itemWidth - (TableViewItem::GetAnnexWidth(TABLE_VIEW_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN + X_THUMBNAIL_GAP + W_BUTTON_EDIT_GROUP);
+       Button* pButtonEdit = new (std::nothrow) Button();
+       pButtonEdit->Construct(Rectangle(editButtonX, (pContactsApp->GetListItemSingleLineHeight() - H_BUTTON_EDIT_GROUP)/2, W_BUTTON_EDIT_GROUP, H_BUTTON_EDIT_GROUP));
+       pButtonEdit->SetActionId(IDA_BUTTON_EDIT_GROUP);
+       pButtonEdit->AddActionEventListener(*this);
+       pButtonEdit->SetName(Integer::ToString(itemIndex));
+       pItem->AddControl(pButtonEdit);
+
+       Label* pLabelThumbnail = new (std::nothrow) Label();
+       pLabelThumbnail->Construct(Rectangle(editButtonX - (X_THUMBNAIL_GAP + W_THUMBNAIL), 0, W_THUMBNAIL, H_ITEM), L"");
+       pItem->AddControl(pLabelThumbnail);
+
+       pThumbnail = __pPresentationModel->GetThumbnailN(itemIndex, pList);
+
+       if(pThumbnail != null)
+       {
+               pLabelThumbnail->SetBackgroundBitmap(*pThumbnail);
+               delete pThumbnail;
+       }
+
+       pBgBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_CIRCLE_NORMAL);
+       if (pBgBitmap != null)
+       {
+               pButtonEdit->SetNormalBackgroundBitmap(*pBgBitmap);
+               delete pBgBitmap;
+       }
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_RENAME_NORMAL);
+       if (pBitmap != null)
+       {
+               pButtonEdit->SetNormalBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+
+       pBgBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_CIRCLE_PRESSED);
+       if (pBgBitmap != null)
+       {
+               pButtonEdit->SetPressedBackgroundBitmap(*pBgBitmap);
+               delete pBgBitmap;
+       }
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_RENAME_PRESSED);
+       if (pBitmap != null)
+       {
+               pButtonEdit->SetPressedBitmap(Point(0, 0), *pBitmap);
+               delete pBitmap;
+       }
+       pItem->SetIndividualSelectionEnabled(pButtonEdit, true);
+
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               pList = null;
+       }
+
+       return pItem;
+}
+
+bool
+GroupListEditorPanel::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+GroupListEditorPanel::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+int
+GroupListEditorPanel::GetDefaultGroupItemHeight(void)
+{
+       return H_GROUP_ITEM;
+}
+
+int
+GroupListEditorPanel::GetDefaultItemHeight(void)
+{
+       return H_ITEM;
+}
+
+int
+GroupListEditorPanel::GetGroupCount(void)
+{
+       int count  = __pPresentationModel->GetCategoryCount();
+       if(count == 0)
+       {
+               __pSelectAll->SetShowState(false);
+               __pCheckLabel->SetShowState(false);
+               __pTableView->SetBounds(0, 0, GetWidth(), GetHeight());
+               return 0;
+       }
+       else
+       {
+               __pSelectAll->SetShowState(true);
+               __pCheckLabel->SetShowState(true);
+               if (__pBottomLabel->GetShowState() == false)
+               {
+                       __pTableView->SetBounds(0, __pSelectAll->GetY() + __pSelectAll->GetHeight(), GetWidth(), GetHeight() - __pSelectAll->GetHeight());
+               }
+               else
+               {
+                       __pTableView->SetBounds(0, __pSelectAll->GetY() + __pSelectAll->GetHeight(), GetWidth(), GetHeight() - __pSelectAll->GetHeight() - __pBottomLabel->GetHeight());
+               }
+               return 1;
+       }
+}
+
+int
+GroupListEditorPanel::GetItemCount(int groupIndex)
+{
+       return __pPresentationModel->GetCategoryCount();
+}
+
+void
+GroupListEditorPanel::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem)
+{
+}
+
+void
+GroupListEditorPanel::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem)
+{
+}
+
+result
+GroupListEditorPanel::UpdateBottomLabel(void)
+{
+       int selectedCount = 0;
+       for (int i = 0; i < __pTableView->GetItemCountAt(0); i++)
+       {
+               if (__pTableView->IsItemChecked(0, i) == true)
+               {
+                       selectedCount++;
+               }
+       }
+
+       String selected = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       selected.Append(L" (");
+       selected.Append(selectedCount);
+       selected.Append(L")");
+       __pBottomLabel->SetText(selected);
+       __pBottomLabel->Invalidate(false);
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Footer* pFooter = pForm->GetFooter();
+       if (selectedCount > 0)
+       {
+               if(__pBottomLabel->GetShowState() == false)
+               {
+                       __pBottomLabel->SetShowState(true);
+                       __pTableView->SetSize(__pTableView->GetSize().width, __pTableView->GetSize().height - H_BOTTOM_LABEL);
+               }
+               pFooter->SetItemEnabled(1, true);
+       }
+       else if (selectedCount == 0 )
+       {
+               if (__pBottomLabel->GetShowState() == true)
+               {
+                       __pBottomLabel->SetShowState(false);
+                       __pTableView->SetSize(__pTableView->GetSize().width, __pTableView->GetSize().height + H_BOTTOM_LABEL);
+               }
+               pFooter->SetItemEnabled(1, false);
+       }
+
+       pFooter->Invalidate(true);
+
+       return E_SUCCESS;
+}
+
+void
+GroupListEditorPanel::ResetSelectedItems(void)
+{
+       for (int index = 0; index < __pTableView->GetItemCountAt(0); index++)
+       {
+               __pTableView->SetItemChecked(0, index, false);
+               __pTableView->Invalidate(true);
+       }
+
+       if (__pPresentationModel != null)
+       {
+               if (__pSavedCategoryList != null)
+               {
+                       for (int i = 0; i < __pSavedCategoryList->GetCount(); i++)
+                       {
+                               Integer* pCategoryId = static_cast<Integer*>(__pSavedCategoryList->GetAt(i));
+
+                               bool isCategoryFound = false;
+                               if (pCategoryId != null)
+                               {
+                                       RecordId recordId =     pCategoryId->ToInt();
+                                       for (int index = 0; index < __pTableView->GetItemCountAt(0); index++)
+                                       {
+                                               if (recordId == __pPresentationModel->GetCategoryId(index))
+                                               {
+                                                       __pTableView->SetItemChecked(0, index, true);
+                                                       isCategoryFound = true;
+                                               }
+                                       }
+                                       if (isCategoryFound == false)
+                                       {
+                                               __pSavedCategoryList->RemoveAt(i);
+                                               i--;
+                                       }
+                               }
+                       }
+
+                       __pTableView->Invalidate(true);
+
+                       if (__pSavedCategoryList->GetCount() == __pTableView->GetItemCountAt(0))
+                       {
+                               __pSelectAll->SetSelected(true);
+                       }
+                       else
+                       {
+                               __pSelectAll->SetSelected(false);
+                       }
+
+                       __pSelectAll->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+       }
+}
+
+void
+GroupListEditorPanel::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem *pContextItem, bool activated)
+{
+}
+
+void
+GroupListEditorPanel::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+}
+
+void
+GroupListEditorPanel::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView &tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem *pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+       if (tableView.IsItemChecked(groupIndex, itemIndex) == true)
+       {
+               bool isChecked = true;
+               for (int i = 0; i < tableView.GetItemCountAt(groupIndex); i++)
+               {
+                       if (tableView.IsItemChecked(groupIndex, i) == false)
+                       {
+                               isChecked = false;
+                               break;
+                       }
+               }
+               __pSelectAll->SetSelected(isChecked);
+       }
+       else if (tableView.IsItemChecked(groupIndex, itemIndex) == false)
+       {
+               __pSelectAll->SetSelected(false);
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+GroupListEditorPanel::OnContactsChanged(void)
+{
+       __pTableView->UpdateTableView();
+}
+
+void
+GroupListEditorPanel::OnCategoriesChanged(void)
+{
+       __pTableView->UpdateTableView();
+       ResetSelectedItems();
+}
+
+void
+GroupListEditorPanel::OnForeground(void)
+{
+}
+
+void
+GroupListEditorPanel::OnBackground(void)
+{
+       if (__pSavedCategoryList != null)
+       {
+               __pSavedCategoryList->RemoveAll(true);
+               SaveCategoryList();
+       }
+}
+
+void
+GroupListEditorPanel::SaveCategoryList(void)
+{
+       for (int index = 0; index < __pTableView->GetItemCountAt(0); index++)
+       {
+               if (__pTableView->IsItemChecked(0, index) == true)
+               {
+                       __pSavedCategoryList->Add((new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(index))));
+               }
+       }
+}
diff --git a/src/CtGroupListPanel.cpp b/src/CtGroupListPanel.cpp
new file mode 100644 (file)
index 0000000..51b94cc
--- /dev/null
@@ -0,0 +1,640 @@
+//
+// 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       CtGroupListPanel.cpp
+ * @brief      This is the implementation file for the GroupListPanel class.
+ */
+
+#include <FSocial.h>
+#include "CtContactListItem.h"
+#include "CtGroupListPanel.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_CREATE = 1;
+static const int IDA_MORE_EDIT = 2;
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+static const int IDA_LIST_ELEMENT_MESSAGE = 40;
+static const int IDA_LIST_ELEMENT_EMAIL = 41;
+static const int IDA_LIST_ELEMENT_ADD_MEMEBER = 42;
+
+static const wchar_t* IDB_NO_GROUP = L"00_Nocontents_unnamed.png";
+
+static const unsigned int COLOR_ITEM_TEXT_NORMAL = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_ITEM_TEXT_PRESSED = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+
+static const int H_GROUP_ITEM = 76;
+static const int W_INITIAL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int W_THUMBNAIL = 108;
+static const int H_THUMBNAIL = 108;
+static const int X_TEXT = 26;
+static const int W_ELEMENT_GAP = 16;
+
+static const int X_EMPTY_IMAGE = 220;
+static const int Y_EMPTY_IMAGE = 300;
+static const int W_EMPTY_IMAGE = 280;
+static const int H_EMPTY_IMAGE = 280;
+static const int Y_EMPTY_COMMENT = 618;
+static const int H_EMPTY_COMMENT = 38;
+
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+
+GroupListPanel::GroupListPanel(void)
+: __sweptItemIndex(0)
+, __pListView(null)
+, __pOptionMenu(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pPresentationModel(null)
+{
+}
+
+GroupListPanel::~GroupListPanel(void)
+{
+}
+
+void
+GroupListPanel::Initialize(void)
+{
+       Construct(Rectangle(0, 0, W_INITIAL_PANEL, H_INITIAL_PANEL));
+}
+
+result
+GroupListPanel::OnInitializing(void)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       FloatRectangle clientBounds = ((MainForm*)pForm)->GetClientBounds();
+
+       SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = GroupListPresentationModel::GetInstance();
+
+       __pListView = new (std::nothrow) GroupedListView();
+       __pListView->Construct(Rectangle(0, 0, clientBounds.width, clientBounds.height), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
+       __pListView->SetItemProvider(*this);
+       __pListView->AddGroupedListViewItemEventListener(*this);
+
+       AddControl(__pListView);
+
+       __pEmptyImageLabel = new (std::nothrow) Label();
+       __pEmptyImageLabel->Construct(Rectangle(X_EMPTY_IMAGE, Y_EMPTY_IMAGE, W_EMPTY_IMAGE, H_EMPTY_IMAGE), L"");
+       Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_NO_GROUP);
+       if (pBitmap != null)
+       {
+               __pEmptyImageLabel->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+       __pEmptyImageLabel->SetShowState(false);
+
+       AddControl(__pEmptyImageLabel);
+
+       __pEmptyCommentLabel = new (std::nothrow) Label();
+       __pEmptyCommentLabel->Construct(Rectangle(0, Y_EMPTY_COMMENT, clientBounds.width, H_EMPTY_COMMENT),
+                                                                                                                               ResourceManager::GetString(L"IDS_PB_HEADER_NO_GROUP"));
+       __pEmptyCommentLabel->SetTextConfig(FONT_SIZE_EMPTY_COMMENT, LABEL_TEXT_STYLE_NORMAL);
+       __pEmptyCommentLabel->SetTextColor(Color(COLOR_EMPTY_COMMENT));
+       __pEmptyCommentLabel->SetShowState(false);
+
+       AddControl(__pEmptyCommentLabel);
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_SK_EDIT"), IDA_MORE_EDIT);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+       return E_SUCCESS;
+}
+
+result
+GroupListPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveGroupChangeListener(*this);
+       }
+
+       delete __pOptionMenu;
+
+       return r;
+}
+
+void
+GroupListPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST));
+                       }
+               }
+               break;
+       case IDA_HEADER_GROUPS:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_HEADER_FAVORITES:
+               {
+                       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+                       {
+                               if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_SINGLE)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                               }
+                               else if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST_EDITOR));
+                               }
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_FAVORITE_LIST));
+                       }
+               }
+               break;
+       case IDA_FOOTER_CREATE:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+               }
+               break;
+       case IDA_MORE_EDIT:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST_EDITOR));
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupListPanel::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if(__pPresentationModel->GetCategoryCount() > 0 && pContactsApp->GetOperationId() != OPERATION_ID_PICK)
+       {
+               __pOptionMenu->SetShowState(true);
+               __pOptionMenu->Show();
+       }
+}
+
+void
+GroupListPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                  const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (previousSceneId.Equals(IDSCN_CONTACT_SELECTOR, true))
+       {
+               __pPresentationModel->AddContactToCategory(__sweptItemIndex, pArgs);
+       }
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+       Form *pEventForm = const_cast<Form*>(pForm);
+       pEventForm->SetFormMenuEventListener(this);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->AddActionEventListener(*this);
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               pFooter->SetShowState(false);
+
+               SetBounds(Rectangle(0, 0, ((MainForm*)pForm)->GetClientBounds().width, ((MainForm*)pForm)->GetClientBounds().height + pFooter->GetHeight()));
+               __pListView->SetSize(__pListView->GetWidthF(), ((MainForm*)pForm)->GetClientBounds().height + + pFooter->GetHeight());
+
+               Invalidate(true);
+
+               if (__pPresentationModel->GetCategoryCount() == 0)
+               {
+                       pForm->SetFormMenuEventListener(null);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+               else
+               {
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+       }
+       else
+       {
+               FooterItem footerItemCreate;
+               footerItemCreate.Construct(IDA_FOOTER_CREATE);
+               footerItemCreate.SetText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+               int count = pFooter->GetItemCount();
+               if (count == 0)
+               {
+                       pFooter->AddItem(footerItemCreate);
+               }
+               else if (count == 1)
+               {
+                       pFooter->SetItemAt(0, footerItemCreate);
+               }
+               else
+               {
+                       pFooter->SetItemAt(0, footerItemCreate);
+                       pFooter->RemoveItemAt(1);
+                       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+               }
+               pFooter->SetItemEnabled(0,true);
+               pForm->SetFormMenuEventListener(null);
+
+               if (__pPresentationModel->GetCategoryCount() > 0)
+               {
+                       pForm->SetFormMenuEventListener(this);
+
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+               else if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+               else
+               {
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+       }
+
+       __pListView->UpdateList();
+       __pPresentationModel->AddGroupChangeListener(*this);
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+GroupListPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Form *pEventForm = const_cast<Form*>(pForm);
+       pEventForm->SetFormMenuEventListener(null);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+
+       __pPresentationModel->RemoveGroupChangeListener(*this);
+}
+
+int
+GroupListPanel::GetGroupCount(void)
+{
+       return 1;
+}
+
+int
+GroupListPanel::GetItemCount(int groupIndex)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       int count = __pPresentationModel->GetCategoryCount();
+
+       if (__pPresentationModel->GetContactCountInNotAssignedCategory(pContactsApp->GetReturnType()))
+       {
+               count++;
+       }
+
+       return count;
+}
+
+Tizen::Ui::Controls::ListItemBase*
+GroupListPanel::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       String groupNameString;
+       int contactCount = 0;
+       String contactCountString;
+       bool isNotAssinged = false;
+       int adjustedNameWidth;
+       Dimension countSize;
+       Dimension groupNameSize;
+       Font font;
+       IList* pList = null;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), LIST_ANNEX_STYLE_NORMAL);
+
+       result r = __pPresentationModel->UpdatePersonList(itemIndex);
+       TryReturn(r == E_SUCCESS, null, "[%s] Unable to update person list", GetErrorMessage(r));
+
+       if (__pPresentationModel->GetCategoryCount() == itemIndex)
+       {
+               isNotAssinged = true;
+               groupNameString = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+               contactCount = __pPresentationModel->GetContactCountInNotAssignedCategory(pContactsApp->GetReturnType());
+               contactCountString = L"(" + Integer::ToString(contactCount) + L")";
+       }
+       else
+       {
+               groupNameString = __pPresentationModel->GetCategoryName(itemIndex);
+               contactCount = __pPresentationModel->GetContactCountInCategoryN(itemIndex, pList, pContactsApp->GetReturnType());
+               contactCountString = L"(" + Integer::ToString(contactCount) + L")";
+       }
+
+       font.Construct(FONT_STYLE_PLAIN, pContactsApp->GetFontSize());
+       font.GetTextExtent(contactCountString, contactCountString.GetLength(), countSize);
+       font.GetTextExtent(groupNameString, groupNameString.GetLength(), groupNameSize);
+
+       adjustedNameWidth = itemWidth - (W_THUMBNAIL + (X_TEXT * 2) + (countSize.width + W_ELEMENT_GAP * 2));
+       if (groupNameSize.width < adjustedNameWidth)
+       {
+               adjustedNameWidth = groupNameSize.width + 1;
+       }
+
+       pItem->AddElement(Rectangle(X_TEXT, 0, adjustedNameWidth, pContactsApp->GetListItemSingleLineHeight()), 1, groupNameString, pContactsApp->GetFontSize(), COLOR_ITEM_TEXT_NORMAL, COLOR_ITEM_TEXT_PRESSED, COLOR_ITEM_TEXT_PRESSED, true);
+       pItem->AddElement(Rectangle(X_TEXT + adjustedNameWidth + W_ELEMENT_GAP, 0, countSize.width + 1, pContactsApp->GetListItemSingleLineHeight()), 2, contactCountString, pContactsApp->GetFontSize(), COLOR_ITEM_TEXT_NORMAL, COLOR_ITEM_TEXT_PRESSED, COLOR_ITEM_TEXT_PRESSED, true);
+
+       Bitmap* pThumbnail = null;
+       pThumbnail = __pPresentationModel->GetThumbnailN(itemIndex, pList);
+       if (pThumbnail != null)
+       {
+               pItem->AddElement(Rectangle(itemWidth - W_THUMBNAIL - X_TEXT, (pContactsApp->GetListItemSingleLineHeight() - H_THUMBNAIL)/2, W_THUMBNAIL, H_THUMBNAIL), 0, *pThumbnail);
+               delete pThumbnail;
+       }
+
+       if (pContactsApp->GetOperationId().IsEmpty() == false)
+       {
+               return pItem;
+       }
+
+       ListContextItem* pItemContext = new (std::nothrow) ListContextItem();
+       pItemContext->Construct();
+       if (contactCount == 0)
+       {
+               pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), false);
+               pItemContext->AddElement(IDA_LIST_ELEMENT_EMAIL, ResourceManager::GetString(L"IDS_COM_BODY_EMAIL"), false);
+       }
+       else
+       {
+               pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"));
+               pItemContext->AddElement(IDA_LIST_ELEMENT_EMAIL, ResourceManager::GetString(L"IDS_COM_BODY_EMAIL"));
+       }
+
+       if (isNotAssinged == false && __pPresentationModel->GetContactCount() > contactCount)
+       {
+               pItemContext->AddElement(IDA_LIST_ELEMENT_ADD_MEMEBER, ResourceManager::GetString(L"IDS_PB_SK_ADD_MEMBER"));
+       }
+
+       pItem->SetContextItem(pItemContext);
+
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               pList = null;
+       }
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::GroupItem*
+GroupListPanel::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(ResourceManager::GetString(L"IDS_PB_BODY_PHONE"));
+
+       return pItem;
+}
+
+bool
+GroupListPanel::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
+       pCustomItem->RemoveAllElements();
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+GroupListPanel::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+GroupListPanel::OnContactsChanged(void)
+{
+       __pListView->UpdateList();
+}
+
+void
+GroupListPanel::OnCategoriesChanged(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       if (__pPresentationModel->GetCategoryCount()> 0)
+       {
+               pForm->SetFormMenuEventListener(this);
+       }
+       else
+       {
+               pForm->SetFormMenuEventListener(null);
+       }
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               if (__pPresentationModel->GetCategoryCount() == 0)
+               {
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+               else
+               {
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+       }
+       else
+       {
+               if (__pPresentationModel->GetCategoryCount() > 0)
+               {
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+               else if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+               }
+               else
+               {
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+       }
+
+       __pListView->UpdateList();
+}
+
+void
+GroupListPanel::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (elementId)
+       {
+       case IDA_LIST_ELEMENT_MESSAGE:
+               {
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+
+                       if (__pPresentationModel->GetCategoryCount() == itemIndex)
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_NOT_ASSIGNED)));
+                       }
+                       else
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(itemIndex))));
+                       }
+                       pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_SELECT_MESSAGE)));
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_CONTACT_LIST_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+               }
+               break;
+       case IDA_LIST_ELEMENT_EMAIL:
+               {
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+
+                       if (__pPresentationModel->GetCategoryCount() == itemIndex)
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_NOT_ASSIGNED)));
+                       }
+                       else
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(itemIndex))));
+                       }
+                       pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_SELECT_EMAIL)));
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_CONTACT_LIST_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+               }
+               break;
+       case IDA_LIST_ELEMENT_ADD_MEMEBER:
+               {
+                       IList* pArgList = __pPresentationModel->GetContactIdListInCategory(itemIndex);
+
+                       __sweptItemIndex = itemIndex;
+
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_SELECTOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgList);
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupListPanel::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       
+       ArrayList* pList = new (std::nothrow) ArrayList();
+       pList->Construct();
+
+       if (__pPresentationModel->GetCategoryCount() == itemIndex)
+       {
+               pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_NOT_ASSIGNED)));
+       }
+       else
+       {
+               pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(itemIndex))));
+       }
+
+       if (pContactsApp->GetSelectionMode() == APP_CONTROL_SELECTION_MODE_MULTI)
+       {
+               SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_GROUP_CONTACT_LIST_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+       }
+       else
+       {
+               SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_GROUP_CONTACT_LIST, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+       }
+}
+
+void
+GroupListPanel::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
diff --git a/src/CtGroupListPresentationModel.cpp b/src/CtGroupListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..8446994
--- /dev/null
@@ -0,0 +1,519 @@
+//
+// 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       CtGroupListPresentationModel.cpp
+ * @brief      This is the implementation file for the GroupListPresentationModel class.
+ */
+
+#include <FMedia.h>
+#include "CtGroupListPresentationModel.h"
+#include "CtIContactEventListener.h"
+#include "CtResourceManager.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+
+GroupListPresentationModel* GroupListPresentationModel::__pInstance = null;
+
+GroupListPresentationModel*
+GroupListPresentationModel::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+
+       return __pInstance;
+}
+
+void
+GroupListPresentationModel::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) GroupListPresentationModel();
+       result r = __pInstance->Construct();
+       TryCatch(r == E_SUCCESS, , "[%s] Construction Failed", GetErrorMessage(r));
+
+       std::atexit(DestroyInstance);
+       return;
+
+CATCH:
+       delete __pInstance;
+       __pInstance = null;
+}
+
+void
+GroupListPresentationModel::DestroyInstance(void)
+{
+       delete __pInstance;
+}
+
+GroupListPresentationModel::GroupListPresentationModel(void)
+: __pAddressbook(null)
+, __pCategoryList(null)
+, __pPersonList(null)
+, __pCategoryChangeListener(null)
+{
+}
+
+GroupListPresentationModel::~GroupListPresentationModel(void)
+{
+       delete __pAddressbook;
+
+       if (__pCategoryList != null)
+       {
+               __pCategoryList->RemoveAll(true);
+               delete __pCategoryList;
+       }
+
+       if (__pPersonList != null)
+       {
+               __pPersonList->RemoveAll(true);
+               delete __pPersonList;
+       }
+
+       if (__pCategoryChangeListener != null)
+       {
+               __pCategoryChangeListener->RemoveAll(false);
+               delete __pCategoryChangeListener;
+       }
+}
+
+result
+GroupListPresentationModel::Construct(void)
+{
+       result r = E_SUCCESS;
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+
+       __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       if (__pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       r = __pAddressbook->SetAddressbookChangeEventListener(this);
+       TryCatch(r == E_SUCCESS, , "[%s] Unable to set event listener", GetErrorMessage(r));
+
+       __pCategoryList = __pAddressbook->GetAllCategoriesN();
+       r = GetLastResult();
+       TryCatch(__pCategoryList && r == E_SUCCESS, , "[%s] Unable to get all categories", GetErrorMessage(r));
+
+       __pCategoryChangeListener = new (std::nothrow) ArrayList();
+       __pCategoryChangeListener->Construct();
+
+       return r;
+
+CATCH:
+       delete __pAddressbook;
+       __pAddressbook = null;
+
+       if (__pCategoryList != null)
+       {
+               __pCategoryList->RemoveAll(true);
+
+               delete __pCategoryList;
+               __pCategoryList = null;
+       }
+
+       delete __pCategoryChangeListener;
+       __pCategoryChangeListener = null;
+
+       return r;
+}
+
+result
+GroupListPresentationModel::RemoveCategory(int index)
+{
+       Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return E_FAILURE;
+       }
+
+       __pAddressbook->RemoveCategory(*pCategory);
+
+       return E_SUCCESS;
+}
+
+Tizen::Base::String
+GroupListPresentationModel::GetCategoryName(int index)
+{
+       String returnName;
+
+       Category* pCategory = static_cast<Category *>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return returnName;
+       }
+
+       returnName = pCategory->GetName();
+
+       return returnName;
+}
+
+Tizen::Base::Collection::IList*
+GroupListPresentationModel::GetContactIdListInCategory(int index)
+{
+       Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return null;
+       }
+
+       IList* pContactList = AddressbookManager::GetInstance()->GetContactsByCategoryN(pCategory->GetRecordId());
+       if (pContactList == null)
+       {
+               return null;
+       }
+
+       ArrayList* pList = new (std::nothrow) ArrayList();
+       pList->Construct();
+
+       for (int i = 0; i < pContactList->GetCount(); i++)
+       {
+               Contact* pContact = static_cast<Contact*>(pContactList->GetAt(i));
+               if (pContact != null)
+               {
+                       pList->Add(*(new (std::nothrow) Integer(pContact->GetRecordId())));
+               }
+       }
+
+       delete pContactList;
+
+       return pList;
+}
+
+bool
+GroupListPresentationModel::IsContactInCategory(const Tizen::Base::Collection::IList& categoryIdList, int categoryIndex)
+{
+       Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(categoryIndex));
+       if (pCategory == null)
+       {
+               return false;
+       }
+
+       IEnumerator* pEnum = categoryIdList.GetEnumeratorN();
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               String* pCategoryIdString = static_cast<String *>(pEnum->GetCurrent());
+
+               if (pCategoryIdString->Equals(Integer::ToString(pCategory->GetRecordId()), true))
+               {
+                       delete pEnum;
+
+                       return true;
+               }
+       }
+
+       delete pEnum;
+
+       return false;
+}
+
+bool
+GroupListPresentationModel::IsDefaultCategory(int index)
+{
+       Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return false;
+       }
+
+       return pCategory->IsDefault();
+}
+
+int
+GroupListPresentationModel::GetContactCountInCategoryN(int index, IList*& pContactList, AppControlReturnType returnType)
+{
+       Category* pCategory = static_cast<Category *>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return -1;
+       }
+       if (returnType != APP_CONTROL_RETURN_TYPE_PHONE &&
+               returnType != APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               return pCategory->GetMemberCount();
+       }
+
+       int returnCount = 0;
+       IList* pList = null;
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+
+       mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_EQUAL, pCategory->GetRecordId());
+       if (returnType == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+       }
+       else if (returnType == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+       }
+
+       pList = AddressbookManager::GetInstance()->SearchN(mainFilter);
+
+       if (pList == null)
+       {
+               return returnCount;
+       }
+
+       returnCount = pList->GetCount();
+
+       pContactList = pList;
+
+       return returnCount;
+}
+
+int
+GroupListPresentationModel::GetContactCountInNotAssignedCategory(AppControlReturnType returnType)
+{
+       int returnCount = 0;
+       IList* pList = null;
+       AddressbookFilter mainFilter(AB_FI_TYPE_PERSON);
+
+       mainFilter.AppendInt(FI_CONJ_OP_NONE, PERSON_FI_PR_CATEGORY_ID, FI_CMP_OP_IS_NULL, INVALID_RECORD_ID);
+       if (returnType == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_PHONE, FI_CMP_OP_EQUAL, true);
+       }
+       else if (returnType == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               mainFilter.AppendBool(FI_CONJ_OP_AND, PERSON_FI_PR_HAS_EMAIL, FI_CMP_OP_EQUAL, true);
+       }
+
+       pList = AddressbookManager::GetInstance()->SearchN(mainFilter);
+
+       if (pList == null)
+       {
+               return returnCount;
+       }
+
+       returnCount = pList->GetCount();
+
+       pList->RemoveAll(true);
+       delete pList;
+
+       return returnCount;
+}
+
+int
+GroupListPresentationModel::GetCategoryCount(void)
+{
+       return __pAddressbook->GetCategoryCount();
+}
+
+int
+GroupListPresentationModel::GetContactCount(void)
+{
+       return __pAddressbook->GetContactCount();
+}
+
+Tizen::Graphics::Bitmap*
+GroupListPresentationModel::GetThumbnailN(int index, IList* pList)
+{
+       String filePath;
+       Bitmap* pThumbnail = null;
+       IList* pPersonList = null;
+       Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(index));
+       TryReturn(pCategory != null, null, "Unable to get a category");
+
+       filePath = pCategory->GetThumbnailPath();
+
+       if (filePath.IsEmpty())
+       {
+               if (pList == null)
+               {
+                       pPersonList = __pPersonList;
+               }
+               else
+               {
+                       pPersonList = pList;
+               }
+
+               for (int i = 0; i < pPersonList->GetCount(); i++)
+               {
+                       Person* pPerson = static_cast<Person*>(pPersonList->GetAt(i));
+                       TryReturn(pPerson != null, null, "Unable to get a person");
+                       filePath = pPerson->GetThumbnailPath();
+
+                       if (filePath.IsEmpty() == false)
+                       {
+                               break;
+                       }
+               }
+       }
+
+       if (filePath.IsEmpty() == false)
+       {
+               ImageBuffer thumbnailImageBuffer;
+               result r = thumbnailImageBuffer.Construct(filePath);
+               if (r == E_SUCCESS)
+               {
+                       pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_NONE);
+               }
+       }
+
+       return pThumbnail;
+}
+
+result
+GroupListPresentationModel::UpdatePersonList(int categoryIndex)
+{
+       RecordId categoryId = INVALID_RECORD_ID;
+
+       if (__pCategoryList != null)
+       {
+               Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(categoryIndex));
+               if (pCategory != null)
+               {
+                       categoryId = pCategory->GetRecordId();
+               }
+
+               if (__pPersonList != null)
+               {
+                       delete __pPersonList;
+               }
+               __pPersonList = AddressbookManager::GetInstance()->GetPersonsByCategoryN(categoryId);
+       }
+
+       if (__pPersonList == null)
+       {
+               return E_FAILURE;
+       }
+
+       return E_SUCCESS;
+}
+
+Tizen::Social::RecordId
+GroupListPresentationModel::GetCategoryId(int index)
+{
+       Category* pCategory = static_cast<Category *>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return -1;
+       }
+
+       return pCategory->GetRecordId();
+}
+
+result
+GroupListPresentationModel::UpdateCategoryList(void)
+{
+       if (__pCategoryList != null)
+       {
+               __pCategoryList->RemoveAll(true);
+               delete __pCategoryList;
+               __pCategoryList = null;
+       }
+
+       __pCategoryList = __pAddressbook->GetAllCategoriesN();
+       if ((__pCategoryList == null) || IsFailed(GetLastResult()))
+       {
+               return E_FAILURE;
+       }
+
+       return E_SUCCESS;
+}
+
+result
+GroupListPresentationModel::AddContactToCategory(int index, Tizen::Base::Collection::IList* pList)
+{
+       if (pList == null)
+       {
+               return E_FAILURE;
+       }
+
+       Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(index));
+       if (pCategory == null)
+       {
+               return E_FAILURE;
+       }
+
+       Integer* pContactId = null;
+       IEnumerator* pEnum = pList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pContactId = static_cast<Integer*>(pEnum->GetCurrent());
+               if (pContactId != null)
+               {
+                       pCategory->AddMember(pContactId->ToInt());
+               }
+       }
+       delete pEnum;
+
+       AddressbookManager::GetInstance()->UpdateCategory(*pCategory);
+
+       return E_SUCCESS;
+}
+
+void
+GroupListPresentationModel::AddGroupChangeListener(const IContactEventListener& listener)
+{
+       __pCategoryChangeListener->Add(listener);
+}
+
+void
+GroupListPresentationModel::RemoveGroupChangeListener(const IContactEventListener& listener)
+{
+       __pCategoryChangeListener->Remove(listener, false);
+}
+
+void
+GroupListPresentationModel::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+       UpdateCategoryList();
+
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pCategoryChangeListener->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener *>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnContactsChanged();
+       }
+
+       delete pEnum;
+}
+
+void
+GroupListPresentationModel::OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList)
+{
+       UpdateCategoryList();
+
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pCategoryChangeListener->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener *>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnCategoriesChanged();
+       }
+
+       delete pEnum;
+}
diff --git a/src/CtGroupPresentationModel.cpp b/src/CtGroupPresentationModel.cpp
new file mode 100644 (file)
index 0000000..27e17b2
--- /dev/null
@@ -0,0 +1,233 @@
+//
+// 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       CtGroupPresentationModel.cpp
+ * @brief      This is the implementation file for the GroupPresentationModel class.
+ */
+
+#include "CtGroupPresentationModel.h"
+#include "CtIContactEventListener.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Social;
+
+GroupPresentationModel::GroupPresentationModel(void)
+ : __pContactChangeListenerList(null)
+ , __pAddressbook(null)
+ , __pCategory(null)
+{
+}
+
+GroupPresentationModel::~GroupPresentationModel(void)
+{
+       if (__pContactChangeListenerList != null)
+       {
+               __pContactChangeListenerList->RemoveAll(false);
+               delete __pContactChangeListenerList;
+       }
+
+       delete __pAddressbook;
+       delete __pCategory;
+}
+
+result
+GroupPresentationModel::Construct(Tizen::Social::RecordId categoryId)
+{
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       if (__pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       if (categoryId != INVALID_RECORD_ID)
+       {
+               __pCategory = __pAddressbook->GetCategoryN(categoryId);
+               if (__pCategory == null)
+               {
+                       return E_FAILURE;
+               }
+       }
+       else
+       {
+               __pCategory = new (std::nothrow) Category();
+               if (__pCategory == null)
+               {
+                       return E_FAILURE;
+               }
+       }
+
+       __pContactChangeListenerList = new (std::nothrow) ArrayList();
+       __pContactChangeListenerList->Construct();
+
+       __pAddressbook->SetAddressbookChangeEventListener(this);
+
+       return E_SUCCESS;
+}
+
+bool
+GroupPresentationModel::IsDuplicatedCategory(void)
+{
+       bool isDuplicated = false;
+       Category* pCategory = null;
+
+       IList* pList = __pAddressbook->GetAllCategoriesN();
+       if (pList == null)
+       {
+               return false;
+       }
+
+       IEnumerator* pEnum = pList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pCategory = static_cast<Category*>(pEnum->GetCurrent());
+               TryCatch(pCategory != null, , "Unable to cast object to category");
+
+               if (pCategory->IsDefault())
+               {
+                       continue;
+               }
+
+               if (pCategory->GetRecordId() != __pCategory->GetRecordId() &&
+                       pCategory->GetName().Equals(__pCategory->GetName()) == true)
+               {
+                       isDuplicated = true;
+               }
+       }
+
+CATCH:
+       pList->RemoveAll(true);
+       delete pList;
+       delete pEnum;
+
+       return isDuplicated;
+}
+
+bool
+GroupPresentationModel::IsDefaultCategory(void)
+{
+       return __pCategory->IsDefault();
+}
+
+result
+GroupPresentationModel::SetCategoryName(const Tizen::Base::String& groupName)
+{
+       return __pCategory->SetName(groupName);
+}
+
+result
+GroupPresentationModel::SetRingtone(const Tizen::Base::String& ringtonePath)
+{
+       return __pCategory->SetRingtonePath(ringtonePath);
+}
+
+result
+GroupPresentationModel::AddCategory(void)
+{
+       return __pAddressbook->AddCategory(*__pCategory);
+}
+
+result
+GroupPresentationModel::UpdateCategory(void)
+{
+       bool isSame = false;
+       Category* pCategory = __pAddressbook->GetCategoryN(GetCategoryId());
+
+       if (pCategory && pCategory->Equals(*__pCategory))
+       {
+               isSame = true;
+       }
+
+       delete pCategory;
+
+       // If the category is not changed, OnCategoriesChanged will not be called. But UpdateCategory() returns E_SCCUESS.
+       result r = __pAddressbook->UpdateCategory(*__pCategory);
+       return isSame ? E_FAILURE : r;
+}
+
+result
+GroupPresentationModel::SetThumbnailPath(const Tizen::Base::String& filePath)
+{
+       return __pCategory->SetThumbnail(filePath);
+}
+
+Tizen::Base::String
+GroupPresentationModel::GetThumbnailPath(void)
+{
+       return __pCategory->GetThumbnailPath();
+}
+
+Tizen::Base::String
+GroupPresentationModel::GetCategoryName(void)
+{
+       return __pCategory->GetName();
+}
+
+Tizen::Base::String
+GroupPresentationModel::GetRingtone(void)
+{
+       return __pCategory->GetRingtonePath();
+}
+
+int
+GroupPresentationModel::GetCategoryCount(void)
+{
+       return __pAddressbook->GetCategoryCount();
+}
+
+Tizen::Social::RecordId
+GroupPresentationModel::GetCategoryId(void)
+{
+       return __pCategory->GetRecordId();
+}
+
+void
+GroupPresentationModel::AddContactChangeListener(const IContactEventListener& listener)
+{
+       __pContactChangeListenerList->Add(listener);
+}
+
+void
+GroupPresentationModel::RemoveContactChangeListener(const IContactEventListener& listener)
+{
+       __pContactChangeListenerList->Remove(listener, false);
+}
+
+void
+GroupPresentationModel::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+}
+
+void
+GroupPresentationModel::OnCategoriesChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
+{
+       IContactEventListener* pInterface = null;
+       IEnumerator* pEnum = __pContactChangeListenerList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IContactEventListener *>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+                       return;
+               }
+               pInterface->OnCategoriesChanged();
+       }
+
+       delete pEnum;
+}
diff --git a/src/CtGroupSelectorForm.cpp b/src/CtGroupSelectorForm.cpp
new file mode 100644 (file)
index 0000000..57f3d92
--- /dev/null
@@ -0,0 +1,473 @@
+//
+// 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       CtGroupSelectorForm.cpp
+ * @brief      This is the implementation file for the GroupSelectorForm class.
+ */
+
+#include <FApp.h>
+#include <FBase.h>
+#include "CtContactsApp.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtGroupSelectorForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_DONE = 11;
+static const int IDA_FOOTER_CANCEL = 12;
+static const int IDA_MORE_CREATE_GROUP = 13;
+
+static const int X_LIST_ITEM_TEXT_MARGIN = 36;
+
+GroupSelectorForm::GroupSelectorForm(void)
+ :__isDonePressed(false)
+ ,__pGroupListPresentationModel(null)
+ , __pListView(null)
+ , __pBottomLabel(null)
+ , __pOptionMenu(null)
+ , __pGroupIndexMap(null)
+ , __pGroupIdList(null)
+{
+}
+
+GroupSelectorForm::~GroupSelectorForm(void)
+{
+}
+
+void
+GroupSelectorForm::Initialize(void)
+{
+       Construct(L"IDL_GROUP_SELECTOR_FORM");
+}
+
+result
+GroupSelectorForm::OnInitializing(void)
+{
+       Footer* pFooter = GetFooter();
+       pFooter->SetItemEnabled(1, false);
+       pFooter->AddActionEventListener(*this);
+       SetFormBackEventListener(this);
+
+       __pGroupListPresentationModel = GroupListPresentationModel::GetInstance();
+       __pGroupListPresentationModel->AddGroupChangeListener(*this);
+
+       __pListView = static_cast<ListView*>(GetControl(L"IDC_LISTVIEW", false));
+       __pListView->SetItemProvider(*this);
+       __pListView->AddListViewItemEventListener(*this);
+
+       __pBottomLabel = static_cast<Label*>(GetControl(L"IDC_LABEL", false));
+
+       __pGroupIndexMap = new (std::nothrow) HashMapT<int, bool>();
+       __pGroupIndexMap->Construct(__pGroupListPresentationModel->GetCategoryCount());
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"), IDA_MORE_CREATE_GROUP);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+
+       return E_SUCCESS;
+}
+
+result
+GroupSelectorForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pGroupIndexMap)
+       {
+               __pGroupIndexMap->RemoveAll();
+               delete __pGroupIndexMap;
+       }
+
+       if (__pGroupIdList)
+       {
+               __pGroupIdList->RemoveAll(true);
+               delete __pGroupIdList;
+       }
+
+       if (__pGroupListPresentationModel != null)
+       {
+               __pGroupListPresentationModel->RemoveGroupChangeListener(*this);
+       }
+
+       delete __pOptionMenu;
+
+       return r;
+}
+
+void
+GroupSelectorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       result r = E_SUCCESS;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ArrayList* pList = null;
+
+       switch (actionId)
+       {
+       case IDA_MORE_CREATE_GROUP:
+               {
+                       r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+                       TryCatch(r == E_SUCCESS, , "[%s] Unable to go forward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_FOOTER_DONE:
+               {
+                       __isDonePressed = true;
+                       pList = new (std::nothrow) ArrayList();
+                       pList->Construct(__pGroupIndexMap->GetCount());
+
+                       for (int i = 0; i < __pGroupListPresentationModel->GetCategoryCount(); i++)
+                       {
+                               bool categoryValue = false;
+                               RecordId categoryId = __pGroupListPresentationModel->GetCategoryId(i);
+
+                               __pGroupIndexMap->GetValue(categoryId, categoryValue);
+
+                               if (categoryValue)
+                               {
+                                       pList->Add(*(new (std::nothrow) Integer(categoryId)));
+                               }
+                       }
+
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), pList);
+                       TryCatch(r == E_SUCCESS, , "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryCatch(r == E_SUCCESS, ,"[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       default:
+               break;
+       }
+
+       return;
+
+CATCH:
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+       }
+
+       return;
+}
+
+void
+GroupSelectorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+
+       SetFormMenuEventListener(this);
+
+       if (pArgs == null)
+       {
+               return;
+       }
+
+       if (__pGroupIdList != null)
+       {
+               __pGroupIdList->RemoveAll(true);
+               delete __pGroupIdList;
+       }
+
+       __pGroupIdList = pArgs;
+
+       __pGroupIndexMap->RemoveAll();
+
+       int categoryCount = __pGroupListPresentationModel->GetCategoryCount();
+       for (int index = 0; index < categoryCount; index++)
+       {
+               if (__pGroupListPresentationModel->IsContactInCategory(*__pGroupIdList, index) == true)
+               {
+                       __pGroupIndexMap->Add(__pGroupListPresentationModel->GetCategoryId(index), true);
+               }
+               else
+               {
+                       __pGroupIndexMap->Add(__pGroupListPresentationModel->GetCategoryId(index), false);
+               }
+       }
+
+       __pListView->UpdateList();
+
+       for (int index = 0; index < __pListView->GetItemCount(); index++)
+       {
+               bool isChecked = false;
+
+               __pGroupIndexMap->GetValue(__pGroupListPresentationModel->GetCategoryId(index), isChecked);
+
+               if (isChecked == true)
+               {
+                       result r = __pListView->SetItemChecked(index, true);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+       SetFormMenuEventListener(null);
+}
+
+void
+GroupSelectorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SceneManager *pSceneManager = SceneManager::GetInstance();
+       pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+}
+
+void
+GroupSelectorForm::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       __pOptionMenu->SetShowState(true);
+       __pOptionMenu->Show();
+}
+
+Tizen::Ui::Controls::ListItemBase*
+GroupSelectorForm::CreateItem(int index, int itemWidth)
+{
+       result r = E_SUCCESS;
+       String name;
+       Color textColor = Color::GetColor(COLOR_ID_BLACK);
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()),  LIST_ANNEX_STYLE_MARK);
+
+       name = __pGroupListPresentationModel->GetCategoryName(index);
+
+       r = pItem->AddElement(Rectangle(X_LIST_ITEM_TEXT_MARGIN/2, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), pContactsApp->GetListItemSingleLineHeight()), index, name, pContactsApp->GetFontSize(), textColor, textColor, textColor);
+       TryCatch(r == E_SUCCESS, , "[%s] Unable to add element", GetErrorMessage(r));
+
+       return pItem;
+
+CATCH:
+       delete pItem;
+       pItem = null;
+
+       return null;
+}
+
+bool
+GroupSelectorForm::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+
+       return true;
+}
+
+int
+GroupSelectorForm::GetItemCount(void)
+{
+       return __pGroupListPresentationModel->GetCategoryCount();
+}
+
+void
+GroupSelectorForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+GroupSelectorForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       result r = E_SUCCESS;
+
+       if (status == LIST_ITEM_STATUS_CHECKED)
+       {
+               r = listView.SetItemChecked(index, true);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+
+               r = __pGroupIndexMap->SetValue(__pGroupListPresentationModel->GetCategoryId(index), true);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set value", GetErrorMessage(r));
+       }
+       else if (status == LIST_ITEM_STATUS_UNCHECKED)
+       {
+               r = listView.SetItemChecked(index, false);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+
+               r = __pGroupIndexMap->SetValue(__pGroupListPresentationModel->GetCategoryId(index), false);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set value", GetErrorMessage(r));
+       }
+
+       Footer* pFooter = GetFooter();
+
+       int modifiedItems = 0;
+       int itemCount = listView.GetItemCount();
+       for(int count = 0; count < itemCount; count++)
+       {
+               if(__pGroupListPresentationModel->IsContactInCategory(*__pGroupIdList, count) != listView.IsItemChecked(count))
+               {
+                       modifiedItems++;
+               }
+       }
+
+       if(modifiedItems > 0)
+       {
+               pFooter->SetItemEnabled(1, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(1, false);
+       }
+       pFooter->Invalidate(true);
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+result
+GroupSelectorForm::UpdateBottomLabel(void)
+{
+       int itemCount = __pListView->GetItemCount();
+       int selectedCount = 0;
+       bool isChecked = false;
+
+       for (int index = 0; index < itemCount; index++)
+       {
+               __pGroupIndexMap->GetValue(__pGroupListPresentationModel->GetCategoryId(index), isChecked);
+
+               if (isChecked == true)
+               {
+                       selectedCount++;
+               }
+       }
+
+       String selected = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       selected.Append(L" (");
+       selected.Append(selectedCount);
+       selected.Append(L")");
+       __pBottomLabel->SetText(selected);
+
+       if (selectedCount > 0)
+       {
+               __pBottomLabel->SetShowState(true);
+               __pListView->SetSize(__pListView->GetSize().width, GetClientAreaBounds().height - __pBottomLabel->GetHeight());
+       }
+       else
+       {
+               __pBottomLabel->SetShowState(false);
+               __pListView->SetSize(__pListView->GetSize().width, GetClientAreaBounds().height);
+       }
+
+       __pBottomLabel->Invalidate(false);
+
+       return E_SUCCESS;
+}
+
+void
+GroupSelectorForm::OnContactsChanged(void)
+{
+       if (__isDonePressed == false)
+       {
+               SceneManager *pSceneManager = SceneManager::GetInstance();
+               pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+       }
+
+       __isDonePressed = false;
+
+}
+
+void
+GroupSelectorForm::OnCategoriesChanged(void)
+{
+       __pListView->UpdateList();
+
+       for (int index = 0; index < __pListView->GetItemCount(); index++)
+       {
+               bool isChecked = false;
+
+               __pGroupIndexMap->GetValue(__pGroupListPresentationModel->GetCategoryId(index), isChecked);
+
+               if (isChecked == true)
+               {
+                       result r = __pListView->SetItemChecked(index, true);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+               }
+               else
+               {
+                       result r = __pListView->SetItemChecked(index, false);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item unchecked", GetErrorMessage(r));
+
+                       __pGroupIndexMap->Add(__pGroupListPresentationModel->GetCategoryId(index), false);
+               }
+       }
+
+       Footer* pFooter = GetFooter();
+
+       int modifiedItems = 0;
+       int itemCount = __pListView->GetItemCount();
+
+       for(int count = 0; count < itemCount; count++)
+       {
+               if(__pGroupListPresentationModel->IsContactInCategory(*__pGroupIdList, count) != __pListView->IsItemChecked(count))
+               {
+                       modifiedItems++;
+               }
+       }
+
+       if (pFooter != null)
+       {
+               if(modifiedItems > 0)
+               {
+                       pFooter->SetItemEnabled(1, true);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(1, false);
+               }
+
+               pFooter->Invalidate(true);
+       }
+
+       __pListView->Invalidate(true);
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnForeground(void)
+{
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnBackground(void)
+{
+}
diff --git a/src/CtGroupSelectorForm.cpp~ b/src/CtGroupSelectorForm.cpp~
new file mode 100644 (file)
index 0000000..8c91ddd
--- /dev/null
@@ -0,0 +1,446 @@
+//
+// 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       CtGroupSelectorForm.cpp
+ * @brief      This is the implementation file for the GroupSelectorForm class.
+ */
+
+#include <FApp.h>
+#include <FBase.h>
+#include "CtContactsApp.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtGroupSelectorForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_DONE = 11;
+static const int IDA_FOOTER_CANCEL = 12;
+static const int IDA_MORE_CREATE_GROUP = 13;
+
+static const int X_LIST_ITEM_TEXT_MARGIN = 36;
+
+GroupSelectorForm::GroupSelectorForm(void)
+ :__isDonePressed(false)
+ ,__pGroupListPresentationModel(null)
+ , __pListView(null)
+ , __pBottomLabel(null)
+ , __pOptionMenu(null)
+ , __pGroupIndexMap(null)
+ , __pGroupIdList(null)
+{
+}
+
+GroupSelectorForm::~GroupSelectorForm(void)
+{
+}
+
+void
+GroupSelectorForm::Initialize(void)
+{
+       Construct(L"IDL_GROUP_SELECTOR_FORM");
+}
+
+result
+GroupSelectorForm::OnInitializing(void)
+{
+       Footer* pFooter = GetFooter();
+       pFooter->SetItemEnabled(1, false);
+       pFooter->AddActionEventListener(*this);
+       SetFormBackEventListener(this);
+
+       __pGroupListPresentationModel = GroupListPresentationModel::GetInstance();
+       __pGroupListPresentationModel->AddGroupChangeListener(*this);
+
+       __pListView = static_cast<ListView*>(GetControl(L"IDC_LISTVIEW", false));
+       __pListView->SetItemProvider(*this);
+       __pListView->AddListViewItemEventListener(*this);
+
+       __pBottomLabel = static_cast<Label*>(GetControl(L"IDC_LABEL", false));
+
+       __pGroupIndexMap = new (std::nothrow) HashMapT<int, bool>();
+       __pGroupIndexMap->Construct(__pGroupListPresentationModel->GetCategoryCount());
+
+       __pOptionMenu = new (std::nothrow) OptionMenu();
+       __pOptionMenu->Construct();
+       __pOptionMenu->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"), IDA_MORE_CREATE_GROUP);
+       __pOptionMenu->AddActionEventListener(*this);
+       __pOptionMenu->SetShowState(false);
+
+       return E_SUCCESS;
+}
+
+result
+GroupSelectorForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pGroupIndexMap)
+       {
+               __pGroupIndexMap->RemoveAll();
+               delete __pGroupIndexMap;
+       }
+
+       if (__pGroupIdList)
+       {
+               __pGroupIdList->RemoveAll(true);
+               delete __pGroupIdList;
+       }
+
+       if (__pGroupListPresentationModel != null)
+       {
+               __pGroupListPresentationModel->RemoveGroupChangeListener(*this);
+       }
+
+       delete __pOptionMenu;
+
+       return r;
+}
+
+void
+GroupSelectorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       result r = E_SUCCESS;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ArrayList* pList = null;
+
+       switch (actionId)
+       {
+       case IDA_MORE_CREATE_GROUP:
+               {
+                       r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+                       TryCatch(r == E_SUCCESS, , "[%s] Unable to go forward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_FOOTER_DONE:
+               {
+                       __isDonePressed = true;
+                       pList = new (std::nothrow) ArrayList();
+                       pList->Construct(__pGroupIndexMap->GetCount());
+
+                       for (int i = 0; i < __pGroupListPresentationModel->GetCategoryCount(); i++)
+                       {
+                               bool categoryValue = false;
+                               RecordId categoryId = __pGroupListPresentationModel->GetCategoryId(i);
+
+                               __pGroupIndexMap->GetValue(categoryId, categoryValue);
+
+                               if (categoryValue)
+                               {
+                                       pList->Add(*(new (std::nothrow) Integer(categoryId)));
+                               }
+                       }
+
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), pList);
+                       TryCatch(r == E_SUCCESS, , "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryCatch(r == E_SUCCESS, ,"[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       default:
+               break;
+       }
+
+       return;
+
+CATCH:
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+       }
+
+       return;
+}
+
+void
+GroupSelectorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->AddContactsAppChangeEventListener(*this);
+
+       SetFormMenuEventListener(this);
+
+       if (pArgs == null)
+       {
+               return;
+       }
+
+       if (__pGroupIdList != null)
+       {
+               __pGroupIdList->RemoveAll(true);
+               delete __pGroupIdList;
+       }
+
+       __pGroupIdList = pArgs;
+
+       __pGroupIndexMap->RemoveAll();
+
+       int categoryCount = __pGroupListPresentationModel->GetCategoryCount();
+       for (int index = 0; index < categoryCount; index++)
+       {
+               if (__pGroupListPresentationModel->IsContactInCategory(*__pGroupIdList, index) == true)
+               {
+                       __pGroupIndexMap->Add(__pGroupListPresentationModel->GetCategoryId(index), true);
+               }
+               else
+               {
+                       __pGroupIndexMap->Add(__pGroupListPresentationModel->GetCategoryId(index), false);
+               }
+       }
+
+       __pListView->UpdateList();
+
+       for (int index = 0; index < __pListView->GetItemCount(); index++)
+       {
+               bool isChecked = false;
+
+               __pGroupIndexMap->GetValue(__pGroupListPresentationModel->GetCategoryId(index), isChecked);
+
+               if (isChecked == true)
+               {
+                       result r = __pListView->SetItemChecked(index, true);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+               }
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+       SetFormMenuEventListener(null);
+}
+
+void
+GroupSelectorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       SceneManager *pSceneManager = SceneManager::GetInstance();
+       pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+}
+
+void
+GroupSelectorForm::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
+{
+       __pOptionMenu->SetShowState(true);
+       __pOptionMenu->Show();
+}
+
+Tizen::Ui::Controls::ListItemBase*
+GroupSelectorForm::CreateItem(int index, int itemWidth)
+{
+       result r = E_SUCCESS;
+       String name;
+       Color textColor = Color::GetColor(COLOR_ID_BLACK);
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()),  LIST_ANNEX_STYLE_MARK);
+
+       name = __pGroupListPresentationModel->GetCategoryName(index);
+
+       r = pItem->AddElement(Rectangle(X_LIST_ITEM_TEXT_MARGIN/2, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), pContactsApp->GetListItemSingleLineHeight()), index, name, pContactsApp->GetFontSize(), textColor, textColor, textColor);
+       TryCatch(r == E_SUCCESS, , "[%s] Unable to add element", GetErrorMessage(r));
+
+       return pItem;
+
+CATCH:
+       delete pItem;
+       pItem = null;
+
+       return null;
+}
+
+bool
+GroupSelectorForm::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+
+       return true;
+}
+
+int
+GroupSelectorForm::GetItemCount(void)
+{
+       return __pGroupListPresentationModel->GetCategoryCount();
+}
+
+void
+GroupSelectorForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+}
+
+void
+GroupSelectorForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       result r = E_SUCCESS;
+
+       if (status == LIST_ITEM_STATUS_CHECKED)
+       {
+               r = listView.SetItemChecked(index, true);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+
+               r = __pGroupIndexMap->SetValue(__pGroupListPresentationModel->GetCategoryId(index), true);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set value", GetErrorMessage(r));
+       }
+       else if (status == LIST_ITEM_STATUS_UNCHECKED)
+       {
+               r = listView.SetItemChecked(index, false);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+
+               r = __pGroupIndexMap->SetValue(__pGroupListPresentationModel->GetCategoryId(index), false);
+               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set value", GetErrorMessage(r));
+       }
+
+       Footer* pFooter = GetFooter();
+
+       int modifiedItems = 0;
+       int itemCount = listView.GetItemCount();
+       for(int count = 0; count < itemCount; count++)
+       {
+               if(__pGroupListPresentationModel->IsContactInCategory(*__pGroupIdList, count) != listView.IsItemChecked(count))
+               {
+                       modifiedItems++;
+               }
+       }
+
+       if(modifiedItems > 0)
+       {
+               pFooter->SetItemEnabled(1, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(1, false);
+       }
+       pFooter->Invalidate(true);
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+result
+GroupSelectorForm::UpdateBottomLabel(void)
+{
+       int itemCount = __pListView->GetItemCount();
+       int selectedCount = 0;
+       bool isChecked = false;
+
+       for (int index = 0; index < itemCount; index++)
+       {
+               __pGroupIndexMap->GetValue(__pGroupListPresentationModel->GetCategoryId(index), isChecked);
+
+               if (isChecked == true)
+               {
+                       selectedCount++;
+               }
+       }
+
+       String selected = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
+       selected.Append(L" (");
+       selected.Append(selectedCount);
+       selected.Append(L")");
+       __pBottomLabel->SetText(selected);
+
+       if (selectedCount > 0)
+       {
+               __pBottomLabel->SetShowState(true);
+               __pListView->SetSize(__pListView->GetSize().width, GetClientAreaBounds().height - __pBottomLabel->GetHeight());
+       }
+       else
+       {
+               __pBottomLabel->SetShowState(false);
+               __pListView->SetSize(__pListView->GetSize().width, GetClientAreaBounds().height);
+       }
+
+       __pBottomLabel->Invalidate(false);
+
+       return E_SUCCESS;
+}
+
+void
+GroupSelectorForm::OnContactsChanged(void)
+{
+       if (__isDonePressed == false)
+       {
+               SceneManager *pSceneManager = SceneManager::GetInstance();
+               pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+       }
+
+       __isDonePressed = false;
+
+}
+
+void
+GroupSelectorForm::OnCategoriesChanged(void)
+{
+       __pListView->UpdateList();
+
+       for (int index = 0; index < __pListView->GetItemCount(); index++)
+       {
+               bool isChecked = false;
+
+               __pGroupIndexMap->GetValue(__pGroupListPresentationModel->GetCategoryId(index), isChecked);
+
+               if (isChecked == true)
+               {
+                       result r = __pListView->SetItemChecked(index, true);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item checked", GetErrorMessage(r));
+               }
+               else
+               {
+                       result r = __pListView->SetItemChecked(index, false);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set item unchecked", GetErrorMessage(r));
+
+                       __pGroupIndexMap->Add(__pGroupListPresentationModel->GetCategoryId(index), false);
+               }
+       }
+
+       __pListView->Invalidate(true);
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnForeground(void)
+{
+       UpdateBottomLabel();
+}
+
+void
+GroupSelectorForm::OnBackground(void)
+{
+}
diff --git a/src/CtMainForm.cpp b/src/CtMainForm.cpp
new file mode 100644 (file)
index 0000000..3ab905b
--- /dev/null
@@ -0,0 +1,176 @@
+//
+// 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       CtMainForm.cpp
+ * @brief      This is the implementation file for the MainForm class.
+ */
+
+#include <FApp.h>
+#include "CtContactsApp.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+static const int IDA_HEADER_CONTACTS = 10;
+static const int IDA_HEADER_GROUPS = 11;
+static const int IDA_HEADER_FAVORITES = 12;
+
+static const wchar_t* IDB_TAB_ICON_CONTACTS = L"C02_tab_icon_contacts.png";
+static const wchar_t* IDB_TAB_ICON_GROUPS = L"C02_tab_icon_groups.png";
+static const wchar_t* IDB_TAB_ICON_FAVORITES = L"C02_tab_icon_favourites.png";
+static const wchar_t* IDB_TAB_ICON_CONTACTS_PRESSED = L"C02_tab_icon_contacts_press.png";
+static const wchar_t* IDB_TAB_ICON_GROUPS_PRESSED = L"C02_tab_icon_groups_press.png";
+static const wchar_t* IDB_TAB_ICON_FAVORITES_PRESSED = L"C02_tab_icon_favourites_press.png";
+
+MainForm::MainForm(void)
+{
+}
+
+MainForm::~MainForm(void)
+{
+}
+
+void
+MainForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
+}
+
+result
+MainForm::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+
+       Header* pHeader = GetHeader();
+
+       r = pHeader->SetStyle(HEADER_STYLE_TAB);
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+
+       r = pHeader->SetTabEditModeEnabled(false);
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+
+       HeaderItem headerContacts;
+       headerContacts.Construct(IDA_HEADER_CONTACTS);
+       r = headerContacts.SetText(ResourceManager::GetString(L"IDS_COM_BODY_CONTACTS"));
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+
+       headerContacts.SetIcon(HEADER_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_TAB_ICON_CONTACTS));
+       headerContacts.SetIcon(HEADER_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_TAB_ICON_CONTACTS_PRESSED));
+
+       HeaderItem headerGroups;
+       headerGroups.Construct(IDA_HEADER_GROUPS);
+       r = headerGroups.SetText(ResourceManager::GetString(L"IDS_PB_BODY_GROUPS"));
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+
+       headerGroups.SetIcon(HEADER_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_TAB_ICON_GROUPS));
+       headerGroups.SetIcon(HEADER_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_TAB_ICON_GROUPS_PRESSED));
+
+       HeaderItem headerFavorites;
+       headerFavorites.Construct(IDA_HEADER_FAVORITES);
+       r = headerFavorites.SetText(ResourceManager::GetString(L"IDS_PB_ITAB4_FAVOURITES"));
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+
+       headerFavorites.SetIcon(HEADER_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_TAB_ICON_FAVORITES));
+       headerFavorites.SetIcon(HEADER_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_TAB_ICON_FAVORITES_PRESSED));
+
+       r = pHeader->AddItem(headerContacts);
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+       r = pHeader->AddItem(headerGroups);
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+       r = pHeader->AddItem(headerFavorites);
+       if (r != E_SUCCESS)
+       {
+               return r;
+       }
+
+       SetFormBackEventListener(this);
+
+       __clientBounds = GetClientAreaBoundsF();
+
+       return r;
+}
+
+result
+MainForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       return r;
+}
+
+void
+MainForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to cast UiApp to ContactsApp");
+
+       if (pContactsApp->GetOperationId().Equals(OPERATION_ID_PICK, true))
+       {
+               result r = AppControlProviderManager::GetInstance()->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_CANCELED, null);
+               AppLogDebug("[%s] The return result from SendAppControlResult().", GetErrorMessage(r));
+               UiApp::GetInstance()->Terminate();
+               return;
+       }
+
+       SceneManager *pSceneManager = SceneManager::GetInstance();
+       SceneId curSceneId = pSceneManager->GetCurrentSceneId();
+
+       if (curSceneId == IDSCN_CONTACT_LIST || curSceneId == IDSCN_FAVORITE_LIST || curSceneId == IDSCN_GROUP_LIST)
+       {
+               UiApp::GetInstance()->Terminate();
+       }
+       else if (SceneManager::GetInstance()->GoBackward(BackwardSceneTransition()) != E_SUCCESS)
+       {
+               UiApp::GetInstance()->Terminate();
+       }
+}
+
+FloatRectangle
+MainForm::GetClientBounds()
+{
+
+       return __clientBounds;
+}
\ No newline at end of file
diff --git a/src/CtMainFrame.cpp b/src/CtMainFrame.cpp
new file mode 100644 (file)
index 0000000..49c08d2
--- /dev/null
@@ -0,0 +1,56 @@
+//
+// 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       CtMainFrame.cpp
+ * @brief      This is the implementation file for the MainFrame class.
+ */
+
+#include "CtContactsApp.h"
+#include "CtMainFrame.h"
+#include "CtSceneRegister.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Ui::Scenes;
+
+MainFrame::MainFrame(void)
+{
+}
+
+MainFrame::~MainFrame(void)
+{
+}
+
+result
+MainFrame::OnInitializing(void)
+{
+       result r = SceneRegister::RegisterAllScenes();
+       TryReturn(r == E_SUCCESS, r, "[%s] Scene registering failed", GetErrorMessage(r));
+
+       ContactsApp* pApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       r = SceneManager::GetInstance()->GoForward(ForwardSceneTransition(pApp->GetInitialSceneId()), pApp->GetArguments());
+       TryReturn(r == E_SUCCESS, r, "[%s] Scene transition failed", GetErrorMessage(r));
+
+       return r;
+}
+
+result
+MainFrame::OnTerminating(void)
+{
+       return E_SUCCESS;
+}
+
diff --git a/src/CtPanelFactory.cpp b/src/CtPanelFactory.cpp
new file mode 100644 (file)
index 0000000..58a3335
--- /dev/null
@@ -0,0 +1,115 @@
+//
+// 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       CtPanelFactory.cpp
+ * @brief      This is the implementation file for the PanelFactory class.
+ */
+
+#include "CtContactListEditorPanel.h"
+#include "CtContactListPanel.h"
+#include "CtFavoriteListEditorPanel.h"
+#include "CtFavoriteListPanel.h"
+#include "CtGroupListPanel.h"
+#include "CtGroupListEditorPanel.h"
+#include "CtPanelFactory.h"
+#include "CtTypes.h"
+
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+PanelFactory::PanelFactory(void)
+{
+}
+
+PanelFactory::~PanelFactory(void)
+{
+}
+
+Tizen::Ui::Controls::Panel*
+PanelFactory::CreatePanelN(const Tizen::Base::String& panelId, const Tizen::Ui::Scenes::SceneId& sceneId)
+{
+       result r = E_SUCCESS;
+
+       Panel* pNewPanel= null;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       if (panelId == IDC_PANEL_CONTACT_LIST)
+       {
+               ContactListPanel* pPanel = new (std::nothrow) ContactListPanel();
+               pPanel->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pPanel);
+               TryCatch(r == E_SUCCESS, delete pPanel, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewPanel = pPanel;
+       }
+       else if (panelId == IDC_PANEL_CONTACT_LIST_EDITOR)
+       {
+               ContactListEditorPanel* pPanel = new (std::nothrow) ContactListEditorPanel();
+               pPanel->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pPanel);
+               TryCatch(r == E_SUCCESS, delete pPanel, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewPanel = pPanel;
+       }
+       else if (panelId == IDC_PANEL_GROUP_LIST)
+       {
+               GroupListPanel* pPanel = new (std::nothrow) GroupListPanel();
+               pPanel->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pPanel);
+               TryCatch(r == E_SUCCESS, delete pPanel, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewPanel = pPanel;
+       }
+       else if (panelId == IDC_PANEL_GROUP_LIST_EDITOR)
+       {
+               GroupListEditorPanel* pPanel = new (std::nothrow) GroupListEditorPanel();
+               pPanel->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pPanel);
+               TryCatch(r == E_SUCCESS, delete pPanel, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewPanel = pPanel;
+       }
+       else if (panelId == IDC_PANEL_FAVORITE_LIST)
+       {
+               FavoriteListPanel* pPanel = new (std::nothrow) FavoriteListPanel();
+               pPanel->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pPanel);
+               TryCatch(r == E_SUCCESS, delete pPanel, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewPanel = pPanel;
+       }
+       else if (panelId == IDC_PANEL_FAVORITE_LIST_EDITOR)
+       {
+               FavoriteListEditorPanel* pPanel = new (std::nothrow) FavoriteListEditorPanel();
+               pPanel->Initialize();
+
+               r = pSceneManager->AddSceneEventListener(sceneId, *pPanel);
+               TryCatch(r == E_SUCCESS, delete pPanel, "[%s] Unable to add scene event listener", GetErrorMessage(r));
+
+               pNewPanel = pPanel;
+       }
+
+       return pNewPanel;
+
+CATCH:
+       return null;
+}
diff --git a/src/CtResourceManager.cpp b/src/CtResourceManager.cpp
new file mode 100644 (file)
index 0000000..f98b71f
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// 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       CtResourceManager.cpp
+ * @brief      This is the implementation file for the ResourceManager class.
+ */
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FGraphics.h>
+#include "CtResourceManager.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+
+Tizen::Graphics::Bitmap*
+ResourceManager::GetBitmapN(const Tizen::Base::String& id)
+{
+       AppResource* pAppResource = Application::GetInstance()->GetAppResource();
+       if (pAppResource == null)
+       {
+               AppLog("Unable to get app resource.");
+               return null;
+       }
+
+       return pAppResource->GetBitmapN(id);
+}
+
+Tizen::Base::String
+ResourceManager::GetString(const Tizen::Base::String& id)
+{
+       AppResource* pAppResource = Application::GetInstance()->GetAppResource();
+       if (pAppResource == null)
+       {
+               AppLog("Unable to get app resource.");
+               return null;
+       }
+
+       String str;
+       pAppResource->GetString(id, str);
+       return str;
+}
diff --git a/src/CtSceneRegister.cpp b/src/CtSceneRegister.cpp
new file mode 100644 (file)
index 0000000..86ff213
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// 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       CtSceneRegister.cpp
+ * @brief      This is the implementation file for the SceneRegister class.
+ */
+
+#include <FUi.h>
+#include "CtFormFactory.h"
+#include "CtPanelFactory.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::Ui::Scenes;
+
+SceneRegister::SceneRegister()
+{
+}
+
+SceneRegister::~SceneRegister()
+{
+}
+
+result
+SceneRegister::RegisterAllScenes(void)
+{
+       result r = E_SUCCESS;
+
+       static const wchar_t* PANEL_BLANK = L"";
+       static FormFactory formFactory;
+       static PanelFactory panelFactory;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       r |= pSceneManager->RegisterFormFactory(formFactory);
+       r |= pSceneManager->RegisterPanelFactory(panelFactory);
+       r |= pSceneManager->RegisterScene(IDSCN_CONTACT_LIST, IDC_FORM_MAIN, IDC_PANEL_CONTACT_LIST);
+       r |= pSceneManager->RegisterScene(IDSCN_CONTACT_LIST_EDITOR, IDC_FORM_MAIN, IDC_PANEL_CONTACT_LIST_EDITOR);
+       r |= pSceneManager->RegisterScene(IDSCN_CONTACT_DETAILS, IDC_FORM_CONTACT_DETAILS, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_CONTACT_EDITOR, IDC_FORM_CONTACT_EDITOR, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_CONTACT_SELECTOR, IDC_FORM_CONTACT_SELECTOR, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_GROUP_LIST, IDC_FORM_MAIN, IDC_PANEL_GROUP_LIST);
+       r |= pSceneManager->RegisterScene(IDSCN_GROUP_LIST_EDITOR, IDC_FORM_MAIN, IDC_PANEL_GROUP_LIST_EDITOR);
+       r |= pSceneManager->RegisterScene(IDSCN_GROUP_SELECTOR, IDC_FORM_GROUP_SELECTOR, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_GROUP_EDITOR, IDC_FORM_GROUP_EDITOR, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_GROUP_CONTACT_LIST, IDC_FORM_GROUP_CONTACT_LIST, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_GROUP_CONTACT_LIST_EDITOR, IDC_FORM_GROUP_CONTACT_LIST_EDITOR, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_SETTINGS, IDC_FORM_SETTINGS, PANEL_BLANK);
+       r |= pSceneManager->RegisterScene(IDSCN_FAVORITE_LIST, IDC_FORM_MAIN, IDC_PANEL_FAVORITE_LIST);
+       r |= pSceneManager->RegisterScene(IDSCN_FAVORITE_LIST_EDITOR, IDC_FORM_MAIN, IDC_PANEL_FAVORITE_LIST_EDITOR);
+
+       return r;
+}
+
+
+
+
+
+
diff --git a/src/CtSearchListEventListener.cpp b/src/CtSearchListEventListener.cpp
new file mode 100644 (file)
index 0000000..f4f3d94
--- /dev/null
@@ -0,0 +1,178 @@
+//
+// 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       CtSearchListEventListener.cpp
+ * @brief      This is the implementation file for the SearchListEventListener class.
+ */
+
+#include "CtContactListPresentationModel.h"
+#include "CtContactsApp.h"
+#include "CtResourceManager.h"
+#include "CtSearchListEventListener.h"
+#include "CtSearchListItem.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+
+static const int IDA_LIST_ELEMENT_DELETE = 40;
+static const int IDA_LIST_ELEMENT_CALL = 41;
+static const int IDA_LIST_ELEMENT_MESSAGE = 42;
+static const int IDA_LIST_ELEMENT_VIDEO_CALL = 43;
+
+
+static const unsigned int COLOR_DELETE_ELEMENT_NORMAL = Color32<208, 82, 82>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_PRESSED = Color32<194, 71, 71>::Value;
+static const unsigned int COLOR_DELETE_ELEMENT_TEXT = Color32<248, 246, 239>::Value;
+
+static const int H_GROUP_ITEM = 76;
+static const int H_ITEM = 112;
+static const int X_LIST_ITEM_TEXT_MARGIN = 32;
+
+SearchListEventListener::SearchListEventListener(ListAnnexStyle itemAnnexStyle, ContactListPresentationModel* pContactListPresentationModel)
+: __pContactListPresentationModel(pContactListPresentationModel)
+, __itemAnnexStyle(itemAnnexStyle)
+, __showDeleteOption(true)
+{
+}
+
+SearchListEventListener::~SearchListEventListener(void)
+{
+}
+
+int
+SearchListEventListener::GetGroupCount(void)
+{
+       if (__pContactListPresentationModel->GetSearchedContactCount() != 0)
+       {
+               return 1;
+       }
+       else
+       {
+               return 0;
+       }
+}
+
+int
+SearchListEventListener::GetItemCount(int groupIndex)
+{
+       return __pContactListPresentationModel->GetSearchedContactCount();
+}
+
+Tizen::Ui::Controls::ListItemBase*
+SearchListEventListener::CreateItem(int groupIndex, int itemIndex, int itemWidth)
+{
+       String name;
+       String phoneNumber;
+       Bitmap* pThumbnail = null;
+       CustomItem* pItem = null;
+       SearchListItem* pCustomElement = null;
+       int searchItemWidth = itemWidth;
+       int groupItemMainIndex = 0;
+       int ItemMainIndex = 0;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (__itemAnnexStyle == LIST_ANNEX_STYLE_MARK)
+       {
+               searchItemWidth -= (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN);
+       }
+       __pContactListPresentationModel->GetSearchedContactItemInfo(itemIndex, name, pThumbnail);
+
+       pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM + pContactsApp->GetFontHeightOffset()), __itemAnnexStyle);
+
+       pCustomElement = new (std::nothrow) SearchListItem(name, pThumbnail, __pContactListPresentationModel->GetSearchText());
+
+       pItem->AddElement(Rectangle(0, 0, searchItemWidth, H_ITEM + pContactsApp->GetFontHeightOffset()), 0, *(static_cast<ICustomElement *>(pCustomElement)));
+
+
+       if (pContactsApp->GetOperationId().IsEmpty() == false || __itemAnnexStyle == LIST_ANNEX_STYLE_MARK)
+       {
+               return pItem;
+       }
+
+       __pContactListPresentationModel->GetItemMainIndex(itemIndex, groupItemMainIndex, ItemMainIndex);
+
+       bool isCallEnabled = true;
+       bool isMessageEnabled = true;
+       if (__pContactListPresentationModel->GetDefaultPhoneNumber(groupItemMainIndex, ItemMainIndex).IsEmpty())
+       {
+               isCallEnabled = false;
+       }
+
+       if ((__pContactListPresentationModel->GetDefaultPhoneNumber(groupItemMainIndex, ItemMainIndex).IsEmpty()) && (__pContactListPresentationModel->GetDefaultEmail(groupItemMainIndex, ItemMainIndex).IsEmpty()))
+       {
+               isMessageEnabled = false;
+       }
+
+       ListContextItem* pItemContext = new (std::nothrow) ListContextItem();
+       pItemContext->Construct();
+       pItemContext->AddElement(IDA_LIST_ELEMENT_CALL, ResourceManager::GetString(L"IDS_COM_BODY_CALL"), isCallEnabled);
+       pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), isMessageEnabled);
+#if __SUPPORT_VIDEO_CALL
+       pItemContext->AddElement(IDA_LIST_ELEMENT_VIDEO_CALL, ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), isCallEnabled);
+#endif
+       if (__showDeleteOption == true)
+       {
+               pItemContext->AddElement(IDA_LIST_ELEMENT_DELETE, ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+       }
+       pItemContext->SetElementBackgroundColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL, COLOR_DELETE_ELEMENT_NORMAL);
+       pItemContext->SetElementBackgroundColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED, COLOR_DELETE_ELEMENT_PRESSED);
+       pItemContext->SetElementTextColor(IDA_LIST_ELEMENT_DELETE, LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL, COLOR_DELETE_ELEMENT_TEXT);
+
+       pItem->SetContextItem(pItemContext);
+
+       return pItem;
+}
+
+Tizen::Ui::Controls::GroupItem*
+SearchListEventListener::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       GroupItem* pItem = new (std::nothrow) GroupItem();
+       pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+       pItem->SetElement(ResourceManager::GetString("IDS_COM_BODY_CONTACTS") + L" (" + Integer::ToString(__pContactListPresentationModel->GetSearchedContactCount()) + L")");
+
+       return pItem;
+}
+
+bool
+SearchListEventListener::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
+       pCustomItem->RemoveAllElements();
+
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+SearchListEventListener::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+void
+SearchListEventListener::SetShowDeleteOption(bool showDeleteOption)
+{
+       __showDeleteOption = showDeleteOption;
+}
diff --git a/src/CtSearchListItem.cpp b/src/CtSearchListItem.cpp
new file mode 100644 (file)
index 0000000..d8c4420
--- /dev/null
@@ -0,0 +1,184 @@
+//
+// 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       CtSearchListItem.cpp
+ * @brief      This is the implementation file for the SearchListItem class.
+ */
+
+#include "CtContactsApp.h"
+#include "CtSearchListItem.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+
+static const int W_THUMBNAIL_AREA = 134;
+static const int Y_THUMBNAIL = 2;
+static const int W_THUMBNAIL = 108;
+static const int H_THUMBNAIL = 108;
+static const int X_TEXT = 26;
+static const int H_TEXT = 80;
+static const int Y_TEXT = 16;
+
+static const unsigned int COLOR_TEXT_NORMAL = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_TEXT_PRESSED = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_SEARCHED_TEXT = Color32<59, 115, 182>::Value;
+
+SearchListItem::SearchListItem(const Tizen::Base::String& name, Tizen::Graphics::Bitmap* pThumbnail, const Tizen::Base::String& searchedText)
+: __name(name)
+, __searchedText(searchedText)
+, __pThumbnail(pThumbnail)
+{
+}
+
+SearchListItem::~SearchListItem(void)
+{
+}
+
+Tizen::Graphics::EnrichedText*
+SearchListItem::GetDisplayEnrichedTextN(const Tizen::Graphics::Rectangle& rect, const Tizen::Base::String& text, Tizen::Ui::Controls::ListItemDrawingStatus itemStatus, bool isSearchingTextVisible)
+{
+       int searchedTextIndex = 0;
+       String preSearchedText;
+       String searchedText;
+       String postSearchedText;
+       String displayNameText;
+       EnrichedText* pEnrichedText = null;
+       TextElement* pSearchedTextElement = null;
+       TextElement* pPreNameTextElement = null;
+       TextElement* pPostNameTextElement = null;
+       Color textColor;
+       Color searchedTextColor;
+       Font font;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       font.Construct(FONT_STYLE_PLAIN, pContactsApp->GetFontSize());
+
+       pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(Dimension(rect.width - (rect.x + X_TEXT + W_THUMBNAIL_AREA), rect.height));
+       pEnrichedText->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedText->SetTextWrapStyle(TEXT_WRAP_CHARACTER_WRAP);
+       pEnrichedText->SetTextAbbreviationEnabled(true);
+
+       if (itemStatus == LIST_ITEM_DRAWING_STATUS_NORMAL)
+       {
+               textColor = COLOR_TEXT_NORMAL;
+               searchedTextColor = COLOR_SEARCHED_TEXT;
+       }
+       else if (itemStatus == LIST_ITEM_DRAWING_STATUS_PRESSED)
+       {
+               textColor = COLOR_TEXT_PRESSED;
+               searchedTextColor = COLOR_TEXT_PRESSED;
+       }
+
+       if (isSearchingTextVisible == false)
+       {
+               if (text.GetLength() > 0)
+               {
+                       pSearchedTextElement = new (std::nothrow) TextElement();
+                       pSearchedTextElement->Construct(text);
+                       pSearchedTextElement->SetTextColor(textColor);
+                       pSearchedTextElement->SetFont(font);
+                       pEnrichedText->Add(*pSearchedTextElement);
+               }
+
+               return pEnrichedText;
+       }
+
+       text.ToLowerCase(displayNameText);
+       displayNameText.IndexOf(__searchedText, 0, searchedTextIndex);
+
+       if (searchedTextIndex == -1)
+       {
+               preSearchedText = text;
+       }
+       else
+       {
+               text.SubString(0, searchedTextIndex, preSearchedText);
+               text.SubString(searchedTextIndex, __searchedText.GetLength(), searchedText);
+               text.SubString(searchedTextIndex + __searchedText.GetLength(), text.GetLength() - (searchedTextIndex + __searchedText.GetLength()), postSearchedText);
+       }
+
+       if (preSearchedText.GetLength() > 0)
+       {
+               pPreNameTextElement = new (std::nothrow) TextElement();
+               pPreNameTextElement->Construct(preSearchedText);
+               pPreNameTextElement->SetTextColor(textColor);
+               pPreNameTextElement->SetFont(font);
+
+               pEnrichedText->Add(*pPreNameTextElement);
+       }
+
+       if (searchedText.GetLength() > 0)
+       {
+               pSearchedTextElement = new (std::nothrow) TextElement();
+               pSearchedTextElement->Construct(searchedText);
+               pSearchedTextElement->SetTextColor(searchedTextColor);
+               pSearchedTextElement->SetFont(font);
+
+               pEnrichedText->Add(*pSearchedTextElement);
+       }
+
+       if (postSearchedText.GetLength() > 0)
+       {
+               pPostNameTextElement = new (std::nothrow) TextElement();
+               pPostNameTextElement->Construct(postSearchedText);
+               pPostNameTextElement->SetTextColor(textColor);
+               pPostNameTextElement->SetFont(font);
+
+               pEnrichedText->Add(*pPostNameTextElement);
+       }
+
+       return pEnrichedText;
+}
+
+bool
+SearchListItem::OnDraw(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& rect, Tizen::Ui::Controls::ListItemDrawingStatus itemStatus)
+{
+       result r = E_SUCCESS;
+       bool ret = true;
+       EnrichedText* pEnrichedText = null;
+       Rectangle enrichedTextBounds = rect;
+       Font font;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       font.Construct(FONT_STYLE_PLAIN, pContactsApp->GetFontSize());
+       canvas.SetFont(font);
+
+       enrichedTextBounds.height = H_TEXT + pContactsApp->GetFontHeightOffset();
+       pEnrichedText = GetDisplayEnrichedTextN(enrichedTextBounds, __name, itemStatus);
+
+       r = canvas.DrawText(Point(rect.x + X_TEXT, Y_TEXT), *pEnrichedText);
+       TryCatch(r == E_SUCCESS, ret = false, "Unable to draw text.");
+
+       if (__pThumbnail != null)
+       {
+               r = canvas.DrawBitmap(Rectangle(rect.width - W_THUMBNAIL_AREA, (pContactsApp->GetListItemSingleLineHeight() - H_THUMBNAIL)/2 , W_THUMBNAIL, H_THUMBNAIL), *__pThumbnail);
+               TryCatch(r == E_SUCCESS, ret = false, "Unable to draw a thumbnail.");
+       }
+
+CATCH:
+       if (pEnrichedText != null)
+       {
+               pEnrichedText->RemoveAllTextElements(true);
+               delete pEnrichedText;
+       }
+
+       return ret;
+}
diff --git a/src/CtSettingsForm.cpp b/src/CtSettingsForm.cpp
new file mode 100644 (file)
index 0000000..4de0a9d
--- /dev/null
@@ -0,0 +1,486 @@
+//
+// 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       CtSettingsForm.cpp
+ * @brief      This is the implementation file for the SettingsForm class.
+ */
+
+#include <FApp.h>
+#include <FSystem.h>
+#include "CtContactsApp.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtSettingsForm.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::System;
+
+static const int H_ITEM_MAIN = 140;
+static const int H_ITEM_SUB = 112;
+static const int X_TEXT = 26;
+static const int Y_TEXT_ITEM_TITLE = 10;
+static const int H_TEXT_ITEM_TITLE = 64;
+static const int Y_TEXT_ITEM_SELECTED = 80;
+static const int H_TEXT_ITEM_SELECTED = 42;
+static const int Y_SUB_TEXT = 30;
+static const int W_EXPAND = 72;
+static const int W_EXPAND_MARGIN = 20;
+static const int INDEX_FIRST_NAME = 1;
+static const int INDEX_LAST_NAME = 2;
+
+static const unsigned int COLOR_TEXT_ITEM_TITLE = Color32<0, 0, 0>::Value;
+static const unsigned int COLOR_TEXT_ITEM_SELECTED = Color32<59, 115, 182>::Value;
+static const unsigned int COLOR_ITEM_PRESSED = Color32<248, 246, 239>::Value;
+
+static const int FONT_SIZE_ITEM_SELECTED = 32;
+
+static const wchar_t* IDB_EXPAND_OPENED = L"00_button_expand_opened.png";
+static const wchar_t* IDB_EXPAND_CLOSED = L"00_button_expand_closed.png";
+
+static const wchar_t* SETTING_KEY_FIRST_NAME = L"http://tizen.org/setting/contacts.order.firstname";
+static const wchar_t* SETTING_LABEL_TITLE = L"SettingLabelTitle";
+static const wchar_t* SETTING_LABEL_VALUE = L"SettingLabelValue";
+static const wchar_t* SETTING_TABLEVIEW_ITEM = L"SettingTableViewItem";
+
+SettingsForm::SettingsForm(void)
+: __pTableView(null)
+, __isExpanded(false)
+, __isFirstNameFirst(false)
+{
+}
+
+SettingsForm::~SettingsForm(void)
+{
+}
+
+void
+SettingsForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER);
+}
+
+result
+SettingsForm::OnInitializing(void)
+{
+       Header* pHeader = GetHeader();
+       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_SETTINGS"));
+       SettingInfo::AddSettingEventListener(*this);
+
+       SetFormBackEventListener(this);
+
+       __pTableView = new (std::nothrow) TableView();
+       __pTableView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height), true, TABLE_VIEW_SCROLL_BAR_STYLE_NONE);
+       __pTableView->AddTableViewItemEventListener(*this);
+       __pTableView->SetItemProvider(this);
+
+       AddControl(__pTableView);
+
+       SettingInfo::GetValue(SETTING_KEY_FIRST_NAME, __isFirstNameFirst);
+
+       return E_SUCCESS;
+}
+
+result
+SettingsForm::OnTerminating(void)
+{
+       SettingInfo::RemoveSettingEventListener(*this);
+       return E_SUCCESS;
+}
+
+void
+SettingsForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+}
+
+void
+SettingsForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_CONFIGURE)
+       {
+               UiApp* pApp = UiApp::GetInstance();
+               pApp->Terminate();
+       }
+       else
+       {
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+       }
+}
+
+int
+SettingsForm::GetItemCount(void)
+{
+       return 1;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+SettingsForm::CreateItem(int itemIndex, int itemWidth)
+{
+       TableViewItem* pItem = null;
+
+       ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (itemIndex == 0)
+       {
+               pItem = new (std::nothrow) TableViewItem();
+               pItem->Construct(Dimension(itemWidth, H_ITEM_MAIN + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+               pItem->AddTouchEventListener(*this);
+               pItem->AddKeyEventListener(*this);
+               pItem->SetName(SETTING_TABLEVIEW_ITEM);
+
+               Label* pTitle = new (std::nothrow) Label();
+               pTitle->Construct(Rectangle(X_TEXT, Y_TEXT_ITEM_TITLE, itemWidth - W_EXPAND, H_TEXT_ITEM_TITLE + pContactsApp->GetFontHeightOffset()), ResourceManager::GetString(L"IDS_PB_BODY_ORDER_OF_DISPLAY_NAME"));
+               pTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pTitle->SetTextColor(COLOR_TEXT_ITEM_TITLE);
+               pTitle->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+               pTitle->AddTouchEventListener(*this);
+               pTitle->SetName(SETTING_LABEL_TITLE);
+
+               String selectedItem;
+               if (__isFirstNameFirst)
+               {
+                       selectedItem = ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME_FIRST");
+               }
+               else
+               {
+                       selectedItem = ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME_FIRST_ABB");
+               }
+
+               Label* pValue = new (std::nothrow) Label();
+               pValue->Construct(Rectangle(X_TEXT, Y_TEXT_ITEM_SELECTED + pContactsApp->GetFontHeightOffset(), itemWidth - W_EXPAND, H_TEXT_ITEM_SELECTED ), selectedItem);
+               pValue->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pValue->SetTextColor(COLOR_TEXT_ITEM_SELECTED);
+               pValue->SetTextConfig(FONT_SIZE_ITEM_SELECTED, LABEL_TEXT_STYLE_NORMAL);
+               pValue->AddTouchEventListener(*this);
+               pValue->SetName(SETTING_LABEL_VALUE);
+
+               Label* pExpand = new (std::nothrow) Label();
+               pExpand->Construct(Rectangle(itemWidth - W_EXPAND - W_EXPAND_MARGIN, (H_ITEM_MAIN  + pContactsApp->GetFontHeightOffset() - W_EXPAND) / 2, W_EXPAND, W_EXPAND), L"");
+               Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_CLOSED);
+               if (pBitmap != null)
+               {
+                       pExpand->SetBackgroundBitmap(*pBitmap);
+                       delete pBitmap;
+               }
+
+               pItem->AddControl(pTitle);
+               pItem->AddControl(pValue);
+               pItem->AddControl(pExpand);
+       }
+       else
+       {
+               if (__isExpanded)
+               {
+                       String nameOrder;
+                       if (itemIndex == INDEX_FIRST_NAME)
+                       {
+                               nameOrder = ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME_FIRST");
+                       }
+                       else if (itemIndex == INDEX_LAST_NAME)
+                       {
+                               nameOrder = ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME_FIRST_ABB");
+                       }
+
+                       pItem = new (std::nothrow) TableViewItem();
+                       pItem->Construct(Dimension(itemWidth, H_ITEM_SUB + pContactsApp->GetFontHeightOffset()), TABLE_VIEW_ANNEX_STYLE_RADIO);
+
+                       Label* pOrder = new (std::nothrow) Label();
+                       pOrder->Construct(Rectangle(0, Y_SUB_TEXT, itemWidth - W_EXPAND - 2 * W_EXPAND_MARGIN, H_TEXT_ITEM_TITLE + pContactsApp->GetFontHeightOffset()), nameOrder);
+                       pOrder->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+                       pOrder->SetTextColor(COLOR_TEXT_ITEM_TITLE);
+                       pOrder->SetTextConfig(pContactsApp->GetFontSize(), LABEL_TEXT_STYLE_NORMAL);
+
+                       pItem->AddControl(pOrder);
+               }
+       }
+
+       return pItem;
+}
+
+bool
+SettingsForm::DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       delete pItem;
+       return true;
+}
+
+void
+SettingsForm::UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       Label* pOrder = static_cast<Label*>(pItem->GetControl(1));
+       String selectedItem;
+       if (__isFirstNameFirst)
+       {
+               selectedItem = ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME_FIRST");
+       }
+       else
+       {
+               selectedItem = ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME_FIRST_ABB");
+       }
+       pOrder->SetText(selectedItem);
+
+       Label* pExpand = static_cast<Label*>(pItem->GetControl(2));
+       Bitmap* pBitmap = null;
+       if (__isExpanded)
+       {
+               pBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_OPENED);
+       }
+       else
+       {
+               pBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_CLOSED);
+       }
+
+       if (pBitmap != null)
+       {
+               pExpand->SetBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+
+       pOrder->Invalidate(false);
+       pExpand->Invalidate(false);
+}
+
+int
+SettingsForm::GetDefaultItemHeight(void)
+{
+       return H_ITEM_MAIN;
+}
+
+void
+SettingsForm::OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
+{
+       result r = E_SUCCESS;
+
+       if (itemIndex == 0)
+       {
+               __isExpanded ? __isExpanded = false : __isExpanded = true;
+
+               if (__isExpanded)
+               {
+                       __pTableView->RefreshItem(INDEX_FIRST_NAME, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+                       __pTableView->RefreshItem(INDEX_LAST_NAME, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
+               }
+               else
+               {
+                       __pTableView->RefreshItem(INDEX_LAST_NAME, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+                       __pTableView->RefreshItem(INDEX_FIRST_NAME, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+               }
+       }
+       else if (itemIndex == INDEX_FIRST_NAME)
+       {
+               __isFirstNameFirst = true;
+               r = SettingInfo::SetValue(SETTING_KEY_FIRST_NAME, true);
+       }
+       else if (itemIndex == INDEX_LAST_NAME)
+       {
+               __isFirstNameFirst = false;
+               r = SettingInfo::SetValue(SETTING_KEY_FIRST_NAME, false);
+       }
+
+       __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       if (__isFirstNameFirst == true)
+       {
+               __pTableView->SetItemChecked(INDEX_FIRST_NAME, true);
+               __pTableView->SetItemChecked(INDEX_LAST_NAME, false);
+       }
+       else
+       {
+               __pTableView->SetItemChecked(INDEX_FIRST_NAME, false);
+               __pTableView->SetItemChecked(INDEX_LAST_NAME, true);
+       }
+
+       __pTableView->Invalidate(true);
+}
+
+void
+SettingsForm::OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
+{
+}
+
+void
+SettingsForm::OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo)
+{
+}
+
+void
+SettingsForm::OnSettingChanged(Tizen::Base::String &key)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to get ContactsApp instance.");
+
+       if (key.Equals(SETTING_KEY_NAME_ORDER, false) == true && pContactsApp->GetAppUiState() == APP_UI_STATE_BACKGROUND)
+       {
+               AppLogDebug("APP_UI_STATE_BACKGROUND");
+               SettingInfo::GetValue(SETTING_KEY_FIRST_NAME, __isFirstNameFirst);
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+               if (__isFirstNameFirst == true)
+               {
+                       __pTableView->SetItemChecked(INDEX_FIRST_NAME, true);
+                       __pTableView->SetItemChecked(INDEX_LAST_NAME, false);
+               }
+               else
+               {
+                       __pTableView->SetItemChecked(INDEX_FIRST_NAME, false);
+                       __pTableView->SetItemChecked(INDEX_LAST_NAME, true);
+               }
+
+               __pTableView->Invalidate(true);
+       }
+}
+
+void
+SettingsForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       TableViewItem* pItem = null;
+       if (source.GetName().Equals(SETTING_TABLEVIEW_ITEM, true))
+       {
+               pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(SETTING_LABEL_TITLE, true) || source.GetName().Equals(SETTING_LABEL_VALUE, true))
+       {
+               pItem = static_cast<TableViewItem*>(source.GetParent());
+       }
+
+       if (pItem != null)
+       {
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(SETTING_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+               pLabelValue->Invalidate(true);
+       }
+}
+
+void
+SettingsForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       TableViewItem* pItem = null;
+       if (source.GetName().Equals(SETTING_TABLEVIEW_ITEM, true))
+       {
+               pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(SETTING_LABEL_TITLE, true) || source.GetName().Equals(SETTING_LABEL_VALUE, true))
+       {
+               pItem = static_cast<TableViewItem*>(source.GetParent());
+       }
+
+       if (pItem != null)
+       {
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(SETTING_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_TEXT_ITEM_SELECTED));
+               pLabelValue->Invalidate(true);
+       }
+}
+
+void
+SettingsForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       TableViewItem* pItem = null;
+       if (source.GetName().Equals(SETTING_TABLEVIEW_ITEM, true))
+       {
+               pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(SETTING_LABEL_TITLE, true) || source.GetName().Equals(SETTING_LABEL_VALUE, true))
+       {
+               pItem = static_cast<TableViewItem*>(source.GetParent());
+       }
+
+       if (pItem != null)
+       {
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(SETTING_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_TEXT_ITEM_SELECTED));
+               pLabelValue->Invalidate(true);
+       }
+}
+
+void
+SettingsForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+SettingsForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+SettingsForm::OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       TableViewItem* pItem = null;
+       if (source.GetName().Equals(SETTING_TABLEVIEW_ITEM, true))
+       {
+               pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+       }
+       else if (source.GetName().Equals(SETTING_LABEL_TITLE, true) || source.GetName().Equals(SETTING_LABEL_VALUE, true))
+       {
+               pItem = static_cast<TableViewItem*>(source.GetParent());
+       }
+
+       if (pItem != null)
+       {
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(SETTING_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_TEXT_ITEM_SELECTED));
+               pLabelValue->Invalidate(true);
+       }
+}
+
+void
+SettingsForm:: OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       TableViewItem* pItem = null;
+       if (source.GetName().Equals(SETTING_TABLEVIEW_ITEM, true))
+       {
+               pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+       }
+
+       if (pItem != null && keyCode == KEY_ENTER)
+       {
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(SETTING_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_ITEM_PRESSED));
+               pLabelValue->Invalidate(true);
+       }
+}
+
+void
+SettingsForm:: OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       TableViewItem* pItem = null;
+       if (source.GetName().Equals(SETTING_TABLEVIEW_ITEM, true))
+       {
+               pItem = static_cast<TableViewItem*>(&(const_cast<Control&>(source)));
+       }
+
+       if (pItem != null && keyCode == KEY_ENTER)
+       {
+               Label* pLabelValue = static_cast<Label*>(pItem->GetControl(SETTING_LABEL_VALUE, true));
+               pLabelValue->SetTextColor(Color(COLOR_TEXT_ITEM_SELECTED));
+               pLabelValue->Invalidate(true);
+       }
+}
+
+void
+SettingsForm:: OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+
+}
diff --git a/src/CtTypes.cpp b/src/CtTypes.cpp
new file mode 100644 (file)
index 0000000..f587da9
--- /dev/null
@@ -0,0 +1,149 @@
+//
+// 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       CtTypes.cpp
+ * @brief      This is the implementation file for the Contacts application types.
+ */
+
+#include "CtTypes.h"
+
+// form, panel ids
+const wchar_t* IDC_FORM_CONTACT_DETAILS = L"FormContactDetails";
+const wchar_t* IDC_FORM_CONTACT_EDITOR = L"FormContactEditor";
+const wchar_t* IDC_FORM_CONTACT_SELECTOR = L"FormContactSelector";
+const wchar_t* IDC_FORM_GROUP_SELECTOR = L"FormGroupSelector";
+const wchar_t* IDC_FORM_GROUP_EDITOR = L"FormGroupEditor";
+const wchar_t* IDC_FORM_GROUP_CONTACT_LIST = L"FormGroupContactList";
+const wchar_t* IDC_FORM_GROUP_CONTACT_LIST_EDITOR = L"FormGroupContactListEditor";
+const wchar_t* IDC_FORM_SETTINGS = L"FormSettings";
+const wchar_t* IDC_FORM_MAIN = L"FormMain";
+
+const wchar_t* IDC_PANEL_CONTACT_LIST = L"PanelContactList";
+const wchar_t* IDC_PANEL_CONTACT_LIST_EDITOR = L"PanelContactListEditor";
+const wchar_t* IDC_PANEL_GROUP_LIST = L"PanelGroupList";
+const wchar_t* IDC_PANEL_GROUP_LIST_EDITOR = L"PanelGroupListEditor";
+const wchar_t* IDC_PANEL_FAVORITE_LIST = L"PanelFavoriteList";
+const wchar_t* IDC_PANEL_FAVORITE_LIST_EDITOR = L"PanelFavoriteListEditor";
+
+// scene ids
+const wchar_t* IDSCN_CONTACT_LIST = L"ContactList";
+const wchar_t* IDSCN_CONTACT_LIST_EDITOR = L"ContactListEditor";
+const wchar_t* IDSCN_CONTACT_DETAILS = L"ContactDetails";
+const wchar_t* IDSCN_CONTACT_EDITOR = L"ContactEditor";
+const wchar_t* IDSCN_CONTACT_SELECTOR = L"ContactSelector";
+const wchar_t* IDSCN_GROUP_LIST = L"GroupList";
+const wchar_t* IDSCN_GROUP_LIST_EDITOR = L"GroupListEditor";
+const wchar_t* IDSCN_GROUP_SELECTOR = L"GroupSelector";
+const wchar_t* IDSCN_GROUP_EDITOR = L"GroupEditor";
+const wchar_t* IDSCN_GROUP_CONTACT_LIST = L"GroupContactList";
+const wchar_t* IDSCN_GROUP_CONTACT_LIST_EDITOR = L"GroupContactListEditor";
+const wchar_t* IDSCN_FAVORITE_LIST = L"FavoriteList";
+const wchar_t* IDSCN_FAVORITE_LIST_EDITOR = L"FavoriteListEditor";
+const wchar_t* IDSCN_SETTINGS = L"Settings";
+
+const wchar_t* OPERATION_ID_MAIN = L"http://tizen.org/appcontrol/operation/main";
+const wchar_t* OPERATION_ID_PICK = L"http://tizen.org/appcontrol/operation/pick";
+const wchar_t* OPERATION_ID_VIEW = L"http://tizen.org/appcontrol/operation/view";
+const wchar_t* OPERATION_ID_ADD = L"http://tizen.org/appcontrol/operation/add";
+const wchar_t* OPERATION_ID_EDIT = L"http://tizen.org/appcontrol/operation/edit";
+const wchar_t* OPERATION_ID_CONFIGURE = L"http://tizen.org/appcontrol/operation/configure";
+const wchar_t* OPERATION_ID_CREATE_CONTENT = L"http://tizen.org/appcontrol/operation/create_content";
+const wchar_t* OPERATION_ID_CALL = L"http://tizen.org/appcontrol/operation/call";
+const wchar_t* OPERATION_ID_COMPOSE = L"http://tizen.org/appcontrol/operation/compose";
+const wchar_t* OPERATION_ID_CROP = L"http://tizen.org/appcontrol/operation/image/crop";
+
+const wchar_t* CONTACT_OPERATION_ID_MAIN = L"http://tizen.org/appcontrol/operation/main";
+const wchar_t* CONTACT_OPERATION_ID_ADD = L"http://tizen.org/appcontrol/operation/social/add";
+const wchar_t* CONTACT_OPERATION_ID_VIEW = L"http://tizen.org/appcontrol/operation/social/view";
+const wchar_t* CONTACT_OPERATION_ID_PICK = L"http://tizen.org/appcontrol/operation/social/pick";
+const wchar_t* CONTACT_OPERATION_ID_EDIT = L"http://tizen.org/appcontrol/operation/social/edit";
+const wchar_t* CONTACT_OPERATION_ID_CHOOSE = L"http://tizen.org/appcontrol/operation/social/choose";
+
+const wchar_t* RETURN_KEY_TYPE = L"returnType";
+const wchar_t* RETURN_KEY_VALUE = L"value";
+const wchar_t* RETURN_TYPE_PHONE = L"phone";
+const wchar_t* RETURN_TYPE_EMAIL = L"email";
+const wchar_t* RETURN_TYPE_VCARD = L"vcard";
+const wchar_t* RETURN_TYPE_ITEM_ID = L"item_id";
+
+const wchar_t* CONTACT_KEY_ITEM_TYPE = L"http://tizen.org/appcontrol/data/social/item_type";
+const wchar_t* CONTACT_KEY_PHONE = L"http://tizen.org/appcontrol/data/social/phone";
+const wchar_t* CONTACT_KEY_EMAIL = L"http://tizen.org/appcontrol/data/social/email";
+const wchar_t* CONTACT_KEY_URL = L"http://tizen.org/appcontrol/data/social/url";
+const wchar_t* CONTACT_KEY_ITEM_ID = L"http://tizen.org/appcontrol/data/social/item_id";
+const wchar_t* CONTACT_KEY_SELECTION_MODE = L"http://tizen.org/appcontrol/data/selection_mode";
+const wchar_t* CONTACT_KEY_RESULT_TYPE = L"http://tizen.org/appcontrol/data/social/result_type";
+const wchar_t* CONTACT_KEY_PATH = L"http://tizen.org/appcontrol/data/path";
+
+const wchar_t* ITEM_TYPE_PERSON = L"person";
+const wchar_t* ITEM_TYPE_CONTACT = L"contact";
+
+const wchar_t* PROVIDER_ID_CAMERA = L"tizen.camera";
+const wchar_t* PROVIDER_ID_GALLERY = L"tizen.gallery";
+const wchar_t* PROVIDER_ID_PHONE = L"tizen.call";
+const wchar_t* PROVIDER_ID_MESSAGE = L"tizen.messages";
+const wchar_t* PROVIDER_ID_EMAIL = L"tizen.email";
+const wchar_t* PROVIDER_ID_FILEMANAGER = L"tizen.filemanager";
+const wchar_t* PROVIDER_ID_IMAGEVIEWER = L"tizen.imageviewer";
+
+const wchar_t* SETTING_KEY_LANGUAGE = L"http://tizen.org/setting/locale.language";
+const wchar_t* SETTING_KEY_COUNTRY = L"http://tizen.org/setting/locale.country";
+const wchar_t* SETTING_KEY_FONTSIZE = L"http://tizen.org/setting/font.size";
+const wchar_t* SETTING_KEY_NAME_ORDER = L"http://tizen.org/setting/contacts.order.firstname";
+
+const wchar_t* RUNTIMEINFO_INTERNAL_MEMORY_KEY = L"http://tizen.org/runtime/storage.available.internal";
+
+const wchar_t* CHARACTER_SPACE = L" ";
+const wchar_t* DELIMITER = L":";
+const wchar_t* DELIMITER_SEMICOLON = L";";
+const wchar_t* DELIMITER_COMMA = L",";
+const wchar_t* INITIAL_SELECTED_COUNT = L" (0)";
+const wchar_t* DEFAULT_GROUP_FAMILY = L"Family";
+const wchar_t* DEFAULT_GROUP_FRIENDS = L"Friends";
+const wchar_t* DEFAULT_GROUP_COWORKERS = L"Co-workers";
+
+const int ID_GROUP_CONTACT_NOT_ASSIGNED = 0xFFFFFFFF;
+const int ID_GROUP_CONTACT_SELECT_MESSAGE = 0xFFFFFFFE;
+const int ID_GROUP_CONTACT_SELECT_EMAIL = 0xFFFFFFFD;
+
+const int W_SAVE_POPUP = 688;
+const int H_SAVE_POPUP = 230;
+const int W_SAVE_LABEL = 656;
+const int H_SAVE_LABEL = 80;
+const int X_SAVE_LABEL = 16;
+const int Y_SAVE_LABEL = 32;
+const int Y_SAVE_BUTTON = 132;
+const int H_SAVE_BUTTON = 74;
+const int W_SAVE_BUTTON = 318;
+const int W_POPUP_ITEM_GAP = 20;
+const int W_DELETE_POPUP = 688;
+const int H_DELETE_POPUP = 230;
+const int W_DELETE_LABEL = 656;
+const int H_DELETE_LABEL = 80;
+const int X_DELETE_LABEL = 16;
+const int Y_DELETE_LABEL = 32;
+const int Y_DELETE_BUTTON = 132;
+const int H_DELETE_BUTTON = 74;
+const int W_DELETE_BUTTON = 318;
+
+const int FONT_SIZE_SAVE_CONFIRM = 42;
+const int FONT_SIZE_SAVE_BUTTON = 36;
+const int FONT_SIZE_DELETE_CONFIRM = 42;
+const int FONT_SIZE_DELETE_BUTTON = 36;
+
+const int BIRTHDAY_MIN_YEAR_DIFF = 100;
+const int BIRTHDAY_MAX_YEAR_DIFF = 35;