Tizen 2.1 base
authorJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 16:38:49 +0000 (01:38 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 16:38:49 +0000 (01:38 +0900)
184 files changed:
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/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: 0755]
res/aze-AZ.xml [new file with mode: 0755]
res/bul-BG.xml [new file with mode: 0755]
res/cat-ES.xml [new file with mode: 0755]
res/ces-CZ.xml [new file with mode: 0755]
res/dan-DK.xml [new file with mode: 0755]
res/deu-DE.xml [new file with mode: 0755]
res/ell-GR.xml [new file with mode: 0755]
res/eng-GB.xml [new file with mode: 0755]
res/eng-PH.xml [new file with mode: 0755]
res/eng-US.xml [new file with mode: 0755]
res/est-EE.xml [new file with mode: 0755]
res/eus-ES.xml [new file with mode: 0755]
res/fin-FI.xml [new file with mode: 0755]
res/fra-CA.xml [new file with mode: 0755]
res/fra-FR.xml [new file with mode: 0755]
res/gle-IE.xml [new file with mode: 0755]
res/glg-ES.xml [new file with mode: 0755]
res/hin-IN.xml [new file with mode: 0755]
res/hrv-HR.xml [new file with mode: 0755]
res/hun-HU.xml [new file with mode: 0755]
res/hye-AM.xml [new file with mode: 0755]
res/isl-IS.xml [new file with mode: 0755]
res/ita-IT.xml [new file with mode: 0755]
res/jpn-JP.xml [new file with mode: 0755]
res/kat-GE.xml [new file with mode: 0755]
res/kaz-KZ.xml [new file with mode: 0755]
res/kor-KR.xml [new file with mode: 0755]
res/lav-LV.xml [new file with mode: 0755]
res/lit-LT.xml [new file with mode: 0755]
res/mkd-MK.xml [new file with mode: 0755]
res/nld-NL.xml [new file with mode: 0755]
res/nob-NO.xml [new file with mode: 0755]
res/pol-PL.xml [new file with mode: 0755]
res/por-BR.xml [new file with mode: 0755]
res/por-PT.xml [new file with mode: 0755]
res/ron-RO.xml [new file with mode: 0755]
res/rus-RU.xml [new file with mode: 0755]
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_button_cancel.png [new file with mode: 0755]
res/screen-density-xhigh/00_button_check.png [new file with mode: 0644]
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_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_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/00_noitems_no_contacts.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_circle_bg_normal.png [new file with mode: 0644]
res/screen-density-xhigh/C02_button_circle_bg_normal_press.png [new file with mode: 0644]
res/screen-density-xhigh/C02_button_rename.png [new file with mode: 0644]
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_folder_expand_closed.png [new file with mode: 0644]
res/screen-density-xhigh/C02_folder_expand_opened.png [new file with mode: 0644]
res/screen-density-xhigh/C02_icon_add_group.png [new file with mode: 0644]
res/screen-density-xhigh/C02_icon_favorite.png [new file with mode: 0644]
res/screen-density-xhigh/C02_icon_favorite_on.png [new file with mode: 0644]
res/screen-density-xhigh/C02_list_icon_check.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-density-xhigh/caller_ID.png [new file with mode: 0644]
res/screen-density-xhigh/caller_ID_default_96x96.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: 0755]
res/slv-SI.xml [new file with mode: 0755]
res/spa-ES.xml [new file with mode: 0755]
res/spa-MX.xml [new file with mode: 0755]
res/srp-RS.xml [new file with mode: 0755]
res/swe-SE.xml [new file with mode: 0755]
res/tur-TR.xml [new file with mode: 0755]
res/ukr-UA.xml [new file with mode: 0755]
res/uzb-UZ.xml [new file with mode: 0755]
res/zho-CN.xml [new file with mode: 0755]
res/zho-HK.xml [new file with mode: 0755]
res/zho-SG.xml [new file with mode: 0755]
res/zho-TW.xml [new file with mode: 0755]
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/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/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/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..9c95663
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.0, May, 2012
+
+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 Compatibility Definition Document
+and passes the Compatibility Test Suite 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.
+
+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.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://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..9ec42be
--- /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.
+Please, see the LICENSE.Flora file for Flora License, Version 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..9f36d69
--- /dev/null
@@ -0,0 +1,47 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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/CtContactDetailsForm.h b/inc/CtContactDetailsForm.h
new file mode 100644 (file)
index 0000000..f871fe5
--- /dev/null
@@ -0,0 +1,123 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FUi.h>
+#include "CtIContactEventListener.h"
+
+class ContactPresentationModel;
+
+class ContactDetailsForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::App::IAppControlResponseListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , 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 IContactEventListener
+{
+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 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 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);
+
+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 AddImAddress(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, 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"");
+
+       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);
+
+private:
+       Tizen::Ui::Controls::TableView* __pTableView;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuCall;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuShare;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuMore;
+       Tizen::Ui::Controls::Popup* __pDefaultSelectorPopup;
+       Tizen::Base::Collection::ArrayListT<int>* __pItemList;
+       Tizen::Base::String __appControlViewType;
+       ContactPresentationModel* __pPresentationModel;
+       int __scrolledDistance;
+};
+
+
+#endif /* _CT_CONTACT_DETAILS_FORM_H_ */
+
diff --git a/inc/CtContactEditorForm.h b/inc/CtContactEditorForm.h
new file mode 100644 (file)
index 0000000..ecd810b
--- /dev/null
@@ -0,0 +1,176 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FUi.h>
+#include "CtTypes.h"
+
+class ContactPresentationModel;
+
+class ContactEditorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::App::IAppControlResponseListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IDateChangeEventListener
+       , public Tizen::Ui::IFocusEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IExpandableEditAreaEventListener
+       , public Tizen::Ui::Controls::IGroupedTableViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedTableViewItemProvider
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+{
+public:
+       ContactEditorForm(void);
+       virtual ~ContactEditorForm(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+       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 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);
+
+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);
+       void AddThumbnailControls(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);
+       result ChangeNameFieldStatus(void);
+       result SaveNameFields(void);
+       result SaveContactData(bool isSaved = true);
+       bool IsSaveContactValid(void);
+       void SetSaveButtonEnabled(bool enable);
+       bool IsMoreInformationButtonVisible(void);
+
+       void HideKeypad(void);
+       void ShowKeypad(void);
+
+       void ShowDefaultPhoneNumberContextMenu(const Tizen::Graphics::Point& position);
+       void ShowMoreInformationContextMenu(const Tizen::Graphics::Point& position);
+       void ShowTypeContextMenu(DetailPhoneNumberType currentType, const Tizen::Graphics::Point& position, int itemTag);
+       void ShowTypeContextMenu(DetailEmailType currentType, const Tizen::Graphics::Point& position, int itemTag);
+       void ShowTypeContextMenu(DetailAddressType currentType, const Tizen::Graphics::Point& position, int itemTag);
+       void ShowTypeContextMenu(DetailUrlType currentType, const Tizen::Graphics::Point& position, int itemTag);
+       void ShowTypeContextMenu(DetailImAddressType 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);
+
+private:
+       bool __isExpandable;
+       bool __isAppControl;
+       bool __isJobTitleEnabled;
+       bool __isDepartmentEnabled;
+       bool __isDefaultPhoneNumberButtonEnabled;
+       int __scrolledDistance;
+       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::Ui::Control* __pCurrentFocusedItem;
+       Tizen::Ui::Control* __pMoreInformationItem;
+       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* __pDefaultPhoneNumberItem;
+       Tizen::Ui::Controls::TableViewItem* __pNameFieldItem;
+       Tizen::Ui::Controls::TableViewItem* __pNoteFieldItem;
+       ContactPresentationModel* __pPresentationModel;
+};
+
+#endif /* _CONTACT_EDITOR_FORM_H_ */
diff --git a/inc/CtContactListEditorPanel.h b/inc/CtContactListEditorPanel.h
new file mode 100644 (file)
index 0000000..90aeb74
--- /dev/null
@@ -0,0 +1,139 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+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::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 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);
+
+private:
+       result UpdateBottomLabel(void);
+       void ShowContactValuePopup(int groupIndex, int itemIndex);
+       void HideContactValuePopup(void);
+       void ShowDeletePopup(void);
+       void HideDeletePopup(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* __pEmptyImageLabel;
+       Tizen::Ui::Controls::Label* __pEmptyCommentLabel;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Ui::Controls::Popup* __pMultipleContactValuePopup;
+       Tizen::Ui::Controls::Popup* __pDeletePopup;
+       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..02020e9
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..c59e855
--- /dev/null
@@ -0,0 +1,135 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtContactValueListItemProvider.h"
+#include "CtIContactsAppStateChangeEventListener.h"
+#include "CtIContactEventListener.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::Controls::IGroupedListViewItemEventListener
+       , public Tizen::Ui::Controls::IGroupedListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::ISearchBarEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactsAppStateChangeEventListener
+       , public IContactEventListener
+{
+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 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 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);
+
+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, 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::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::ContextMenu* __pContextMenuMore;
+
+       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..51ffabc
--- /dev/null
@@ -0,0 +1,111 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::IAddressbookEventListener
+{
+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;
+       bool _isSearchingPhoneNumber;
+
+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..a2048fe
--- /dev/null
@@ -0,0 +1,118 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FSocial.h>
+#include "CtTypes.h"
+
+class IContactEventListener;
+
+class ContactPresentationModel
+       : public Tizen::Social::IAddressbookEventListener
+{
+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 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 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);
+       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;
+       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..5b9e511
--- /dev/null
@@ -0,0 +1,105 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::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 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 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* __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..b6bf5dc
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..67ab5c7
--- /dev/null
@@ -0,0 +1,87 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 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;
+};
+
+#endif  //_CT_CONTACTS_APP_H_
diff --git a/inc/CtFavoriteListEditorPanel.h b/inc/CtFavoriteListEditorPanel.h
new file mode 100644 (file)
index 0000000..5389233
--- /dev/null
@@ -0,0 +1,84 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+class FavoriteListPresentationModel;
+
+class FavoriteListEditorPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+{
+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);
+
+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..9a00c68
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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>
+
+class ContactValueListItemProvider;
+class FavoriteListPresentationModel;
+
+class FavoriteListPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemEventListener
+       , public Tizen::Ui::Controls::IIconListViewItemProvider
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+{
+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);
+
+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:
+       int __scrolledDistance;
+       int __selectedItemIndex;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuAction;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuMore;
+       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..917000d
--- /dev/null
@@ -0,0 +1,60 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 FavoriteListPresentationModel
+{
+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 ExportToVcard(int index);
+       Tizen::Base::String ExportToVcard(const Tizen::Base::Collection::IList& contactList);
+
+       static FavoriteListPresentationModel* GetInstance(void);
+
+private:
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+private:
+       Tizen::Base::Collection::IList* __pFavoriteList;
+
+       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..7ded215
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..e859f7a
--- /dev/null
@@ -0,0 +1,126 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtIContactsAppStateChangeEventListener.h"
+#include "CtIContactEventListener.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::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 IContactsAppStateChangeEventListener
+       , public IContactEventListener
+{
+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 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);
+
+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::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* __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..f340bac
--- /dev/null
@@ -0,0 +1,136 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtIContactsAppStateChangeEventListener.h"
+#include "CtIContactEventListener.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::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 IContactsAppStateChangeEventListener
+       , public IContactEventListener
+{
+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 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 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 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);
+
+private:
+       void ShowDeletePopup(void);
+       void HideDeletePopup(void);
+       void ShowContactValuePopup(int groupIndex, int itemIndex);
+       void HideContactValuePopup(void);
+       result AddSelectedContactToCategory(Tizen::Base::Collection::IList* pArgs);
+       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::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::ContextMenu* __pContextMenuMore;
+       Tizen::Social::RecordId __categoryId;
+
+       ContactValueListItemProvider* __pContactValueListEvent;
+       GroupContactListPresentationModel* __pPresentationModel;
+       SearchListEventListener* __pSearchListEvent;
+
+       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..d839787
--- /dev/null
@@ -0,0 +1,76 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::Social::RecordId contactId);
+       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..c1370e9
--- /dev/null
@@ -0,0 +1,91 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FSocial.h>
+#include <FUi.h>
+
+class GroupPresentationModel;
+
+class GroupEditorForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::App::IAppControlResponseListener
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::IKeypadEventListener
+       , public Tizen::Ui::ITextEventListener
+       , public Tizen::Ui::Controls::ITableViewItemEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::Ui::Scenes::ISceneEventListener
+{
+public :
+       GroupEditorForm(void);
+       virtual ~GroupEditorForm(void);
+       void Initialize(void);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       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 OnTextValueChanged(const Tizen::Ui::Control& source);
+       virtual void OnTextValueChangeCanceled(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 OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
+
+private:
+       result LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId);
+
+private:
+       GroupPresentationModel* __pPresentationModel;
+       Tizen::Ui::Controls::TableView* __pTableView;
+       Tizen::Ui::Controls::TableViewItem* __pItemGroupName;
+       Tizen::Social::RecordId __categoryId;
+       Tizen::Base::String __tempName;
+       Tizen::Base::String __tempThumbnailPath;
+       Tizen::Base::String __ringtonePath;
+       bool __isEditMode;
+};
+
+#endif /* _CT_GROUP_EDITOR_FORM_H_ */
diff --git a/inc/CtGroupListEditorPanel.h b/inc/CtGroupListEditorPanel.h
new file mode 100644 (file)
index 0000000..16673f8
--- /dev/null
@@ -0,0 +1,89 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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_H_
+#define _CT_GROUP_LIST_EDITOR_H_
+
+#include <FUi.h>
+#include "CtIContactEventListener.h"
+
+class GroupListPresentationModel;
+
+class GroupListEditorPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public IContactEventListener
+{
+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 void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(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 void OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+
+       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 OnScrollEndReached(Tizen::Ui::Control& source, Tizen::Ui::Controls::ScrollEndEvent type);
+       virtual void OnScrollPositionChanged(Tizen::Ui::Control& source, int scrollPos);
+
+private:
+       result ComposeGroupItem(Tizen::Ui::Controls::TableViewItem& item, int groupBoxIndex, const Tizen::Graphics::Point& itemPosition, bool isChecked);
+       result ArrangeThumbnails(Tizen::Graphics::Canvas& canvas, int groupBoxIndex, int contactCount);
+       result PlaceThumbnail(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, int groupBoxIndex, int contactIndex);
+
+       result UpdateBottomLabel(void);
+       result CreateCheckLabel(Tizen::Ui::Controls::TableViewItem& item, const Tizen::Graphics::Rectangle& bounds, int groupBoxIndex);
+       void UpdateGroupList(void);
+
+private:
+       Tizen::Base::Collection::ArrayListT<bool>* __pGroupCheckList;
+       Tizen::Ui::Controls::TableView* __pTableView;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Graphics::Bitmap* __pDefaultThumbnail;
+       GroupListPresentationModel* __pPresentationModel;
+       bool __isToggleOpened;
+       bool __isTouchMoved;
+};
+
+#endif /* _CT_GROUP_LIST_EDITOR_H_ */
diff --git a/inc/CtGroupListPanel.h b/inc/CtGroupListPanel.h
new file mode 100644 (file)
index 0000000..93af0b6
--- /dev/null
@@ -0,0 +1,89 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FUi.h>
+#include "CtIContactEventListener.h"
+
+class GroupListPresentationModel;
+
+class GroupListPanel
+       : public Tizen::Ui::Controls::Panel
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public Tizen::Ui::Controls::IScrollEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , 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 void OnContactsChanged(void);
+       virtual void OnCategoriesChanged(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 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 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);
+
+private:
+       result ComposeGroupItem(Tizen::Ui::Controls::TableViewItem& item, int groupBoxIndex, const Tizen::Graphics::Point& itemPosition, int contactCount, bool isNotAssigned);
+       result ArrangeThumbnails(Tizen::Graphics::Canvas& canvas, int groupBoxIndex, int contactCount);
+       result PlaceThumbnail(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, int groupBoxIndex, int contactIndex);
+
+private:
+       Tizen::Ui::Controls::TableView* __pTableView;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuQuickMenu;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuMore;
+       Tizen::Graphics::Bitmap* __pDefaultThumbnail;
+       GroupListPresentationModel* __pPresentationModel;
+       bool __isToggleOpened;
+       bool __isTouchMoved;
+       int __scrolledDistance;
+};
+
+#endif /* _CT_GROUP_LIST_PANEL_H_ */
diff --git a/inc/CtGroupListPresentationModel.h b/inc/CtGroupListPresentationModel.h
new file mode 100644 (file)
index 0000000..1dfce2c
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::IAddressbookEventListener
+{
+public:
+       virtual ~GroupListPresentationModel(void);
+       result Construct(void);
+       result RemoveCategory(int index);
+       Tizen::Base::String GetCategoryName(int index);
+       bool IsContactInCategory(const Tizen::Base::Collection::IList& categoryIdList, int categoryIndex);
+       bool IsDefaultCategory(int index);
+       Tizen::Social::RecordId GetCategoryId(int index);
+       int GetContactCountInCategory(int index, AppControlReturnType returnType = APP_CONTROL_RETURN_TYPE_NONE);
+       int GetContactCountInNotAssignedCategory(AppControlReturnType returnType = APP_CONTROL_RETURN_TYPE_NONE);
+       int GetCategoryCount(void);
+       Tizen::Graphics::Bitmap* GetThumbnailN(const Tizen::Graphics::Dimension& dimension, int categoryIndex, int contactIndex);
+       result UpdatePersonList(int categoryIndex);
+       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);
+       result UpdateCategoryList(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..a22d429
--- /dev/null
@@ -0,0 +1,51 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 GroupPresentationModel
+{
+public:
+       GroupPresentationModel(void);
+       virtual ~GroupPresentationModel(void);
+
+       result Construct(Tizen::Social::RecordId categoryId);
+
+       bool IsDuplicatedCategory(const Tizen::Base::String& groupName);
+       bool IsDefaultCategory(void);
+       result SetCategoryName(const Tizen::Base::String& groupName);
+       result SetRingtone(const Tizen::Base::String& groupName, const Tizen::Base::String& ringtonePath);
+       result AddCategory(const Tizen::Base::String& groupName);
+       result SetThumbnailPath(const Tizen::Base::String& groupName, const Tizen::Base::String& filePath);
+       Tizen::Base::String GetThumbnailPath(void);
+       Tizen::Base::String GetCategoryName(void);
+       Tizen::Base::String GetRingtone(void);
+
+private:
+       Tizen::Social::Addressbook* __pAddressbook;
+       Tizen::Social::RecordId __categoryId;
+};
+
+#endif /* _CT_GROUP_PRESENTATION_MODEL_H_ */
diff --git a/inc/CtGroupSelectorForm.h b/inc/CtGroupSelectorForm.h
new file mode 100644 (file)
index 0000000..7331868
--- /dev/null
@@ -0,0 +1,76 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+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::Scenes::ISceneEventListener
+       , public IContactEventListener
+{
+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);
+
+private:
+       result UpdateBottomLabel(void);
+
+private:
+       GroupListPresentationModel* __pGroupListPresentationModel;
+       Tizen::Ui::Controls::ListView* __pListView;
+       Tizen::Ui::Controls::Label* __pBottomLabel;
+       Tizen::Ui::Controls::ContextMenu* __pContextMenuMore;
+       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..19de4e6
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..28bc07d
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..1458929
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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);
+};
+
+#endif /* _CT_MAIN_FORM_H_ */
diff --git a/inc/CtMainFrame.h b/inc/CtMainFrame.h
new file mode 100644 (file)
index 0000000..a391b39
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..e679dc5
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..da46f59
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..afbdbfb
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..dbc6d6e
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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);
+
+private:
+       ContactListPresentationModel* __pContactListPresentationModel;
+       Tizen::Ui::Controls::ListAnnexStyle __itemAnnexStyle;
+};
+
+
+#endif /* _CT_SEARCH_LIST_EVENT_LISTENER_H_ */
diff --git a/inc/CtSearchListItem.h b/inc/CtSearchListItem.h
new file mode 100644 (file)
index 0000000..35bb6ed
--- /dev/null
@@ -0,0 +1,46 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..dfa4a41
--- /dev/null
@@ -0,0 +1,60 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IListViewItemProvider
+{
+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::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+
+       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);
+
+private:
+       Tizen::Ui::Controls::ListView* __pListView;
+       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..85b89d0
--- /dev/null
@@ -0,0 +1,206 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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
+};
+
+enum DetailEmailType
+{
+       DETAIL_EMAIL_TYPE_HOME,
+       DETAIL_EMAIL_TYPE_WORK,
+       DETAIL_EMAIL_TYPE_OTHER
+};
+
+enum DetailAddressType
+{
+       DETAIL_ADDRESS_TYPE_HOME,
+       DETAIL_ADDRESS_TYPE_WORK,
+       DETAIL_ADDRESS_TYPE_OTHER
+};
+
+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
+};
+
+enum DetailUrlType
+{
+       DETAIL_URL_TYPE_HOME,
+       DETAIL_URL_TYPE_WORK,
+       DETAIL_URL_TYPE_OTHER
+};
+
+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_CONTACT_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* 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_CONTACT_ID;
+
+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* SETTING_KEY_LANGUAGE;
+extern const wchar_t* SETTING_KEY_COUNTRY;
+
+extern const wchar_t* CHARACTER_SPACE;
+extern const wchar_t* DELIMITER;
+extern const wchar_t* DELIMITER_SEMICOLON;
+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;
+
+#endif /* _CT_TYPES_H_ */
diff --git a/manifest.xml b/manifest.xml
new file mode 100644 (file)
index 0000000..42ecffe
--- /dev/null
@@ -0,0 +1,149 @@
+<?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>
+    <Author/>
+    <Descriptions>
+        <Description Locale="ara-AE"/>
+        <Description Locale="aze-AZ"/>
+        <Description Locale="bul-BG"/>
+        <Description Locale="cat-ES"/>
+        <Description Locale="ces-CZ"/>
+        <Description Locale="dan-DK"/>
+        <Description Locale="deu-DE"/>
+        <Description Locale="ell-GR"/>
+        <Description Locale="eng-GB"/>
+        <Description Locale="eng-PH"/>
+        <Description Locale="eng-US"/>
+        <Description Locale="est-EE"/>
+        <Description Locale="eus-ES"/>
+        <Description Locale="fin-FI"/>
+        <Description Locale="fra-CA"/>
+        <Description Locale="fra-FR"/>
+        <Description Locale="gle-IE"/>
+        <Description Locale="glg-ES"/>
+        <Description Locale="hin-IN"/>
+        <Description Locale="hrv-HR"/>
+        <Description Locale="hun-HU"/>
+        <Description Locale="hye-AM"/>
+        <Description Locale="isl-IS"/>
+        <Description Locale="ita-IT"/>
+        <Description Locale="jpn-JP"/>
+        <Description Locale="kat-GE"/>
+        <Description Locale="kaz-KZ"/>
+        <Description Locale="kor-KR"/>
+        <Description Locale="lav-LV"/>
+        <Description Locale="lit-LT"/>
+        <Description Locale="mkd-MK"/>
+        <Description Locale="nld-NL"/>
+        <Description Locale="nob-NO"/>
+        <Description Locale="pol-PL"/>
+        <Description Locale="por-BR"/>
+        <Description Locale="por-PT"/>
+        <Description Locale="ron-RO"/>
+        <Description Locale="rus-RU"/>
+        <Description Locale="slk-SK"/>
+        <Description Locale="slv-SI"/>
+        <Description Locale="spa-ES"/>
+        <Description Locale="spa-MX"/>
+        <Description Locale="srp-RS"/>
+        <Description Locale="swe-SE"/>
+        <Description Locale="tur-TR"/>
+        <Description Locale="ukr-UA"/>
+        <Description Locale="uzb-UZ"/>
+        <Description Locale="zho-CN"/>
+        <Description Locale="zho-HK"/>
+        <Description Locale="zho-SG"/>
+        <Description Locale="zho-TW"/>
+    </Descriptions>
+    <Requirements>
+        <Feature Name="http://tizen.org/feature/platform.core.cpu.arch">x86</Feature>
+        <Feature Name="http://tizen.org/feature/platform.core.fpu.arch">vfpv3</Feature>
+    </Requirements>
+    <Apps>
+        <ApiVersion>2.0</ApiVersion>
+        <Privileges>
+            <Privilege>http://tizen.org/privilege/contact.write</Privilege>
+            <Privilege>http://tizen.org/privilege/setting</Privilege>
+            <Privilege>http://tizen.org/privilege/contact.read</Privilege>
+            <Privilege>http://tizen.org/privilege/application.launch</Privilege>
+        </Privileges>
+        <UiApp Main="True" MenuIconVisible="True" Name="Contacts" SubMode="True">
+            <UiScalability BaseScreenSize="Normal" CoordinateSystem="Logical" LogicalCoordinate="720"/>
+            <UiTheme SystemTheme="White"/>
+            <DisplayNames>
+                <DisplayName Locale="ara-AE">الأسماء-Ref</DisplayName>
+                <DisplayName Locale="aze-AZ">Adlar-Ref</DisplayName>
+                <DisplayName Locale="bul-BG">Телефонен указател-Ref</DisplayName>
+                <DisplayName Locale="cat-ES">Contactes-Ref</DisplayName>
+                <DisplayName Locale="ces-CZ">Kontakty-Ref</DisplayName>
+                <DisplayName Locale="dan-DK">Kontakter-Ref</DisplayName>
+                <DisplayName Locale="deu-DE">Kontakte-Ref</DisplayName>
+                <DisplayName Locale="ell-GR">Επαφές-Ref</DisplayName>
+                <DisplayName Locale="eng-GB">Contacts-Ref</DisplayName>
+                <DisplayName Locale="eng-PH">Contacts-Ref</DisplayName>
+                <DisplayName Locale="eng-US">Contacts-Ref</DisplayName>
+                <DisplayName Locale="est-EE">Kontaktid-Ref</DisplayName>
+                <DisplayName Locale="eus-ES">Kontaktuak-Ref</DisplayName>
+                <DisplayName Locale="fin-FI">Yhteystiedot-Ref</DisplayName>
+                <DisplayName Locale="fra-CA">Contacts-Ref</DisplayName>
+                <DisplayName Locale="fra-FR">Contacts-Ref</DisplayName>
+                <DisplayName Locale="gle-IE">Teagmhálaithe-Ref</DisplayName>
+                <DisplayName Locale="glg-ES">Contactos-Ref</DisplayName>
+                <DisplayName Locale="hin-IN">संपर्क-Ref</DisplayName>
+                <DisplayName Locale="hrv-HR">Imenik-Ref</DisplayName>
+                <DisplayName Locale="hun-HU">Névjegyek-Ref</DisplayName>
+                <DisplayName Locale="hye-AM">Կոնտակտներ-Ref</DisplayName>
+                <DisplayName Locale="isl-IS">Tengiliðir-Ref</DisplayName>
+                <DisplayName Locale="ita-IT">Rubrica-Ref</DisplayName>
+                <DisplayName Locale="jpn-JP">電話帳-Ref</DisplayName>
+                <DisplayName Locale="kat-GE">კონტაქტები-Ref</DisplayName>
+                <DisplayName Locale="kaz-KZ">Контактілер-Ref</DisplayName>
+                <DisplayName Locale="kor-KR">연락처-Ref</DisplayName>
+                <DisplayName Locale="lav-LV">Kontakti-Ref</DisplayName>
+                <DisplayName Locale="lit-LT">Adresatai-Ref</DisplayName>
+                <DisplayName Locale="mkd-MK">Именик-Ref</DisplayName>
+                <DisplayName Locale="nld-NL">Contacten-Ref</DisplayName>
+                <DisplayName Locale="nob-NO">Kontakter-Ref</DisplayName>
+                <DisplayName Locale="pol-PL">Kontakty-Ref</DisplayName>
+                <DisplayName Locale="por-BR">Contatos-Ref</DisplayName>
+                <DisplayName Locale="por-PT">Contactos-Ref</DisplayName>
+                <DisplayName Locale="ron-RO">Contacte-Ref</DisplayName>
+                <DisplayName Locale="rus-RU">Контакты-Ref</DisplayName>
+                <DisplayName Locale="slk-SK">Kontakty-Ref</DisplayName>
+                <DisplayName Locale="slv-SI">Imenik-Ref</DisplayName>
+                <DisplayName Locale="spa-ES">Contactos-Ref</DisplayName>
+                <DisplayName Locale="spa-MX">Contactos-Ref</DisplayName>
+                <DisplayName Locale="srp-RS">Kontakti-Ref</DisplayName>
+                <DisplayName Locale="swe-SE">Kontakter-Ref</DisplayName>
+                <DisplayName Locale="tur-TR">Rehber-Ref</DisplayName>
+                <DisplayName Locale="ukr-UA">Контакти-Ref</DisplayName>
+                <DisplayName Locale="uzb-UZ">Kontaktlar-Ref</DisplayName>
+                <DisplayName Locale="zho-CN">联系人-Ref</DisplayName>
+                <DisplayName Locale="zho-HK">聯絡人-Ref</DisplayName>
+                <DisplayName Locale="zho-SG">联系人-Ref</DisplayName>
+                <DisplayName Locale="zho-TW">聯絡人-Ref</DisplayName>
+            </DisplayNames>
+            <Icons>
+                <Icon Section="MainMenu" Type="Xhigh">mainmenu.png</Icon>
+            </Icons>
+            <AppControls>
+                <AppControl>
+                    <Operation>http://tizen.org/appcontrol/operation/add</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/configure</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/edit</Operation>
+                    <Operation>http://tizen.org/appcontrol/operation/pick</Operation>
+                    <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..5f7a7bd
--- /dev/null
@@ -0,0 +1,53 @@
+Name:       apps.Contacts
+Summary:    Contacts application
+Version:    1.0.0.0
+Release:    1
+Group:      TO_BE/FILLED_IN
+License:    TO BE FILLED IN
+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)
+
+%description
+Verification application: Contacts
+
+%prep
+%setup -q
+
+%build
+MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
+%ifarch %{ix86}
+CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ -D_OSP_EMUL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
+%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}
+%make_install
+
+%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/*
\ No newline at end of file
diff --git a/res/ara-AE.xml b/res/ara-AE.xml
new file mode 100755 (executable)
index 0000000..e0482c9
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">إغلاق</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">اختيار الكل</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_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_PB_HEADER_SELECT_GROUP">تحديد مجموعة</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_PB_BODY_WORK">العمل</text>
+    <text id="IDS_COM_SK_EDIT">تعديل</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">لا توجد مجموعة</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">عنوان البريد الإلكتروني غير صالح</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_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_COM_BODY_DETAILS_NAME">الاسم</text>
+    <text id="IDS_PB_BODY_CITY">المدينة</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_POP_UNKNOWN">غير معروف</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_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_BODY_DEFAULT_GROUP_WORK">العمل</text>
+    <text id="IDS_COM_BODY_REMOVE">حذف</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">الرمز البريدي</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_PB_BODY_GROUP_NAME_ABB">اسم المجموعة</text>
+</string_table>
diff --git a/res/aze-AZ.xml b/res/aze-AZ.xml
new file mode 100755 (executable)
index 0000000..380fe9d
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">İldönümü</text>
+    <text id="IDS_PB_BODY_COMPANY">Şirkət</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Məşğuliyyət adı</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_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_COM_SK_NEW">Yeni</text>
+    <text id="IDS_PB_SK_CANCEL">Ləğv et</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_COM_POP_SUCCESS">Uğur</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ölkə</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_PB_HEADER_SELECT_GROUP">Qrup seç</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_PB_BODY_WORK">İş</text>
+    <text id="IDS_COM_SK_EDIT">Redaktə et</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Qrup yoxdur</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Yanlış E-poçt ünvanı</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_COM_BODY_COPY">Köçür</text>
+    <text id="IDS_PB_BODY_ADDRESS">Ünvan</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_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_COM_BODY_DETAILS_NAME">Ad</text>
+    <text id="IDS_PB_BODY_CITY">Şəhər</text>
+    <text id="IDS_COM_BODY_CREATE">Yarat</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departament</text>
+    <text id="IDS_PB_BODY_NICKNAME">Təxəllüs</text>
+    <text id="IDS_COM_BODY_CALL">Zəng</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffiks</text>
+    <text id="IDS_COM_POP_UNKNOWN">Naməlum</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_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_BODY_DEFAULT_GROUP_WORK">İş</text>
+    <text id="IDS_COM_BODY_REMOVE">Sil</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poçt kodu</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_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 100755 (executable)
index 0000000..e1c39fa
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Затваряне</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Избери всички</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">Маркирай като email по подразбиране</text>
+    <text id="IDS_PB_BODY_OTHER">Друго</text>
+    <text id="IDS_COM_POP_REMOVED">Премахнат</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">Email</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Изберете група</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_PB_BODY_WORK">Служебен</text>
+    <text id="IDS_COM_SK_EDIT">Редактиране</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Няма група</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Невалиден имейл адрес</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_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_COM_BODY_DETAILS_NAME">Име</text>
+    <text id="IDS_PB_BODY_CITY">Град</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_POP_UNKNOWN">Няма информация</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_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_BODY_DEFAULT_GROUP_WORK">Служебен</text>
+    <text id="IDS_COM_BODY_REMOVE">Премаxване</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Пощенски код</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_PB_BODY_GROUP_NAME_ABB">Име на група</text>
+</string_table>
diff --git a/res/cat-ES.xml b/res/cat-ES.xml
new file mode 100755 (executable)
index 0000000..3ba01d5
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Aniversari</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Càrrec</text>
+    <text id="IDS_COM_POP_CLOSE">Tancar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccioni-ho tot</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_COM_SK_NEW">Nou</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel·lar</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_COM_POP_SUCCESS">Correcte</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</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_PB_HEADER_SELECT_GROUP">Seleccionar grup</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_PB_BODY_WORK">Feina</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Sense Grup</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adreça correu electrònic no vàlida</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_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adreça</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_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_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_PB_BODY_CITY">Ciutat</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departament</text>
+    <text id="IDS_PB_BODY_NICKNAME">Sobrenom</text>
+    <text id="IDS_COM_BODY_CALL">Trucar</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconegut</text>
+    <text id="IDS_PB_ITAB4_FAVOURITES">Preferit</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_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_BODY_DEFAULT_GROUP_WORK">Feina</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Codi postal</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_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 100755 (executable)
index 0000000..ab35d06
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Výročí</text>
+    <text id="IDS_PB_BODY_COMPANY">Společnost</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Pracovní zařazení</text>
+    <text id="IDS_COM_POP_CLOSE">Zavřít</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vybrat vše</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_COM_SK_NEW">Nový</text>
+    <text id="IDS_PB_SK_CANCEL">Zrušit</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_COM_POP_SUCCESS">Dokončeno</text>
+    <text id="IDS_PB_BODY_COUNTRY">Země</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_PB_HEADER_SELECT_GROUP">Vyberte skupinu</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_PB_BODY_WORK">Práce</text>
+    <text id="IDS_COM_SK_EDIT">Upravit</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Žádná skupina</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neplatná e-mailová adresa</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_COM_BODY_COPY">Kopírovat</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</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_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_COM_BODY_DETAILS_NAME">Jméno</text>
+    <text id="IDS_PB_BODY_CITY">Město</text>
+    <text id="IDS_COM_BODY_CREATE">Vytvořit</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Oddělení</text>
+    <text id="IDS_PB_BODY_NICKNAME">Přezdívka</text>
+    <text id="IDS_COM_BODY_CALL">Volat</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titul za jménem</text>
+    <text id="IDS_COM_POP_UNKNOWN">Neznámé</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_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_BODY_DEFAULT_GROUP_WORK">Práce</text>
+    <text id="IDS_COM_BODY_REMOVE">Odstranit</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">PSČ</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_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 100755 (executable)
index 0000000..87fd2a0
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Mærkedag</text>
+    <text id="IDS_PB_BODY_COMPANY">Firma</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Jobtitel</text>
+    <text id="IDS_COM_POP_CLOSE">Luk</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vælg alle</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_COM_SK_NEW">Ny</text>
+    <text id="IDS_PB_SK_CANCEL">Annullér</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_COM_POP_SUCCESS">Fuldført</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</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_PB_HEADER_SELECT_GROUP">Vælg gruppe</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_PB_BODY_WORK">Arbejde</text>
+    <text id="IDS_COM_SK_EDIT">Redigér</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ingen gruppe</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ugyldig e-mailadresse</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_COM_BODY_COPY">Kopiér</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</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_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_COM_BODY_DETAILS_NAME">Navn</text>
+    <text id="IDS_PB_BODY_CITY">By</text>
+    <text id="IDS_COM_BODY_CREATE">Opret</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Afdeling</text>
+    <text id="IDS_PB_BODY_NICKNAME">Kaldenavn</text>
+    <text id="IDS_COM_BODY_CALL">Opkald</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titel</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ukendt</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_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_BODY_DEFAULT_GROUP_WORK">Arbejde</text>
+    <text id="IDS_COM_BODY_REMOVE">Fjern</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postnummer</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_PB_BODY_GROUP_NAME_ABB">Gruppenavn</text>
+</string_table>
diff --git a/res/deu-DE.xml b/res/deu-DE.xml
new file mode 100755 (executable)
index 0000000..2bc4e79
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Jahrestag</text>
+    <text id="IDS_PB_BODY_COMPANY">Firma</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Beruf</text>
+    <text id="IDS_COM_POP_CLOSE">Schließen</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Alle auswählen</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_COM_SK_NEW">Neu</text>
+    <text id="IDS_PB_SK_CANCEL">Abbrechen</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_COM_POP_SUCCESS">Abgeschlossen</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</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_PB_HEADER_SELECT_GROUP">Gruppe auswählen</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_PB_BODY_WORK">Arbeit</text>
+    <text id="IDS_COM_SK_EDIT">Bearbeiten</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Keine Gruppe</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ungültige E-Mail-Adresse</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_COM_BODY_COPY">Kopieren</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</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_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_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_PB_BODY_CITY">Stadt</text>
+    <text id="IDS_COM_BODY_CREATE">Erstellen</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Abteilung</text>
+    <text id="IDS_PB_BODY_NICKNAME">Spitzname</text>
+    <text id="IDS_COM_BODY_CALL">Anruf</text>
+    <text id="IDS_PB_BODY_SUFFIX">Namenszusatz</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unbekannt</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_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_BODY_DEFAULT_GROUP_WORK">Büro</text>
+    <text id="IDS_COM_BODY_REMOVE">Entfernen</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postleitzahl</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_PB_BODY_GROUP_NAME_ABB">Gruppenname</text>
+</string_table>
diff --git a/res/ell-GR.xml b/res/ell-GR.xml
new file mode 100755 (executable)
index 0000000..0d9532a
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Κλείσιμο</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Επιλογή όλων</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_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">Ok</text>
+    <text id="IDS_PB_BODY_MOBILE">Κινητό</text>
+    <text id="IDS_COM_BODY_EMAIL">Email</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Επιλογή ομάδας</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_PB_BODY_WORK">Εργασία</text>
+    <text id="IDS_COM_SK_EDIT">Επεξεργ.</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Καμία ομάδα</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Μη έγκυρη διεύθυνση email</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_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_COM_BODY_DETAILS_NAME">Όνομα</text>
+    <text id="IDS_PB_BODY_CITY">Πόλη</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_POP_UNKNOWN">Άγνωστο</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_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_BODY_DEFAULT_GROUP_WORK">Εργασία</text>
+    <text id="IDS_COM_BODY_REMOVE">Κατάργηση</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Ταχυδρομικός κώδικας</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_PB_BODY_GROUP_NAME_ABB">Όνομα ομάδας</text>
+</string_table>
diff --git a/res/eng-GB.xml b/res/eng-GB.xml
new file mode 100755 (executable)
index 0000000..995127b
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Anniversary</text>
+    <text id="IDS_PB_BODY_COMPANY">Company</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Job title</text>
+    <text id="IDS_COM_POP_CLOSE">Close</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Select all</text>
+    <text id="IDS_PB_OPT_ADD_TO_FAVORITES">Add to favourites</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_COM_SK_NEW">New</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel</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_COM_POP_SUCCESS">Success</text>
+    <text id="IDS_PB_BODY_COUNTRY">Country</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_PB_HEADER_SELECT_GROUP">Select group</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_PB_BODY_WORK">Work</text>
+    <text id="IDS_COM_SK_EDIT">Edit</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">No group</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Invalid email address</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_COM_BODY_COPY">Copy</text>
+    <text id="IDS_PB_BODY_ADDRESS">Address</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_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_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_PB_BODY_CITY">City</text>
+    <text id="IDS_COM_BODY_CREATE">Create</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Department</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nickname</text>
+    <text id="IDS_COM_BODY_CALL">Call</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unknown</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_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_BODY_DEFAULT_GROUP_WORK">Work</text>
+    <text id="IDS_COM_BODY_REMOVE">Remove</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postal code</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_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 100755 (executable)
index 0000000..85a056b
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Anniversary</text>
+    <text id="IDS_PB_BODY_COMPANY">Company</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Job title</text>
+    <text id="IDS_COM_POP_CLOSE">Close</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Select all</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_COM_SK_NEW">New</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel</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_COM_POP_SUCCESS">Success</text>
+    <text id="IDS_PB_BODY_COUNTRY">Country</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_PB_HEADER_SELECT_GROUP">Select group</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_PB_BODY_WORK">Work</text>
+    <text id="IDS_COM_SK_EDIT">Edit</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">No Group</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Invalid Email address</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_COM_BODY_COPY">Copy</text>
+    <text id="IDS_PB_BODY_ADDRESS">Address</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_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_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_PB_BODY_CITY">City</text>
+    <text id="IDS_COM_BODY_CREATE">Create</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Department</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nickname</text>
+    <text id="IDS_COM_BODY_CALL">Call</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unknown</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_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_BODY_DEFAULT_GROUP_WORK">Work</text>
+    <text id="IDS_COM_BODY_REMOVE">Remove</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postal code</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_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 100755 (executable)
index 0000000..326a0cb
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Anniversary</text>
+    <text id="IDS_PB_BODY_COMPANY">Company</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Job title</text>
+    <text id="IDS_COM_POP_CLOSE">Close</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Select all</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_COM_SK_NEW">New</text>
+    <text id="IDS_PB_SK_CANCEL">Cancel</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">Remove</text>
+    <text id="IDS_COM_POP_SUCCESS">Success</text>
+    <text id="IDS_PB_BODY_COUNTRY">Country</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_PB_HEADER_SELECT_GROUP">Select group</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">Delete 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_PB_BODY_WORK">Work</text>
+    <text id="IDS_COM_SK_EDIT">Edit</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">No Group</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Invalid email address</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_COM_BODY_COPY">Copy</text>
+    <text id="IDS_PB_BODY_ADDRESS">Address</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_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_COM_BODY_DETAILS_NAME">Name</text>
+    <text id="IDS_PB_BODY_CITY">City</text>
+    <text id="IDS_COM_BODY_CREATE">Create</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Department</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nickname</text>
+    <text id="IDS_COM_BODY_CALL">Call</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Unknown</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_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_BODY_DEFAULT_GROUP_WORK">Work</text>
+    <text id="IDS_COM_BODY_REMOVE">Delete</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postal code</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_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 100755 (executable)
index 0000000..3492637
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Tähtpäev</text>
+    <text id="IDS_PB_BODY_COMPANY">Ettevõte</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Ametinimetus</text>
+    <text id="IDS_COM_POP_CLOSE">Sulge</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vali kõik</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_COM_SK_NEW">Uus</text>
+    <text id="IDS_PB_SK_CANCEL">Tühista</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_COM_POP_SUCCESS">Õnnestus</text>
+    <text id="IDS_PB_BODY_COUNTRY">Riik</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_PB_HEADER_SELECT_GROUP">Vali rühm</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_PB_BODY_WORK">Töö</text>
+    <text id="IDS_COM_SK_EDIT">Muuda</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Rühm puudub</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Vale e-posti aadress</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_COM_BODY_COPY">Kopeeri</text>
+    <text id="IDS_PB_BODY_ADDRESS">Aadress</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_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_COM_BODY_DETAILS_NAME">Nimi</text>
+    <text id="IDS_PB_BODY_CITY">Linn</text>
+    <text id="IDS_COM_BODY_CREATE">Loo</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Osakond</text>
+    <text id="IDS_PB_BODY_NICKNAME">Hüüdnimi</text>
+    <text id="IDS_COM_BODY_CALL">Helista</text>
+    <text id="IDS_PB_BODY_SUFFIX">Järelliide</text>
+    <text id="IDS_COM_POP_UNKNOWN">Tundmatu</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_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_BODY_DEFAULT_GROUP_WORK">Töö</text>
+    <text id="IDS_COM_BODY_REMOVE">Eemalda</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postiindeks</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_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 100755 (executable)
index 0000000..8b47760
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Urteurrena</text>
+    <text id="IDS_PB_BODY_COMPANY">Enpresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Kargua</text>
+    <text id="IDS_COM_POP_CLOSE">Itxi</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Denak aukeratu</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_COM_SK_NEW">Berria</text>
+    <text id="IDS_PB_SK_CANCEL">Ezeztatu</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_COM_POP_SUCCESS">Behar bezala</text>
+    <text id="IDS_PB_BODY_COUNTRY">Herrialdea</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_PB_HEADER_SELECT_GROUP">Taldea aukeratu</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_PB_BODY_WORK">Lana</text>
+    <text id="IDS_COM_SK_EDIT">Editatu</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Talderik ez</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Helbide elektroniko baliogabea</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_COM_BODY_COPY">Kopiatu</text>
+    <text id="IDS_PB_BODY_ADDRESS">Helbidea</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_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_COM_BODY_DETAILS_NAME">Izena</text>
+    <text id="IDS_PB_BODY_CITY">Hiria</text>
+    <text id="IDS_COM_BODY_CREATE">Sortu</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Saila</text>
+    <text id="IDS_PB_BODY_NICKNAME">Ezizena</text>
+    <text id="IDS_COM_BODY_CALL">Deitu</text>
+    <text id="IDS_PB_BODY_SUFFIX">Atzizkia</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ezezaguna</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_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_BODY_DEFAULT_GROUP_WORK">Lana</text>
+    <text id="IDS_COM_BODY_REMOVE">Kendu</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Posta kodea</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_PB_BODY_GROUP_NAME_ABB">Talde izena</text>
+</string_table>
diff --git a/res/fin-FI.xml b/res/fin-FI.xml
new file mode 100755 (executable)
index 0000000..3b109d6
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Vuosipäivä</text>
+    <text id="IDS_PB_BODY_COMPANY">Yritys</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Työtehtävä</text>
+    <text id="IDS_COM_POP_CLOSE">Sulje</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Valitse kaikki</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_COM_SK_NEW">Uusi</text>
+    <text id="IDS_PB_SK_CANCEL">Peruuta</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_COM_POP_SUCCESS">Valmis</text>
+    <text id="IDS_PB_BODY_COUNTRY">Maa</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_PB_HEADER_SELECT_GROUP">Valitse ryhmä</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_PB_BODY_WORK">Työ</text>
+    <text id="IDS_COM_SK_EDIT">Muokkaa</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ei ryhmää</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Virheellinen sähköpostiosoite</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_COM_BODY_COPY">Kopioi</text>
+    <text id="IDS_PB_BODY_ADDRESS">Osoite</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_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_COM_BODY_DETAILS_NAME">Nimi</text>
+    <text id="IDS_PB_BODY_CITY">Kaupunki</text>
+    <text id="IDS_COM_BODY_CREATE">Luo</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Osasto</text>
+    <text id="IDS_PB_BODY_NICKNAME">Lempinimi</text>
+    <text id="IDS_COM_BODY_CALL">Puhelu</text>
+    <text id="IDS_PB_BODY_SUFFIX">Pääte</text>
+    <text id="IDS_COM_POP_UNKNOWN">Tuntematon</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_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_BODY_DEFAULT_GROUP_WORK">Työ</text>
+    <text id="IDS_COM_BODY_REMOVE">Poista</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postinumero</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_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 100755 (executable)
index 0000000..e61ef24
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Occasion</text>
+    <text id="IDS_PB_BODY_COMPANY">Société</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Profession</text>
+    <text id="IDS_COM_POP_CLOSE">Fermer</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Sélectionner tout</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_COM_SK_NEW">Nouveau</text>
+    <text id="IDS_PB_SK_CANCEL">Annuler</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_COM_POP_SUCCESS">Terminé</text>
+    <text id="IDS_PB_BODY_COUNTRY">Pays</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_PB_HEADER_SELECT_GROUP">Sélectionner groupe</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_PB_BODY_WORK">Professionnel</text>
+    <text id="IDS_COM_SK_EDIT">Modifier</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Aucun groupe</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adresse courriel incorrecte</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_COM_BODY_COPY">Copier</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</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_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_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_PB_BODY_CITY">Ville</text>
+    <text id="IDS_COM_BODY_CREATE">Créer</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Service</text>
+    <text id="IDS_PB_BODY_NICKNAME">Surnom</text>
+    <text id="IDS_COM_BODY_CALL">Appeler</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffixe</text>
+    <text id="IDS_COM_POP_UNKNOWN">Inconnu</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_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_BODY_DEFAULT_GROUP_WORK">Professionnel</text>
+    <text id="IDS_COM_BODY_REMOVE">Supprimer</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Code postal</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_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 100755 (executable)
index 0000000..4ec1b32
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Occasion</text>
+    <text id="IDS_PB_BODY_COMPANY">Société</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Profession</text>
+    <text id="IDS_COM_POP_CLOSE">Fermer</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Sélect. tout</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_COM_SK_NEW">Nouveau</text>
+    <text id="IDS_PB_SK_CANCEL">Annuler</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_COM_POP_SUCCESS">Terminé</text>
+    <text id="IDS_PB_BODY_COUNTRY">Pays</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_PB_HEADER_SELECT_GROUP">Sélectionner groupe</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_PB_BODY_WORK">Pro.</text>
+    <text id="IDS_COM_SK_EDIT">Modifier</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Aucun groupe</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">E-mail incorrect</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_COM_BODY_COPY">Copier</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</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_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">Famille</text>
+    <text id="IDS_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_PB_BODY_CITY">Ville</text>
+    <text id="IDS_COM_BODY_CREATE">Créer</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Service</text>
+    <text id="IDS_PB_BODY_NICKNAME">Surnom</text>
+    <text id="IDS_COM_BODY_CALL">Appel</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffixe</text>
+    <text id="IDS_COM_POP_UNKNOWN">Inconnu</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_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_BODY_DEFAULT_GROUP_WORK">Professionnel</text>
+    <text id="IDS_COM_BODY_REMOVE">Supprimer</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Code postal</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_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 100755 (executable)
index 0000000..fd6e5d7
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Lá cinn bliana</text>
+    <text id="IDS_PB_BODY_COMPANY">Cuideachta</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Teideal poist</text>
+    <text id="IDS_COM_POP_CLOSE">Dún</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Roghnaigh gach</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_COM_SK_NEW">Nua</text>
+    <text id="IDS_PB_SK_CANCEL">Cuir ar ceal</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_COM_POP_SUCCESS">D’éirigh leis</text>
+    <text id="IDS_PB_BODY_COUNTRY">Tír</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_PB_HEADER_SELECT_GROUP">Roghnaigh grúpa</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_PB_BODY_WORK">Obair</text>
+    <text id="IDS_COM_SK_EDIT">Eagraigh</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Níl grúpa ann</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Seoladh r-phoist neamhbhailí</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_COM_BODY_COPY">Cóipeáil</text>
+    <text id="IDS_PB_BODY_ADDRESS">Seoladh</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_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_COM_BODY_DETAILS_NAME">Ainm</text>
+    <text id="IDS_PB_BODY_CITY">Cathair</text>
+    <text id="IDS_COM_BODY_CREATE">Cruthaigh</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Roinn</text>
+    <text id="IDS_PB_BODY_NICKNAME">Leasainm</text>
+    <text id="IDS_COM_BODY_CALL">Glaoigh</text>
+    <text id="IDS_PB_BODY_SUFFIX">Iarmhír</text>
+    <text id="IDS_COM_POP_UNKNOWN">Anaithnid</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_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_BODY_DEFAULT_GROUP_WORK">Obair</text>
+    <text id="IDS_COM_BODY_REMOVE">Bain</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Cód poist</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_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 100755 (executable)
index 0000000..ba6e166
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Aniversario</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Cargo</text>
+    <text id="IDS_COM_POP_CLOSE">Pechar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccionar todo</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_COM_SK_NEW">Novo</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</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_COM_POP_SUCCESS">Éxito</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</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_PB_HEADER_SELECT_GROUP">Seleccionar grupo</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_PB_BODY_WORK">Traballo</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Sen grupo</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Enderezo de correo electrónico non válido</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_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Enderezo</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_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_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_PB_BODY_CITY">Cidade</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_NICKNAME">Alcume</text>
+    <text id="IDS_COM_BODY_CALL">Chamar</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufixo</text>
+    <text id="IDS_COM_POP_UNKNOWN">Descoñecido</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_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_BODY_DEFAULT_GROUP_WORK">Traballo</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</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_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 100755 (executable)
index 0000000..1d93fc5
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">बंद करें</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">सभी चुनें</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_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_PB_HEADER_SELECT_GROUP">समूह चुनें</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_PB_BODY_WORK">काम</text>
+    <text id="IDS_COM_SK_EDIT">संपादन</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">कोई समूह नहीं है</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">अमान्य ईमेल पता</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_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_COM_BODY_DETAILS_NAME">नाम</text>
+    <text id="IDS_PB_BODY_CITY">शहर</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_POP_UNKNOWN">अज्ञात</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_PB_BODY_NOTE">टिप्पणी</text>
+    <text id="IDS_COM_BODY_CONTACT_SETTINGS">कांटेक्ट 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_BODY_DEFAULT_GROUP_WORK">काम</text>
+    <text id="IDS_COM_BODY_REMOVE">हटाएँ</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">डाक का कोड</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_PB_BODY_GROUP_NAME_ABB">समूह का नाम</text>
+</string_table>
diff --git a/res/hrv-HR.xml b/res/hrv-HR.xml
new file mode 100755 (executable)
index 0000000..85f3ecd
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Godišnjica</text>
+    <text id="IDS_PB_BODY_COMPANY">Tvrtka</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Radno mjesto</text>
+    <text id="IDS_COM_POP_CLOSE">Prekid</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Odaberi sve</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_COM_SK_NEW">Nova</text>
+    <text id="IDS_PB_SK_CANCEL">Prekid</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_COM_POP_SUCCESS">Uspješno</text>
+    <text id="IDS_PB_BODY_COUNTRY">Država</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_PB_HEADER_SELECT_GROUP">Odaberite grupu</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_PB_BODY_WORK">Posao</text>
+    <text id="IDS_COM_SK_EDIT">Uredi</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nema grupe</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neispravna email adresa</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_COM_BODY_COPY">Kopiraj</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</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_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_COM_BODY_DETAILS_NAME">Naziv</text>
+    <text id="IDS_PB_BODY_CITY">Grad</text>
+    <text id="IDS_COM_BODY_CREATE">Novi</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Odjel</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nadimak</text>
+    <text id="IDS_COM_BODY_CALL">Poziv</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufiks</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nepoznato</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_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_BODY_DEFAULT_GROUP_WORK">Posao</text>
+    <text id="IDS_COM_BODY_REMOVE">Ukloni</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poštanski broj</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_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 100755 (executable)
index 0000000..54756eb
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Évforduló</text>
+    <text id="IDS_PB_BODY_COMPANY">Cég</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Beosztás</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_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_COM_SK_NEW">Új</text>
+    <text id="IDS_PB_SK_CANCEL">Mégse</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_COM_POP_SUCCESS">Sikeres</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ország</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_PB_HEADER_SELECT_GROUP">Válasszon csoportot</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_PB_BODY_WORK">Munkahelyi</text>
+    <text id="IDS_COM_SK_EDIT">Szerkeszt</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nincs csoport</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Érvénytelen e-mail cím</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_COM_BODY_COPY">Másol</text>
+    <text id="IDS_PB_BODY_ADDRESS">Cím</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_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_COM_BODY_DETAILS_NAME">Név</text>
+    <text id="IDS_PB_BODY_CITY">Város</text>
+    <text id="IDS_COM_BODY_CREATE">Létrehoz</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Osztály</text>
+    <text id="IDS_PB_BODY_NICKNAME">Becenév</text>
+    <text id="IDS_COM_BODY_CALL">Hívás</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titulus</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ismeretlen</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_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_BODY_DEFAULT_GROUP_WORK">Munkahelyi</text>
+    <text id="IDS_COM_BODY_REMOVE">Eltávolít</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Irányítószám</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_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 100755 (executable)
index 0000000..39417cd
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Փակել</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Ընտրել բոլորը</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_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_PB_HEADER_SELECT_GROUP">Ընտրեք խումբը</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_PB_BODY_WORK">Աշխատանք</text>
+    <text id="IDS_COM_SK_EDIT">Խմբագրել</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Խումբ չկա</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Անվավեր էլ. փոստի հասցե</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_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_COM_BODY_DETAILS_NAME">Անուն</text>
+    <text id="IDS_PB_BODY_CITY">Քաղաք</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_POP_UNKNOWN">Անհայտ</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_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_BODY_DEFAULT_GROUP_WORK">Աշխատանք</text>
+    <text id="IDS_COM_BODY_REMOVE">Հեռացնել</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Փոստային ինդեքս</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_PB_BODY_GROUP_NAME_ABB">Խմբի անվանումը</text>
+</string_table>
diff --git a/res/isl-IS.xml b/res/isl-IS.xml
new file mode 100755 (executable)
index 0000000..5536c1e
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Afmæli</text>
+    <text id="IDS_PB_BODY_COMPANY">Fyrirtæki</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Starfsheiti</text>
+    <text id="IDS_COM_POP_CLOSE">Loka</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Velja allt</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_COM_SK_NEW">Nýr</text>
+    <text id="IDS_PB_SK_CANCEL">Hætta við</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_COM_POP_SUCCESS">Árangur</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</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_PB_HEADER_SELECT_GROUP">Velja hóp</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_PB_BODY_WORK">Vinna</text>
+    <text id="IDS_COM_SK_EDIT">Breyta</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Enginn hópur</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ógilt netfang</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_COM_BODY_COPY">Afrita</text>
+    <text id="IDS_PB_BODY_ADDRESS">Heimilisfang</text>
+    <text id="IDS_PB_BODY_NO_FAVOURITES">Ekkert uppáhalds</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_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_COM_BODY_DETAILS_NAME">Heiti</text>
+    <text id="IDS_PB_BODY_CITY">Borg</text>
+    <text id="IDS_COM_BODY_CREATE">Búa til</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Deild</text>
+    <text id="IDS_PB_BODY_NICKNAME">Gælunafn</text>
+    <text id="IDS_COM_BODY_CALL">Símtal</text>
+    <text id="IDS_PB_BODY_SUFFIX">Viðskeyti</text>
+    <text id="IDS_COM_POP_UNKNOWN">Óþekkt</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_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_BODY_DEFAULT_GROUP_WORK">Vinna</text>
+    <text id="IDS_COM_BODY_REMOVE">Fjarlægja</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Póstnúmer</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_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 100755 (executable)
index 0000000..648f2aa
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Anniversario</text>
+    <text id="IDS_PB_BODY_COMPANY">Azienda</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Mansione</text>
+    <text id="IDS_COM_POP_CLOSE">Chiudi</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleziona tutto</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_COM_SK_NEW">Nuovo</text>
+    <text id="IDS_PB_SK_CANCEL">Annulla</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_COM_POP_SUCCESS">Operazione eseguita</text>
+    <text id="IDS_PB_BODY_COUNTRY">Paese</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_PB_HEADER_SELECT_GROUP">Seleziona gruppo</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_PB_BODY_WORK">Ufficio</text>
+    <text id="IDS_COM_SK_EDIT">Modifica</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nessun gruppo</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Indirizzo e-mail non valido</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_COM_BODY_COPY">Copia</text>
+    <text id="IDS_PB_BODY_ADDRESS">Indirizzo</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_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_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_PB_BODY_CITY">Città</text>
+    <text id="IDS_COM_BODY_CREATE">Crea</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Reparto</text>
+    <text id="IDS_PB_BODY_NICKNAME">Soprannome</text>
+    <text id="IDS_COM_BODY_CALL">Chiama</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffisso</text>
+    <text id="IDS_COM_POP_UNKNOWN">Sconosciuto</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_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_BODY_DEFAULT_GROUP_WORK">Ufficio</text>
+    <text id="IDS_COM_BODY_REMOVE">Rimuovi</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">CAP</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_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 100755 (executable)
index 0000000..0e3cf38
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">閉じる</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全て選択</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">基本Eメールとして指定</text>
+    <text id="IDS_PB_BODY_OTHER">その他</text>
+    <text id="IDS_COM_POP_REMOVED">削除しました。</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">Eメール</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">グループを選択</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_PB_BODY_WORK">勤務先</text>
+    <text id="IDS_COM_SK_EDIT">編集</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">グループなし</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Eメールアドレスが正しくありません。</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_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_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_COM_BODY_DETAILS_NAME">名前</text>
+    <text id="IDS_PB_BODY_CITY">市区町村</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_POP_UNKNOWN">不明</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_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_BODY_DEFAULT_GROUP_WORK">勤務先</text>
+    <text id="IDS_COM_BODY_REMOVE">削除</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">郵便番号</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_PB_BODY_GROUP_NAME_ABB">グループ名</text>
+</string_table>
diff --git a/res/kat-GE.xml b/res/kat-GE.xml
new file mode 100755 (executable)
index 0000000..312ecb8
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">დახურვა</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">ყველას არჩევა</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_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_PB_HEADER_SELECT_GROUP">ჯგუფის შერჩევა</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_PB_BODY_WORK">სამსახური</text>
+    <text id="IDS_COM_SK_EDIT">რედაქტ.</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">ჯგუფი არ არის</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">ელ.ფოსტა არასწორია</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_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_COM_BODY_DETAILS_NAME">სახელი</text>
+    <text id="IDS_PB_BODY_CITY">ქალაქი</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_POP_UNKNOWN">უცნობი</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_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_BODY_DEFAULT_GROUP_WORK">სამსახური</text>
+    <text id="IDS_COM_BODY_REMOVE">წაშლა</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">საფოსტო კოდი</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_PB_BODY_GROUP_NAME_ABB">ჯგუფის სახელი</text>
+</string_table>
diff --git a/res/kaz-KZ.xml b/res/kaz-KZ.xml
new file mode 100755 (executable)
index 0000000..d504d12
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Жабу</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Бәрін бөлектеу</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_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_PB_HEADER_SELECT_GROUP">Топты таңдау</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_PB_BODY_WORK">Жұмыс</text>
+    <text id="IDS_COM_SK_EDIT">Өзгер.</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Топ жоқ</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Электрондық пошта мекен-жайы жарамсыз</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_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_COM_BODY_DETAILS_NAME">Аты</text>
+    <text id="IDS_PB_BODY_CITY">Қала</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_POP_UNKNOWN">Белгісіз</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_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_BODY_DEFAULT_GROUP_WORK">Жұмыс</text>
+    <text id="IDS_COM_BODY_REMOVE">Жоғалту</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Пошта индексі</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_PB_BODY_GROUP_NAME_ABB">Топ атауы</text>
+</string_table>
diff --git a/res/kor-KR.xml b/res/kor-KR.xml
new file mode 100755 (executable)
index 0000000..9c6efcd
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">닫기</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">모두 선택</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_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_PB_HEADER_SELECT_GROUP">그룹 선택</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_PB_BODY_WORK">회사</text>
+    <text id="IDS_COM_SK_EDIT">편집</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">그룹이 없습니다</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">이메일 주소가 바르지 않습니다</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_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_COM_BODY_DETAILS_NAME">이름</text>
+    <text id="IDS_PB_BODY_CITY">도시</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_POP_UNKNOWN">알 수 없음</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_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_BODY_DEFAULT_GROUP_WORK">직장</text>
+    <text id="IDS_COM_BODY_REMOVE">제거</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">우편번호</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_PB_BODY_GROUP_NAME_ABB">그룹 이름</text>
+</string_table>
diff --git a/res/lav-LV.xml b/res/lav-LV.xml
new file mode 100755 (executable)
index 0000000..db4618e
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Jubileja</text>
+    <text id="IDS_PB_BODY_COMPANY">Uzņēmums</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Amata nosaukums</text>
+    <text id="IDS_COM_POP_CLOSE">Aizvērt</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Izv. visu</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_COM_SK_NEW">Jauns</text>
+    <text id="IDS_PB_SK_CANCEL">Atcelt</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_COM_POP_SUCCESS">Veiksmīgi</text>
+    <text id="IDS_PB_BODY_COUNTRY">Valsts</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_PB_HEADER_SELECT_GROUP">Atlasīt grupu</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_PB_BODY_WORK">Darbā</text>
+    <text id="IDS_COM_SK_EDIT">Rediģēt</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nav grupas</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Nederīga e-pasta adrese</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_COM_BODY_COPY">Kopēt</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adrese</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_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_COM_BODY_DETAILS_NAME">Nosaukums</text>
+    <text id="IDS_PB_BODY_CITY">Pilsēta</text>
+    <text id="IDS_COM_BODY_CREATE">Izveidot</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Nodaļa</text>
+    <text id="IDS_PB_BODY_NICKNAME">Segvārds</text>
+    <text id="IDS_COM_BODY_CALL">Zvans</text>
+    <text id="IDS_PB_BODY_SUFFIX">Piedēklis</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nezināms</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_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_BODY_DEFAULT_GROUP_WORK">Darbs</text>
+    <text id="IDS_COM_BODY_REMOVE">Noņemt</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Pasta indekss</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_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 100755 (executable)
index 0000000..c220a1c
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Sukaktis</text>
+    <text id="IDS_PB_BODY_COMPANY">Įmonė</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Pareigos</text>
+    <text id="IDS_COM_POP_CLOSE">Uždaryti</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Pasirinkti viską</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_COM_SK_NEW">Naujas</text>
+    <text id="IDS_PB_SK_CANCEL">Atšaukti</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_COM_POP_SUCCESS">Pavyko</text>
+    <text id="IDS_PB_BODY_COUNTRY">Šalis</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_PB_HEADER_SELECT_GROUP">Pasirinkti grupę</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_PB_BODY_WORK">Darbas</text>
+    <text id="IDS_COM_SK_EDIT">Redaguoti</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nėra grupės</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neteisingas el. pašto adresas</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_COM_BODY_COPY">Kopijuoti</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresas</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_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_COM_BODY_DETAILS_NAME">Pavadinimas</text>
+    <text id="IDS_PB_BODY_CITY">Miestas</text>
+    <text id="IDS_COM_BODY_CREATE">Kurti</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Skyrius</text>
+    <text id="IDS_PB_BODY_NICKNAME">Slapyvardis</text>
+    <text id="IDS_COM_BODY_CALL">Skambutis</text>
+    <text id="IDS_PB_BODY_SUFFIX">Priesaga</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nežinomas</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šsaugoti</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_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_BODY_DEFAULT_GROUP_WORK">Darbas</text>
+    <text id="IDS_COM_BODY_REMOVE">Šalinti</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Pašto kodas</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_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 100755 (executable)
index 0000000..f6c6178
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Затвори</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Избери ги сите</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">Означи како основен email</text>
+    <text id="IDS_PB_BODY_OTHER">Друго</text>
+    <text id="IDS_COM_POP_REMOVED">Отстрането</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">E-mail</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Избери група</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_PB_BODY_WORK">Работа</text>
+    <text id="IDS_COM_SK_EDIT">Измени</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Без група</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Погрешна email адреса</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_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_COM_BODY_DETAILS_NAME">Име</text>
+    <text id="IDS_PB_BODY_CITY">Град</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_POP_UNKNOWN">Непознато</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_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_BODY_DEFAULT_GROUP_WORK">Работа</text>
+    <text id="IDS_COM_BODY_REMOVE">Отстрани</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Поштенски број</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_PB_BODY_GROUP_NAME_ABB">Име на група</text>
+</string_table>
diff --git a/res/nld-NL.xml b/res/nld-NL.xml
new file mode 100755 (executable)
index 0000000..36e8f59
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Verjaardag</text>
+    <text id="IDS_PB_BODY_COMPANY">Bedrijf</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Functie</text>
+    <text id="IDS_COM_POP_CLOSE">Sluiten</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Alles selecteren</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_COM_SK_NEW">Nieuw</text>
+    <text id="IDS_PB_SK_CANCEL">Annuleren</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">Overige</text>
+    <text id="IDS_COM_POP_REMOVED">Verwijderd</text>
+    <text id="IDS_COM_POP_SUCCESS">Voltooid</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</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_PB_HEADER_SELECT_GROUP">Groep selecteren</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_PB_BODY_WORK">Zakelijk</text>
+    <text id="IDS_COM_SK_EDIT">Bewerken</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Geen groep</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ongeldig e-mailadres</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_COM_BODY_COPY">Kopiëren</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adres</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_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_COM_BODY_DETAILS_NAME">Naam</text>
+    <text id="IDS_PB_BODY_CITY">Plaats</text>
+    <text id="IDS_COM_BODY_CREATE">Nieuw</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Afdeling</text>
+    <text id="IDS_PB_BODY_NICKNAME">Bijnaam</text>
+    <text id="IDS_COM_BODY_CALL">Oproep</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Onbekend</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_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_BODY_DEFAULT_GROUP_WORK">Zakelijk</text>
+    <text id="IDS_COM_BODY_REMOVE">Verwijderen</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postcode</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_PB_BODY_GROUP_NAME_ABB">Groepsnaam</text>
+</string_table>
diff --git a/res/nob-NO.xml b/res/nob-NO.xml
new file mode 100755 (executable)
index 0000000..d096d20
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Årsdag</text>
+    <text id="IDS_PB_BODY_COMPANY">Selskap</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Jobbtittel</text>
+    <text id="IDS_COM_POP_CLOSE">Lukk</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Merk alt</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_COM_SK_NEW">Ny</text>
+    <text id="IDS_PB_SK_CANCEL">Avbryt</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_COM_POP_SUCCESS">Fullført</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</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_PB_HEADER_SELECT_GROUP">Velg gruppe</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_PB_BODY_WORK">Arbeid</text>
+    <text id="IDS_COM_SK_EDIT">Rediger</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ingen grupper</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ugyldig e-postadresse</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_COM_BODY_COPY">Kopier</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresse</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_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_COM_BODY_DETAILS_NAME">Navn</text>
+    <text id="IDS_PB_BODY_CITY">Sted</text>
+    <text id="IDS_COM_BODY_CREATE">Opprett</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Avdeling</text>
+    <text id="IDS_PB_BODY_NICKNAME">Kallenavn</text>
+    <text id="IDS_COM_BODY_CALL">Ring</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffiks</text>
+    <text id="IDS_COM_POP_UNKNOWN">Ukjent</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_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_BODY_DEFAULT_GROUP_WORK">Arbeid</text>
+    <text id="IDS_COM_BODY_REMOVE">Fjern</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postnummer</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_PB_BODY_GROUP_NAME_ABB">Gruppenavn</text>
+</string_table>
diff --git a/res/pol-PL.xml b/res/pol-PL.xml
new file mode 100755 (executable)
index 0000000..9d40fcc
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Rocznica</text>
+    <text id="IDS_PB_BODY_COMPANY">Firma</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Stanowisko</text>
+    <text id="IDS_COM_POP_CLOSE">Zamknij</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Zaznacz wszystko</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_COM_SK_NEW">Nowy</text>
+    <text id="IDS_PB_SK_CANCEL">Anuluj</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_COM_POP_SUCCESS">Zakończono</text>
+    <text id="IDS_PB_BODY_COUNTRY">Kraj</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_PB_HEADER_SELECT_GROUP">Wybierz grupę</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_PB_BODY_WORK">Praca</text>
+    <text id="IDS_COM_SK_EDIT">Edytuj</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Brak grupy</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Nieprawidłowy adres e-mail</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_COM_BODY_COPY">Kopiuj</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adres</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_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_COM_BODY_DETAILS_NAME">Nazwa</text>
+    <text id="IDS_PB_BODY_CITY">Miasto</text>
+    <text id="IDS_COM_BODY_CREATE">Utwórz</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Dział</text>
+    <text id="IDS_PB_BODY_NICKNAME">Pseudonim</text>
+    <text id="IDS_COM_BODY_CALL">Połączenie</text>
+    <text id="IDS_PB_BODY_SUFFIX">Nick</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nieznana</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_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_BODY_DEFAULT_GROUP_WORK">Praca</text>
+    <text id="IDS_COM_BODY_REMOVE">Usuń</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Kod pocztowy</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ślnie</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 100755 (executable)
index 0000000..559c60f
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Data comemorativa</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Título do trabalho</text>
+    <text id="IDS_COM_POP_CLOSE">Fechar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Selecionar tudo</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_COM_SK_NEW">Novo</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</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_COM_POP_SUCCESS">Sucesso</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</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_PB_HEADER_SELECT_GROUP">Selecionar grupo</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_PB_BODY_WORK">Trabalho</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nenhum grupo</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Endereço de e-mail inválido</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_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Endereço</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_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_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_PB_BODY_CITY">Cidade</text>
+    <text id="IDS_COM_BODY_CREATE">Criar</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_NICKNAME">Apelido</text>
+    <text id="IDS_COM_BODY_CALL">Chamada</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufixo</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconhecido</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_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_BODY_DEFAULT_GROUP_WORK">Trabalho</text>
+    <text id="IDS_COM_BODY_REMOVE">Remover</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</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_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 100755 (executable)
index 0000000..309d65e
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Aniversário</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Título</text>
+    <text id="IDS_COM_POP_CLOSE">Fechar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Selec. tudo</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_COM_SK_NEW">Nova</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</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_COM_POP_SUCCESS">Concluído</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</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_PB_HEADER_SELECT_GROUP">Seleccionar grupo</text>
+    <text id="IDS_PB_SK_ADD_MEMBER">Ad membro</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_PB_BODY_WORK">Empresa</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nenhum grupo</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Endereço de e-mail inválido</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_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Endereço</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_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_COM_BODY_DETAILS_NAME">Nome</text>
+    <text id="IDS_PB_BODY_CITY">Cidade</text>
+    <text id="IDS_COM_BODY_CREATE">Criar</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_NICKNAME">Pseudónimo</text>
+    <text id="IDS_COM_BODY_CALL">Ligar</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufixo</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconhecido</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_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_BODY_DEFAULT_GROUP_WORK">Empresa</text>
+    <text id="IDS_COM_BODY_REMOVE">Remover</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</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_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 100755 (executable)
index 0000000..adfcaff
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Aniversare</text>
+    <text id="IDS_PB_BODY_COMPANY">Firmă</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Funcţie</text>
+    <text id="IDS_COM_POP_CLOSE">Închidere</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Selectare toate</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_COM_SK_NEW">Nou</text>
+    <text id="IDS_PB_SK_CANCEL">Anulare</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_COM_POP_SUCCESS">Succes</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ţară</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_PB_HEADER_SELECT_GROUP">Selectare grup</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_PB_BODY_WORK">Serviciu</text>
+    <text id="IDS_COM_SK_EDIT">Editare</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Niciun grup</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Adresă e-mail invalidă</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_COM_BODY_COPY">Copiere</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresă</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_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_COM_BODY_DETAILS_NAME">Nume</text>
+    <text id="IDS_PB_BODY_CITY">Oraş</text>
+    <text id="IDS_COM_BODY_CREATE">Creare</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departament</text>
+    <text id="IDS_PB_BODY_NICKNAME">Pseudonim</text>
+    <text id="IDS_COM_BODY_CALL">Apel</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Necunoscut</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_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_BODY_DEFAULT_GROUP_WORK">Serviciu</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminare</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Cod poştal</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_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 100755 (executable)
index 0000000..f2572b0
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Закрыть</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Выбрать все</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_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">E-mail</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Выберите группу</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_PB_BODY_WORK">Рабочий</text>
+    <text id="IDS_COM_SK_EDIT">Изменить</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Группа отсутствует</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Неправильный адрес эл. почты</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_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_COM_BODY_DETAILS_NAME">Имя</text>
+    <text id="IDS_PB_BODY_CITY">Город</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_POP_UNKNOWN">Неизвестно</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_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_BODY_DEFAULT_GROUP_WORK">Работа</text>
+    <text id="IDS_COM_BODY_REMOVE">Удалить</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Почтовый индекс</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_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..8123ba6
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..3d68f0a
Binary files /dev/null and b/res/screen-density-xhigh/00_Nocontents_text.png differ
diff --git a/res/screen-density-xhigh/00_button_cancel.png b/res/screen-density-xhigh/00_button_cancel.png
new file mode 100755 (executable)
index 0000000..f8eaf80
Binary files /dev/null and b/res/screen-density-xhigh/00_button_cancel.png differ
diff --git a/res/screen-density-xhigh/00_button_check.png b/res/screen-density-xhigh/00_button_check.png
new file mode 100644 (file)
index 0000000..6365ef5
Binary files /dev/null and b/res/screen-density-xhigh/00_button_check.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_circle_button.png b/res/screen-density-xhigh/00_circle_button.png
new file mode 100644 (file)
index 0000000..38283e2
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..dd2fe07
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..e2b27e2
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..41de1ed
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_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/00_noitems_no_contacts.png b/res/screen-density-xhigh/00_noitems_no_contacts.png
new file mode 100644 (file)
index 0000000..5f1ff4a
Binary files /dev/null and b/res/screen-density-xhigh/00_noitems_no_contacts.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_circle_bg_normal.png b/res/screen-density-xhigh/C02_button_circle_bg_normal.png
new file mode 100644 (file)
index 0000000..b5c5c6c
Binary files /dev/null and b/res/screen-density-xhigh/C02_button_circle_bg_normal.png differ
diff --git a/res/screen-density-xhigh/C02_button_circle_bg_normal_press.png b/res/screen-density-xhigh/C02_button_circle_bg_normal_press.png
new file mode 100644 (file)
index 0000000..9ffa194
Binary files /dev/null and b/res/screen-density-xhigh/C02_button_circle_bg_normal_press.png differ
diff --git a/res/screen-density-xhigh/C02_button_rename.png b/res/screen-density-xhigh/C02_button_rename.png
new file mode 100644 (file)
index 0000000..a30b486
Binary files /dev/null and b/res/screen-density-xhigh/C02_button_rename.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_folder_expand_closed.png b/res/screen-density-xhigh/C02_folder_expand_closed.png
new file mode 100644 (file)
index 0000000..555f414
Binary files /dev/null and b/res/screen-density-xhigh/C02_folder_expand_closed.png differ
diff --git a/res/screen-density-xhigh/C02_folder_expand_opened.png b/res/screen-density-xhigh/C02_folder_expand_opened.png
new file mode 100644 (file)
index 0000000..be8cd1a
Binary files /dev/null and b/res/screen-density-xhigh/C02_folder_expand_opened.png differ
diff --git a/res/screen-density-xhigh/C02_icon_add_group.png b/res/screen-density-xhigh/C02_icon_add_group.png
new file mode 100644 (file)
index 0000000..2e5e5b6
Binary files /dev/null and b/res/screen-density-xhigh/C02_icon_add_group.png differ
diff --git a/res/screen-density-xhigh/C02_icon_favorite.png b/res/screen-density-xhigh/C02_icon_favorite.png
new file mode 100644 (file)
index 0000000..3792de0
Binary files /dev/null and b/res/screen-density-xhigh/C02_icon_favorite.png differ
diff --git a/res/screen-density-xhigh/C02_icon_favorite_on.png b/res/screen-density-xhigh/C02_icon_favorite_on.png
new file mode 100644 (file)
index 0000000..69608a3
Binary files /dev/null and b/res/screen-density-xhigh/C02_icon_favorite_on.png differ
diff --git a/res/screen-density-xhigh/C02_list_icon_check.png b/res/screen-density-xhigh/C02_list_icon_check.png
new file mode 100644 (file)
index 0000000..943b7cf
Binary files /dev/null and b/res/screen-density-xhigh/C02_list_icon_check.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-density-xhigh/caller_ID.png b/res/screen-density-xhigh/caller_ID.png
new file mode 100644 (file)
index 0000000..b8e9ed9
Binary files /dev/null and b/res/screen-density-xhigh/caller_ID.png differ
diff --git a/res/screen-density-xhigh/caller_ID_default_96x96.png b/res/screen-density-xhigh/caller_ID_default_96x96.png
new file mode 100644 (file)
index 0000000..271c3bf
Binary files /dev/null and b/res/screen-density-xhigh/caller_ID_default_96x96.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..9685948
--- /dev/null
@@ -0,0 +1,20 @@
+<?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" type="NONE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR|FORM_STYLE_HEADER" 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>
+            <buttonItem actionId="0" disabledBGBitmapPath="" disabledIconPath="" highlightedBGBitmapPath="" highlightedIconPath="" normalBGBitmapPath="" normalIconPath="" position="BUTTON_POSITION_LEFT" pressedBGBitmapPath="" pressedIconPath="" style="BUTTON_ITEM_STYLE_TEXT" text="::IDS_COM_SK_SAVE" type="left"/>
+            <buttonItem actionId="1" disabledBGBitmapPath="" disabledIconPath="" highlightedBGBitmapPath="" highlightedIconPath="" normalBGBitmapPath="" normalIconPath="" position="BUTTON_POSITION_RIGHT" pressedBGBitmapPath="" pressedIconPath="" style="BUTTON_ITEM_STYLE_TEXT" text="::IDS_PB_SK_CANCEL" type="right"/>
+        </itemSet>
+    </Header>
+</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..da898a7
--- /dev/null
@@ -0,0 +1,36 @@
+<?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_SELECTOR_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="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_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"/>
+        <itemSet>
+            <footerItem actionId="11" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_COM_SK_DONE"/>
+            <footerItem actionId="12" disabledIconPath="" highlightedIconPath="" normalIconPath="" pressedIconPath="" selectedIconPath="" text="::IDS_PB_SK_CANCEL"/>
+            <buttonItem actionId="10" disabledBGBitmapPath="" disabledIconPath="" highlightedBGBitmapPath="" highlightedIconPath="" normalBGBitmapPath="00_icon_more.png" normalIconPath="" position="BUTTON_POSITION_LEFT" pressedBGBitmapPath="00_icon_more_press.png" pressedIconPath="" style="BUTTON_ITEM_STYLE_ICON" text="" type="left"/>
+        </itemSet>
+    </Footer>
+    <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="::IDS_PB_HEADER_SELECT_GROUP" titleTextColor=""/>
+        <itemSet/>
+    </Header>
+    <Label id="IDC_LABEL" parent="IDL_GROUP_SELECTOR_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#D7E1E8" backgroundColorOpacity="100" horizontalAlign="ALIGN_CENTER" text="::IDS_COM_POP_SELECTED" textColor="#4C5158" textSize="32" textStyle="LABEL_TEXT_STYLE_BOLD" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_GROUP_SELECTOR_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="48" horizontalFitPolicy="FIT_POLICY_PARENT" leftRelation="IDL_GROUP_SELECTOR_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_GROUP_SELECTOR_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="974"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="190" y="411"/>
+    </Label>
+    <ListView id="IDC_LISTVIEW" parent="IDL_GROUP_SELECTOR_FORM">
+        <property backgroundColor="" backgroundColorOpacity="0" bitmapPathOfEmptyList="" colorOfEmptyListText="" fastScroll="false" itemDivider="true" itemDividerColor="" sweepEnabled="false" textOfEmptyList="::IDS_PB_HEADER_NO_GROUP"/>
+        <layout bottomRelation="IDC_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_TOP" centerHorizontal="false" centerVertical="false" height="974" horizontalFitPolicy="FIT_POLICY_PARENT" leftRelation="IDL_GROUP_SELECTOR_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_GROUP_SELECTOR_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_GROUP_SELECTOR_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="124" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="730" x="218" y="205"/>
+    </ListView>
+</Scene>
diff --git a/res/slk-SK.xml b/res/slk-SK.xml
new file mode 100755 (executable)
index 0000000..a78b0a3
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Výročie</text>
+    <text id="IDS_PB_BODY_COMPANY">Spoločnosť</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Pracovná funkcia</text>
+    <text id="IDS_COM_POP_CLOSE">Zavrieť</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Vybrať všetky</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_COM_SK_NEW">Nové</text>
+    <text id="IDS_PB_SK_CANCEL">Zrušiť</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_COM_POP_SUCCESS">Dokončené</text>
+    <text id="IDS_PB_BODY_COUNTRY">Krajina</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_PB_HEADER_SELECT_GROUP">Vyberte skupinu</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_PB_BODY_WORK">Práca</text>
+    <text id="IDS_COM_SK_EDIT">Upraviť</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Žiadna skupina</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neplatná e-mailová adresa</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_COM_BODY_COPY">Kopírovať</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</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_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_COM_BODY_DETAILS_NAME">Meno</text>
+    <text id="IDS_PB_BODY_CITY">Mesto</text>
+    <text id="IDS_COM_BODY_CREATE">Vytvoriť</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Oddelenie</text>
+    <text id="IDS_PB_BODY_NICKNAME">Prezývka</text>
+    <text id="IDS_COM_BODY_CALL">Hovor</text>
+    <text id="IDS_PB_BODY_SUFFIX">Titul za menom</text>
+    <text id="IDS_COM_POP_UNKNOWN">Neznáme</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_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_BODY_DEFAULT_GROUP_WORK">Práca</text>
+    <text id="IDS_COM_BODY_REMOVE">Odstrániť</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">PSČ</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_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 100755 (executable)
index 0000000..b76994a
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Obletnica</text>
+    <text id="IDS_PB_BODY_COMPANY">Podjetje</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Službeni naziv</text>
+    <text id="IDS_COM_POP_CLOSE">Zapri</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Izberi vse</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_COM_SK_NEW">Novo</text>
+    <text id="IDS_PB_SK_CANCEL">Prekliči</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_COM_POP_SUCCESS">Uspeh</text>
+    <text id="IDS_PB_BODY_COUNTRY">Država</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_PB_HEADER_SELECT_GROUP">Izberite skupino</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_PB_BODY_WORK">Službeni</text>
+    <text id="IDS_COM_SK_EDIT">Uredi</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ni skupine</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neveljaven e-poštni naslov</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_COM_BODY_COPY">Kopiraj</text>
+    <text id="IDS_PB_BODY_ADDRESS">Naslov</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_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_COM_BODY_DETAILS_NAME">Ime</text>
+    <text id="IDS_PB_BODY_CITY">Mesto</text>
+    <text id="IDS_COM_BODY_CREATE">Ustvari</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Oddelek</text>
+    <text id="IDS_PB_BODY_NICKNAME">Vzdevek</text>
+    <text id="IDS_COM_BODY_CALL">Klic</text>
+    <text id="IDS_PB_BODY_SUFFIX">Pripona</text>
+    <text id="IDS_COM_POP_UNKNOWN">Neznano</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_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_BODY_DEFAULT_GROUP_WORK">Služba</text>
+    <text id="IDS_COM_BODY_REMOVE">Odstrani</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poštna številka</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_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 100755 (executable)
index 0000000..4e74e92
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Aniversario</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Cargo</text>
+    <text id="IDS_COM_POP_CLOSE">Cerrar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccionar todo</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_COM_SK_NEW">Nuevo</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</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">Elimininado</text>
+    <text id="IDS_COM_POP_SUCCESS">Finalizado</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</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_PB_HEADER_SELECT_GROUP">Seleccionar grupo</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_PB_BODY_WORK">Profesional</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ningún grupo</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Dirección de correo electrónico no válida</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_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Dirección</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_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_COM_BODY_DETAILS_NAME">Nombre</text>
+    <text id="IDS_PB_BODY_CITY">Ciudad</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_NICKNAME">Alias</text>
+    <text id="IDS_COM_BODY_CALL">Llamar</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufijo</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconocido</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_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_BODY_DEFAULT_GROUP_WORK">Trabajo</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</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_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 100755 (executable)
index 0000000..2841c0d
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Aniversario</text>
+    <text id="IDS_PB_BODY_COMPANY">Empresa</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Puesto</text>
+    <text id="IDS_COM_POP_CLOSE">Cerrar</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Seleccionar todo</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">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_COM_SK_NEW">Nuevo</text>
+    <text id="IDS_PB_SK_CANCEL">Cancelar</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_COM_POP_SUCCESS">Exitoso</text>
+    <text id="IDS_PB_BODY_COUNTRY">País</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_PB_HEADER_SELECT_GROUP">Seleccionar grupo</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 primero</text>
+    <text id="IDS_PB_OPT_VIEW">Ver</text>
+    <text id="IDS_PB_BODY_WORK">Trabajo</text>
+    <text id="IDS_COM_SK_EDIT">Editar</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ningún grupo</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Dirección de correo no válida</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">Tomar foto</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_COM_BODY_COPY">Copiar</text>
+    <text id="IDS_PB_BODY_ADDRESS">Dirección</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_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_COM_BODY_DETAILS_NAME">Nombre</text>
+    <text id="IDS_PB_BODY_CITY">Ciudad</text>
+    <text id="IDS_COM_BODY_CREATE">Crear</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departamento</text>
+    <text id="IDS_PB_BODY_NICKNAME">Alias</text>
+    <text id="IDS_COM_BODY_CALL">Llamar</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufijo</text>
+    <text id="IDS_COM_POP_UNKNOWN">Desconocido</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">Privado</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_BODY_DEFAULT_GROUP_WORK">Trabajo</text>
+    <text id="IDS_COM_BODY_REMOVE">Eliminar</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Código postal</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_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 100755 (executable)
index 0000000..38a778b
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Godišnjica</text>
+    <text id="IDS_PB_BODY_COMPANY">Kompanija</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Radno mesto</text>
+    <text id="IDS_COM_POP_CLOSE">Zatvori</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Izaberi sve</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_COM_SK_NEW">Nova</text>
+    <text id="IDS_PB_SK_CANCEL">Poništi</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_COM_POP_SUCCESS">Uspeh</text>
+    <text id="IDS_PB_BODY_COUNTRY">Zemlja</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_PB_HEADER_SELECT_GROUP">Izaberi grupu</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_PB_BODY_WORK">Posao</text>
+    <text id="IDS_COM_SK_EDIT">Izmeni</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Nema grupe</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Neispravna adresa e-pošte</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_COM_BODY_COPY">Kopiraj</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adresa</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_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_COM_BODY_DETAILS_NAME">Ime</text>
+    <text id="IDS_PB_BODY_CITY">Grad</text>
+    <text id="IDS_COM_BODY_CREATE">Kreiraj</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Odeljenje</text>
+    <text id="IDS_PB_BODY_NICKNAME">Nadimak</text>
+    <text id="IDS_COM_BODY_CALL">Poziv</text>
+    <text id="IDS_PB_BODY_SUFFIX">Sufiks</text>
+    <text id="IDS_COM_POP_UNKNOWN">Nepoznato</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_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_BODY_DEFAULT_GROUP_WORK">Posao</text>
+    <text id="IDS_COM_BODY_REMOVE">Ukloni</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Poštanski broj</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_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 100755 (executable)
index 0000000..b5df141
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Årsdag</text>
+    <text id="IDS_PB_BODY_COMPANY">Företag</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Befattning</text>
+    <text id="IDS_COM_POP_CLOSE">Stäng</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Välj alla</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_COM_SK_NEW">Nytt</text>
+    <text id="IDS_PB_SK_CANCEL">Avbryt</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_COM_POP_SUCCESS">Slutfört</text>
+    <text id="IDS_PB_BODY_COUNTRY">Land</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_PB_HEADER_SELECT_GROUP">Välj grupp</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_PB_BODY_WORK">Arbete</text>
+    <text id="IDS_COM_SK_EDIT">Redigera</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Ingen grupp</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Ogiltig e-postadress</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_COM_BODY_COPY">Kopiera</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adress</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_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_COM_BODY_DETAILS_NAME">Namn</text>
+    <text id="IDS_PB_BODY_CITY">Ort</text>
+    <text id="IDS_COM_BODY_CREATE">Skapa</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Avdelning</text>
+    <text id="IDS_PB_BODY_NICKNAME">Smeknamn</text>
+    <text id="IDS_COM_BODY_CALL">Samtal</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffix</text>
+    <text id="IDS_COM_POP_UNKNOWN">Okänd</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_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_BODY_DEFAULT_GROUP_WORK">Arbete</text>
+    <text id="IDS_COM_BODY_REMOVE">Ta bort</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Postnr</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_PB_BODY_GROUP_NAME_ABB">Gruppnamn</text>
+</string_table>
diff --git a/res/tur-TR.xml b/res/tur-TR.xml
new file mode 100755 (executable)
index 0000000..a3f8433
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Yıl dönümü</text>
+    <text id="IDS_PB_BODY_COMPANY">Şirket</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">İş ünvanı</text>
+    <text id="IDS_COM_POP_CLOSE">Kapat</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Hepsini seç</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_COM_SK_NEW">Yeni</text>
+    <text id="IDS_PB_SK_CANCEL">İptal</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_COM_POP_SUCCESS">Başarılı</text>
+    <text id="IDS_PB_BODY_COUNTRY">Ülke</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_PB_HEADER_SELECT_GROUP">Grup seç</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_PB_BODY_WORK">İş</text>
+    <text id="IDS_COM_SK_EDIT">Düzenle</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Grup yok</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Geçersiz e-posta adresi</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_COM_BODY_COPY">Kopyala</text>
+    <text id="IDS_PB_BODY_ADDRESS">Adres</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_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">Buluyor</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_COM_BODY_DETAILS_NAME">İsim</text>
+    <text id="IDS_PB_BODY_CITY">Şehir</text>
+    <text id="IDS_COM_BODY_CREATE">Oluştur</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Departman</text>
+    <text id="IDS_PB_BODY_NICKNAME">Takma ad</text>
+    <text id="IDS_COM_BODY_CALL">Arama</text>
+    <text id="IDS_PB_BODY_SUFFIX">Son ek</text>
+    <text id="IDS_COM_POP_UNKNOWN">Bilinmeyen</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_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_BODY_DEFAULT_GROUP_WORK">İş</text>
+    <text id="IDS_COM_BODY_REMOVE">Kaldır</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Posta kodu</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_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 100755 (executable)
index 0000000..0ab73bb
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">Закрити</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Вибрати всі</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">Позначити як стандартну адресу Email</text>
+    <text id="IDS_PB_BODY_OTHER">Інші</text>
+    <text id="IDS_COM_POP_REMOVED">Видалено</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">Email</text>
+    <text id="IDS_PB_HEADER_SELECT_GROUP">Вибрати групу</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_PB_BODY_WORK">Робота</text>
+    <text id="IDS_COM_SK_EDIT">Редагув.</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Немає групи</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Хибна адреса Email</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_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_COM_BODY_DETAILS_NAME">Назва</text>
+    <text id="IDS_PB_BODY_CITY">Місто</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_POP_UNKNOWN">Невідомо</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_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_BODY_DEFAULT_GROUP_WORK">Робота</text>
+    <text id="IDS_COM_BODY_REMOVE">Видалити</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Поштовий індекс</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_PB_BODY_GROUP_NAME_ABB">Ім’я групи</text>
+</string_table>
diff --git a/res/uzb-UZ.xml b/res/uzb-UZ.xml
new file mode 100755 (executable)
index 0000000..af873f2
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_ANNIVERSARY">Yubiley</text>
+    <text id="IDS_PB_BODY_COMPANY">Kompaniya</text>
+    <text id="IDS_PB_BODY_JOB_TITLE">Lavozim nomi</text>
+    <text id="IDS_COM_POP_CLOSE">Yopish</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">Barchasini tanlash</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_COM_SK_NEW">Yangi</text>
+    <text id="IDS_PB_SK_CANCEL">Bekor q.</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_COM_POP_SUCCESS">Muvaffaqiyat</text>
+    <text id="IDS_PB_BODY_COUNTRY">Mamlakat</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_PB_HEADER_SELECT_GROUP">Guruh tanlang</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_PB_BODY_WORK">Ish</text>
+    <text id="IDS_COM_SK_EDIT">Tahrirl.</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">Guruh mavjud emas</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">Noto‘g‘ri e-pochta manzili</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_COM_BODY_COPY">Nusxa olish</text>
+    <text id="IDS_PB_BODY_ADDRESS">Manzil</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_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_COM_BODY_DETAILS_NAME">Nom</text>
+    <text id="IDS_PB_BODY_CITY">Shahar</text>
+    <text id="IDS_COM_BODY_CREATE">Yaratish</text>
+    <text id="IDS_PB_BODY_DEPARTMENT">Bo'lim</text>
+    <text id="IDS_PB_BODY_NICKNAME">Laqab</text>
+    <text id="IDS_COM_BODY_CALL">Qo‘ng‘iroq qilish</text>
+    <text id="IDS_PB_BODY_SUFFIX">Suffiks</text>
+    <text id="IDS_COM_POP_UNKNOWN">Noma’lum</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_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_BODY_DEFAULT_GROUP_WORK">Ish</text>
+    <text id="IDS_COM_BODY_REMOVE">Olib tashlash</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">Pochta indeksi</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_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 100755 (executable)
index 0000000..9e8a437
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">关闭</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全选</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_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_PB_HEADER_SELECT_GROUP">选择群组</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_PB_BODY_WORK">工作</text>
+    <text id="IDS_COM_SK_EDIT">编辑</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">无群组</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">电子邮件地址无效</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_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_COM_BODY_DETAILS_NAME">名称</text>
+    <text id="IDS_PB_BODY_CITY">城市</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_POP_UNKNOWN">未知</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_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_BODY_DEFAULT_GROUP_WORK">工作</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">邮编</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_PB_BODY_GROUP_NAME_ABB">群组名称</text>
+</string_table>
diff --git a/res/zho-HK.xml b/res/zho-HK.xml
new file mode 100755 (executable)
index 0000000..991d8c6
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">關閉</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">選擇全部</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_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_PB_HEADER_SELECT_GROUP">選擇群組</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_PB_BODY_WORK">工作</text>
+    <text id="IDS_COM_SK_EDIT">編輯</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">無群組</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">無效電子郵件地址</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_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_COM_BODY_DETAILS_NAME">名稱</text>
+    <text id="IDS_PB_BODY_CITY">城市</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_POP_UNKNOWN">未知</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_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_BODY_DEFAULT_GROUP_WORK">工作</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">郵政編號</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_PB_BODY_GROUP_NAME_ABB">群組名稱</text>
+</string_table>
diff --git a/res/zho-SG.xml b/res/zho-SG.xml
new file mode 100755 (executable)
index 0000000..138cd7f
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">关闭</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全选</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_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_PB_HEADER_SELECT_GROUP">选择组群</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_PB_BODY_WORK">工作</text>
+    <text id="IDS_COM_SK_EDIT">编辑</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">无群组</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">无效电子邮件地址</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_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_COM_BODY_DETAILS_NAME">名称</text>
+    <text id="IDS_PB_BODY_CITY">城市</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_POP_UNKNOWN">未知</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_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_BODY_DEFAULT_GROUP_WORK">工作</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">邮编</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_PB_BODY_GROUP_NAME_ABB">群组名称</text>
+</string_table>
diff --git a/res/zho-TW.xml b/res/zho-TW.xml
new file mode 100755 (executable)
index 0000000..d1418ca
--- /dev/null
@@ -0,0 +1,97 @@
+<?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="3.0.0.201301221116" 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_POP_CLOSE">關閉</text>
+    <text id="IDS_COM_BODY_SELECT_ALL">全選</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_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_PB_HEADER_SELECT_GROUP">選擇群組</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_PB_BODY_WORK">公司</text>
+    <text id="IDS_COM_SK_EDIT">編輯</text>
+    <text id="IDS_PB_HEADER_NO_GROUP">無群組</text>
+    <text id="IDS_PB_POP_INVALID_EMAIL_ADDRESS">電子郵件地址無效</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_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_COM_BODY_DETAILS_NAME">名稱</text>
+    <text id="IDS_PB_BODY_CITY">城市</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_POP_UNKNOWN">未知</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_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_BODY_DEFAULT_GROUP_WORK">工作</text>
+    <text id="IDS_COM_BODY_REMOVE">移除</text>
+    <text id="IDS_PB_BODY_POSTAL_CODE">郵政編碼</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_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..eabeaaf
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..bec3c73
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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/CtContactDetailsForm.cpp b/src/CtContactDetailsForm.cpp
new file mode 100644 (file)
index 0000000..5ee4cf3
--- /dev/null
@@ -0,0 +1,1698 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_EDIT = 10;
+static const int IDA_FOOTER_DELETE = 11;
+static const int IDA_FOOTER_MORE = 12;
+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 wchar_t* IDB_DETAILS_FAVORITE_ON = L"C02_icon_favorite_on.png";
+static const wchar_t* IDB_DETAILS_FAVORITE_OFF = L"C02_icon_favorite.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* IDB_MORE_NORMAL = L"00_icon_more.png";
+static const wchar_t* IDB_MORE_PRESSED = L"00_icon_more_press.png";
+
+static const wchar_t* FAVORITE_LABEL = L"FavoriteLabel";
+
+static const int Y_THUMBNAIL = 50;
+static const int H_THUMBNAIL = 360;
+static const int X_MAIN_INFO = 26;
+static const int H_NAME = 60;
+static const int H_NAME_DIVIDER = 10;
+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 H_FAVORITE = 38;
+static const int W_FAVORITE_GAP = 16;
+
+static const int H_IM_TITLE = 46;
+static const int W_GROUP_STYLE_MARGIN = 16;
+
+static const int W_TEXT_MARGIN = 26;
+static const int W_TYPE = 160;
+static const int H_ITEM = 112;
+static const int H_ITEM_DOUBLE_LINE = 140;
+static const int Y_ITEM_TITLE = 22;
+static const int H_ITEM_TITLE = 42;
+static const int H_ITEM_VALUE = 54;
+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 = 720;
+static const int H_POPUP = 700;
+static const int H_POPUP_LIST_VIEW = 506;
+static const int Y_POPUP_BUTTON = 526;
+static const int H_POPUP_BUTTON = 74;
+static const int W_POPUP_BUTTON = 394;
+static const int X_MORE = 55;
+
+static const int SUB_INDEX_MASK = 0xF000;
+
+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<59, 115, 182>::Value;
+static const unsigned int COLOR_OTHER_NUMBER = Color32<87, 85, 80>::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 int FONT_SIZE_NAME = 53;
+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_TYPE = L"type";
+static const wchar_t* INPUT_KEY_TEL = L"tel";
+static const wchar_t* INPUT_KEY_TO = L"to";
+static const wchar_t* INPUT_KEY_SELECTION_TYPE = L"selectionType";
+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* INPUT_TYPE_AUDIO = L"audio";
+static const wchar_t* RESULT_KEY_PATH = L"path";
+static const wchar_t* SELECTION_TYPE_SINGLE = L"single";
+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)
+: __pTableView(null)
+, __pContextMenuCall(null)
+, __pContextMenuShare(null)
+, __pContextMenuMore(null)
+, __pDefaultSelectorPopup(null)
+, __pItemList(null)
+, __pPresentationModel(null)
+, __scrolledDistance(0)
+{
+}
+
+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);
+
+       __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);
+       __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);
+
+       __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);
+
+       __pContextMenuMore = new (std::nothrow) ContextMenu();
+       __pContextMenuMore->Construct(Point(X_MORE, GetClientAreaBounds().y + GetClientAreaBounds().height), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_PB_BODY_MARK_AS_DEFAULT_NUMBER"), IDA_MORE_DEFAULT_NUMBER);
+       __pContextMenuMore->AddActionEventListener(*this);
+
+       __pItemList = new (std::nothrow) ArrayListT<int>();
+       __pItemList->Construct();
+
+       __pPresentationModel = new (std::nothrow) ContactPresentationModel();
+       __pPresentationModel->Construct();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       return E_SUCCESS;
+}
+
+result
+ContactDetailsForm::OnTerminating(void)
+{
+       delete __pContextMenuCall;
+       delete __pContextMenuShare;
+       delete __pContextMenuMore;
+
+       if (__pItemList != null)
+       {
+               __pItemList->RemoveAll();
+               delete __pItemList;
+       }
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+               delete __pPresentationModel;
+       }
+
+       delete __pDefaultSelectorPopup;
+
+       return E_SUCCESS;
+}
+
+void
+ContactDetailsForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       result r = E_SUCCESS;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (actionId)
+       {
+       case IDA_FOOTER_EDIT:
+               {
+                       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:
+               {
+                       int modalResult = 0;
+                       MessageBox deleteMessageBox;
+                       deleteMessageBox.Construct(L"", ResourceManager::GetString(L"IDS_COM_SK_DELETE") + L"?", MSGBOX_STYLE_YESNO);
+                       deleteMessageBox.ShowAndWait(modalResult);
+
+                       if (modalResult == MSGBOX_RESULT_YES)
+                       {
+
+                               r = __pPresentationModel->RemoveContact();
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to remove contact", GetErrorMessage(r));
+
+                               if (__appControlViewType.IsEmpty() == true)
+                               {
+                                       r = pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_CONTACT_LIST, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+                               }
+                               else
+                               {
+                                       UiApp::GetInstance()->Terminate();
+                               }
+                       }
+               }
+               break;
+       case IDA_FOOTER_MORE:
+               {
+                       __pContextMenuMore->SetShowState(true);
+                       __pContextMenuMore->Show();
+               }
+               break;
+       case IDA_FOOTER_ADD:
+               {
+                       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:
+               {
+                       ShowDefaultSelectorPopup();
+               }
+               break;
+       case IDA_BUTTON_RINGTONE_CLEAR:
+               {
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, String());
+                       __pPresentationModel->UpdateContact();
+                       __pTableView->UpdateTableView();
+               }
+               break;
+       case IDA_VOICE_CALL:
+               {
+                       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:
+               {
+                       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:
+               {
+                       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:
+               {
+                       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:
+               {
+                       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:
+               {
+                       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;
+       default:
+               break;
+       }
+}
+
+void
+ContactDetailsForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       if (__appControlViewType.IsEmpty() == false)
+       {
+               UiApp* pApp = UiApp::GetInstance();
+               pApp->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)
+{
+       if (pArgs == null)
+       {
+               return;
+       }
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       TryReturnVoid(pContactsApp != null, "Unable to cast UiApp to ContactsApp");
+
+       if (previousSceneId == IDSCN_GROUP_SELECTOR)
+       {
+               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;
+       }
+       else
+       {
+               if (pContactsApp->GetOperationId() == OPERATION_ID_VIEW)
+               {
+                       result r = InitializeAppControl(pArgs);
+
+                       if (IsFailed(r))
+                       {
+                               pArgs->RemoveAll(true);
+                               delete pArgs;
+                               AppLogDebug("Unable to initialize appcontrol");
+                               UiApp::GetInstance()->Terminate();
+
+                               return;
+                       }
+
+                       InitializeDetailItemList();
+               }
+               else
+               {
+                       Integer* pContactId = static_cast<Integer*>(pArgs->GetAt(0));
+                       if (pContactId != null)
+                       {
+                               __pPresentationModel->SetContactId(pContactId->ToInt());
+                               InitializeDetailItemList();
+                       }
+               }
+       }
+
+       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);
+
+                               FooterItem footerItemDelete;
+                               footerItemDelete.Construct(IDA_FOOTER_DELETE);
+                               footerItemDelete.SetText(ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+                               pFooter->AddItem(footerItemDelete);
+                       }
+                       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)
+{
+}
+
+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)
+       {
+               ButtonItem footerItemMore;
+               footerItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+               footerItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+               footerItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+
+               if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == false)
+               {
+                       pFooter->SetButton(BUTTON_POSITION_LEFT, footerItemMore);
+               }
+
+               String otherNumber;
+               String otherNumberType;
+               String defaultNumber = __pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER);
+               String defaultNumberType = __pPresentationModel->GetType(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER);
+               for (int subIndex = 0; subIndex < otherNumberCount; subIndex++)
+               {
+                       //omit default number
+                       otherNumber = __pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, subIndex);
+                       otherNumberType = __pPresentationModel->GetType(DETAIL_PROPERTY_PHONE_NUMBER, subIndex);
+
+                       if (otherNumber.CompareTo(defaultNumber) == 0 && otherNumberType.CompareTo(defaultNumberType) == 0)
+                       {
+                               continue;
+                       }
+
+                       __pItemList->Add(DETAIL_PROPERTY_PHONE_NUMBER + subIndex);
+               }
+       }
+
+       // Email Addresses
+       int emailCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_EMAIL);
+       if (emailCount > 0)
+       {
+               for (int subIndex = 0; subIndex < emailCount; subIndex++)
+               {
+                       __pItemList->Add(DETAIL_PROPERTY_EMAIL + subIndex);
+               }
+       }
+
+       // Addresses
+       int addressCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_ADDRESS);
+       if (addressCount > 0)
+       {
+               for (int subIndex = 0; subIndex < addressCount; subIndex++)
+               {
+                       __pItemList->Add(DETAIL_PROPERTY_ADDRESS + subIndex);
+               }
+       }
+
+       // IM Addresses
+       int imAddressCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS);
+       if (imAddressCount > 0)
+       {
+               for (int subIndex = 0; subIndex < imAddressCount; subIndex++)
+               {
+                       __pItemList->Add(DETAIL_PROPERTY_IM_ADDRESS + subIndex);
+               }
+       }
+
+       // Url
+       int urlCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_URL);
+       if (urlCount > 0)
+       {
+               for (int subIndex = 0; subIndex < urlCount; subIndex++)
+               {
+                       __pItemList->Add(DETAIL_PROPERTY_URL + subIndex);
+               }
+       }
+
+       // Birthday
+       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_BIRTHDAY).IsEmpty() == false)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_BIRTHDAY);
+       }
+
+       // Note
+       if (__pPresentationModel->GetValue(DETAIL_PROPERTY_NOTE).IsEmpty() == false)
+       {
+               __pItemList->Add(DETAIL_PROPERTY_NOTE);
+       }
+
+       __pItemList->Add(DETAIL_PROPERTY_GROUP);
+       __pItemList->Add(DETAIL_PROPERTY_RINGTONE);
+
+       // Share buttons
+       //__pGroupItemList->Add(DETAIL_PROPERTY_SHARE_BUTTONS);
+}
+
+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:
+               {
+                       itemSubIndex = contentItemIndex - DETAIL_PROPERTY_EMAIL;
+                       contentItemIndex = DETAIL_PROPERTY_EMAIL;
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       itemSubIndex = contentItemIndex - DETAIL_PROPERTY_IM_ADDRESS;
+                       contentItemIndex = DETAIL_PROPERTY_IM_ADDRESS;
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       itemSubIndex = contentItemIndex - DETAIL_PROPERTY_ADDRESS;
+                       contentItemIndex = DETAIL_PROPERTY_ADDRESS;
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       itemSubIndex = contentItemIndex - 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:
+               {
+                       AddProperty(itemWidth, pItem, contentItemIndex, itemSubIndex);
+               }
+               break;
+       case DETAIL_PROPERTY_IM_ADDRESS:
+               {
+                       AddImAddress(itemWidth, pItem, 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
+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 firstName = __pPresentationModel->GetValue(DETAIL_PROPERTY_FIRST_NAME);
+       String middleName = __pPresentationModel->GetValue(DETAIL_PROPERTY_MIDDLE_NAME);
+       String lastName = __pPresentationModel->GetValue(DETAIL_PROPERTY_LAST_NAME);
+       String nickName = __pPresentationModel->GetValue(DETAIL_PROPERTY_NICK_NAME);
+       String suffix = __pPresentationModel->GetValue(DETAIL_PROPERTY_NAME_SUFFIX);
+       String jobTitle = __pPresentationModel->GetValue(DETAIL_PROPERTY_JOB_TITLE);
+       String company = __pPresentationModel->GetValue(DETAIL_PROPERTY_COMPANY);
+       String department = __pPresentationModel->GetValue(DETAIL_PROPERTY_DEPARTMENT);
+
+       String name;
+       if (firstName.IsEmpty() == false)
+       {
+               name = firstName + CHARACTER_SPACE;
+       }
+       if (middleName.IsEmpty() == false)
+       {
+               name += (middleName + CHARACTER_SPACE);
+       }
+       if (lastName.IsEmpty() == false)
+       {
+               name += lastName;
+       }
+
+       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 suffixNickName;
+       if (suffix.IsEmpty() == false)
+       {
+               suffixNickName = suffix + CHARACTER_SPACE;
+       }
+       if (nickName.IsEmpty() == false)
+       {
+               suffixNickName += nickName;
+       }
+
+       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;
+       Label* pFavoriteLabel = 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_MIDDLE);
+
+               if (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == false)
+               {
+                       pFavoriteLabel = new (std::nothrow) Label();
+                       pFavoriteLabel->Construct(Rectangle(itemWidth - (H_FAVORITE + W_FAVORITE_GAP * 2), itemHeight + W_FAVORITE_GAP, H_FAVORITE, H_FAVORITE), L"");
+                       pFavoriteLabel->SetName(FAVORITE_LABEL);
+                       pFavoriteLabel->AddTouchEventListener(*this);
+
+                       Bitmap* pBitmap = null;
+                       if (__pPresentationModel->IsFavorite())
+                       {
+                               pBitmap = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_ON);
+                       }
+                       else
+                       {
+                               pBitmap = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_OFF);
+                       }
+
+                       if (pBitmap != null)
+                       {
+                               pFavoriteLabel->SetBackgroundBitmap(*pBitmap);
+                               delete pBitmap;
+                       }
+               }
+
+               itemHeight += (H_NAME + H_NAME_DIVIDER);
+       }
+
+       Label* pSuffixNickNameLabel = null;
+       if (suffixNickName.IsEmpty() == false)
+       {
+               pSuffixNickNameLabel = new (std::nothrow) Label();
+               pSuffixNickNameLabel->Construct(Rectangle(X_MAIN_INFO, itemHeight, itemWidth - X_MAIN_INFO, H_SUB_INFO), suffixNickName);
+               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 (pFavoriteLabel != null)
+       {
+               pItem->AddControl(*pFavoriteLabel);
+       }
+       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;
+
+       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), 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), itemSubIndex);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), itemSubIndex);
+               }
+               break;
+       case DETAIL_PROPERTY_ADDRESS:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_ADDRESS");
+                       type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), itemSubIndex);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), itemSubIndex);
+               }
+               break;
+       case DETAIL_PROPERTY_URL:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_URL");
+                       type = __pPresentationModel->GetType(static_cast<DetailProperty>(detailProperty), itemSubIndex);
+                       value = __pPresentationModel->GetValue(static_cast<DetailProperty>(detailProperty), itemSubIndex);
+               }
+               break;
+       case DETAIL_PROPERTY_BIRTHDAY:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_BIRTHDAY");
+                       value = __pPresentationModel->GetValue(DETAIL_PROPERTY_BIRTHDAY);
+               }
+               break;
+       case DETAIL_PROPERTY_NOTE:
+               {
+                       title = ResourceManager::GetString(L"IDS_PB_BODY_NOTE");
+                       value = __pPresentationModel->GetValue(DETAIL_PROPERTY_NOTE);
+               }
+               break;
+       default:
+               break;
+       }
+
+       pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       CreateTitleValueTypeItem(itemWidth, pItem, title, value, type);
+}
+
+void
+ContactDetailsForm::AddImAddress(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, int itemSubIndex)
+{
+       if (itemSubIndex == 0)
+       {
+               pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE + H_IM_TITLE), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       }
+       else
+       {
+               pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       }
+
+       String title = __pPresentationModel->GetType(DETAIL_PROPERTY_IM_ADDRESS, itemSubIndex);
+       String value = __pPresentationModel->GetValue(DETAIL_PROPERTY_IM_ADDRESS, itemSubIndex);
+
+       int totalCount = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_IM_ADDRESS);
+
+       if (itemSubIndex + 1 == totalCount)
+       {
+               if (totalCount == 1)
+               {
+                       AddGroupStylePanel(itemWidth, pItem, GROUP_STYLE_SINGLE);
+               }
+               else
+               {
+                       AddGroupStylePanel(itemWidth, pItem, GROUP_STYLE_BOTTOM);
+               }
+       }
+       else if (itemSubIndex + 1 < totalCount)
+       {
+               if (itemSubIndex != 0)
+               {
+                       AddGroupStylePanel(itemWidth, pItem, GROUP_STYLE_MIDDLE);
+               }
+               else
+               {
+                       AddGroupStylePanel(itemWidth, pItem, GROUP_STYLE_TOP);
+               }
+       }
+
+       CreateTitleValueTypeItem(itemWidth, pItem, title, value);
+
+       Label* pIconLabel = new (std::nothrow) Label();
+       pIconLabel->Construct(Rectangle(itemWidth - W_TEXT_MARGIN - H_ICON, (H_ITEM_DOUBLE_LINE - H_ICON) / 2, H_ICON, H_ICON), L"");
+       Bitmap* pIcon = __pPresentationModel->GetAccountIconN(title);
+       if (pIcon != null)
+       {
+               pIconLabel->SetBackgroundBitmap(*pIcon);
+               delete pIcon;
+               pItem->AddControl(*pIconLabel);
+       }
+       else
+       {
+               delete pIconLabel;
+       }
+
+       if (itemSubIndex == 0)
+       {
+               for (int index = 0; index < pItem->GetControlCount(); index++)
+               {
+                       Control* pControl = pItem->GetControl(index);
+                       if (pControl != null)
+                       {
+                               Rectangle rect = pControl->GetBounds();
+                               rect.y += H_IM_TITLE;
+                               pControl->SetBounds(rect);
+                       }
+               }
+
+               Label* pTitle = new (std::nothrow) Label();
+               pTitle->Construct(Rectangle(W_GROUP_STYLE_MARGIN, 0, itemWidth, H_IM_TITLE), ResourceManager::GetString(L"IDS_PB_HEADER_INSTANT_MESSENGER_ABB"));
+               pTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pTitle->SetTextColor(COLOR_ITEM_TYPE);
+
+               pItem->AddControl(*pTitle);
+       }
+}
+
+void
+ContactDetailsForm::AddGroup(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pItem->SetName(Integer::ToString(DETAIL_PROPERTY_GROUP));
+
+       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);
+}
+
+void
+ContactDetailsForm::AddRingTone(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       pItem->Construct(Dimension(itemWidth, H_ITEM_DOUBLE_LINE), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pItem->SetName(Integer::ToString(DETAIL_PROPERTY_RINGTONE));
+
+       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)
+       {
+               Button* pClearButton = new (std::nothrow) Button();
+               pClearButton->Construct(Rectangle(itemWidth - H_ICON - W_TEXT_MARGIN, (H_ITEM_DOUBLE_LINE - H_ICON) / 2, H_ICON, H_ICON));
+               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);
+       }
+}
+
+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)
+{
+       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), value);
+       pValueLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pValueLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pValueLabel->SetTextConfig(FONT_SIZE_MAIN_TEXT, LABEL_TEXT_STYLE_BOLD);
+       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), 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)
+{
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       unsigned int titleColor = COLOR_ITEM_TITLE;
+       unsigned int valueColor = COLOR_ITEM_VALUE;
+
+       if (pItem->GetName().Equals(Integer::ToString(DETAIL_PROPERTY_IM_ADDRESS), true) == true)
+       {
+               titleColor = COLOR_ITEM_TYPE;
+       }
+       else if (pItem->GetName().Equals(Integer::ToString(DETAIL_PROPERTY_GROUP), true) == true ||
+                        pItem->GetName().Equals(Integer::ToString(DETAIL_PROPERTY_RINGTONE), true) == true)
+       {
+               valueColor = COLOR_ITEM_TYPE;
+       }
+
+       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(titleColor);
+       pItem->AddControl(*pTitleLabel);
+
+       int valueWidth = 0;
+       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->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
+       {
+               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), value);
+       pValueLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pValueLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pValueLabel->SetTextConfig(FONT_SIZE_MAIN_TEXT, LABEL_TEXT_STYLE_NORMAL);
+       pValueLabel->SetTextColor(valueColor);
+       pItem->AddControl(*pValueLabel);
+}
+
+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 (__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 (__appControlViewType.Equals(VALUE_VIEW_TYPE_VCF, false) == true)
+                       {
+                               return;
+                       }
+
+                       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)
+               {
+                       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)
+{
+}
+
+void
+ContactDetailsForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       if (source.GetName().Equals(FAVORITE_LABEL, true))
+       {
+               Label* pLabel = static_cast<Label*>(&const_cast<Control&>(source));
+               if (pLabel == null)
+               {
+                       return;
+               }
+
+               __pPresentationModel->SetAsFavorite(!__pPresentationModel->IsFavorite());
+
+               Bitmap* pBitmap = null;
+               if (__pPresentationModel->IsFavorite())
+               {
+                       pBitmap = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_ON);
+               }
+               else
+               {
+                       pBitmap = ResourceManager::GetBitmapN(IDB_DETAILS_FAVORITE_OFF);
+               }
+
+               if (pBitmap != null)
+               {
+                       pLabel->SetBackgroundBitmap(*pBitmap);
+                       delete pBitmap;
+               }
+               pLabel->Invalidate(false);
+       }
+}
+
+void
+ContactDetailsForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+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)
+{
+}
+
+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)
+{
+       if (__pPresentationModel->IsContactRemoved())
+       {
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_CONTACT_LIST));
+       }
+       else
+       {
+               InitializeDetailItemList();
+               __pTableView->UpdateTableView();
+       }
+
+       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;
+       HashMap extraData;
+       extraData.Construct();
+       IAppControlResponseListener* pEvent = null;
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)) && operationId.Equals(String(OPERATION_ID_CALL)))
+       {
+               if (value.IsEmpty())
+               {
+                       extraData.Add(new (std::nothrow) String(INPUT_KEY_TEL), new (std::nothrow) String(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER)));
+               }
+               else
+               {
+                       extraData.Add(new (std::nothrow) String(INPUT_KEY_TEL), new (std::nothrow) String(value));
+               }
+
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(launchType));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)) && operationId.Equals(String(OPERATION_ID_COMPOSE)))
+       {
+               if (value.IsEmpty())
+               {
+                       extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER)));
+               }
+               else
+               {
+                       extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(value));
+               }
+
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(launchType));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_AUDIO));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_TYPE), new (std::nothrow) String(SELECTION_TYPE_SINGLE));
+
+               pEvent = this;
+               SetEnabled(false);
+       }
+       else if (appId.Equals(String(PROVIDER_ID_EMAIL)) && operationId.Equals(String(OPERATION_ID_COMPOSE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(__pPresentationModel->GetValue(DETAIL_PROPERTY_EMAIL, 0)));
+       }
+
+       AppControl* pAc = AppManager::FindAppControlN(appId, operationId);
+       if (pAc != null)
+       {
+               r = pAc->Start(null, null, &extraData, pEvent);
+
+               delete pAc;
+       }
+
+       extraData.RemoveAll(true);
+
+       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)
+{
+       SetEnabled(true);
+       Invalidate(true);
+
+       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 = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+
+                       if (pResultString->IsEmpty() == false)
+                       {
+                               __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, *pResultString);
+                               __pPresentationModel->UpdateContact();
+                       }
+               }
+       }
+}
+
+void
+ContactDetailsForm::AddGroupStylePanel(int itemWidth, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::GroupStyle groupStyle)
+{
+       Panel* pGroupStyle = new (std::nothrow) Panel();
+       pGroupStyle->Construct(Rectangle(W_GROUP_STYLE_MARGIN, 0, itemWidth - W_GROUP_STYLE_MARGIN * 2, H_ITEM_DOUBLE_LINE), groupStyle);
+       pGroupStyle->SetBackgroundColor(COLOR_GROUP_STYLE);
+       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"));
+
+       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::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();
+       InitializeDetailItemList();
+       __pTableView->UpdateTableView();
+
+       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)
+{
+}
diff --git a/src/CtContactEditorForm.cpp b/src/CtContactEditorForm.cpp
new file mode 100644 (file)
index 0000000..0a2a140
--- /dev/null
@@ -0,0 +1,3322 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+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::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_ACTION_BAR_SAVE = 11;
+static const int IDA_ACTION_BAR_CANCEL = 12;
+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_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 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_ADD_DISABLED = L"C02_caller_id_icon_add_dim.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_CAMERA_DISABLED = L"C02_caller_id_icon_camera_dim.png";
+
+static const wchar_t* INPUT_KEY_TYPE = L"type";
+static const wchar_t* INPUT_KEY_MEDIA_TYPE = L"mediaType";
+static const wchar_t* INPUT_KEY_SELECTION_MODE = L"selectionMode";
+static const wchar_t* INPUT_KEY_SELECTION_TYPE = L"selectionType";
+static const wchar_t* RESULT_KEY_PATH = L"path";
+static const wchar_t* INPUT_MEDIA_TYPE_IMAGE = L"image";
+static const wchar_t* INPUT_TYPE_AUDIO = L"audio";
+static const wchar_t* INPUT_TYPE_CAMERA = L"camera";
+static const wchar_t* INPUT_SELECTION_TYPE_SINGLE = L"single";
+static const wchar_t* CHARACTER_AT = L"@";
+static const wchar_t* CHARACTER_DOT = L".";
+
+static const int H_ITEM = 128;
+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 = 40;
+static const int H_EXPANDED_NAME_FIELDS = 768;
+static const int H_BUTTON = 74;
+static const int W_THUMBNAIL = 360;
+static const int W_TITLE_LABEL = 160;
+static const int X_MORE_INFORMATION_BUTTON = 60;
+static const int Y_MORE_INFORMATION_BUTTON = 30;
+static const int W_ITEM_GAP = 16;
+static const int W_TYPE_BUTTON = 186;
+static const int H_THUMBNAIL_GAP = 57;
+static const int W_THUMBNAIL_DELETE_BUTTON_GAP = 34;
+static const int H_THUMBNAIL_DELETE_BUTTON_GAP = 31;
+static const int H_GROUP_RINGTONE_LABEL = 64;
+static const int Y_EDITDATE = 8;
+
+static const int GROUP_ITEM_COUNT = 11;
+static const int NAME_FIELD_ITEM_COUNT = 1;
+
+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_CONTENT_TEXT = Color32<34, 137, 194>::Value;
+static const unsigned int COLOR_THUMBNAIL_BACKGROUND = Color32<239, 237, 229>::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";
+
+ContactEditorForm::ContactEditorForm(void)
+: __isExpandable(false)
+, __isAppControl(false)
+, __isJobTitleEnabled(false)
+, __isDepartmentEnabled(false)
+, __isDefaultPhoneNumberButtonEnabled(false)
+, __scrolledDistance(0)
+, __pPhoneNumberFieldItem(null)
+, __pEmailFieldItem(null)
+, __pAddressFieldItem(null)
+, __pImAddressFieldItem(null)
+, __pUrlFieldItem(null)
+, __pCurrentFocusedItem(null)
+, __pMoreInformationItem(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)
+{
+       Header* pHeader = GetHeader();
+
+       pHeader->SetStyle(HEADER_STYLE_TITLE);
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = GetFooter();
+
+       FooterItem footerItemSave;
+       footerItemSave.Construct(IDA_ACTION_BAR_SAVE);
+       footerItemSave.SetText(ResourceManager::GetString(L"IDS_COM_SK_SAVE"));
+
+       FooterItem footerItemCancel;
+       footerItemCancel.Construct(IDA_ACTION_BAR_CANCEL);
+       footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+
+       pFooter->AddItem(footerItemSave);
+       pFooter->AddItem(footerItemCancel);
+       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();
+
+       return E_SUCCESS;
+}
+
+result
+ContactEditorForm::OnTerminating(void)
+{
+       AppLog("ContactEditorForm::OnTerminating()");
+
+       result r = E_SUCCESS;
+
+       __pTableView->SetItemProvider(null);
+
+       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;
+       }
+
+       delete __pNameFieldItem;
+       delete __pNoteFieldItem;
+       delete __pDefaultPhoneNumberContextMenu;
+       delete __pMoreInformationContextMenu;
+       delete __pThumbnailContextMenu;
+       delete __pTypeContextMenu;
+
+       return r;
+}
+
+void
+ContactEditorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       AppLog("ContactEditorForm::OnActionPerformed(), actionId %d", actionId);
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       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);
+               }
+
+               return;
+       }
+       else if (&source == __pDefaultPhoneNumberContextMenu)
+       {
+               SetAsDefaultPhoneNumber(actionId);
+
+               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));
+               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);
+
+               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));
+               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);
+
+               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));
+               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);
+
+               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));
+               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);
+
+               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));
+               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);
+
+               return;
+       }
+
+       switch (actionId)
+       {
+       case IDA_ACTION_BAR_CANCEL:
+               {
+                       SetFocus();
+
+                       if (__isAppControl == true)
+                       {
+                               UiApp* pApp = UiApp::GetInstance();
+                               pApp->Terminate();
+                       }
+                       else
+                       {
+                               pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       }
+               }
+               break;
+       case IDA_ACTION_BAR_SAVE:
+               {
+                       result r = SaveContactData();
+
+                       if (r != E_SUCCESS)
+                       {
+                               return;
+                       }
+
+                       SetFocus();
+
+                       if (__isAppControl == true)
+                       {
+                               UiApp* pApp = UiApp::GetInstance();
+                               pApp->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(RETURN_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);
+                       }
+               }
+               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"");
+                       __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+               }
+               break;
+       case IDA_BUTTON_CAMERA:
+               {
+                       LaunchAppControl(PROVIDER_ID_CAMERA, OPERATION_ID_CREATE_CONTENT);
+               }
+               break;
+       case IDA_BUTTON_EXPANDABLE:
+               {
+                       ChangeNameFieldStatus();
+
+                       __pTableView->UpdateTableView();
+               }
+               break;
+       case IDA_BUTTON_MORE_INFO:
+               {
+                       Control* pParentPanel = source.GetParent();
+                       if (pParentPanel == null)
+                       {
+                               return;
+                       }
+
+                       Control* pParentTableViewItem = pParentPanel->GetParent();
+                       if (pParentTableViewItem == null)
+                       {
+                               return;
+                       }
+
+                       if (__pCurrentFocusedItem != null)
+                       {
+                               __pMoreInformationItem = pParentTableViewItem;
+                               SetFocus();
+                       }
+                       else
+                       {
+                               Point contextMenuPos;
+
+                               contextMenuPos.x = pParentTableViewItem->GetWidth() / 2;
+                               contextMenuPos.y = GetClientAreaBounds().y + pParentTableViewItem->GetY() + source.GetY() - __scrolledDistance;
+
+                               ShowMoreInformationContextMenu(contextMenuPos);
+                       }
+               }
+               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);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_JOB_TITLE:
+               {
+                       __isExpandable = false;
+                       __isJobTitleEnabled = true;
+
+                       ChangeNameFieldStatus();
+
+                       __pTableView->UpdateTableView();
+                       __pTableView->ScrollToItem(TABLE_VIEW_NAME_FIELD_INDEX, 0);
+               }
+               break;
+       case IDA_CONTEXT_MENU_ITEM_DEPARTMENT:
+               {
+                       __isExpandable = false;
+                       __isDepartmentEnabled = true;
+
+                       ChangeNameFieldStatus();
+
+                       __pTableView->UpdateTableView();
+                       __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();
+                               HideKeypad();
+                       }
+
+                       SaveContactData(false);
+                       ShowDefaultPhoneNumberContextMenu(contextMenuPos);
+               }
+               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");
+
+       Header* pHeader = GetHeader();
+       Footer* pFooter = GetFooter();
+
+       if (previousSceneId.Equals(IDSCN_GROUP_SELECTOR, true))
+       {
+               if (pArgs != null)
+               {
+                       Integer* pCategoryId = null;
+                       __pPresentationModel->RemoveContactFromAllCategories();
+
+                       IEnumerator* pEnum = pArgs->GetEnumeratorN();
+                       while (pEnum->MoveNext() == E_SUCCESS)
+                       {
+                               pCategoryId = static_cast<Integer*>(pEnum->GetCurrent());
+                               if (pCategoryId != null)
+                               {
+                                       __pPresentationModel->AddContactToCategory(pCategoryId->ToInt());
+                               }
+                       }
+                       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_CONTACT_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);
+                                       }
+                               }
+                       }
+
+                       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)
+{
+}
+
+void
+ContactEditorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+       ShowKeypad();
+}
+
+void
+ContactEditorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+}
+
+void
+ContactEditorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       HideKeypad();
+
+       if (__pMoreInformationItem != null)
+       {
+               Point contextMenuPos;
+
+               contextMenuPos.x = __pMoreInformationItem->GetWidth() / 2;
+               contextMenuPos.y = GetClientAreaBounds().y + __pMoreInformationItem->GetY() + source.GetY() - __scrolledDistance;
+
+               ShowMoreInformationContextMenu(contextMenuPos);
+
+               __pMoreInformationItem = null;
+       }
+}
+
+void
+ContactEditorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+void
+ContactEditorForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+
+       __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 (__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 == 1)
+               {
+                       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 = 2;
+               }
+               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)
+{
+       return H_ITEM;
+}
+
+TableViewGroupItem*
+ContactEditorForm::CreateGroupItem(int groupIndex, int itemWidth)
+{
+       int groupItemHeight = H_EMPTY_SPACE;
+
+       if (groupIndex == TABLE_VIEW_THUMBNAIL_FIELD_INDEX || (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 = 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_PHONE_NUMBER_FIELD_INDEX)
+       {
+               if ((itemIndex == __pPhoneNumberFieldItem->GetCount()) && __isDefaultPhoneNumberButtonEnabled == true)
+               {
+                       delete pItem;
+               }
+
+               return true;
+       }
+
+       if ((groupIndex > TABLE_VIEW_NAME_FIELD_INDEX && groupIndex < TABLE_VIEW_BIRTHDAY_FIELD_INDEX) || groupIndex == TABLE_VIEW_NOTE_FIELD_INDEX)
+       {
+               return true;
+       }
+       else if (groupIndex == TABLE_VIEW_NAME_FIELD_INDEX)
+       {
+               SaveNameFields();
+               __pNameFieldItem = null;
+       }
+
+       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:
+               {
+                       pItem->RemoveAllControls();
+                       AddThumbnailControls(*pItem);
+                       pItem->Invalidate(true);
+               }
+               break;
+       case TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX:
+               {
+                       String valueString;
+                       Label* pLabel = static_cast<Label *>(pItem->GetControl(2));
+
+                       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
+                       {
+                               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:
+               {
+                       DateTime birthdayDate;
+                       EditDate* pBirthday = static_cast<EditDate *>(pItem->GetControl(1));
+
+                       if (pBirthday == null)
+                       {
+                               return;
+                       }
+
+                       __pPresentationModel->GetBirthday(birthdayDate);
+
+                       pBirthday->SetDate(birthdayDate);
+                       pBirthday->Invalidate(false);
+               }
+               break;
+       case TABLE_VIEW_NOTE_FIELD_INDEX:
+               {
+                       Control* pNoteField = pItem->GetControl(0);
+
+                       if (pNoteField == null)
+                       {
+                               return;
+                       }
+
+                       pItem->SetSize(pItem->GetWidth(), pNoteField->GetHeight());
+               }
+               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_GAP));
+       pThumbnailItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       AddThumbnailControls(*pThumbnailItem);
+
+       return pThumbnailItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetNameFields(int itemWidth)
+{
+       int itemHeight = H_ITEM;
+
+       if (__isExpandable == true)
+       {
+               itemHeight = H_EXPANDED_NAME_FIELDS;
+
+               if (__isJobTitleEnabled == true)
+               {
+                       itemHeight += H_ITEM;
+               }
+
+               if (__isDepartmentEnabled)
+               {
+                       itemHeight += H_ITEM;
+               }
+       }
+
+       __pNameFieldItem = new (std::nothrow) TableViewItem();
+       __pNameFieldItem->Construct(Dimension(itemWidth, itemHeight), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       __pNameFieldItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Rectangle itemBounds(W_ITEM_GAP, 0, itemWidth - (W_ITEM_GAP * 3) - H_BUTTON, H_ITEM);
+
+       if (__isExpandable == true)
+       {
+               EditField* pFirstName = new (std::nothrow) EditField();
+               pFirstName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               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);
+
+               __pNameFieldItem->AddControl(*pFirstName);
+
+               itemBounds.y += pFirstName->GetHeight();
+               EditField* pMiddleName = new (std::nothrow) EditField();
+               pMiddleName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               pMiddleName->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_MIDDLE_NAME"));
+               pMiddleName->AddFocusEventListener(*this);
+               pMiddleName->AddKeypadEventListener(*this);
+               pMiddleName->SetName(ResourceManager::GetString(L"IDS_PB_BODY_MIDDLE_NAME"));
+               pMiddleName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_MIDDLE_NAME));
+
+               __pNameFieldItem->AddControl(*pMiddleName);
+
+               itemBounds.y += pMiddleName->GetHeight();
+               EditField* pLastName = new (std::nothrow) EditField();
+               pLastName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               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->AddTextEventListener(*this);
+
+               __pNameFieldItem->AddControl(*pLastName);
+
+               itemBounds.y += pLastName->GetHeight();
+               EditField* pSuffix = new (std::nothrow) EditField();
+               pSuffix->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               pSuffix->SetGuideText(ResourceManager::GetString(L"IDS_PB_BODY_SUFFIX"));
+               pSuffix->AddFocusEventListener(*this);
+               pSuffix->AddKeypadEventListener(*this);
+               pSuffix->SetName(ResourceManager::GetString(L"IDS_PB_BODY_SUFFIX"));
+               pSuffix->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_NAME_SUFFIX));
+
+               __pNameFieldItem->AddControl(*pSuffix);
+
+               itemBounds.y += pSuffix->GetHeight();
+               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->SetName(ResourceManager::GetString(L"IDS_PB_BODY_NICKNAME"));
+               pNickName->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_NICK_NAME));
+
+               __pNameFieldItem->AddControl(*pNickName);
+
+               itemBounds.y += pNickName->GetHeight();
+               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->SetName(ResourceManager::GetString(L"IDS_PB_BODY_JOB_TITLE"));
+                       pJobTitle->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_JOB_TITLE));
+
+                       __pNameFieldItem->AddControl(*pJobTitle);
+
+                       itemBounds.y += pJobTitle->GetHeight();
+               }
+
+               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->SetName(ResourceManager::GetString(L"IDS_PB_BODY_DEPARTMENT"));
+                       pDepartment->SetText(__pPresentationModel->GetValue(DETAIL_PROPERTY_DEPARTMENT));
+
+                       __pNameFieldItem->AddControl(*pDepartment);
+
+                       itemBounds.y += pDepartment->GetHeight();
+               }
+
+               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));
+
+               __pNameFieldItem->AddControl(*pCompanyName);
+       }
+       else
+       {
+               EditField* pName = new (std::nothrow) EditField();
+               pName->Construct(itemBounds, EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY);
+               pName->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_DETAILS_NAME"));
+               pName->AddFocusEventListener(*this);
+               pName->AddKeypadEventListener(*this);
+               pName->SetName(ResourceManager::GetString(L"IDS_COM_BODY_DETAILS_NAME"));
+               pName->AddTextEventListener(*this);
+
+               String firstName(__pPresentationModel->GetValue(DETAIL_PROPERTY_FIRST_NAME));
+               String lastName(__pPresentationModel->GetValue(DETAIL_PROPERTY_LAST_NAME));
+
+               if (firstName.IsEmpty() == false)
+               {
+                       pName->SetText(firstName);
+               }
+
+               if (lastName.IsEmpty() == false)
+               {
+                       pName->AppendText(CHARACTER_SPACE + lastName);
+               }
+
+               __pNameFieldItem->AddControl(*pName);
+       }
+
+       Button* pButtonExpand = new (std::nothrow) Button();
+       pButtonExpand->Construct(Rectangle(itemWidth - (H_BUTTON + W_ITEM_GAP), (H_ITEM - H_BUTTON) / 2, H_BUTTON, H_BUTTON));
+       pButtonExpand->SetActionId(IDA_BUTTON_EXPANDABLE);
+       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;
+       }
+
+       __pNameFieldItem->AddControl(*pButtonExpand);
+
+       return __pNameFieldItem;
+}
+
+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)
+{
+       TableViewItem* pTableViewItem = new (std::nothrow) TableViewItem();
+       pTableViewItem->Construct(Dimension(itemWidth, H_ITEM), 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, 0, itemWidth - (W_ITEM_GAP * 4) - H_BUTTON - W_TYPE_BUTTON, H_ITEM), style, INPUT_STYLE_OVERLAY);
+       pInputField->SetGuideText(guideText);
+       pInputField->SetText(text);
+       pInputField->AddKeypadEventListener(*this);
+       pInputField->AddFocusEventListener(*this);
+       pInputField->AddTextEventListener(*this);
+
+       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, (H_ITEM - H_BUTTON) / 2, W_TYPE_BUTTON, H_BUTTON));
+       pButtonType->SetText(titleText);
+       pButtonType->AddTouchEventListener(*this);
+       pButtonType->SetName(Integer::ToString(parsedItemIndex));
+
+       pTableViewItem->AddControl(*pButtonType);
+
+       Button *pButtonDelete = new (std::nothrow) Button();
+       pButtonDelete->Construct(Rectangle(itemWidth - H_BUTTON - W_ITEM_GAP, (H_ITEM - 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);
+       }
+
+       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);
+               int defaultNumberIndex = 0;
+
+               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)));
+
+                       if (phoneNumberString.Equals(defaultPhoneNumber, true) == true)
+                       {
+                               defaultNumberIndex = 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(defaultNumberIndex);
+       }
+
+       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)
+{
+       TableViewItem* pGroupsItem = new (std::nothrow) TableViewItem();
+       pGroupsItem->Construct(Dimension(itemWidth, H_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+
+       Panel* pGroupStyle = new (std::nothrow) Panel();
+       pGroupStyle->Construct(Rectangle(0, 0, itemWidth, H_ITEM), GROUP_STYLE_TOP);
+       pGroupStyle->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+       pGroupsItem->AddControl(*pGroupStyle);
+
+       Label* pLabelTitle = new (std::nothrow) Label();
+       pLabelTitle->Construct(Rectangle(0, 0, itemWidth, H_GROUP_RINGTONE_LABEL), ResourceManager::GetString(L"IDS_PB_BODY_GROUPS"));
+       pLabelTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       pGroupsItem->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, pLabelTitle->GetHeight(), itemWidth, H_GROUP_RINGTONE_LABEL), groupsName);
+       pLabelGroupName->SetTextColor(Color(COLOR_CONTENT_TEXT));
+       pLabelGroupName->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       pGroupsItem->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, Y_EDITDATE));
+       pBirthday->AddDateChangeEventListener(*this);
+
+       __pPresentationModel->GetBirthday(birthdayDate);
+       pBirthday->SetDate(birthdayDate);
+
+       TableViewItem* pBirthdayItem = new (std::nothrow) TableViewItem();
+       pBirthdayItem->Construct(Dimension(itemWidth, H_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pBirthdayItem->SetBackgroundColor(Color(0), 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"));
+
+       pBirthdayItem->AddControl(*pLabelTitle);
+       pBirthdayItem->AddControl(*pBirthday);
+
+       Button* pClearButton = new (std::nothrow) Button();
+       pClearButton->Construct(Rectangle(itemWidth - (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);
+
+       return pBirthdayItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetNoteField(int itemWidth)
+{
+       if (__pNoteFieldItem != null)
+       {
+               return __pNoteFieldItem;
+       }
+
+       __pNoteFieldItem = new (std::nothrow) TableViewItem();
+       __pNoteFieldItem->Construct(Dimension(itemWidth, H_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       __pNoteFieldItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       ExpandableEditArea* pNoteEditArea = new (std::nothrow) ExpandableEditArea();
+       pNoteEditArea->Construct(Rectangle(0, 0, itemWidth, H_ITEM), EXPANDABLE_EDIT_AREA_STYLE_NORMAL, EXPANDABLE_EDIT_AREA_TITLE_STYLE_TOP);
+       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);
+
+       __pNoteFieldItem->AddControl(*pNoteEditArea);
+
+       return __pNoteFieldItem;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+ContactEditorForm::GetRingtoneField(int itemWidth)
+{
+       TableViewItem* pRingtoneItem = new (std::nothrow) TableViewItem();
+       pRingtoneItem->Construct(Dimension(itemWidth, H_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+
+       Panel* pGroupStyle = new (std::nothrow) Panel();
+       pGroupStyle->Construct(Rectangle(0, 0, itemWidth, H_ITEM), GROUP_STYLE_BOTTOM);
+       pGroupStyle->SetBackgroundColor(COLOR_THUMBNAIL_BACKGROUND);
+       pRingtoneItem->AddControl(*pGroupStyle);
+
+       Label* pLabelTitle = new (std::nothrow) Label();
+       pLabelTitle->Construct(Rectangle(0, 0, itemWidth, H_GROUP_RINGTONE_LABEL), ResourceManager::GetString(L"IDS_PB_BODY_RINGTONE"));
+       pLabelTitle->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       pRingtoneItem->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, pLabelTitle->GetHeight(), itemWidth, H_GROUP_RINGTONE_LABEL), trimmedPath);
+       pLabelRingToneName->SetTextColor(Color(COLOR_CONTENT_TEXT));
+       pLabelRingToneName->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+
+       pRingtoneItem->AddControl(*pLabelRingToneName);
+
+       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(0, -(H_DIVIDER), itemWidth, H_DESCRIPTION_CONTAINER + H_DIVIDER));
+       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)
+{
+       TableViewItem* pDefaultPhoneNumberItem = new (std::nothrow) TableViewItem();
+       pDefaultPhoneNumberItem->Construct(Dimension(itemWidth, H_ITEM));
+       pDefaultPhoneNumberItem->SetBackgroundColor(Color(0), TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       Button* pButtonDefaultNumber = new (std::nothrow) Button();
+       pButtonDefaultNumber->Construct(Rectangle(X_MORE_INFORMATION_BUTTON, Y_MORE_INFORMATION_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);
+
+       return pDefaultPhoneNumberItem;
+}
+
+result
+ContactEditorForm::DeleteInputField(int groupIndex, int itemIndex)
+{
+       result r = E_SUCCESS;
+       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;
+       }
+
+       TryReturn(pFieldList != null, E_FAILURE, "[E_FAILURE] Unable to delete the item.")
+
+       if (pFieldList->GetAt(itemIndex) == __pCurrentFocusedItem)
+       {
+               SetFocus();
+               HideKeypad();
+       }
+
+       __pTableView->RefreshItem(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
+       r = pFieldList->RemoveAt(itemIndex, true);
+
+       for (int i = itemIndex; i < pFieldList->GetCount(); i++)
+       {
+               TableViewItem* pItem = static_cast<TableViewItem *>(pFieldList->GetAt(i));
+               if (pItem == null)
+               {
+                       return E_FAILURE;
+               }
+
+               int parsedIndex;
+               Button* pTypeButton = static_cast<Button*>(pItem->GetControl(1));
+               if (pTypeButton == null)
+               {
+                       return E_FAILURE;
+               }
+
+               result 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())
+               {
+                       if (itemIndex > 0)
+                       {
+                               SetAsDefaultPhoneNumber(itemIndex - 1);
+                       }
+                       else
+                       {
+                               SetAsDefaultPhoneNumber(itemIndex);
+                       }
+               }
+               else if (itemIndex < __pPresentationModel->GetDefaultNumberIndex())
+               {
+                       SetAsDefaultPhoneNumber(__pPresentationModel->GetDefaultNumberIndex() - 1);
+               }
+       }
+
+       if (__isDefaultPhoneNumberButtonEnabled == true && __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER) < 2)
+       {
+               __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::AddThumbnailControls(Tizen::Ui::Controls::TableViewItem& item)
+{
+       int itemWidth = GetBounds().width;
+
+       Label* pLabelThumbnail = new (std::nothrow) Label();
+       pLabelThumbnail->Construct(Rectangle((itemWidth - W_THUMBNAIL) / 2, H_THUMBNAIL_GAP, W_THUMBNAIL, W_THUMBNAIL), L"");
+
+       item.AddControl(*pLabelThumbnail);
+
+       Bitmap* pBitmapItem = null;
+       Bitmap* pBitmapItemPressed = null;
+       Bitmap* pBitmapItemDisabled = null;
+
+       Button* 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);
+       pBitmapItemDisabled = ResourceManager::GetBitmapN(IDB_BUTTON_ADD_DISABLED);
+
+       if (pBitmapItem != null)
+       {
+               pButtonAdd->SetNormalBackgroundBitmap(*pBitmapItem);
+               delete pBitmapItem;
+       }
+       if (pBitmapItemPressed != null)
+       {
+               pButtonAdd->SetPressedBackgroundBitmap(*pBitmapItemPressed);
+               delete pBitmapItemPressed;
+       }
+       if (pBitmapItemDisabled != null)
+       {
+               pButtonAdd->SetDisabledBitmap(Point(0, 0), *pBitmapItemDisabled);
+               delete pBitmapItemDisabled;
+       }
+       item.AddControl(*pButtonAdd);
+
+       Button* pButtonDelete = new (std::nothrow) Button();
+       pButtonDelete->Construct(Rectangle(pLabelThumbnail->GetX() - W_THUMBNAIL_DELETE_BUTTON_GAP, pLabelThumbnail->GetY() - H_THUMBNAIL_DELETE_BUTTON_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);
+
+       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);
+       }
+       else
+       {
+               pLabelThumbnail->SetBackgroundColor(Color(COLOR_THUMBNAIL_BACKGROUND));
+               pButtonDelete->SetShowState(false);
+       }
+
+       delete pThumbnail;
+
+       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);
+       pBitmapItemDisabled = ResourceManager::GetBitmapN(IDB_BUTTON_CAMERA_DISABLED);
+       if (pBitmapItem != null)
+       {
+               pButtonCamera->SetNormalBackgroundBitmap(*pBitmapItem);
+               delete pBitmapItem;
+       }
+       if (pBitmapItemPressed != null)
+       {
+               pButtonCamera->SetPressedBackgroundBitmap(*pBitmapItemPressed);
+               delete pBitmapItemPressed;
+       }
+       if (pBitmapItemDisabled != null)
+       {
+               pButtonCamera->SetDisabledBitmap(Point(0, 0), *pBitmapItemDisabled);
+               delete pBitmapItemDisabled;
+       }
+       item.AddControl(*pButtonCamera);
+}
+
+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)
+{
+       Label* pDivider = new (std::nothrow) Label();
+       pDivider->Construct(Rectangle(positionX, positionY, W_DIVIDER, H_ITEM), L"");
+       pDivider->SetBackgroundColor(Color(COLOR_DIVIDER));
+       pDivider->SetEnabled(false);
+
+       pItem->AddControl(*pDivider);
+}
+
+result
+ContactEditorForm::SetAsDefaultPhoneNumber(int index)
+{
+       result r = E_SUCCESS;
+
+       for (int i = 0; i < __pPhoneNumberFieldItem->GetCount(); i++)
+       {
+               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;
+               }
+
+               if (i == index)
+               {
+                       pEditField->SetTextColor(EDIT_TEXT_COLOR_NORMAL, Color(0xFFFF00FF));
+                       pEditField->SetTextColor(EDIT_TEXT_COLOR_HIGHLIGHTED, Color(0xFFFF00FF));
+                       __pPresentationModel->SetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER, L"", index);
+               }
+               else
+               {
+                       pEditField->SetTextColor(EDIT_TEXT_COLOR_NORMAL, Color(0xFF000000));
+                       pEditField->SetTextColor(EDIT_TEXT_COLOR_HIGHLIGHTED, Color(0xFF000000));
+               }
+
+               pEditField->Invalidate(false);
+       }
+
+       return r;
+}
+
+result
+ContactEditorForm::ChangeNameFieldStatus(void)
+{
+       result r = E_SUCCESS;
+
+       r = SaveNameFields();
+
+       __isExpandable = (__isExpandable == true) ? false : true;
+
+       if (__pNameFieldItem == __pCurrentFocusedItem)
+       {
+               SetFocus();
+               HideKeypad();
+       }
+
+       return r;
+}
+
+result
+ContactEditorForm::SaveContactData(bool isSaved)
+{
+       result r = E_SUCCESS;
+
+       r = SaveNameFields();
+
+       for (int i = 0; i < __pPhoneNumberFieldItem->GetCount(); i++)
+       {
+               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();
+               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 emailTypeString(pItem->GetName());
+               int emailType;
+
+               emailString.Trim();
+               Integer::Parse(emailTypeString, emailType);
+
+               r = __pPresentationModel->SetEmail((DetailEmailType)emailType, emailString, i);
+
+               if (isSaved == true && r == E_SUCCESS)
+               {
+                       int existedAtIndex;
+                       int existedDotIndex;
+
+                       r = emailString.IndexOf(CHARACTER_AT, 0, existedAtIndex);
+                       if (r == E_SUCCESS)
+                       {
+                               r = emailString.IndexOf(CHARACTER_DOT, existedAtIndex + 2, existedDotIndex);
+                       }
+
+                       if (r != E_SUCCESS || emailString.GetLength() == (existedDotIndex + 1))
+                       {
+                               int modalResult;
+                               MessageBox invalidEmailMessage;
+                               invalidEmailMessage.Construct(L"", ResourceManager::GetString(L"IDS_PB_POP_INVALID_EMAIL_ADDRESS"), MSGBOX_STYLE_OK);
+                               invalidEmailMessage.ShowAndWait(modalResult);
+
+                               pEditField->SetFocus();
+
+                               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());
+
+               addressString.Trim();
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_ADDRESS_STREET, 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(0));
+               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(ResourceManager::GetString(L"IDS_COM_BODY_DETAILS_NAME"), false));
+               if (pName == null)
+               {
+                       return E_FAILURE;
+               }
+
+               String displayName(pName->GetText());
+               String firstName;
+               String lastName;
+               int delimeterIndex;
+
+               displayName.IndexOf(CHARACTER_SPACE, 0, delimeterIndex);
+
+               if (delimeterIndex < 0)
+               {
+                       firstName.Append(displayName);
+               }
+               else
+               {
+                       displayName.SubString(0, delimeterIndex++, firstName);
+                       displayName.SubString(delimeterIndex, displayName.GetLength() - delimeterIndex, lastName);
+               }
+
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_FIRST_NAME, firstName);
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_LAST_NAME, lastName);
+       }
+
+       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)
+{
+       Header* pHeader = GetHeader();
+       Footer* pFooter = GetFooter();
+
+       if (enable)
+       {
+               pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       if (pFooter->GetShowState())
+       {
+               pFooter->Invalidate(true);
+       }
+       else
+       {
+               pHeader->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::HideKeypad(void)
+{
+       result r = E_SUCCESS;
+       ButtonItemStatus buttonsStatus;
+       Header* pHeader = GetHeader();
+
+       buttonsStatus = pHeader->GetButtonStatus(BUTTON_POSITION_LEFT);
+       r  = pHeader->RemoveAllButtons();
+       if (r != E_SUCCESS)
+       {
+               return;
+       }
+
+       Footer* pFooter = GetFooter();
+
+       r  = pFooter->RemoveAllItems();
+       if (r != E_SUCCESS)
+       {
+               return;
+       }
+
+       FooterItem footerItemSave;
+       footerItemSave.Construct(IDA_ACTION_BAR_SAVE);
+       footerItemSave.SetText(ResourceManager::GetString(L"IDS_COM_SK_SAVE"));
+
+       FooterItem footerItemCancel;
+       footerItemCancel.Construct(IDA_ACTION_BAR_CANCEL);
+       footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+
+       pFooter->AddItem(footerItemSave);
+       pFooter->AddItem(footerItemCancel);
+
+       if (buttonsStatus == BUTTON_ITEM_STATUS_DISABLED)
+       {
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+       pHeader->Invalidate(false);
+
+       Rectangle clientBounds = GetClientAreaBounds();
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+}
+
+void
+ContactEditorForm::ShowKeypad(void)
+{
+       result r = E_SUCCESS;
+
+       Footer* pFooter = GetFooter();
+       FooterItemStatus itemStatus;
+
+       if (pFooter->GetShowState() == false)
+       {
+               return;
+       }
+
+       pFooter->GetItemStatus(0, itemStatus);
+       r = pFooter->RemoveAllItems();
+       if (r != E_SUCCESS)
+       {
+               return;
+       }
+
+       Header* pHeader = GetHeader();
+
+       ButtonItem headerCancel;
+       headerCancel.Construct(BUTTON_ITEM_STYLE_TEXT, IDA_ACTION_BAR_CANCEL);
+       headerCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+
+       ButtonItem headerSave;
+       headerSave.Construct(BUTTON_ITEM_STYLE_TEXT, IDA_ACTION_BAR_SAVE);
+       headerSave.SetText(ResourceManager::GetString(L"IDS_COM_SK_SAVE"));
+
+       pHeader->SetButton(BUTTON_POSITION_LEFT, headerSave);
+       pHeader->SetButton(BUTTON_POSITION_RIGHT, headerCancel);
+
+       if (itemStatus == FOOTER_ITEM_STATUS_DISABLED)
+       {
+               pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
+       }
+
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
+}
+
+void
+ContactEditorForm::OnTextValueChanged(const Tizen::Ui::Control& source)
+{
+       TableViewItem* pTableViewItem = static_cast<TableViewItem *>(source.GetParent());
+
+       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;
+       }
+
+       String trimmedString = pEditField->GetText();
+       trimmedString.Trim();
+
+       if (trimmedString.IsEmpty())
+       {
+               pDeleteButton->SetShowState(false);
+
+               return;
+       }
+
+       if (pDeleteButton->GetShowState())
+       {
+               return;
+       }
+
+       pDeleteButton->SetShowState(true);
+
+       __pTableView->UpdateTableView();
+       pEditField->ShowKeypad();
+}
+
+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 (__pCurrentFocusedItem == __pNameFieldItem)
+       {
+               return;
+       }
+
+       ArrayList* pFieldList = null;
+       int groupIndex;
+       int itemIndex;
+
+       const EditField* pEditField = static_cast<const EditField*>(&source);
+       if (pEditField != null)
+       {
+               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);
+       }
+
+       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;
+       }
+
+       TryReturnVoid(pFieldList != null, "[E_FAILURE] Unable to get a input field.");
+
+       for (int i = pFieldList->GetCount() - 2; i >= 0; i--)
+       {
+               TableViewItem* pTableViewItem = static_cast<TableViewItem*>(pFieldList->GetAt(i));
+               if (pTableViewItem != null)
+               {
+                       EditField* pInputField = static_cast<EditField*>(pTableViewItem->GetControl(0));
+                       if (i != itemIndex && pInputField != null && pInputField->GetTextLength() == 0)
+                       {
+                               DeleteInputField(groupIndex, i);
+                       }
+               }
+       }
+}
+
+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);
+
+       String defaultPhoneNumber = __pPresentationModel->GetValue(DETAIL_PROPERTY_DEFAULT_PHONE_NUMBER);
+       int count = __pPresentationModel->GetMultiValuesCount(DETAIL_PROPERTY_PHONE_NUMBER);
+
+       for (int i = 0; i < count; i++)
+       {
+               String phoneNumber(__pPresentationModel->GetValue(DETAIL_PROPERTY_PHONE_NUMBER, i));
+
+               if (phoneNumber.Equals(defaultPhoneNumber, true) == false)
+               {
+                       phoneNumber.Insert(__pPresentationModel->GetType(DETAIL_PROPERTY_PHONE_NUMBER, i) + CHARACTER_SPACE, 0);
+                       __pDefaultPhoneNumberContextMenu->AddItem(phoneNumber, i);
+               }
+       }
+
+       __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);
+
+       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 (__pMoreInformationContextMenu->GetItemCount() > 0)
+       {
+               __pMoreInformationContextMenu->Show();
+       }
+}
+
+void
+ContactEditorForm::ShowTypeContextMenu(DetailPhoneNumberType currentType, const Tizen::Graphics::Point& position, int itemTag)
+{
+       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->SetMaxVisibleItemsCount(DETAIL_PHONENUMBER_TYPE_OTHER + 1);
+       __pTypeContextMenu->AddActionEventListener(*this);
+
+       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);
+       }
+
+       __pTypeContextMenu->RemoveItemAt((int)currentType);
+
+       __pTypeContextMenu->Show();
+}
+
+void
+ContactEditorForm::ShowTypeContextMenu(DetailEmailType currentType, const Tizen::Graphics::Point& position, int itemTag)
+{
+       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->SetMaxVisibleItemsCount(DETAIL_EMAIL_TYPE_OTHER + 1);
+       __pTypeContextMenu->AddActionEventListener(*this);
+
+       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);
+       }
+
+       __pTypeContextMenu->RemoveItemAt((int)currentType);
+
+       __pTypeContextMenu->Show();
+}
+
+void
+ContactEditorForm::ShowTypeContextMenu(DetailAddressType currentType, const Tizen::Graphics::Point& position, int itemTag)
+{
+       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->SetMaxVisibleItemsCount(DETAIL_ADDRESS_TYPE_OTHER + 1);
+       __pTypeContextMenu->AddActionEventListener(*this);
+
+       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);
+       }
+
+       __pTypeContextMenu->RemoveItemAt((int)currentType);
+
+       __pTypeContextMenu->Show();
+}
+
+void
+ContactEditorForm::ShowTypeContextMenu(DetailUrlType currentType, const Tizen::Graphics::Point& position, int itemTag)
+{
+       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->SetMaxVisibleItemsCount(DETAIL_URL_TYPE_OTHER + 1);
+       __pTypeContextMenu->AddActionEventListener(*this);
+
+       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);
+       }
+
+       __pTypeContextMenu->RemoveItemAt((int)currentType);
+
+       __pTypeContextMenu->Show();
+}
+
+void
+ContactEditorForm::ShowTypeContextMenu(DetailImAddressType currentType, const Tizen::Graphics::Point& position, int itemTag)
+{
+       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->SetMaxVisibleItemsCount(7); // Temporary the code due to limit max count(8) by UI framework.
+       __pTypeContextMenu->AddActionEventListener(*this);
+
+       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);
+       }
+
+       __pTypeContextMenu->RemoveItemAt((int)currentType);
+
+       __pTypeContextMenu->Show();
+}
+
+void
+ContactEditorForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+ContactEditorForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       if (source.Contains(currentPosition) == false || touchInfo.IsFlicked() == true)
+       {
+               return;
+       }
+
+       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);
+
+       int groupIndex = (itemIndex & TABLE_VIEW_GROUP_INDEX_MASK) >> TABLE_VIEW_GROUP_INDEX_SHIFT;
+
+       switch (groupIndex)
+       {
+       case TABLE_VIEW_PHONE_NUMBER_FIELD_INDEX:
+               {
+                       ShowTypeContextMenu((DetailPhoneNumberType)type, itemPosition, itemIndex);
+               }
+               break;
+       case TABLE_VIEW_EMAIL_FIELD_INDEX:
+               {
+                       ShowTypeContextMenu((DetailEmailType)type, itemPosition, itemIndex);
+               }
+               break;
+       case TABLE_VIEW_ADDRESS_FIELD_INDEX:
+               {
+                       ShowTypeContextMenu((DetailAddressType)type, itemPosition, itemIndex);
+               }
+               break;
+       case TABLE_VIEW_IM_ADDRESS_FIELD_INDEX:
+               {
+                       ShowTypeContextMenu((DetailImAddressType)type, itemPosition, itemIndex);
+               }
+               break;
+       case TABLE_VIEW_URL_FIELD_INDEX:
+               {
+                       ShowTypeContextMenu((DetailUrlType)type, itemPosition, itemIndex);
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+ContactEditorForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+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)
+{
+}
+
+void
+ContactEditorForm::OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+}
+
+void
+ContactEditorForm::OnScrollPositionChanged (Tizen::Ui::Control &source, int scrollPos)
+{
+       __scrolledDistance = scrollPos;
+}
+
+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);
+}
+
+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");
+
+       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;
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               pResultString = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+               TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+               __pPresentationModel->SetThumbnail(*pResultString);
+               __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               pResultString = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+               TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+               __pPresentationModel->SetThumbnail(*pResultString);
+               __pTableView->RefreshItem(TABLE_VIEW_THUMBNAIL_FIELD_INDEX, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               pResultString = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+               TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+               __pPresentationModel->SetValue(DETAIL_PROPERTY_RINGTONE, *pResultString);
+               __pTableView->RefreshItem(TABLE_VIEW_GROUP_RINGTONE_FIELD_INDEX, 1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+
+       AppLogDebug("EXIT");
+}
+
+result
+ContactEditorForm::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId)
+{
+       result r = E_SUCCESS;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_CAMERA));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MEDIA_TYPE), new (std::nothrow) String(INPUT_MEDIA_TYPE_IMAGE));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_SELECTION_TYPE_SINGLE));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_TYPE), new (std::nothrow) String(INPUT_SELECTION_TYPE_SINGLE));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_AUDIO));
+       }
+
+       AppControl* pAc = AppManager::FindAppControlN(appId, operationId);
+
+       if (pAc)
+       {
+               r = pAc->Start(null, null, &extraData, this);
+               if (r == E_SUCCESS)
+               {
+                       SetEnabled(false);
+               }
+               delete pAc;
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
diff --git a/src/CtContactEntry.cpp b/src/CtContactEntry.cpp
new file mode 100644 (file)
index 0000000..afc7d27
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..ace7be4
--- /dev/null
@@ -0,0 +1,1303 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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_CANCEL = 41;
+
+static const int H_ITEM = 112;
+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 = 108;
+static const int H_SEARCHBAR = 108;
+static const int H_BOTTOM_LABEL = 48;
+static const int H_GROUP_ITEM = 76;
+static const int W_CONTACT_VALUE_POPUP = 720;
+static const int H_CONTACT_VALUE_POPUP = 700;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 506;
+static const int H_CLOSE_BUTTON = 74;
+static const int Y_CLOSE_BUTTON = 526;
+static const int W_CLOSE_BUTTON = 394;
+static const int W_DELETE_POPUP = 720;
+static const int H_DELETE_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 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<215, 225, 232>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<76, 81, 88>::Value;
+static const unsigned int COLOR_DELETE_POPUP_TEXT = Color32<128, 128, 128>::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)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pBottomLabel(null)
+, __pMultipleContactValuePopup(null)
+, __pDeletePopup(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);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = ContactListPresentationModel::GetInstance();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       __pSelectAll = new (std::nothrow) CheckButton();
+       __pSelectAll->Construct(Rectangle(0, H_SEARCHBAR, clientBounds.width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_DEFAULT);
+       __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(Rectangle(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);
+       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 __pDeletePopup;
+       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();
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       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->SetFocus();
+                       __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->SetFocus();
+                       __pListView->Invalidate(true);
+                       UpdateBottomLabel();
+               }
+               break;
+       case IDA_FOOTER_DELETE:
+               {
+                       ShowDeletePopup();
+               }
+               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_CANCEL:
+               {
+                       __deleteContactTimer.Cancel();
+                       HideDeletePopup();
+                       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);
+
+       __pPresentationModel->InitializeContactList();
+       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               pFooter->SetBackButton();
+
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pSelectAll->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+               else
+               {
+                       FooterItem footerItemDone;
+                       footerItemDone.Construct(IDA_FOOTER_DONE);
+                       footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+                       pFooter->AddItem(footerItemDone);
+
+                       bool isChecked = false;
+                       for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == false; groupIndex++)
+                       {
+                               int itemCount = __pListView->GetItemCountAt(groupIndex);
+                               for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+                               {
+                                       if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
+                                       {
+                                               isChecked = true;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (isChecked == false)
+                       {
+                               pFooter->SetItemEnabled(0, 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);
+                       }
+               }
+
+               pFooter->RemoveBackButton();
+
+               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(footerDelete);
+               pFooter->AddItem(footerCancel);
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       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)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       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);
+       }
+}
+
+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;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), 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_ITEM), 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);
+               __pSelectAll->SetShowState(true);
+               __pSelectAll->SetSelected(isChecked);
+               __pSearchListView->SetShowState(false);
+               __pPresentationModel->ResetSearchedContactList();
+               __pSearchListView->UpdateList();
+
+               UpdateBottomLabel();
+       }
+}
+
+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)
+       {
+               __pListView->SetFocus();
+
+               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)
+       {
+               __pSearchListView->SetFocus();
+
+               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)
+       {
+               __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
+       {
+               __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)
+{
+       if (__isContactRemoved == false)
+       {
+               __pListView->UpdateList();
+       }
+}
+
+void
+ContactListEditorPanel::OnCategoriesChanged(void)
+{
+}
+
+result
+ContactListEditorPanel::UpdateBottomLabel(void)
+{
+       int selectedCount = 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->Invalidate(false);
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Footer* pFooter = pForm->GetFooter();
+
+       if (selectedCount > 0)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, 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));
+
+       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)
+{
+       __pMultipleContactValuePopup->SetShowState(false);
+
+       delete __pContactValueListEvent;
+       __pContactValueListEvent = null;
+
+       Invalidate(true);
+}
+
+void
+ContactListEditorPanel::ShowDeletePopup(void)
+{
+       if (__pDeletePopup != null)
+       {
+               delete __pDeletePopup;
+       }
+
+       __pDeletePopup = new (std::nothrow) Popup();
+       __pDeletePopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_POPUP));
+       __pDeletePopup->AddWindowEventListener(*this);
+
+       Rectangle clientBounds = __pDeletePopup->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);
+
+       __pDeletePopup->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());
+
+       __pDeletePopup->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);
+
+       __pDeletePopup->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);
+
+       __pDeletePopup->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_CANCEL);
+       pCancelButton->AddActionEventListener(*this);
+
+       __pDeletePopup->AddControl(*pCancelButton);
+       __pDeletePopup->Show();
+
+       __isContactRemoved = true;
+}
+
+void
+ContactListEditorPanel::HideDeletePopup(void)
+{
+       delete __pDeletePopup;
+       __pDeletePopup = 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();
+       pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->Terminate();
+}
+
+void
+ContactListEditorPanel::ReturnMultipleValues(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               String* pKeyType = new (std::nothrow) String(RETURN_KEY_TYPE);
+               String* pKeyValue = new (std::nothrow) String(RETURN_KEY_VALUE);
+               String* pMultiValue = new (std::nothrow) String();
+
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_PHONE));
+
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pMultiValue->Append(*pValue + DELIMITER_SEMICOLON);
+                       }
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_EMAIL));
+
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pMultiValue->Append(*pValue + DELIMITER_SEMICOLON);
+                       }
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_CONTACT_ID)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_CONTACT_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 pContactId(L"");
+                                               pContactId.Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                                               pMultiValue->Append(pContactId + DELIMITER_SEMICOLON);
+                                       }
+                               }
+                       }
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+               }
+               else
+               {
+                       delete pKeyType;
+                       delete pKeyValue;
+                       delete pMultiValue;
+
+                       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)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       pForm->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
+}
+
+void
+ContactListEditorPanel::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListEditorPanel::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       pForm->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+       UpdateBottomLabel();
+}
+
+void
+ContactListEditorPanel::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+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 *>(__pDeletePopup->GetControl(1));
+
+       pProgress->SetValue(pProgress->GetValue() + 1);
+       pProgress->Invalidate(false);
+
+       Label* pLabelPercentage = static_cast<Label *>(__pDeletePopup->GetControl(2));
+
+       pLabelPercentage->SetText(Integer::ToString(pProgress->GetPercentComplete()) + L"%");
+       pLabelPercentage->Invalidate(false);
+
+       Label* pLabelTotal = static_cast<Label *>(__pDeletePopup->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
+       {
+               HideDeletePopup();
+
+               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)
+{
+}
+
diff --git a/src/CtContactListItem.cpp b/src/CtContactListItem.cpp
new file mode 100644 (file)
index 0000000..84edabe
--- /dev/null
@@ -0,0 +1,106 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Social;
+using namespace Tizen::Ui::Controls;
+
+static const int W_FASTSCROLL_INDEX = 46;
+static const int W_THUMBNAIL_AREA = 112;
+static const int Y_THUMBNAIL = 8;
+static const int W_THUMBNAIL = 96;
+static const int H_THUMBNAIL = 96;
+static const int X_TEXT = 16;
+static const int Y_TEXT = 16;
+static const int H_TEXT = 80;
+
+static const int FONT_SIZE_NAME = 44;
+
+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;
+
+       font.Construct(FONT_STYLE_PLAIN , FONT_SIZE_NAME);
+       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 + W_FASTSCROLL_INDEX), H_TEXT));
+       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 + W_FASTSCROLL_INDEX), Y_THUMBNAIL, 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..6b5870a
--- /dev/null
@@ -0,0 +1,1122 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FApp.h>
+#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;
+
+static const int IDA_FOOTER_MORE = 0;
+static const int IDA_FOOTER_CREATE = 1;
+static const int IDA_MORE_DELETE = 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_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 W_POPUP_ITEM_GAP = 20;
+static const int H_ITEM = 112;
+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 = 108;
+static const int W_DELETE_POPUP = 720;
+static const int H_DELETE_POPUP = 208;
+static const int H_DELETE_LABEL = 94;
+static const int Y_DELETE_BUTTON = 114;
+static const int H_DELETE_BUTTON = 74;
+static const int W_DELETE_BUTTON = 314;
+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 = 720;
+static const int H_CONTACT_VALUE_POPUP = 700;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 506;
+static const int H_CLOSE_BUTTON = 74;
+static const int Y_CLOSE_BUTTON = 526;
+static const int W_CLOSE_BUTTON = 394;
+static const int X_MORE = 55;
+
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+static const int FONT_SIZE_DELETE_CONFIRM = 42;
+
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::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* IDB_MORE_NORMAL = L"00_icon_more.png";
+static const wchar_t* IDB_MORE_PRESSED = L"00_icon_more_press.png";
+
+static const wchar_t* INPUT_KEY_TYPE = L"type";
+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_KEY_TEL = L"tel";
+static const wchar_t* INPUT_KEY_TO = L"to";
+static const wchar_t* INPUT_KEY_CONTACT_ID = L"contactId";
+
+ContactListPanel::ContactListPanel(void)
+: __pArgList(null)
+, __pListView(null)
+, __pSearchListView(null)
+, __pAccountPopup(null)
+, __pDeletePopup(null)
+, __pMultipleContactValuePopup(null)
+, __pSearchBar(null)
+, __pEmptyImageLabel(null)
+, __pEmptyCommentLabel(null)
+, __pContextMenuMore(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();
+       __pPresentationModel->InitializeContactList();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       __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);
+       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+
+       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_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);
+
+       __pContextMenuMore = new (std::nothrow) ContextMenu();
+       __pContextMenuMore->Construct(Point(X_MORE, clientBounds.y + clientBounds.height), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_COM_SK_DELETE"), IDA_MORE_DELETE);
+       __pContextMenuMore->AddActionEventListener(*this);
+
+       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;
+       }
+
+       delete __pDeletePopup;
+       delete __pAccountPopup;
+       delete __pSearchListEvent;
+       delete __pAccountListEvent;
+       delete __pContextMenuMore;
+       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());
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       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_CONTACT_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
+               }
+               break;
+       case IDA_FOOTER_MORE:
+               {
+                       __pContextMenuMore->SetShowState(true);
+                       __pContextMenuMore->Show();
+               }
+               break;
+       case IDA_MORE_DELETE:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CONTACT_LIST_EDITOR));
+               }
+               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());
+
+       const 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);
+       pFooter->SetBackButton();
+       pFooter->AddActionEventListener(*this);
+
+       __pPresentationModel->InitializeContactList();
+
+       if (previousSceneId.Equals(IDSCN_CONTACT_LIST_EDITOR, true))
+       {
+               __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+               __pListView->UpdateList();
+       }
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK || pContactsApp->GetOperationId() == OPERATION_ID_EDIT)
+       {
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+
+               if (pArgs != null)
+               {
+                       __pArgList = new (std::nothrow) ArrayList();
+                       __pArgList->Construct();
+
+                       for (int i = 1; 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"));
+               pFooter->AddItem(footerItemCreate);
+
+               if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       ButtonItem buttonItemMore;
+                       buttonItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+                       pFooter->SetButton(BUTTON_POSITION_LEFT, buttonItemMore);
+               }
+               else
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+               pContactsApp->AddContactsAppChangeEventListener(*this);
+       }
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+ContactListPanel::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       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);
+       }
+
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+}
+
+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;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), LIST_ANNEX_STYLE_NORMAL);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth, H_ITEM), 0, *(static_cast<ICustomElement *>(pCustomElement)));
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId().IsEmpty() == false)
+       {
+               return pItem;
+       }
+
+       bool isEnabled = true;
+       if (__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty())
+       {
+               isEnabled = false;
+       }
+
+       ListContextItem* pItemContext = new (std::nothrow) ListContextItem();
+       pItemContext->Construct();
+       pItemContext->AddElement(IDA_LIST_ELEMENT_CALL, ResourceManager::GetString(L"IDS_COM_BODY_CALL"), isEnabled);
+       pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), isEnabled);
+#if __SUPPORT_VIDEO_CALL
+       pItemContext->AddElement(IDA_LIST_ELEMENT_VIDEO_CALL, ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), isEnabled);
+#endif
+       pItemContext->AddElement(IDA_LIST_ELEMENT_DELETE, ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+
+       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)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Footer* pFooter = pForm->GetFooter();
+
+       if (__pPresentationModel->GetContactCount() > 0)
+       {
+               int groupIndex;
+               int itemIndex;
+
+               if (pFooter->IsButtonSet(BUTTON_POSITION_LEFT) == false)
+               {
+                       ButtonItem buttonItemMore;
+                       buttonItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+                       pFooter->SetButton(BUTTON_POSITION_LEFT, buttonItemMore);
+               }
+
+               __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
+       {
+               pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+
+               __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();
+       }
+}
+
+void
+ContactListPanel::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
+{
+       int index = 0;
+
+       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:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                       LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, phoneNumber);
+               }
+               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)
+                               {
+                                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_PHONE));
+                                       AddContactValueOnList(pList, 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)
+                               {
+                                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_EMAIL));
+                                       AddContactValueOnList(pList, 0, pReturnValue);
+
+                                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                                       delete pList;
+                               }
+                       }
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_CONTACT_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 pContactId;
+
+                               pContactId.Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_CONTACT_ID));
+                               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(pContactId));
+                       }
+
+                       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(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_VCARD));
+                               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(vCardPath));
+                       }
+
+                       ReturnValues(pContactsApp->GetRequestId(), appCtrlResult, pReturnValue);
+               }
+
+               delete pReturnValue;
+       }
+       else if (pContactsApp->GetOperationId() == OPERATION_ID_EDIT)
+       {
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+
+               if (__pArgList != null)
+               {
+                       String* pContactId = new (std::nothrow) String(INPUT_KEY_CONTACT_ID);
+                       pContactId->Append(DELIMITER);
+                       pContactId->Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                       __pArgList->InsertAt(pContactId, 0);
+               }
+
+               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
+               {
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_PHONE));
+                       AddContactValueOnList(pList, 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
+               {
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_EMAIL));
+                       AddContactValueOnList(pList, 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));
+
+               Rectangle popupClientBounds = __pDeletePopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(0, 0, popupClientBounds.width, H_DELETE_LABEL), ResourceManager::GetString(L"IDS_COM_SK_DELETE") + L"?");
+               pLabel->SetTextConfig(FONT_SIZE_DELETE_CONFIRM, LABEL_TEXT_STYLE_BOLD);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+
+               Button* pDeleteButton = new (std::nothrow) Button();
+               pDeleteButton->Construct(Rectangle(0, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+               pDeleteButton->SetActionId(IDA_POPUP_DELETE_OK);
+               pDeleteButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(W_DELETE_BUTTON + W_POPUP_ITEM_GAP, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               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)
+{
+       delete __pDeletePopup;
+       __pDeletePopup = null;
+
+       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::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));
+
+       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)
+{
+       __pMultipleContactValuePopup->SetShowState(false);
+
+       delete __pContactValueListEvent;
+       __pContactValueListEvent = null;
+
+       Invalidate(true);
+}
+
+void
+ContactListPanel::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+       pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->Terminate();
+}
+
+void
+ContactListPanel::AddContactValueOnList(const Tizen::Base::Collection::IList* pList, int index, Tizen::Base::Collection::HashMap* pReturnValue)
+{
+       int blankIndex = 0;
+
+       String value(*(static_cast<const String *>(pList->GetAt(index))));
+       value.IndexOf(CHARACTER_SPACE, 0, blankIndex);
+       value.Remove(0, blankIndex + 1);
+
+       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(value));
+}
+
+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;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TEL), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(type));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+
+       AppControl* pAc = AppManager::FindAppControlN(appId, operationId);
+       if (pAc != null)
+       {
+               r = pAc->Start(null, null, &extraData, null);
+
+               delete pAc;
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
+
+void
+ContactListPanel::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       pForm->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
+}
+
+void
+ContactListPanel::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactListPanel::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       pForm->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+}
+
+void
+ContactListPanel::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+void
+ContactListPanel::OnForeground(void)
+{
+}
+
+void
+ContactListPanel::OnBackground(void)
+{
+       int groupIndex = (__sweptItemIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+       int itemIndex = __sweptItemIndex & LIST_VIEW_MASK;
+
+       __pListView->RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY);
+}
+
+void
+ContactListPanel::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
+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)
+{
+}
diff --git a/src/CtContactListPresentationModel.cpp b/src/CtContactListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..e323c34
--- /dev/null
@@ -0,0 +1,1111 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FGraphics.h>
+#include <FMedia.h>
+#include <FSocial.h>
+#include "CtContactListPresentationModel.h"
+#include "CtContactsApp.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;
+using namespace Tizen::System;
+
+static const int VCARD_STRING_LENGTH = 26;
+
+static const wchar_t* VCARD_PATH_FORMAT = L"/tmp/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)
+       , _isSearchingPhoneNumber(false)
+       , __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->SetEventListener(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();
+
+       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')
+                       {
+                               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;
+
+       RecordId contactId = GetContactId(groupIndex, itemIndex);
+
+       return _pAddressbook->RemoveContact(contactId);
+}
+
+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)
+{
+       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 (Integer::Parse(searchText, phoneNumber) == E_SUCCESS)
+       {
+               _isSearchingPhoneNumber = true;
+
+               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);
+
+               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;
+       }
+       else
+       {
+               _isSearchingPhoneNumber = false;
+
+               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();
+
+       if (displayName[0] >= L'A' && displayName[0] <= L'Z')
+       {
+               displayName.SubString(0, 1, firstCharacter);
+               firstCharacter.ToUpper();
+       }
+       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());
+
+       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;
+       }
+
+       result r = CreateContactList();
+       if (r != E_SUCCESS)
+       {
+               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..c817213
--- /dev/null
@@ -0,0 +1,2029 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::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";
+
+ContactPresentationModel::ContactPresentationModel(void)
+: __pAssignedCategoryList(null)
+, __pContactListenerList(null)
+, __pContact(null)
+, __pAddressbook(null)
+, __defaultNumberIndex(0)
+, __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->SetEventListener(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());
+                               AppLog("!!!! %d", 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:
+               {
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_THUMBNAIL, returnString);
+               }
+               break;
+       default:
+               break;
+       }
+
+       if (pList != null)
+       {
+               pList->RemoveAll(true);
+               delete pList;
+       }
+
+       return returnString;
+}
+
+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());
+
+               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 (pCategory->IsDefault())
+                                       {
+                                               GetDefaultCategoryName(categoryName);
+                                       }
+
+                                       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 (pCategory->IsDefault())
+                               {
+                                        GetDefaultCategoryName(categoryName);
+                               }
+
+                               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, false))
+       {
+               categoryName.Clear();
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FAMILY");
+       }
+       else if (categoryName.Equals(DEFAULT_GROUP_FRIENDS, false))
+       {
+               categoryName.Clear();
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FRIENDS");
+       }
+       else if (categoryName.Equals(DEFAULT_GROUP_COWORKERS, false))
+       {
+               categoryName.Clear();
+               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_WORK");
+       }
+
+       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");
+       }
+
+       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();
+               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();
+               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)
+       {
+               r = GetBirthday(*pDateTime);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to get value", GetErrorMessage(r));
+
+               day = pDateTime->GetDay();
+               year = pDateTime->GetYear();
+               month.Append(*static_cast<String*>(const_cast<Object*>(pMonthList->GetAt(pDateTime->GetMonth() - 1))));
+
+               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)
+       {
+               SetContactId(__pContact->GetRecordId());
+       }
+
+       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)
+{
+       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:
+               {
+                       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);
+                       }
+                       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::SetPhoneNumber(DetailPhoneNumberType type, const Tizen::Base::String& value, int index)
+{
+       result r = E_SUCCESS;
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_PHONE_NUMBERS, index);
+
+               return r;
+       }
+
+       PhoneNumber phoneNumber;
+       phoneNumber.SetPhoneNumber(value);
+       phoneNumber.SetType((PhoneNumberType)type);
+
+       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 (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_EMAILS, index);
+
+               return r;
+       }
+
+       Email email;
+       email.SetEmail(value);
+       email.SetType((EmailType)type);
+
+       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)
+{
+       result r = E_SUCCESS;
+
+       if (value.IsEmpty() == true)
+       {
+               r = __pContact->RemoveAt(CONTACT_MPROPERTY_ID_ADDRESSES, index);
+
+               return r;
+       }
+
+       Address address;
+       address.SetType((AddressType)type);
+
+       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;
+               default:
+                       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;
+               default:
+                       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..0cf8fef
--- /dev/null
@@ -0,0 +1,610 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "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 = 108;
+static const int H_SELECT_ALL = 108;
+static const int H_ITEM = 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 FONT_SIZE_BOTTOM_LABEL = 32;
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<215, 225, 232>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<76, 81, 88>::Value;
+
+ContactSelectorForm::ContactSelectorForm(void)
+: __pPresentationModel(null)
+, __pSelectAll(null)
+, __pListView(null)
+, __pSearchListView(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"));
+
+       CreateFooterButton();
+
+       __pPresentationModel = ContactListPresentationModel::GetInstance();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       __pSelectAll = new (std::nothrow) CheckButton();
+       __pSelectAll->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_DEFAULT);
+       __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(Rectangle(0, GetClientAreaBounds().height - H_BOTTOM_LABEL, GetClientAreaBounds().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);
+       AddControl(*__pBottomLabel);
+
+       return E_SUCCESS;
+}
+
+result
+ContactSelectorForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       return r;
+}
+
+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->SetFocus();
+                       __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->SetFocus();
+                       __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(0, false);
+       }
+}
+
+void
+ContactSelectorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+}
+
+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);
+               __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)
+       {
+               __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
+       {
+               __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
+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;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), 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_ITEM), 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)
+{
+       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)
+       {
+               __pListView->SetFocus();
+
+               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)
+       {
+               __pSearchListView->SetFocus();
+
+               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)
+{
+       __pListView->UpdateList();
+}
+
+void
+ContactSelectorForm::OnCategoriesChanged(void)
+{
+}
+
+result
+ContactSelectorForm::CreateFooterButton()
+{
+       result r = E_SUCCESS;
+
+       Footer* pFooter = GetFooter();
+       pFooter->RemoveAllItems();
+       pFooter->AddActionEventListener(*this);
+
+       FooterItem footerItemLeft;
+       FooterItem footerItemRight;
+
+       footerItemLeft.Construct(IDA_FOOTER_DONE);
+       footerItemRight.Construct(IDA_FOOTER_CANCEL);
+
+       footerItemLeft.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+       footerItemRight.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+
+       pFooter->AddItem(footerItemLeft);
+       pFooter->AddItem(footerItemRight);
+
+       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->Invalidate(true);
+
+       Footer* pFooter = GetFooter();
+
+       if (selectedCount > 0)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, 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)
+{
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
+}
+
+void
+ContactSelectorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+}
+
+void
+ContactSelectorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+       UpdateBottomLabel();
+}
+
+void
+ContactSelectorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+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..1226a04
--- /dev/null
@@ -0,0 +1,67 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..9c60cec
--- /dev/null
@@ -0,0 +1,523 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "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::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";
+
+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, "Failed to set AppControlProviderEventListener");
+
+       r = SettingInfo::SetSettingEventListener(this);
+       TryReturn(r == E_SUCCESS, false, "Failed to set SettingEventListener");
+
+       return true;
+}
+
+bool
+ContactsApp::OnAppInitialized(void)
+{
+       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)
+{
+       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)
+       {
+               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)
+{
+       result r = E_SUCCESS;
+
+       ArrayList* pArgs = new (std::nothrow) ArrayList();
+       pArgs->Construct();
+
+       if (operationId.Equals(OPERATION_ID_MAIN, true))
+       {
+               __operationId = L"";
+       }
+       else if (operationId.Equals(OPERATION_ID_PICK, true))
+       {
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the PICK operation, the (key,value) pairs should be input.");
+                       AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       Terminate();
+
+                       return;
+               }
+
+               String* pSelectionMode = new (std::nothrow) String(SELECTION_MODE);
+               pSelectionMode->Append(DELIMITER);
+               pSelectionMode->Append(*static_cast<const String*>(pExtraData->GetValue(String(SELECTION_MODE))));
+               pArgs->Add(pSelectionMode);
+
+               String* pReturnType = new (std::nothrow) String(RETURN_TYPE);
+               pReturnType->Append(DELIMITER);
+               pReturnType->Append(*static_cast<const String*>(pExtraData->GetValue(String(RETURN_TYPE))));
+               pArgs->Add(pReturnType);
+
+               r = InitializeAppControl(pArgs);
+               if (IsFailed(r))
+               {
+                       AppLogDebug("[%s] initializing app control failed", GetErrorMessage(r));
+                       AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, APP_CTRL_RESULT_FAILED, null);
+                       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(OPERATION_ID_ADD, true))
+       {
+               if (pExtraData != null)
+               {
+                       String* key = null;
+                       const String* value = null;
+
+                       value = static_cast<const String*>(pExtraData->GetValue(String(PHONE)));
+                       if (value)
+                       {
+                               key = new (std::nothrow) String(PHONE);
+                               key->Append(DELIMITER);
+                               key->Append(*value);
+                               pArgs->Add(key);
+                       }
+
+                       value = static_cast<const String*>(pExtraData->GetValue(String(EMAIL)));
+                       if (value)
+                       {
+                               key = new (std::nothrow) String(EMAIL);
+                               key->Append(DELIMITER);
+                               key->Append(*value);
+                               pArgs->Add(key);
+                       }
+
+                       value = static_cast<const String*>(pExtraData->GetValue(String(URL)));
+                       if (value)
+                       {
+                               key = new (std::nothrow) String(URL);
+                               key->Append(DELIMITER);
+                               key->Append(*value);
+                               pArgs->Add(key);
+                       }
+               }
+               __initialSceneId = IDSCN_CONTACT_EDITOR;
+               __operationId = OPERATION_ID_ADD;
+       }
+       else if (operationId.Equals(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* pInputContactId = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_ID)));
+               String* pContactId = new (std::nothrow) String(CONTACT_ID);
+               pContactId->Append(DELIMITER);
+               pContactId->Append(*pInputContactId);
+               pArgs->Add(pContactId);
+
+               String* key = null;
+               const String* value = null;
+
+               value = static_cast<const String*>(pExtraData->GetValue(String(PHONE)));
+               if (value)
+               {
+                       key = new (std::nothrow) String(PHONE);
+                       key->Append(DELIMITER);
+                       key->Append(*value);
+                       pArgs->Add(key);
+               }
+
+               value = static_cast<const String*>(pExtraData->GetValue(String(EMAIL)));
+               if (value)
+               {
+                       key = new (std::nothrow) String(EMAIL);
+                       key->Append(DELIMITER);
+                       key->Append(*value);
+                       pArgs->Add(key);
+               }
+
+               value = static_cast<const String*>(pExtraData->GetValue(String(URL)));
+               if (value)
+               {
+                       key = new (std::nothrow) String(URL);
+                       key->Append(DELIMITER);
+                       key->Append(*value);
+                       pArgs->Add(key);
+               }
+
+               if (pInputContactId->IsEmpty())
+               {
+                       __initialSceneId = IDSCN_CONTACT_LIST;
+               }
+               else
+               {
+                       __initialSceneId = IDSCN_CONTACT_EDITOR;
+               }
+               __operationId = OPERATION_ID_EDIT;
+       }
+       else if (operationId.Equals(OPERATION_ID_VIEW, true))
+       {
+               if (pExtraData == null)
+               {
+                       AppLogDebug("To launch AppControl by the VIEW operation, the (key,value) pairs should be input.");
+                       Terminate();
+
+                       return;
+               }
+
+               String* pViewType = new (std::nothrow) String(VIEW_TYPE);
+               pViewType->Append(DELIMITER);
+               pViewType->Append(*static_cast<const String*>(pExtraData->GetValue(String(VIEW_TYPE))));
+               pArgs->Add(pViewType);
+
+               String* key = null;
+               const String* value = null;
+
+               value = static_cast<const String*>(pExtraData->GetValue(String(PATH)));
+               if (value)
+               {
+                       key = new (std::nothrow) String(PATH);
+                       key->Append(DELIMITER);
+                       key->Append(*value);
+                       pArgs->Add(key);
+               }
+
+               value = static_cast<const String*>(pExtraData->GetValue(String(CONTACT_ID)));
+               if (value)
+               {
+                       key = new (std::nothrow) String(CONTACT_ID);
+                       key->Append(DELIMITER);
+                       key->Append(*value);
+                       pArgs->Add(key);
+               }
+
+               __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, false))
+       {
+               if (value.Equals(SELECTION_MODE_SINGLE, false))
+               {
+                       __selectionMode = APP_CONTROL_SELECTION_MODE_SINGLE;
+               }
+               else if (value.Equals(SELECTION_MODE_MULTIPLE, false))
+               {
+                       __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, false))
+       {
+               if (value.Equals(RETURN_TYPE_PHONE, false))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_PHONE;
+               }
+               else if (value.Equals(RETURN_TYPE_EMAIL, false))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_EMAIL;
+               }
+               else if (value.Equals(RETURN_TYPE_CONTACT_ID, false))
+               {
+                       __returnType = APP_CONTROL_RETURN_TYPE_CONTACT_ID;
+               }
+               else if (value.Equals(RETURN_TYPE_VCARD, false))
+               {
+                       __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::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..289dc5c
--- /dev/null
@@ -0,0 +1,693 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "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::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 = 720;
+static const int H_CONTACT_VALUE_POPUP = 700;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 506;
+static const int Y_CLOSE_BUTTON = 526;
+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 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<215, 225, 232>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<76, 81, 88>::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);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       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 - 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(Rectangle(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);
+       AddControl(*__pBottomLabel);
+
+       __pTempContactValueHashMap = new (std::nothrow) HashMap();
+       __pTempContactValueHashMap->Construct();
+
+       return r;
+}
+
+result
+FavoriteListEditorPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       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:
+               {
+                       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)
+       {
+               pFooter->SetBackButton();
+
+               __pPresentationModel->InitializeFavoriteList(pContactsApp->GetReturnType());
+
+               if (__pPresentationModel->GetFavoriteCount() > 0)
+               {
+                       FooterItem footerItemDone;
+                       footerItemDone.Construct(IDA_FOOTER_DONE);
+                       footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+                       pFooter->AddItem(footerItemDone);
+
+                       bool isChecked = false;
+                       int favoriteCount = __pPresentationModel->GetFavoriteCount();
+                       for (int index = 0; index < favoriteCount; index++)
+                       {
+                               if (__pFavoriteListView->IsItemChecked(index))
+                               {
+                                       isChecked = true;
+                                       break;
+                               }
+                       }
+
+                       if (isChecked == false)
+                       {
+                               pFooter->SetItemEnabled(0, false);
+                       }
+               }
+               else
+               {
+                       __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);
+               }
+
+               FooterItem footerItemRemove;
+               footerItemRemove.Construct(IDA_FOOTER_REMOVE_FAVORITE);
+               footerItemRemove.SetText(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"));
+               pFooter->AddItem(footerItemRemove);
+               pFooter->SetItemEnabled(0, false);
+
+               FooterItem footerItemCancel;
+               footerItemCancel.Construct(IDA_FOOTER_CANCEL);
+               footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               pFooter->AddItem(footerItemCancel);
+       }
+
+       UpdateBottomLabel();
+
+       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);
+}
+
+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;
+
+       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);
+
+               pCanvas->FillRectangle(Color(COLOR_ITEM_BACKGROUND), pCanvas->GetBounds());
+       }
+
+       EnrichedText* pEnrichedTextName = new (std::nothrow) EnrichedText();
+       pEnrichedTextName->Construct(Dimension(W_ICONLISTVIEW_ITEM, textHeight));
+       pEnrichedTextName->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedTextName->SetHorizontalAlignment(TEXT_ALIGNMENT_CENTER);
+       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(0, 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)
+{
+       for (int i = 0; i < __pPresentationModel->GetFavoriteCount(); i++)
+       {
+               if (__pFavoriteListView->IsItemChecked(i))
+               {
+                       __pPresentationModel->SetAsFavorite(__pPresentationModel->GetContactId(i), false);
+               }
+       }
+}
+
+void
+FavoriteListEditorPanel::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+       pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->Terminate();
+}
+
+void
+FavoriteListEditorPanel::ReturnMultipleValues(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               String* pKeyType = new (std::nothrow) String(RETURN_KEY_TYPE);
+               String* pKeyValue = new (std::nothrow) String(RETURN_KEY_VALUE);
+               String* pMultiValue = new (std::nothrow) String();
+
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_CONTACT_ID)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_CONTACT_ID));
+
+                       for (int index = 0; index < __pPresentationModel->GetFavoriteCount(); index++)
+                       {
+                               if (__pFavoriteListView->IsItemChecked(index))
+                               {
+                                       int contactId = __pPresentationModel->GetContactId(index);
+                                       pMultiValue->Append(Integer::ToString(contactId) + DELIMITER_SEMICOLON);
+                               }
+                       }
+
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+
+                       return;
+               }
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_PHONE));
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_EMAIL));
+               }
+               else
+               {
+                       delete pKeyType;
+                       delete pKeyValue;
+                       delete pMultiValue;
+
+                       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());
+
+                       pMultiValue->Append(*pValue + DELIMITER_SEMICOLON);
+               }
+               delete pMapEnum;
+
+               pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+               pReturnValue->Add(pKeyValue, pMultiValue);
+
+               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);
+
+       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)
+{
+       __pMultipleContactValuePopup->SetShowState(false);
+
+       delete __pContactValueListProvider;
+       __pContactValueListProvider = null;
+
+       Invalidate(true);
+}
+
+void
+FavoriteListEditorPanel::UpdateBottomLabel(void)
+{
+       int selectedCount = 0;
+       int favoriteCount = __pPresentationModel->GetFavoriteCount();
+       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);
+       __pBottomLabel->Invalidate(true);
+
+       Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+
+       Footer* pFooter = pForm->GetFooter();
+
+       if (selectedCount > 0)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       pFooter->Invalidate(true);
+}
diff --git a/src/CtFavoriteListPanel.cpp b/src/CtFavoriteListPanel.cpp
new file mode 100644 (file)
index 0000000..6574bac
--- /dev/null
@@ -0,0 +1,775 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+static const int IDA_FOOTER_MORE = 0;
+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_MORE_NORMAL = L"00_icon_more.png";
+static const wchar_t* IDB_MORE_PRESSED = L"00_icon_more_press.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 = 240;
+static const int H_ICONLISTVIEW_ITEM = 240;
+static const int H_TEXT_BACKGROUND = 64;
+static const int H_TEXT_SPACE = 96;
+static const int X_MORE = 55;
+static const int W_CONTACT_VALUE_POPUP = 720;
+static const int H_CONTACT_VALUE_POPUP = 700;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 506;
+static const int Y_CLOSE_BUTTON = 526;
+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 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_TYPE = L"type";
+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_KEY_TEL = L"tel";
+static const wchar_t* INPUT_KEY_TO = L"to";
+
+FavoriteListPanel::FavoriteListPanel(void)
+: __scrolledDistance(0)
+, __selectedItemIndex(0)
+, __pContextMenuAction(null)
+, __pContextMenuMore(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);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       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(0, 0);
+       __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);
+
+       __pContextMenuMore = new (std::nothrow) ContextMenu();
+       __pContextMenuMore->Construct(Point(X_MORE, clientBounds.y + clientBounds.height), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_COM_SK_EDIT"), IDA_MORE_EDIT_FAVORITE);
+       __pContextMenuMore->AddActionEventListener(*this);
+
+       return r;
+}
+
+result
+FavoriteListPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       delete __pContextMenuAction;
+       delete __pContextMenuMore;
+       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:
+               {
+                       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_FOOTER_MORE:
+               {
+                       __pContextMenuMore->SetShowState(true);
+                       __pContextMenuMore->Show();
+               }
+               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:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(__selectedItemIndex);
+                       LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, phoneNumber);
+               }
+               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->GetItemCount() == 0)
+                       {
+                               FooterItem footerItemAdd;
+                               footerItemAdd.Construct(IDA_FOOTER_ADD_FAVORITE);
+                               footerItemAdd.SetText(ResourceManager::GetString(L"IDS_PB_OPT_ADD_TO_FAVORITES"));
+                               pFooter->AddItem(footerItemAdd);
+                       }
+
+                       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());
+
+       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;
+               delete pArgs;
+       }
+
+       const 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);
+       pFooter->SetBackButton();
+       pFooter->AddActionEventListener(*this);
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               __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"));
+               pFooter->AddItem(footerItemAdd);
+               if (__pPresentationModel->GetContactCount() <= __pPresentationModel->GetFavoriteCount())
+               {
+                       pFooter->SetItemEnabled(0, false);
+               }
+
+               if (__pPresentationModel->GetFavoriteCount() > 0)
+               {
+                       ButtonItem buttonItemMore;
+                       buttonItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+                       pFooter->SetButton(BUTTON_POSITION_LEFT, buttonItemMore);
+               }
+       }
+
+       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);
+       }
+}
+
+void
+FavoriteListPanel::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);
+}
+
+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_CONTACT_ID)
+               {
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_CONTACT_ID));
+
+                       String pContactId;
+                       pContactId.Append(__pPresentationModel->GetContactId(index));
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(pContactId));
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+
+                       return;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_VCARD)
+               {
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_VCARD));
+
+                       String vCardPath = __pPresentationModel->ExportToVcard(index);
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(vCardPath));
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, 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* pKeyType = new (std::nothrow) String(RETURN_KEY_TYPE);
+                       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+                       {
+                               pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_PHONE));
+                       }
+                       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+                       {
+                               pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_EMAIL));
+                       }
+                       else
+                       {
+                               return;
+                       }
+
+                       String* pReturnInfo = static_cast<String*>(pList->GetAt(0));
+                       int blankIndex = 0;
+                       pReturnInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                       pReturnInfo->Remove(0, blankIndex + 1);
+                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(*pReturnInfo));
+
+                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                       delete pList;
+               }
+
+               delete pReturnValue;
+       }
+       else
+       {
+               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 (__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);
+                       __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), IDA_CONTEXTMENU_MESSAGE);
+#if __SUPPORT_VIDEO_CALL
+                       __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), IDA_CONTEXTMENU_VIDEO_CALL);
+#endif
+               }
+               __pContextMenuAction->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"), IDA_CONTEXTMENU_REMOVE);
+               __pContextMenuAction->AddActionEventListener(*this);
+               __pContextMenuAction->Show();
+               __selectedItemIndex = index;
+       }
+}
+
+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;
+
+       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;
+               }
+
+               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);
+
+               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(TEXT_ALIGNMENT_CENTER);
+       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(0, 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::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* pKeyType = new (std::nothrow) String(RETURN_KEY_TYPE);
+       int selectedIndex = -1;
+       Integer::Parse(listView.GetName(), selectedIndex);
+
+       if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+       {
+               pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_PHONE));
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_EMAIL));
+       }
+       else
+       {
+               ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_FAILED, pReturnValue);
+
+               delete pKeyType;
+
+               return;
+       }
+
+       IList* pList = __pPresentationModel->GetMultiValuesN(pContactsApp->GetReturnType(), selectedIndex);
+       String* pReturnInfo = static_cast<String *>(pList->GetAt(index));
+       int blankIndex = 0;
+       pReturnInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+       pReturnInfo->Remove(0, blankIndex + 1);
+       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) Tizen::Base::String(*pReturnInfo));
+
+       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();
+       pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->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);
+
+       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)
+{
+       __pMultipleContactValuePopup->SetShowState(false);
+
+       delete __pContactValueListProvider;
+       __pContactValueListProvider = null;
+
+       Invalidate(true);
+}
+
+void
+FavoriteListPanel::OnScrollEndReached (Tizen::Ui::Control &source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+}
+
+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;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TEL), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(type));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+
+       AppControl* pAc = AppManager::FindAppControlN(appId, operationId);
+       if (pAc != null)
+       {
+               r = pAc->Start(null, null, &extraData, null);
+
+               delete pAc;
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
diff --git a/src/CtFavoriteListPresentationModel.cpp b/src/CtFavoriteListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..b4bcb5c
--- /dev/null
@@ -0,0 +1,386 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 <FMedia.h>
+#include "CtFavoriteListPresentationModel.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;
+using namespace Tizen::System;
+
+static const int VCARD_STRING_LENGTH = 26;
+
+static const wchar_t* VCARD_PATH_FORMAT = L"/tmp/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)
+{
+
+}
+FavoriteListPresentationModel::~FavoriteListPresentationModel(void)
+{
+       if (__pFavoriteList != null)
+       {
+               __pFavoriteList->RemoveAll(true);
+               delete __pFavoriteList;
+       }
+}
+
+result
+FavoriteListPresentationModel::Construct(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pFavoriteList != null)
+       {
+               AppLogDebug("FavoriteListPresentationModel is already constructed.");
+
+               return E_SUCCESS;
+       }
+
+       r = InitializeFavoriteList();
+
+       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_CONTACT_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::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());
+
+       result r = pAddressbookManager->ExportContactToVcard(*pContact, vCardPath);
+
+       if (r != E_SUCCESS)
+       {
+               vCardPath.Clear();
+       }
+
+       delete pContact;
+
+       return vCardPath;
+}
diff --git a/src/CtFormFactory.cpp b/src/CtFormFactory.cpp
new file mode 100644 (file)
index 0000000..9bcd320
--- /dev/null
@@ -0,0 +1,141 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..7dc0bd9
--- /dev/null
@@ -0,0 +1,1195 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::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_ITEM = 108;
+static const int H_GROUP_ITEM = 76;
+static const int H_LIST_ITEM =112;
+static const int H_BOTTOM_LABEL = 48;
+static const int W_CONTACT_VALUE_POPUP = 720;
+static const int H_CONTACT_VALUE_POPUP = 700;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 506;
+static const int Y_CLOSE_BUTTON = 526;
+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 FONT_SIZE_BOTTOM_LABEL = 32;
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<215, 225, 232>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<76, 81, 88>::Value;
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+
+static const int LIST_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int LIST_VIEW_MASK = 0xFFFF;
+
+static const wchar_t* INPUT_KEY_TYPE = L"type";
+static const wchar_t* INPUT_TYPE_SMS = L"SMS";
+static const wchar_t* INPUT_KEY_TO = L"to";
+
+
+GroupContactListEditorForm::GroupContactListEditorForm(void)
+: __pContactValueListEvent(null)
+, __pPresentationModel(null)
+, __pSearchListEvent(null)
+, __pTempContactValueHashMap(null)
+, __pSearchBar(null)
+, __pSelectAllButton(null)
+, __pListView(null)
+, __pSearchListView(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();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       __pSelectAllButton = new (std::nothrow) CheckButton();
+       __pSelectAllButton->Construct(Rectangle(0, H_ITEM, GetClientAreaBounds().width, H_ITEM), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_DEFAULT);
+       __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_ITEM * 2, GetClientAreaBounds().width, GetClientAreaBounds().height - H_ITEM * 2 - 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_ITEM));
+       __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_ITEM, GetClientAreaBounds().width, GetClientAreaBounds().height - H_ITEM - 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(Rectangle(0, GetClientAreaBounds().height - H_BOTTOM_LABEL, GetClientAreaBounds().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);
+       AddControl(*__pBottomLabel);
+
+       __pTempContactValueHashMap = new (std::nothrow) HashMap();
+       __pTempContactValueHashMap->Construct();
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListEditorForm::OnTerminating(void)
+{
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       __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->SetFocus();
+                       __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->SetFocus();
+                       __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;
+               delete pArgs;
+       }
+
+       Footer* pFooter = GetFooter();
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK || __launchType != 0)
+       {
+               pFooter->SetBackButton();
+
+               if (__pPresentationModel->GetContactCount() == 0)
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pSelectAllButton->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+                       __pBottomLabel->SetShowState(false);
+               }
+               else
+               {
+                       FooterItem footerItemDone;
+                       footerItemDone.Construct(IDA_FOOTER_DONE);
+                       footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
+                       pFooter->AddItem(footerItemDone);
+                       pFooter->SetItemEnabled(0, false);
+               }
+
+               if (__launchType != 0)
+               {
+                       pContactsApp->AddContactsAppChangeEventListener(*this);
+               }
+       }
+       else
+       {
+               pFooter->RemoveBackButton();
+               FooterItem footerItemRemove;
+               footerItemRemove.Construct(IDA_FOOTER_REMOVE);
+               footerItemRemove.SetText(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"));
+
+               FooterItem footerItemCancel;
+               footerItemCancel.Construct(IDA_FOOTER_CANCEL);
+               footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+
+               pFooter->AddItem(footerItemRemove);
+               pFooter->AddItem(footerItemCancel);
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       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);
+       }
+}
+
+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);
+               __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)
+       {
+               __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)
+       {
+               __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
+       {
+               __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;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_LIST_ITEM), 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), 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)
+{
+       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)));
+                                               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)));
+                                               delete pList;
+                                       }
+                               }
+                       }
+               }
+               else
+               {
+                       Integer keyIndex(__selectedIndex);
+                       __pTempContactValueHashMap->Remove(keyIndex, true);
+               }
+       }
+
+       if (listView.Equals(*__pListView) == true)
+       {
+               __pListView->SetFocus();
+
+               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)
+       {
+               __pSearchListView->SetFocus();
+
+               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)
+{
+       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+       __pListView->UpdateList();
+}
+
+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 (__pSelectAllButton->IsSelected() || __pListView->IsItemChecked(groupIndex, itemIndex))
+                       {
+                               __pPresentationModel->RemoveContactFromCategory(groupIndex, itemIndex);
+                       }
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListEditorForm::UpdateBottomLabel(void)
+{
+       int selectedCount = 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->Invalidate(false);
+
+       Footer* pFooter = GetFooter();
+
+       if (selectedCount > 0)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, 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));
+
+       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)
+{
+       __pMultipleContactValuePopup->SetShowState(false);
+
+       delete __pContactValueListEvent;
+       __pContactValueListEvent = null;
+
+       Invalidate(true);
+}
+
+void
+GroupContactListEditorForm::ReturnValues(RequestId requestId, Tizen::App::AppCtrlResult appCtrlResult, const Tizen::Base::Collection::IMap* pReturnValue)
+{
+       AppControlProviderManager* pAppManager = AppControlProviderManager::GetInstance();
+       pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->Terminate();
+}
+
+void
+GroupContactListEditorForm::ReturnMultipleValues(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+       {
+               String* pKeyType = new (std::nothrow) String(RETURN_KEY_TYPE);
+               String* pKeyValue = new (std::nothrow) String(RETURN_KEY_VALUE);
+               String* pMultiValue = new (std::nothrow) String();
+
+               HashMap* pReturnValue = new (std::nothrow) HashMap();
+               pReturnValue->Construct();
+
+               if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_PHONE)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_PHONE));
+
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pMultiValue->Append(*pValue + DELIMITER_SEMICOLON);
+                       }
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_EMAIL));
+
+                       IMapEnumerator* pMapEnum = __pTempContactValueHashMap->GetMapEnumeratorN();
+                       while (pMapEnum->MoveNext() == E_SUCCESS)
+                       {
+                               String* pValue = static_cast<String*> (pMapEnum->GetValue());
+                               pMultiValue->Append(*pValue + DELIMITER_SEMICOLON);
+                       }
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+
+                       delete pMapEnum;
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_CONTACT_ID)
+               {
+                       pReturnValue->Add(pKeyType, new (std::nothrow) String(RETURN_TYPE_CONTACT_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 pContactId(L"");
+                                               pContactId.Append(__pPresentationModel->GetContactId(groupIndex, itemIndex));
+                                               pMultiValue->Append(pContactId + DELIMITER_SEMICOLON);
+                                       }
+                               }
+                       }
+                       pMultiValue->Remove(pMultiValue->GetLength() - 1, 1);
+                       pReturnValue->Add(pKeyValue, pMultiValue);
+               }
+               else
+               {
+                       delete pKeyType;
+                       delete pKeyValue;
+                       delete pMultiValue;
+
+                       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;
+       AppControl* pAc = null;
+
+       HashMap extraData;
+       extraData.Construct();
+
+       if (__launchType == ID_GROUP_CONTACT_SELECT_MESSAGE)
+       {
+               pAc = AppManager::FindAppControlN(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE);
+               TryCatch(pAc != null, r = E_FAILURE, "Unable to find appcontrol");
+
+               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_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(toValue));
+       }
+       else if (__launchType == ID_GROUP_CONTACT_SELECT_EMAIL)
+       {
+               pAc = AppManager::FindAppControlN(PROVIDER_ID_EMAIL, OPERATION_ID_COMPOSE);
+               TryCatch(pAc != null, r = E_FAILURE, "Unable to find appcontrol");
+
+               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 (pAc != null)
+       {
+               r = pAc->Start(null, null, &extraData, null);
+               TryCatch(r == E_SUCCESS, , "Failed to launch appcontrol");
+       }
+
+       extraData.RemoveAll(true);
+
+CATCH:
+       delete pAc;
+
+       return r;
+}
+
+void
+GroupContactListEditorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
+}
+
+void
+GroupContactListEditorForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListEditorForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+       UpdateBottomLabel();
+}
+
+void
+GroupContactListEditorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+void
+GroupContactListEditorForm::OnForeground(void)
+{
+}
+
+void
+GroupContactListEditorForm::OnBackground(void)
+{
+       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)
+{
+}
diff --git a/src/CtGroupContactListForm.cpp b/src/CtGroupContactListForm.cpp
new file mode 100644 (file)
index 0000000..0a24ea2
--- /dev/null
@@ -0,0 +1,1048 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_FOOTER_MORE = 10;
+static const int IDA_FOOTER_ADD_MEMBER = 11;
+static const int IDA_MORE_REMOVE = 12;
+static const int IDA_LIST_ELEMENT_CALL = 20;
+static const int IDA_LIST_ELEMENT_MESSAGE = 21;
+static const int IDA_LIST_ELEMENT_VIDEO_CALL = 22;
+static const int IDA_LIST_ELEMENT_DELETE = 23;
+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 wchar_t* IDB_MORE_NORMAL = L"00_icon_more.png";
+static const wchar_t* IDB_MORE_PRESSED = L"00_icon_more_press.png";
+
+static const int H_SEARCHBAR = 108;
+static const int H_ITEM = 112;
+static const int H_GROUP_ITEM = 76;
+static const int X_MORE = 55;
+
+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_POPUP = 720;
+static const int H_DELETE_POPUP = 208;
+static const int H_DELETE_LABEL = 94;
+static const int Y_DELETE_BUTTON = 114;
+static const int W_DELETE_BUTTON = 314;
+static const int H_DELETE_BUTTON = 74;
+static const int W_DELETE_BUTTON_GAP = 20;
+static const int W_CONTACT_VALUE_POPUP = 720;
+static const int H_CONTACT_VALUE_POPUP = 700;
+static const int H_CONTACT_VALUE_POPUP_LIST_VIEW = 506;
+static const int Y_CLOSE_BUTTON = 526;
+static const int H_CLOSE_BUTTON = 74;
+static const int W_CLOSE_BUTTON = 394;
+
+static const int FONT_SIZE_EMPTY_COMMENT = 32;
+static const int FONT_SIZE_DELETE_CONFIRM = 42;
+
+static const unsigned int COLOR_EMPTY_COMMENT = Color32<102, 102, 102>::Value;
+
+static const int LIST_VIEW_GROUP_INDEX_SHIFT = 16;
+static const int LIST_VIEW_MASK = 0xFFFF;
+
+static const wchar_t* INPUT_KEY_TYPE = L"type";
+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_KEY_TEL = L"tel";
+static const wchar_t* INPUT_KEY_TO = L"to";
+
+GroupContactListForm::GroupContactListForm(void)
+ : __pListView(null)
+ , __pSearchListView(null)
+ , __pSearchBar(null)
+ , __pDeletePopup(null)
+ , __pMultipleContactValuePopup(null)
+ , __pEmptyImageLabel(null)
+ , __pEmptyCommentLabel(null)
+ , __pContextMenuMore(null)
+ , __categoryId(0)
+ , __pContactValueListEvent(null)
+ , __pPresentationModel(null)
+ , __pSearchListEvent(null)
+ , __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->SetBackButton();
+       pFooter->AddActionEventListener(*this);
+
+       SetFormBackEventListener(this);
+
+       __pPresentationModel = GroupContactListPresentationModel::GetInstance();
+       __pPresentationModel->AddContactChangeListener(*this);
+
+       __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->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);
+       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);
+
+       __pContextMenuMore = new (std::nothrow) ContextMenu();
+       __pContextMenuMore->Construct(Point(X_MORE, GetClientAreaBounds().y + GetClientAreaBounds().height), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"), IDA_MORE_REMOVE);
+       __pContextMenuMore->AddActionEventListener(*this);
+
+       return E_SUCCESS;
+}
+
+result
+GroupContactListForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveContactChangeListener(*this);
+       }
+
+       delete __pDeletePopup;
+       delete __pContextMenuMore;
+       delete __pMultipleContactValuePopup;
+
+       return r;
+}
+
+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();
+
+       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_FOOTER_MORE:
+               {
+                       __pContextMenuMore->SetShowState(true);
+                       __pContextMenuMore->Show();
+               }
+               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->RemoveContact(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);
+                                       }
+                                       else
+                                       {
+                                               __pPresentationModel->InitializeGroupContactList(__categoryId);
+                                       }
+
+                                       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+                               }
+                       }
+                       delete pEnum;
+               }
+               else if (previousSceneId.Equals(IDSCN_CONTACT_SELECTOR, true))
+               {
+                       AddSelectedContactToCategory(pArgs);
+               }
+
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+
+       if (__pPresentationModel->IsCategoryValid())
+       {
+               String groupName = __pPresentationModel->GetCategoryName();
+
+               Header* pHeader = GetHeader();
+               pHeader->SetTitleText(groupName);
+
+               Footer* pFooter = GetFooter();
+               pFooter->RemoveAllItems();
+               pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+
+               if (pContactsApp->GetOperationId() == OPERATION_ID_PICK)
+               {
+                       if (__pPresentationModel->GetContactCount() == 0)
+                       {
+                               __pSearchBar->SetShowState(false);
+                               __pListView->SetShowState(false);
+                               __pEmptyImageLabel->SetShowState(true);
+                               __pEmptyCommentLabel->SetShowState(true);
+                       }
+
+                       return;
+               }
+
+               if (__categoryId != ID_GROUP_CONTACT_NOT_ASSIGNED)
+               {
+                       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);
+                       }
+
+                       if (__pPresentationModel->GetContactCount() > 0)
+                       {
+                               ButtonItem buttonItemMore;
+                               buttonItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+                               buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+                               buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+                               pFooter->SetButton(BUTTON_POSITION_LEFT, buttonItemMore);
+                       }
+               }
+
+               if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       __pSearchBar->SetShowState(true);
+                       __pListView->SetShowState(true);
+                       __pEmptyImageLabel->SetShowState(false);
+                       __pEmptyCommentLabel->SetShowState(false);
+
+                       __pListView->SetFastScrollIndex(__pPresentationModel->GetAllKeys(), false);
+                       __pListView->UpdateList();
+               }
+               else
+               {
+                       __pSearchBar->SetShowState(false);
+                       __pListView->SetShowState(false);
+                       __pEmptyImageLabel->SetShowState(true);
+                       __pEmptyCommentLabel->SetShowState(true);
+               }
+       }
+       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());
+
+       if (__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT)
+       {
+               __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
+       }
+       pContactsApp->RemoveContactsAppChangeEventListener(*this);
+}
+
+result
+GroupContactListForm::AddSelectedContactToCategory(Tizen::Base::Collection::IList* pArgs)
+{
+       Integer* pContactId = null;
+       IEnumerator* pEnum = pArgs->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pContactId = static_cast<Integer*>(pEnum->GetCurrent());
+               if (pContactId != null)
+               {
+                       __pPresentationModel->AddContactToCategory(pContactId->ToInt());
+               }
+       }
+       delete pEnum;
+
+       return E_SUCCESS;
+}
+
+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;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), LIST_ANNEX_STYLE_NORMAL);
+
+       __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
+
+       ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
+       pItem->AddElement(Rectangle(0, 0, itemWidth, H_ITEM), 0, *(static_cast<ICustomElement*>(pCustomElement)));
+
+       bool isEnabled = true;
+       if (__pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex).IsEmpty())
+       {
+               isEnabled = false;
+       }
+
+       ListContextItem* pItemContext = new (std::nothrow) ListContextItem();
+       pItemContext->Construct();
+       pItemContext->AddElement(IDA_LIST_ELEMENT_CALL, ResourceManager::GetString(L"IDS_COM_BODY_CALL"), isEnabled);
+       pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), isEnabled);
+#if __SUPPORT_VIDEO_CALL
+       pItemContext->AddElement(IDA_LIST_ELEMENT_VIDEO_CALL, ResourceManager::GetString(L"IDS_COM_BODY_VIDEO_CALL"), isEnabled);
+#endif
+       pItemContext->AddElement(IDA_LIST_ELEMENT_DELETE, ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+
+       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)
+{
+       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;
+
+       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:
+               {
+                       String phoneNumber = __pPresentationModel->GetDefaultPhoneNumber(groupIndex, itemIndex);
+                       LaunchAppControl(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE, phoneNumber);
+               }
+               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)
+                               {
+                                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_PHONE));
+
+                                       String* pPhoneNumberInfo = static_cast<String *>(pList->GetAt(0));
+                                       int blankIndex = 0;
+
+                                       pPhoneNumberInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                       pPhoneNumberInfo->Remove(0, blankIndex + 1);
+                                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(*pPhoneNumberInfo));
+
+                                       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)
+                               {
+                                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_EMAIL));
+
+                                       String* pEmailInfo = static_cast<String *>(pList->GetAt(0));
+                                       int blankIndex = 0;
+                                       pEmailInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+                                       pEmailInfo->Remove(0, blankIndex + 1);
+                                       pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(*pEmailInfo));
+
+                                       ReturnValues(pContactsApp->GetRequestId(), APP_CTRL_RESULT_SUCCEEDED, pReturnValue);
+                                       delete pList;
+                               }
+                       }
+               }
+               else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_CONTACT_ID)
+               {
+                       AppCtrlResult appCtrlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       RecordId contactId = __pPresentationModel->GetContactId(groupIndex, itemIndex);
+                       if (contactId == INVALID_RECORD_ID)
+                       {
+                               appCtrlResult = APP_CTRL_RESULT_FAILED;
+                       }
+                       else
+                       {
+                               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_CONTACT_ID));
+
+                               String pContactId;
+                               pContactId.Append(contactId);
+                               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(pContactId));
+                       }
+
+                       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(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_VCARD));
+                               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), 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)
+       {
+               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_PHONE));
+
+               pList = __pPresentationModel->GetAllPhoneNumbersN(groupIndex, itemIndex);
+               String* pPhoneNumberInfo = static_cast<String *>(pList->GetAt(index));
+               int blankIndex = 0;
+               pPhoneNumberInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+               pPhoneNumberInfo->Remove(0, blankIndex + 1);
+               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(*pPhoneNumberInfo));
+       }
+       else if (pContactsApp->GetReturnType() == APP_CONTROL_RETURN_TYPE_EMAIL)
+       {
+               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_TYPE), new (std::nothrow) String(RETURN_TYPE_EMAIL));
+
+               pList = __pPresentationModel->GetAllEmailsN(groupIndex, itemIndex);
+               String* pEmailInfo = static_cast<String *>(pList->GetAt(index));
+               int blankIndex = 0;
+               pEmailInfo->IndexOf(CHARACTER_SPACE, 0, blankIndex);
+               pEmailInfo->Remove(0, blankIndex + 1);
+               pReturnValue->Add(new (std::nothrow) String(RETURN_KEY_VALUE), new (std::nothrow) String(*pEmailInfo));
+       }
+
+       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();
+       }
+}
+
+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::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListForm::OnContactsChanged(void)
+{
+       if (__categoryId != ID_GROUP_CONTACT_NOT_ASSIGNED)
+       {
+               Footer* pFooter = GetFooter();
+               pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+
+               if (__pPresentationModel->GetAllContactsCount() <= __pPresentationModel->GetContactCount())
+               {
+                       pFooter->SetItemEnabled(0, false);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(0, true);
+               }
+
+               if (__pPresentationModel->GetContactCount() > 0)
+               {
+                       ButtonItem buttonItemMore;
+                       buttonItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+                       buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+                       pFooter->SetButton(BUTTON_POSITION_LEFT, buttonItemMore);
+               }
+       }
+
+       if (__pPresentationModel->GetContactCount() > 0)
+       {
+               __pSearchBar->SetShowState(true);
+               __pListView->SetShowState(true);
+               __pEmptyImageLabel->SetShowState(false);
+               __pEmptyCommentLabel->SetShowState(false);
+
+               __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));
+       }
+       else
+       {
+               __pListView->UpdateList();
+       }
+}
+
+void
+GroupContactListForm::ShowDeletePopup(void)
+{
+       if (__pDeletePopup == null)
+       {
+               __pDeletePopup = new (std::nothrow) Popup();
+               __pDeletePopup->Construct(false, Dimension(W_DELETE_POPUP, H_DELETE_POPUP));
+
+               Rectangle popupClientBounds = __pDeletePopup->GetClientAreaBounds();
+
+               Label* pLabel = new (std::nothrow) Label();
+               pLabel->Construct(Rectangle(0, 0, popupClientBounds.width, H_DELETE_LABEL), ResourceManager::GetString(L"IDS_COM_SK_DELETE") + L"?");
+               pLabel->SetTextConfig(FONT_SIZE_DELETE_CONFIRM, LABEL_TEXT_STYLE_BOLD);
+               pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+
+               Button* pDeleteButton = new (std::nothrow) Button();
+               pDeleteButton->Construct(Rectangle(0, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_COM_SK_DELETE"));
+               pDeleteButton->SetActionId(IDA_POPUP_DELETE_YES);
+               pDeleteButton->AddActionEventListener(*this);
+
+               Button* pCancelButton = new (std::nothrow) Button();
+               pCancelButton->Construct(Rectangle(W_DELETE_BUTTON + W_DELETE_BUTTON_GAP, Y_DELETE_BUTTON, W_DELETE_BUTTON, H_DELETE_BUTTON), ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+               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)
+{
+       delete __pDeletePopup;
+       __pDeletePopup = null;
+
+       delete __pContactValueListEvent;
+       __pContactValueListEvent = null;
+
+       Invalidate(true);
+}
+
+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));
+
+       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)
+{
+       __pMultipleContactValuePopup->SetShowState(false);
+
+       delete __pContactValueListEvent;
+       __pContactValueListEvent = null;
+
+       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();
+       pAppManager->SendAppControlResult(requestId, appCtrlResult, pReturnValue);
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->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;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_PHONE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TEL), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(type));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_MESSAGE)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TO), new (std::nothrow) String(argument));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_SMS));
+       }
+
+       AppControl* pAc = AppManager::FindAppControlN(appId, operationId);
+       if (pAc != null)
+       {
+               r = pAc->Start(null, null, &extraData, null);
+
+               delete pAc;
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
+
+void
+GroupContactListForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
+{
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
+}
+
+void
+GroupContactListForm::OnKeypadOpened(Tizen::Ui::Control& source)
+{
+}
+
+void
+GroupContactListForm::OnKeypadClosed(Tizen::Ui::Control& source)
+{
+       SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+}
+
+void
+GroupContactListForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
+{
+}
+
+void
+GroupContactListForm::OnForeground(void)
+{
+}
+
+void
+GroupContactListForm::OnBackground(void)
+{
+       int groupIndex = (__sweptItemIndex >> LIST_VIEW_GROUP_INDEX_SHIFT) & LIST_VIEW_MASK;
+       int itemIndex = __sweptItemIndex & LIST_VIEW_MASK;
+
+       __pListView->RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY);
+}
+
+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)
+{
+}
+
diff --git a/src/CtGroupContactListPresentationModel.cpp b/src/CtGroupContactListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..88f0ee4
--- /dev/null
@@ -0,0 +1,797 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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->SetEventListener(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')
+                       {
+                               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();
+
+               if (pCategory->IsDefault())
+               {
+                       if (categoryName.Equals(DEFAULT_GROUP_FAMILY, false))
+                       {
+                               categoryName.Clear();
+                               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FAMILY");
+                       }
+                       else if (categoryName.Equals(DEFAULT_GROUP_FRIENDS, false))
+                       {
+                               categoryName.Clear();
+                               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FRIENDS");
+                       }
+                       else if (categoryName.Equals(DEFAULT_GROUP_COWORKERS, false))
+                       {
+                               categoryName.Clear();
+                               categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_WORK");
+                       }
+               }
+
+               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::Social::RecordId contactId)
+{
+       Category* pCategory = _pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory == null)
+       {
+               return E_FAILURE;
+       }
+
+       pCategory->AddMember(contactId);
+       _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)
+{
+       result r = CreateContactList();
+       if (r != E_SUCCESS)
+       {
+               return;
+       }
+
+       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)
+{
+       result r = CreateContactList();
+       if (r != E_SUCCESS)
+       {
+               return;
+       }
+
+       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)
+       {
+               _isSearchingPhoneNumber = true;
+
+               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);
+
+               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)
+                                       {
+                                               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;
+       }
+       else
+       {
+               _isSearchingPhoneNumber = false;
+
+               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..9ad4449
--- /dev/null
@@ -0,0 +1,813 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtGroupEditorForm.h"
+#include "CtGroupPresentationModel.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::Media;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+static const int IDA_HEADER_SAVE = 0;
+static const int IDA_HEADER_CANCEL = 1;
+static const int IDA_BUTTON_GALLERY = 10;
+static const int IDA_BUTTON_TAKE_PHOTO = 11;
+static const int IDA_BUTTON_REMOVE = 12;
+
+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_ADD_DIM = L"C02_caller_id_icon_add_dim.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_CAMERA_DIM = L"C02_caller_id_icon_camera_dim.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 int H_ITEM = 128;
+static const int H_THUMBNAIL = 360;
+static const int Y_THUMBNAIL = 57;
+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_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 = 50;
+
+static const unsigned int COLOR_GUIDE_TEXT = Color32<255, 0, 0>::Value;
+static const unsigned int COLOR_RINGTONE = Color32<34, 137, 194>::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 int ITEM_COUNT = 3;
+
+static const int FONT_SIZE_RINGTONE_TITLE = 40;
+static const int FONT_SIZE_RINGTONE = 32;
+
+static const wchar_t* INPUT_KEY_TYPE = L"type";
+static const wchar_t* INPUT_KEY_SELECTION_TYPE = L"selectionType";
+static const wchar_t* INPUT_KEY_SELECTION_MODE = L"selectionMode";
+static const wchar_t* INPUT_KEY_MEDIA_TYPE = L"mediaType";
+static const wchar_t* INPUT_TYPE_AUDIO = L"audio";
+static const wchar_t* INPUT_TYPE_CAMERA = L"camera";
+static const wchar_t* INPUT_SELECTION_TYPE_SINGLE = L"single";
+static const wchar_t* INPUT_MEDIA_TYPE_IMAGE = L"image";
+static const wchar_t* RESULT_KEY_PATH = L"path";
+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";
+
+GroupEditorForm::GroupEditorForm(void)
+ : __pPresentationModel(null)
+ , __pTableView(null)
+ , __pItemGroupName(null)
+ , __categoryId(INVALID_RECORD_ID)
+ , __isEditMode(false)
+{
+}
+
+GroupEditorForm::~GroupEditorForm(void)
+{
+}
+
+void
+GroupEditorForm::Initialize(void)
+{
+       Construct(L"IDL_GROUP_EDITOR_FORM");
+}
+
+result
+GroupEditorForm::OnInitializing(void)
+{
+       Header* pHeader = GetHeader();
+       pHeader->AddActionEventListener(*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;
+
+       return E_SUCCESS;
+}
+
+void
+GroupEditorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       result r = E_SUCCESS;
+       EditField* pEditField = null;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (actionId)
+       {
+       case IDA_HEADER_SAVE:
+               {
+                       if (__pItemGroupName != null)
+                       {
+                               pEditField = static_cast<EditField*>(__pItemGroupName->GetControl(0));
+                               TryReturnVoid(pEditField, "[E_FAILURE] A system error occurred");
+                               pEditField->SetEnabled(true);
+                       }
+
+                       if (pEditField == null)
+                       {
+                               break;
+                       }
+
+                       String groupName = pEditField->GetText();
+                       groupName.Trim();
+
+                       if (__pPresentationModel->IsDefaultCategory() == false && __pPresentationModel->IsDuplicatedCategory(groupName))
+                       {
+                               r = pEditField->Clear();
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to clear edit field", GetErrorMessage(r));
+
+                               r = pEditField->SetGuideTextColor(Color(COLOR_GUIDE_TEXT));
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set guide text color", GetErrorMessage(r));
+
+                               pEditField->SetGuideText(ResourceManager::GetString(L"IDS_PB_POP_GROUP_ALREADY_IN_USE"));
+
+                               r = pEditField->SetFocus();
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set focus", GetErrorMessage(r));
+
+                               pEditField->Invalidate(false);
+                               return;
+                       }
+
+                       if (__isEditMode)
+                       {
+                               r = __pPresentationModel->SetCategoryName(groupName);
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set category name", GetErrorMessage(r));
+                       }
+                       else
+                       {
+                               r = __pPresentationModel->AddCategory(groupName);
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to add category name", GetErrorMessage(r));
+                       }
+
+                       r = __pPresentationModel->SetThumbnailPath(groupName, __tempThumbnailPath);
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set thumbnail path", GetErrorMessage(r));
+
+                       if (__ringtonePath.Equals(ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT")) == false)
+                       {
+                               r = __pPresentationModel->SetRingtone(groupName, __ringtonePath);
+                               TryReturnVoid(r == E_SUCCESS, "[%s] Unable to set ringtone", GetErrorMessage(r));
+                       }
+
+                       r = pEditField->HideKeypad();
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to hide keypad", GetErrorMessage(r));
+
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               break;
+       case IDA_HEADER_CANCEL:
+               {
+                       if (__pItemGroupName != null)
+                       {
+                               pEditField = static_cast<EditField*>(__pItemGroupName->GetControl(0));
+                               TryReturnVoid(pEditField, "[E_FAILURE] A system error occurred");
+                               pEditField->SetEnabled(true);
+                       }
+
+                       if (pEditField == null)
+                       {
+                               break;
+                       }
+
+                       r = pEditField->HideKeypad();
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to hide keypad", GetErrorMessage(r));
+
+                       r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
+                       TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
+               }
+               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:
+               {
+                       __tempThumbnailPath.Clear();
+                       __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+
+                       if (__pItemGroupName != null)
+                       {
+                               EditField* pEditField = static_cast<EditField*>(__pItemGroupName->GetControl(0));
+                               TryReturnVoid(pEditField != null, "[E_FAILURE] A system error occurred");
+
+                               String tempName = pEditField->GetText();
+                               tempName.Trim();
+
+                               if (tempName.GetLength() > 0)
+                               {
+                                       Header* pHeader = GetHeader();
+                                       pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
+                                       pHeader->Invalidate(true);
+                               }
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupEditorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                  const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       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);
+
+       Header* pHeader = GetHeader();
+       if (pHeader != null)
+       {
+               if (__isEditMode)
+               {
+                       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_PB_OPT2_EDIT_GROUPS"));
+                       __ringtonePath = __pPresentationModel->GetRingtone();
+                       if (__ringtonePath.IsEmpty() == true)
+                       {
+                               __ringtonePath = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT");
+                       }
+               }
+               else
+               {
+                       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+                       __ringtonePath = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT");
+               }
+
+               pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
+       }
+}
+
+void
+GroupEditorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       if (__pItemGroupName != null)
+       {
+               EditField* pEditField = static_cast<EditField*>(__pItemGroupName->GetControl(0));
+               TryReturnVoid(pEditField, "[E_FAILURE] A system error occurred");
+
+               pEditField->HideKeypad();
+       }
+}
+
+int
+GroupEditorForm::GetItemCount(void)
+{
+       return ITEM_COUNT;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+GroupEditorForm::CreateItem(int itemIndex, int itemWidth)
+{
+       Label* pSubjectLabel = null;
+       Label* pContentLabel = null;
+
+       TableViewItem* pItem = new (std::nothrow) TableViewItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+       pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+       if (itemIndex == 0)
+       {
+               pItem->SetBounds(0, 0, itemWidth, Y_THUMBNAIL * 2 + H_THUMBNAIL);
+
+               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);
+
+               __tempThumbnailPath = __pPresentationModel->GetThumbnailPath();
+               if (__tempThumbnailPath.IsEmpty() == false)
+               {
+                       Bitmap* pThumbnail = null;
+                       ImageBuffer thumbnailImageBuffer;
+                       result r = thumbnailImageBuffer.Construct(__tempThumbnailPath);
+                       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);
+               Bitmap* pIconDim = ResourceManager::GetBitmapN(IDB_ICON_ADD_DIM);
+               if (pIconNormal != null)
+               {
+                       pButtonAdd->SetNormalBackgroundBitmap(*pIconNormal);
+                       delete pIconNormal;
+               }
+               if (pIconPressed != null)
+               {
+                       pButtonAdd->SetPressedBackgroundBitmap(*pIconPressed);
+                       delete pIconPressed;
+               }
+               if (pIconDim != null)
+               {
+                       pButtonAdd->SetDisabledBitmap(Point(0, 0), *pIconDim);
+                       delete pIconDim;
+               }
+               pItem->AddControl(*pButtonAdd);
+
+               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);
+               pIconDim = ResourceManager::GetBitmapN(IDB_ICON_CAMERA_DIM);
+               if (pIconNormal != null)
+               {
+                       pButtonCamera->SetNormalBackgroundBitmap(*pIconNormal);
+                       delete pIconNormal;
+               }
+               if (pIconPressed != null)
+               {
+                       pButtonCamera->SetPressedBackgroundBitmap(*pIconPressed);
+                       delete pIconPressed;
+               }
+               if (pIconDim != null)
+               {
+                       pButtonCamera->SetDisabledBitmap(Point(0, 0), *pIconDim);
+                       delete pIconDim;
+               }
+               pItem->AddControl(*pButtonCamera);
+
+               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);
+
+               if (__tempThumbnailPath.IsEmpty() == true)
+               {
+                       pButtonRemove->SetShowState(false);
+               }
+               else
+               {
+                       pButtonAdd->SetShowState(false);
+               }
+       }
+       else if (itemIndex == 1)
+       {
+               bool isNotDefaultCategory = true;
+
+               if (__pPresentationModel->IsDefaultCategory() == true)
+               {
+                       isNotDefaultCategory = false;
+               }
+
+               EditField* pEditField = new (std::nothrow) EditField();
+               pEditField->Construct(Rectangle(0, 0, itemWidth, H_ITEM), EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, EDIT_FIELD_TITLE_STYLE_TOP, isNotDefaultCategory);
+               pEditField->AddTextEventListener(*this);
+               pEditField->AddKeypadEventListener(*this);
+               pEditField->SetText(__tempName);
+               pEditField->SetTitleText(ResourceManager::GetString(L"IDS_PB_BODY_GROUP_NAME_ABB"));
+               pEditField->SetEnabled(isNotDefaultCategory);
+
+               if (__isEditMode == true)
+               {
+                       String categoryName = __pPresentationModel->GetCategoryName();
+                       if (isNotDefaultCategory == false)
+                       {
+                               if (categoryName.Equals(DEFAULT_GROUP_FAMILY, false))
+                               {
+                                       categoryName.Clear();
+                                       categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FAMILY");
+                               }
+                               else if (categoryName.Equals(DEFAULT_GROUP_FRIENDS, false))
+                               {
+                                       categoryName.Clear();
+                                       categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FRIENDS");
+                               }
+                               else if (categoryName.Equals(DEFAULT_GROUP_COWORKERS, false))
+                               {
+                                       categoryName.Clear();
+                                       categoryName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_WORK");
+                               }
+                       }
+                       pEditField->SetText(categoryName);
+               }
+               pItem->AddControl(*pEditField);
+
+               __pItemGroupName = pItem;
+       }
+       else if (itemIndex == 2)
+       {
+               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->SetTextConfig(FONT_SIZE_RINGTONE_TITLE, LABEL_TEXT_STYLE_BOLD);
+               pItem->AddControl(*pSubjectLabel);
+
+               int index = 0;
+               String trimmedPath;
+               __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), trimmedPath);
+               pContentLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pContentLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+               pContentLabel->SetTextColor(Color(COLOR_RINGTONE));
+               pContentLabel->SetTextConfig(FONT_SIZE_RINGTONE, LABEL_TEXT_STYLE_BOLD);
+               pItem->AddControl(*pContentLabel);
+       }
+
+       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 (__tempThumbnailPath.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(__tempThumbnailPath);
+                       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 == 2)
+       {
+               int index = 0;
+               String trimmedPath;
+               __ringtonePath.LastIndexOf(L"/", __ringtonePath.GetLength() - 1, index);
+
+               if (index != 0)
+               {
+                       __ringtonePath.SubString(index + 1, trimmedPath);
+               }
+
+               Label* pRingtoneName = static_cast<Label*>(pItem->GetControl(1));
+               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)
+       {
+               if (__pItemGroupName != null)
+               {
+                       EditField* pEditField = static_cast<EditField*>(__pItemGroupName->GetControl(0));
+                       TryReturnVoid(pEditField != null, "[E_FAILURE] A system error occurred");
+
+                       __tempName = pEditField->GetText();
+               }
+
+               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)
+{
+       bool notEmpty = false;
+
+       EditField* pEdit = static_cast<EditField*>(const_cast<Control*>(&source));
+       TryReturnVoid(pEdit, "[E_FAILURE] A system error occurred");
+
+       String name = pEdit->GetText();
+       wchar_t ch;
+
+       for (int index = 0; index < name.GetLength(); index++)
+       {
+               name.GetCharAt(index, ch);
+
+               if (ch != L' ')
+               {
+                       notEmpty = true;
+               }
+       }
+
+       Header* pHeader = GetHeader();
+       if (notEmpty)
+       {
+               pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
+       }
+       else
+       {
+               pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
+       }
+
+       pHeader->Invalidate(true);
+}
+
+void
+GroupEditorForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
+{
+}
+
+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)
+{
+       Rectangle clientBounds = GetClientAreaBounds();
+
+       __pTableView->SetSize(clientBounds.width, clientBounds.height);
+}
+
+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)
+{
+       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;
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               pResultString = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+               TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+               __tempThumbnailPath.Clear();
+               __tempThumbnailPath.Append(*pResultString);
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               pResultString = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+               TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+               __tempThumbnailPath.Clear();
+               __tempThumbnailPath.Append(*pResultString);
+               __pTableView->RefreshItem(0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               pResultString = static_cast<const String *>(pExtraData->GetValue(String(RESULT_KEY_PATH)));
+               TryReturnVoid(pResultString != null, "[E_FAILURE] Unable to get file path.");
+
+               __ringtonePath.Clear();
+               __ringtonePath.Append(*pResultString);
+               __pTableView->RefreshItem(2, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
+       }
+
+       if (__pItemGroupName != null)
+       {
+               EditField* pEditField = static_cast<EditField*>(__pItemGroupName->GetControl(0));
+               TryReturnVoid(pEditField != null, "[E_FAILURE] A system error occurred");
+
+               String tempName = pEditField->GetText();
+               tempName.Trim();
+
+               if (tempName.GetLength() > 0)
+               {
+                       Header* pHeader = GetHeader();
+                       pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
+                       pHeader->Invalidate(true);
+               }
+       }
+}
+
+result
+GroupEditorForm::LaunchAppControl(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId)
+{
+       result r = E_SUCCESS;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (appId.Equals(String(PROVIDER_ID_CAMERA)) && operationId.Equals(String(OPERATION_ID_CREATE_CONTENT)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_CAMERA));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_GALLERY)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_MEDIA_TYPE), new (std::nothrow) String(INPUT_MEDIA_TYPE_IMAGE));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_MODE), new (std::nothrow) String(INPUT_SELECTION_TYPE_SINGLE));
+       }
+       else if (appId.Equals(String(PROVIDER_ID_FILEMANAGER)) && operationId.Equals(String(OPERATION_ID_PICK)))
+       {
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_SELECTION_TYPE), new (std::nothrow) String(INPUT_SELECTION_TYPE_SINGLE));
+               extraData.Add(new (std::nothrow) String(INPUT_KEY_TYPE), new (std::nothrow) String(INPUT_TYPE_AUDIO));
+       }
+
+       AppControl* pAc = AppManager::FindAppControlN(appId, operationId);
+
+       if (pAc)
+       {
+               r = pAc->Start(null, null, &extraData, this);
+               if (r == E_SUCCESS)
+               {
+                       SetEnabled(false);
+               }
+               delete pAc;
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+}
diff --git a/src/CtGroupListEditorPanel.cpp b/src/CtGroupListEditorPanel.cpp
new file mode 100644 (file)
index 0000000..d6b40dd
--- /dev/null
@@ -0,0 +1,910 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtGroupListEditorPanel.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+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 int IDA_FOOTER_REMOVE = 20;
+static const int IDA_FOOTER_CANCEL = 21;
+static const int IDA_BUTTON_EDIT = 30;
+
+static const wchar_t* IDB_CALL_ID_DEFAULT = L"caller_ID.png";
+static const wchar_t* IDB_BUTTON_RENAME = L"C02_button_rename.png";
+static const wchar_t* IDB_BUTTON_CIRCLE_NORMAL = L"C02_button_circle_bg_normal.png";
+static const wchar_t* IDB_BUTTON_CIRCLE_PRESSED = L"C02_button_circle_bg_normal_press.png";
+static const wchar_t* IDB_CHECK_MARK = L"00_button_check.png";
+
+static const int W_INITIAL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int Y_ACCOUNT_LABEL = 18;
+static const int H_ACCOUNT_LABEL = 40;
+static const int H_GROUP_ITEM = 60;
+static const int X_ITEM = 21;
+static const int W_ITEM = 321;
+static const int H_ITEM = 290;
+static const int H_ITEM_GAP = 42;
+static const int W_ITEM_GAP = 36;
+static const int X_ITEM_HEADER = 3;
+static const int Y_ITEM_HEADER = 3;
+static const int W_ITEM_HEADER = 315;
+static const int H_ITEM_HEADER = 72;
+static const int X_ITEM_TEXT = 10;
+static const int W_ITEM_TEXT = 251;
+static const int Y_ITEM_NAME = 7;
+static const int H_ITEM_NAME = 38;
+static const int Y_ITEM_COUNT = 45;
+static const int X_RENAME = 267;
+static const int Y_RENAME = 18;
+static const int W_RENAME = 48;
+static const int H_RENAME = 48;
+static const int H_CHECK_MARK = 148;
+
+static const int X_THUMBNAIL_LEFT = 3;
+static const int X_THUMBNAIL_CENTER = 109;
+static const int X_THUMBNAIL_RIGHT = 215;
+static const int Y_THUMBNAIL_TOP = 78;
+static const int Y_THUMBNAIL_BOTTOM = 184;
+static const int W_THUMBNAIL = 103;
+static const int W_THUMBNAIL_WIDER = 209;
+static const int W_THUMBNAIL_WIDEST = 315;
+static const int H_THUMBNAIL_TALL = 209;
+static const int H_THUMBNAIL_SHORT = 103;
+static const int THUMBNAIL_MAXIMUM_COUNT = 6;
+static const int THUMBNAIL_COUNT_SINGLE = 1;
+static const int THUMBNAIL_COUNT_DOUBLE = 2;
+static const int THUMBNAIL_COUNT_TRIPLE = 3;
+static const int THUMBNAIL_COUNT_TRIPLE_RANGE_MIN = 3;
+static const int THUMBNAIL_COUNT_TRIPLE_RANGE_MAX = 10;
+static const int THUMBNAIL_COUNT_MULTIPLE = 11;
+static const int MULTIPLE_COLUMN_COUNT = 3;
+static const int H_BOTTOM_LABEL = 48;
+static const int COLUMN_COUNT = 2;
+static const int CHECKED_MASK = 0x40000000;
+
+static const int FONT_SIZE_ACCOUNT_LABEL = 32;
+static const int FONT_SIZE_GROUP_NAME = 33;
+static const int FONT_SIZE_CONTACT_COUNT = 23;
+static const int FONT_SIZE_BOTTOM_LABEL = 32;
+
+static const unsigned int COLOR_TABLE_BG = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_ACCOUNT_LABEL = Color32<41, 41, 41>::Value;
+static const unsigned int COLOR_ITEM_CONTAINER = Color32<209, 209, 209>::Value;
+static const unsigned int COLOR_ITEM_HEADER[6] = {Color32<74, 119, 149>::Value, Color32<135, 73, 62>::Value, Color32<70, 101, 37>::Value, Color32<69, 81, 102>::Value, Color32<82, 69, 102>::Value, Color32<127, 102, 65>::Value};
+static const unsigned int COLOR_ITEM_TEXT = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<215, 225, 232>::Value;
+static const unsigned int COLOR_BOTTOM_LABEL_FONT =Color32<76, 81, 88>::Value;
+static const unsigned int COLOR_CHECK_LABEL = Color32<0, 0, 0, 122>::Value;
+static const unsigned int COLOR_ITEM_TEXT_DIM = Color32<248, 246, 239, 77>::Value;
+
+GroupListEditorPanel::GroupListEditorPanel(void)
+ : __pGroupCheckList(null)
+ , __pTableView(null)
+ , __pBottomLabel(null)
+ , __pDefaultThumbnail(null)
+ , __pPresentationModel(null)
+ , __isToggleOpened(false)
+ , __isTouchMoved(false)
+{
+}
+
+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);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = GroupListPresentationModel::GetInstance();
+       __pPresentationModel->AddGroupChangeListener(*this);
+
+       __pGroupCheckList = new (std::nothrow) ArrayListT<bool>;
+       __pGroupCheckList->Construct();
+
+       __pTableView = new (std::nothrow) TableView();
+       __pTableView->Construct(Rectangle(0, 0, clientBounds.width, clientBounds.height - H_BOTTOM_LABEL), false, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
+       __pTableView->SetBackgroundColor(COLOR_TABLE_BG);
+       __pTableView->AddScrollEventListener(*this);
+       __pTableView->SetItemProvider(this);
+       AddControl(*__pTableView);
+
+       __pBottomLabel = new (std::nothrow) Label();
+       __pBottomLabel->Construct(Rectangle(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);
+       AddControl(*__pBottomLabel);
+
+       __pDefaultThumbnail = ResourceManager::GetBitmapN(IDB_CALL_ID_DEFAULT);
+
+       return E_SUCCESS;
+}
+
+result
+GroupListEditorPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveGroupChangeListener(*this);
+       }
+
+       if (__pGroupCheckList != null)
+       {
+               __pGroupCheckList->RemoveAll();
+               delete __pGroupCheckList;
+       }
+
+       delete __pDefaultThumbnail;
+
+       return r;
+}
+
+void
+GroupListEditorPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       String categoryIndex = source.GetName();
+
+       switch (actionId)
+       {
+       case IDA_HEADER_CONTACTS:
+               {
+                       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_REMOVE:
+               {
+                       bool isChecked = false;
+                       int categoryCount = __pGroupCheckList->GetCount();
+
+                       for (int index = categoryCount - 1; index >= 0; index--)
+                       {
+                               __pGroupCheckList->GetAt(index, isChecked);
+
+                               if (isChecked == true)
+                               {
+                                       __pPresentationModel->RemoveCategory(index);
+                               }
+                       }
+
+                       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_FOOTER_CANCEL:
+               {
+                       pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_GROUP_LIST));
+               }
+               break;
+       case IDA_BUTTON_EDIT:
+               {
+                       int index = -1;
+                       Integer::Parse(source.GetName(), index);
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+                       pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(index))));
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_EDITOR, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pList);
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+GroupListEditorPanel::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       const Form* pForm = dynamic_cast<Form*>(GetParent());
+       AppAssert(pForm);
+       Header* pHeader = pForm->GetHeader();
+       pHeader->AddActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->AddActionEventListener(*this);
+       pFooter->RemoveBackButton();
+       pFooter->RemoveAllItems();
+       pFooter->RemoveButtonAt(BUTTON_POSITION_LEFT);
+
+       FooterItem footerRemove;
+       footerRemove.Construct(IDA_FOOTER_REMOVE);
+       footerRemove.SetText(ResourceManager::GetString(L"IDS_COM_BODY_REMOVE"));
+       pFooter->AddItem(footerRemove);
+
+       FooterItem footerCancel;
+       footerCancel.Construct(IDA_FOOTER_CANCEL);
+       footerCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
+       pFooter->AddItem(footerCancel);
+
+       if (previousSceneId.Equals(IDSCN_GROUP_EDITOR, false))
+       {
+               int selectedCount = 0;
+               bool isChecked = false;
+
+               IEnumeratorT<bool>* pEnum = __pGroupCheckList->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pEnum->GetCurrent(isChecked);
+                       if (isChecked == true)
+                       {
+                               selectedCount++;
+                       }
+               }
+               delete pEnum;
+
+               if (selectedCount > 0)
+               {
+                       pFooter->SetItemEnabled(0, true);
+               }
+               else
+               {
+                       pFooter->SetItemEnabled(0, false);
+               }
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, false);
+               UpdateGroupList();
+               __pTableView->UpdateTableView();
+       }
+
+       UpdateBottomLabel();
+
+       if (pArgs != null)
+       {
+               pArgs->RemoveAll(true);
+               delete pArgs;
+       }
+}
+
+void
+GroupListEditorPanel::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->SetBackButton();
+       pFooter->RemoveActionEventListener(*this);
+}
+
+void
+GroupListEditorPanel::OnContactsChanged(void)
+{
+       UpdateGroupList();
+       __pTableView->UpdateTableView();
+}
+
+void
+GroupListEditorPanel::OnCategoriesChanged(void)
+{
+       UpdateGroupList();
+       __pTableView->UpdateTableView();
+}
+
+result
+GroupListEditorPanel::ComposeGroupItem(Tizen::Ui::Controls::TableViewItem& item, int groupBoxIndex, const Tizen::Graphics::Point& itemPosition, bool isChecked)
+{
+       result r = E_SUCCESS;
+
+       String groupName = __pPresentationModel->GetCategoryName(groupBoxIndex);
+       int contactCount = __pPresentationModel->GetContactCountInCategory(groupBoxIndex);
+
+       Label* pContainer = new (std::nothrow) Label();
+       pContainer->Construct(Rectangle(itemPosition.x, itemPosition.y, W_ITEM, H_ITEM), L"");
+       pContainer->AddTouchEventListener(*this);
+       pContainer->SetName(Integer::ToString(groupBoxIndex));
+       item.AddControl(*pContainer);
+
+       Canvas* pCanvas = new (std::nothrow) Canvas();
+       pCanvas->Construct(Rectangle(0, 0, W_ITEM, H_ITEM));
+       pCanvas->SetBackgroundColor(COLOR_ITEM_CONTAINER);
+       pCanvas->Clear();
+
+       pCanvas->FillRectangle(COLOR_ITEM_HEADER[groupBoxIndex % THUMBNAIL_MAXIMUM_COUNT],
+                                                                       Rectangle(X_ITEM_HEADER, Y_ITEM_HEADER, W_ITEM_HEADER, H_ITEM_HEADER));
+
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(Dimension(W_ITEM_TEXT, H_ITEM_NAME));
+       pEnrichedText->SetHorizontalAlignment(TEXT_ALIGNMENT_LEFT);
+       pEnrichedText->SetElementVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedText->SetTextWrapStyle(TEXT_WRAP_NONE);
+       pEnrichedText->SetTextAbbreviationEnabled(true);
+
+       TextElement* pNameText = new (std::nothrow) TextElement();
+       pNameText->Construct(groupName);
+       Font nameFont;
+       nameFont.Construct(FONT_STYLE_BOLD, FONT_SIZE_GROUP_NAME);
+       pNameText->SetFont(nameFont);
+
+       TextElement* pCountText = new (std::nothrow) TextElement();
+       pCountText->Construct(Integer::ToString(contactCount));
+       Font countFont;
+       countFont.Construct(FONT_STYLE_BOLD, FONT_SIZE_CONTACT_COUNT);
+       pCountText->SetFont(countFont);
+
+       if (__pPresentationModel->IsDefaultCategory(groupBoxIndex))
+       {
+               pNameText->SetTextColor(COLOR_ITEM_TEXT_DIM);
+               pCountText->SetTextColor(COLOR_ITEM_TEXT_DIM);
+       }
+       else
+       {
+               pNameText->SetTextColor(COLOR_ITEM_TEXT);
+               pCountText->SetTextColor(COLOR_ITEM_TEXT);
+       }
+
+       pEnrichedText->Add(*pNameText);
+       pCanvas->DrawText(Point(X_ITEM_TEXT, Y_ITEM_NAME), *pEnrichedText);
+       pEnrichedText->Remove(*pNameText, true);
+
+       pEnrichedText->Add(*pCountText);
+       pCanvas->DrawText(Point(X_ITEM_TEXT, Y_ITEM_COUNT), *pEnrichedText);
+       pEnrichedText->Remove(*pCountText, true);
+
+       r = ArrangeThumbnails(*pCanvas, groupBoxIndex, contactCount);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to arrange thumbnails", GetErrorMessage(r));
+
+       Bitmap* pBitmap = new (std::nothrow) Bitmap();
+       pBitmap->Construct(*pCanvas, Rectangle(0, 0, W_ITEM, H_ITEM));
+
+       pContainer->SetBackgroundBitmap(*pBitmap);
+
+       delete pEnrichedText;
+       delete pCanvas;
+       delete pBitmap;
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_RENAME);
+       if (pBitmap != null)
+       {
+               pBitmap->Scale(Dimension(W_RENAME, H_RENAME));
+       }
+       Button* pRenameButton = new (std::nothrow) Button();
+       pRenameButton->Construct(Rectangle(itemPosition.x + X_RENAME, itemPosition.y + Y_RENAME, W_RENAME, H_RENAME));
+       pRenameButton->SetNormalBitmap(Point(0, 0), *pBitmap);
+       pRenameButton->SetPressedBitmap(Point(0, 0), *pBitmap);
+       delete pBitmap;
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_CIRCLE_NORMAL);
+       if (pBitmap != null)
+       {
+               pRenameButton->SetNormalBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+
+       pBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_CIRCLE_PRESSED);
+       if (pBitmap != null)
+       {
+               pRenameButton->SetPressedBackgroundBitmap(*pBitmap);
+               delete pBitmap;
+       }
+
+       pRenameButton->SetName(Integer::ToString(groupBoxIndex));
+       pRenameButton->SetActionId(IDA_BUTTON_EDIT);
+       pRenameButton->AddActionEventListener(*this);
+       item.AddControl(*pRenameButton);
+
+       if (isChecked == true)
+       {
+               CreateCheckLabel(item, Rectangle(itemPosition.x, itemPosition.y, W_ITEM, H_ITEM), groupBoxIndex);
+       }
+
+       return r;
+}
+
+result
+GroupListEditorPanel::ArrangeThumbnails(Tizen::Graphics::Canvas& canvas, int groupBoxIndex, int contactCount)
+{
+       result r = E_SUCCESS;
+
+       Rectangle itemBounds;
+
+       r = __pPresentationModel->UpdatePersonList(groupBoxIndex);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to update person list", GetErrorMessage(r));
+
+       Bitmap* pCategoryThumbnail = __pPresentationModel->GetThumbnailN(Dimension(W_THUMBNAIL_WIDEST, W_THUMBNAIL_WIDEST), groupBoxIndex, -1);
+       if (pCategoryThumbnail != null)
+       {
+               canvas.DrawBitmap(Rectangle(X_THUMBNAIL_LEFT, Y_THUMBNAIL_TOP, W_THUMBNAIL_WIDEST, H_THUMBNAIL_TALL), *pCategoryThumbnail);
+               return E_SUCCESS;
+       }
+
+       if (contactCount == THUMBNAIL_COUNT_SINGLE)
+       {
+               itemBounds.x = X_THUMBNAIL_LEFT;
+               itemBounds.y = Y_THUMBNAIL_TOP;
+               itemBounds.width = W_THUMBNAIL_WIDEST;
+               itemBounds.height = H_THUMBNAIL_TALL;
+               r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, 0);
+               TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+       }
+       else if (contactCount == THUMBNAIL_COUNT_DOUBLE)
+       {
+               itemBounds.x = X_THUMBNAIL_LEFT;
+               itemBounds.y = Y_THUMBNAIL_TOP;
+               itemBounds.width = W_THUMBNAIL_WIDER;
+               itemBounds.height = H_THUMBNAIL_TALL;
+
+               for (int index = 0; index < contactCount; index++)
+               {
+                       r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, index);
+                       TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+
+                       itemBounds.x = X_THUMBNAIL_RIGHT;
+                       itemBounds.width = W_THUMBNAIL;
+               }
+       }
+       else if (contactCount >= THUMBNAIL_COUNT_TRIPLE_RANGE_MIN && contactCount <= THUMBNAIL_COUNT_TRIPLE_RANGE_MAX)
+       {
+               itemBounds.x = X_THUMBNAIL_LEFT;
+               itemBounds.y = Y_THUMBNAIL_TOP;
+               itemBounds.width = W_THUMBNAIL_WIDER;
+               itemBounds.height = H_THUMBNAIL_TALL;
+
+               for (int index = 0; index < THUMBNAIL_COUNT_TRIPLE; index++)
+               {
+                       r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, index);
+                       TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+
+                       if (index == 0)
+                       {
+                               itemBounds.x = X_THUMBNAIL_RIGHT;
+                               itemBounds.width = W_THUMBNAIL;
+                               itemBounds.height = H_THUMBNAIL_SHORT;
+                       }
+                       else if (index == 1)
+                       {
+                               itemBounds.y = Y_THUMBNAIL_BOTTOM;
+                       }
+               }
+       }
+       else if (contactCount >= THUMBNAIL_COUNT_MULTIPLE)
+       {
+               itemBounds.width = W_THUMBNAIL;
+               itemBounds.height = H_THUMBNAIL_SHORT;
+
+               for (int index = 0; index < THUMBNAIL_MAXIMUM_COUNT; index++)
+               {
+                       switch ((index % MULTIPLE_COLUMN_COUNT))
+                       {
+                       case 0:
+                               itemBounds.x = X_THUMBNAIL_LEFT;
+                               break;
+                       case 1:
+                               itemBounds.x = X_THUMBNAIL_CENTER;
+                               break;
+                       case 2:
+                               itemBounds.x = X_THUMBNAIL_RIGHT;
+                               break;
+                       }
+
+                       if (index < MULTIPLE_COLUMN_COUNT)
+                       {
+                               itemBounds.y = Y_THUMBNAIL_TOP;
+                       }
+                       else
+                       {
+                               itemBounds.y = Y_THUMBNAIL_BOTTOM;
+                       }
+
+                       r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, index);
+                       TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+               }
+       }
+
+       return r;
+}
+
+result
+GroupListEditorPanel::PlaceThumbnail(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, int categoryIndex, int contactIndex)
+{
+       result r = E_SUCCESS;
+
+       bool isDefaultThumbnail = false;
+
+       Bitmap* pPersonThumbnail = null;
+       Bitmap* pClippedThumbnail = new (std::nothrow) Bitmap();
+       if (bounds.width > bounds.height)
+       {
+               pPersonThumbnail = __pPresentationModel->GetThumbnailN(Dimension(bounds.width, bounds.width), categoryIndex, contactIndex);
+               if (pPersonThumbnail == null)
+               {
+                       pPersonThumbnail = __pDefaultThumbnail;
+                       pPersonThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+                       pPersonThumbnail->Scale(Dimension(bounds.width, bounds.width));
+                       isDefaultThumbnail = true;
+               }
+
+               pClippedThumbnail->Construct(*pPersonThumbnail, Rectangle(0, (bounds.width - bounds.height) / 2, bounds.width, bounds.height));
+               canvas.DrawBitmap(bounds, *pClippedThumbnail);
+       }
+       else if (bounds.width < bounds.height)
+       {
+               pPersonThumbnail = __pPresentationModel->GetThumbnailN(Dimension(bounds.height, bounds.height), categoryIndex, contactIndex);
+               if (pPersonThumbnail == null)
+               {
+                       pPersonThumbnail = __pDefaultThumbnail;
+                       pPersonThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+                       pPersonThumbnail->Scale(Dimension(bounds.height, bounds.height));
+                       isDefaultThumbnail = true;
+               }
+
+               pClippedThumbnail->Construct(*pPersonThumbnail, Rectangle((bounds.height - bounds.width) / 2, 0, bounds.width, bounds.height));
+               canvas.DrawBitmap(bounds, *pClippedThumbnail);
+       }
+       else
+       {
+               pPersonThumbnail = __pPresentationModel->GetThumbnailN(Dimension(bounds.width, bounds.height), categoryIndex, contactIndex);
+               if (pPersonThumbnail == null)
+               {
+                       pPersonThumbnail = __pDefaultThumbnail;
+                       pPersonThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+                       pPersonThumbnail->Scale(Dimension(bounds.width, bounds.height));
+                       isDefaultThumbnail = true;
+               }
+
+               canvas.DrawBitmap(bounds, *pPersonThumbnail);
+       }
+
+       if (isDefaultThumbnail == false)
+       {
+               delete pPersonThumbnail;
+       }
+       delete pClippedThumbnail;
+
+       return r;
+}
+
+void
+GroupListEditorPanel::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       __isTouchMoved = false;
+}
+
+void
+GroupListEditorPanel::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       if (source.Contains(currentPosition) == false || touchInfo.IsFlicked() == true)
+       {
+               return;
+       }
+
+       if (__isTouchMoved)
+       {
+               return;
+       }
+
+       TableViewItem* pItem = static_cast<TableViewItem*>(source.GetParent());
+       if (pItem == null)
+       {
+               return;
+       }
+
+       bool isChecked = false;
+       bool isCheckLabelCreated = false;
+       Label* pCheckLabel = null;
+
+       int groupBoxIndex = -1;
+       Integer::Parse(source.GetName(), groupBoxIndex);
+
+       if (__pPresentationModel->IsDefaultCategory(groupBoxIndex))
+       {
+               return;
+       }
+
+       if (groupBoxIndex >= CHECKED_MASK)
+       {
+               groupBoxIndex = groupBoxIndex - CHECKED_MASK;
+               isCheckLabelCreated = true;
+       }
+
+       __pGroupCheckList->GetAt(groupBoxIndex, isChecked);
+
+       if (isChecked == true)
+       {
+               // hide check label
+               pCheckLabel = static_cast<Label*>(&(const_cast<Control&>(source)));
+               if (pCheckLabel == null)
+               {
+                       return;
+               }
+
+               pCheckLabel->SetShowState(false);
+               __pGroupCheckList->SetAt(false, groupBoxIndex);
+       }
+       else
+       {
+               // show or create check label
+               if (isCheckLabelCreated == true)
+               {
+                       pCheckLabel = static_cast<Label*>(pItem->GetControl(Integer::ToString(groupBoxIndex + CHECKED_MASK), false));
+                       if (pCheckLabel == null)
+                       {
+                               return;
+                       }
+
+                       pCheckLabel->SetShowState(true);
+               }
+               else
+               {
+                       CreateCheckLabel(*pItem, source.GetBounds(), groupBoxIndex);
+               }
+
+               __pGroupCheckList->SetAt(true, groupBoxIndex);
+       }
+
+       UpdateBottomLabel();
+}
+
+void
+GroupListEditorPanel::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupListEditorPanel::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupListEditorPanel::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupListEditorPanel::OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+result
+GroupListEditorPanel::UpdateBottomLabel(void)
+{
+       int selectedCount = 0;
+       bool isChecked = false;
+
+       IEnumeratorT<bool>* pEnum = __pGroupCheckList->GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pEnum->GetCurrent(isChecked);
+               if (isChecked == true)
+               {
+                       selectedCount++;
+               }
+       }
+
+       delete pEnum;
+
+       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)
+       {
+               pFooter->SetItemEnabled(0, true);
+       }
+       else
+       {
+               pFooter->SetItemEnabled(0, false);
+       }
+
+       pFooter->Invalidate(true);
+
+       return E_SUCCESS;
+}
+
+void
+GroupListEditorPanel::UpdateGroupList(void)
+{
+       __pGroupCheckList->RemoveAll();
+
+       int groupCount = __pPresentationModel->GetCategoryCount();
+
+       for (int index = 0; index < groupCount; index++)
+       {
+               __pGroupCheckList->Add(false);
+       }
+}
+
+result
+GroupListEditorPanel::CreateCheckLabel(Tizen::Ui::Controls::TableViewItem& item, const Tizen::Graphics::Rectangle& bounds, int groupBoxIndex)
+{
+       result r = E_SUCCESS;
+
+       Label* pCheckLabel = new (std::nothrow) Label();
+       pCheckLabel->Construct(bounds, L"");
+       pCheckLabel->SetName(Integer::ToString(groupBoxIndex + CHECKED_MASK));
+       pCheckLabel->AddTouchEventListener(*this);
+
+       Canvas* pCanvas = new (std::nothrow) Canvas();
+       pCanvas->Construct(Rectangle(0, 0, bounds.width, bounds.height));
+       pCanvas->SetBackgroundColor(COLOR_CHECK_LABEL);
+       pCanvas->Clear();
+
+       Bitmap* pBitmapMark = ResourceManager::GetBitmapN(IDB_CHECK_MARK);
+       if (pBitmapMark != null)
+       {
+               pBitmapMark->SetScalingQuality(BITMAP_SCALING_QUALITY_HIGH);
+               pBitmapMark->Scale(Dimension(H_CHECK_MARK, H_CHECK_MARK));
+               pCanvas->DrawBitmap(Rectangle(((bounds.width - H_CHECK_MARK) / 2), ((bounds.height - H_CHECK_MARK) / 2), H_CHECK_MARK, H_CHECK_MARK), *pBitmapMark);
+       }
+
+       Bitmap* pBitmapBackground = new (std::nothrow) Bitmap();
+       pBitmapBackground->Construct(*pCanvas, Rectangle(0, 0, bounds.width, bounds.height));
+
+       pCheckLabel->SetBackgroundBitmap(*pBitmapBackground);
+
+       item.AddControl(*pCheckLabel);
+       pCheckLabel->Invalidate(false);
+
+       delete pCanvas;
+       delete pBitmapMark;
+       delete pBitmapBackground;
+
+       return r;
+}
+
+int
+GroupListEditorPanel::GetItemCount(void)
+{
+       int count = __pPresentationModel->GetCategoryCount();
+
+       if (count % COLUMN_COUNT == 1)
+       {
+               count = count / COLUMN_COUNT + 1;
+       }
+       else if (count % COLUMN_COUNT == 0)
+       {
+               count = count / COLUMN_COUNT;
+       }
+
+       // Add Account name
+       return ++count;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+GroupListEditorPanel::CreateItem(int itemIndex, int itemWidth)
+{
+       if (itemIndex == 0)
+       {
+               TableViewItem* pItem = new (std::nothrow) TableViewItem();
+               pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+               Label* pAccountLabel = new (std::nothrow) Label();
+               pAccountLabel->Construct(Rectangle(X_ITEM, Y_ACCOUNT_LABEL, itemWidth - X_ITEM, H_ACCOUNT_LABEL),
+                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_PHONE"));
+               pAccountLabel->SetTextConfig(FONT_SIZE_ACCOUNT_LABEL, LABEL_TEXT_STYLE_BOLD);
+               pAccountLabel->SetTextColor(Color(COLOR_ACCOUNT_LABEL));
+               pAccountLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pItem->AddControl(*pAccountLabel);
+
+               return pItem;
+       }
+       else
+       {
+               TableViewItem* pItem = new (std::nothrow) TableViewItem();
+               pItem->Construct(Dimension(itemWidth, H_ITEM + H_ITEM_GAP));
+
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+               int groupBoxIndex = (itemIndex - 1) * COLUMN_COUNT;
+
+               Point itemPosition;
+               itemPosition.x = X_ITEM;
+               itemPosition.y = H_ITEM_GAP / 2;
+
+               bool isChecked = false;
+               for (int index = 0; index < COLUMN_COUNT; index++)
+               {
+                       result r = __pGroupCheckList->GetAt(groupBoxIndex, isChecked);
+                       if (r == E_SUCCESS)
+                       {
+                               ComposeGroupItem(*pItem, groupBoxIndex, itemPosition, isChecked);
+                       }
+
+                       itemPosition.x = X_ITEM + W_ITEM + W_ITEM_GAP;
+                       groupBoxIndex++;
+               }
+
+               return pItem;
+       }
+}
+
+bool
+GroupListEditorPanel::DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       delete pItem;
+       return true;
+}
+
+void
+GroupListEditorPanel::UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+}
+
+int
+GroupListEditorPanel::GetDefaultItemHeight(void)
+{
+       return H_ITEM;
+}
+
+void
+GroupListEditorPanel::OnScrollEndReached(Tizen::Ui::Control& source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+}
+
+void
+GroupListEditorPanel::OnScrollPositionChanged(Tizen::Ui::Control& source, int scrollPos)
+{
+       __isTouchMoved = true;
+}
diff --git a/src/CtGroupListPanel.cpp b/src/CtGroupListPanel.cpp
new file mode 100644 (file)
index 0000000..faf7bc6
--- /dev/null
@@ -0,0 +1,832 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtContactsApp.h"
+#include "CtGroupListPanel.h"
+#include "CtGroupListPresentationModel.h"
+#include "CtMainForm.h"
+#include "CtResourceManager.h"
+#include "CtSceneRegister.h"
+#include "CtTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+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 int IDA_FOOTER_MORE = 20;
+static const int IDA_FOOTER_CREATE = 21;
+static const int IDA_MORE_EDIT = 22;
+static const int IDA_CONTEXT_MESSAGE = 30;
+static const int IDA_CONTEXT_EMAIL = 31;
+
+static const wchar_t* IDB_CALLER_ID_DEFAULT = L"caller_ID.png";
+static const wchar_t* IDB_EXPAND_OPENED = L"C02_folder_expand_opened.png";
+static const wchar_t* IDB_MORE_NORMAL = L"00_icon_more.png";
+static const wchar_t* IDB_MORE_PRESSED = L"00_icon_more_press.png";
+
+static const int W_INITIAL_PANEL = 10;
+static const int H_INITIAL_PANEL = 10;
+static const int Y_ACCOUNT_LABEL = 18;
+static const int H_ACCOUNT_LABEL = 40;
+static const int H_GROUP_ITEM = 60;
+static const int X_ITEM = 21;
+static const int W_ITEM = 321;
+static const int H_ITEM = 290;
+static const int H_ITEM_GAP = 42;
+static const int W_ITEM_GAP = 36;
+static const int X_ITEM_HEADER = 3;
+static const int Y_ITEM_HEADER = 3;
+static const int H_ITEM_HEADER = 72;
+static const int X_ITEM_TEXT = 10;
+static const int W_ITEM_TEXT = 251;
+static const int Y_ITEM_NAME = 7;
+static const int H_ITEM_NAME = 38;
+static const int Y_ITEM_COUNT = 45;
+static const int X_TOGGLE_BG = 264;
+static const int W_TOGGLE_BG = 54;
+static const int X_TOGGLE = 10;
+static const int Y_TOGGLE = 32;
+static const int W_TOGGLE = 34;
+static const int H_TOGGLE = 21;
+static const int X_MORE = 55;
+
+static const int X_THUMBNAIL_LEFT = 3;
+static const int X_THUMBNAIL_CENTER = 109;
+static const int X_THUMBNAIL_RIGHT = 215;
+static const int Y_THUMBNAIL_TOP = 78;
+static const int Y_THUMBNAIL_BOTTOM = 184;
+static const int W_THUMBNAIL = 103;
+static const int W_THUMBNAIL_WIDER = 209;
+static const int W_THUMBNAIL_WIDEST = 315;
+static const int H_THUMBNAIL_TALL = 209;
+static const int H_THUMBNAIL_SHORT = 103;
+static const int THUMBNAIL_MAXIMUM_COUNT = 6;
+static const int THUMBNAIL_COUNT_SINGLE = 1;
+static const int THUMBNAIL_COUNT_DOUBLE = 2;
+static const int THUMBNAIL_COUNT_TRIPLE = 3;
+static const int THUMBNAIL_COUNT_TRIPLE_RANGE_MIN = 3;
+static const int THUMBNAIL_COUNT_TRIPLE_RANGE_MAX = 10;
+static const int THUMBNAIL_COUNT_MULTIPLE = 11;
+static const int MULTIPLE_COLUMN_COUNT = 3;
+static const int COLUMN_COUNT = 2;
+static const int CONTEXT_MENU_MASK = 0x40000000;
+
+static const int FONT_SIZE_ACCOUNT_LABEL = 32;
+static const int FONT_SIZE_GROUP_NAME = 33;
+static const int FONT_SIZE_CONTACT_COUNT = 23;
+
+static const unsigned int COLOR_TABLE_BG = Color32<248, 246, 239>::Value;
+static const unsigned int COLOR_ACCOUNT_LABEL = Color32<41, 41, 41>::Value;
+static const unsigned int COLOR_ITEM_CONTAINER = Color32<209, 209, 209>::Value;
+static const unsigned int COLOR_ITEM_HEADER[6] = {Color32<74, 119, 149>::Value, Color32<135, 73, 62>::Value, Color32<70, 101, 37>::Value, Color32<69, 81, 102>::Value, Color32<82, 69, 102>::Value, Color32<127, 102, 65>::Value};
+static const unsigned int COLOR_ITEM_NAME = Color32<255, 255, 255>::Value;
+static const unsigned int COLOR_ITEM_COUNT = Color32<255, 255, 255>::Value;
+
+GroupListPanel::GroupListPanel(void)
+ : __pTableView(null)
+ , __pContextMenuQuickMenu(null)
+ , __pContextMenuMore(null)
+ , __pDefaultThumbnail(null)
+ , __pPresentationModel(null)
+ , __isToggleOpened(false)
+ , __isTouchMoved(false)
+ , __scrolledDistance(0)
+{
+}
+
+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);
+
+       Rectangle clientBounds = pForm->GetClientAreaBounds();
+       SetBounds(Rectangle(0, 0, clientBounds.width, clientBounds.height));
+
+       __pPresentationModel = GroupListPresentationModel::GetInstance();
+       __pPresentationModel->AddGroupChangeListener(*this);
+
+       __pTableView = new (std::nothrow) TableView();
+       __pTableView->Construct(Rectangle(0, 0, clientBounds.width, clientBounds.height), false, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
+       __pTableView->SetBackgroundColor(COLOR_TABLE_BG);
+       __pTableView->AddScrollEventListener(*this);
+       __pTableView->SetItemProvider(this);
+       AddControl(*__pTableView);
+
+       __pContextMenuQuickMenu = new (std::nothrow) ContextMenu();
+       __pContextMenuQuickMenu->Construct(Point(0, 0), CONTEXT_MENU_STYLE_GRID);
+       __pContextMenuQuickMenu->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_MESSAGE"), IDA_CONTEXT_MESSAGE);
+       __pContextMenuQuickMenu->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_EMAIL"), IDA_CONTEXT_EMAIL);
+       __pContextMenuQuickMenu->AddActionEventListener(*this);
+
+       __pContextMenuMore = new (std::nothrow) ContextMenu();
+       __pContextMenuMore->Construct(Point(X_MORE, clientBounds.y + clientBounds.height), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_COM_SK_EDIT"), IDA_MORE_EDIT);
+       __pContextMenuMore->AddActionEventListener(*this);
+
+       __pDefaultThumbnail = ResourceManager::GetBitmapN(IDB_CALLER_ID_DEFAULT);
+
+       return E_SUCCESS;
+}
+
+result
+GroupListPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pPresentationModel != null)
+       {
+               __pPresentationModel->RemoveGroupChangeListener(*this);
+       }
+
+       delete __pContextMenuQuickMenu;
+       delete __pContextMenuMore;
+       delete __pDefaultThumbnail;
+
+       return r;
+}
+
+void
+GroupListPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       String groupIndex = source.GetName();
+
+       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_FOOTER_MORE:
+               {
+                       __pContextMenuMore->SetShowState(true);
+                       __pContextMenuMore->Show();
+               }
+               break;
+       case IDA_MORE_EDIT:
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_GROUP_LIST_EDITOR));
+               }
+               break;
+       case IDA_CONTEXT_MESSAGE:
+               {
+                       int groupBoxIndex = 0;
+                       Integer::Parse(source.GetName(), groupBoxIndex);
+
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+
+                       if (__pPresentationModel->GetCategoryCount() == groupBoxIndex)
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_NOT_ASSIGNED)));
+                       }
+                       else
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(groupBoxIndex))));
+                       }
+                       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_CONTEXT_EMAIL:
+               {
+                       int groupBoxIndex = 0;
+                       Integer::Parse(source.GetName(), groupBoxIndex);
+
+                       ArrayList* pList = new (std::nothrow) ArrayList();
+                       pList->Construct();
+
+                       if (__pPresentationModel->GetCategoryCount() == groupBoxIndex)
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_NOT_ASSIGNED)));
+                       }
+                       else
+                       {
+                               pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(groupBoxIndex))));
+                       }
+                       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;
+       default:
+               break;
+       }
+}
+
+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());
+
+       const 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);
+       pFooter->SetBackButton();
+       pFooter->AddActionEventListener(*this);
+
+       if (pContactsApp->GetOperationId() != OPERATION_ID_PICK)
+       {
+               FooterItem footerItemCreate;
+               footerItemCreate.Construct(IDA_FOOTER_CREATE);
+               footerItemCreate.SetText(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"));
+               pFooter->AddItem(footerItemCreate);
+
+               ButtonItem buttonItemMore;
+               buttonItemMore.Construct(BUTTON_ITEM_STYLE_ICON, IDA_FOOTER_MORE);
+               buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, ResourceManager::GetBitmapN(IDB_MORE_NORMAL));
+               buttonItemMore.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, ResourceManager::GetBitmapN(IDB_MORE_PRESSED));
+               pFooter->SetButton(BUTTON_POSITION_LEFT, buttonItemMore);
+       }
+
+       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);
+
+       Header* pHeader = pForm->GetHeader();
+       pHeader->RemoveActionEventListener(*this);
+
+       Footer* pFooter = pForm->GetFooter();
+       pFooter->RemoveActionEventListener(*this);
+}
+
+void
+GroupListPanel::OnContactsChanged(void)
+{
+       __pTableView->UpdateTableView();
+}
+
+void
+GroupListPanel::OnCategoriesChanged(void)
+{
+       __pTableView->UpdateTableView();
+}
+
+result
+GroupListPanel::ComposeGroupItem(Tizen::Ui::Controls::TableViewItem& item, int groupBoxIndex, const Tizen::Graphics::Point& itemPosition, int contactCount, bool isNotAssigned)
+{
+       result r = E_SUCCESS;
+
+       String groupName;
+
+       if (isNotAssigned == true)
+       {
+               groupName = ResourceManager::GetString(L"IDS_PB_BODY_NOT_ASSIGNED");
+       }
+       else
+       {
+               groupName = __pPresentationModel->GetCategoryName(groupBoxIndex);
+       }
+
+       Label* pContainer = new (std::nothrow) Label();
+       pContainer->Construct(Rectangle(itemPosition.x, itemPosition.y, W_ITEM, H_ITEM), L"");
+       pContainer->AddTouchEventListener(*this);
+       pContainer->SetName(Integer::ToString(groupBoxIndex));
+       item.AddControl(*pContainer);
+
+       Canvas* pCanvas = new (std::nothrow) Canvas();
+       pCanvas->Construct(Rectangle(0, 0, W_ITEM, H_ITEM));
+       pCanvas->SetBackgroundColor(COLOR_ITEM_CONTAINER);
+       pCanvas->Clear();
+
+       pCanvas->FillRectangle(COLOR_ITEM_HEADER[groupBoxIndex % THUMBNAIL_MAXIMUM_COUNT],
+                                                       Rectangle(X_ITEM_HEADER, Y_ITEM_HEADER, X_ITEM_TEXT + W_ITEM_TEXT + W_TOGGLE_BG, H_ITEM_HEADER));
+
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(Dimension(W_ITEM_TEXT, H_ITEM_NAME));
+       pEnrichedText->SetHorizontalAlignment(TEXT_ALIGNMENT_LEFT);
+       pEnrichedText->SetElementVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
+       pEnrichedText->SetTextWrapStyle(TEXT_WRAP_NONE);
+       pEnrichedText->SetTextAbbreviationEnabled(true);
+
+       TextElement* pNameText = new (std::nothrow) TextElement();
+       pNameText->Construct(groupName);
+       pNameText->SetTextColor(COLOR_ITEM_NAME);
+       Font nameFont;
+       nameFont.Construct(FONT_STYLE_BOLD, FONT_SIZE_GROUP_NAME);
+       pNameText->SetFont(nameFont);
+
+       TextElement* pCountText = new (std::nothrow) TextElement();
+       pCountText->Construct(Integer::ToString(contactCount));
+       pCountText->SetTextColor(COLOR_ITEM_COUNT);
+       Font countFont;
+       countFont.Construct(FONT_STYLE_BOLD, FONT_SIZE_CONTACT_COUNT);
+       pCountText->SetFont(countFont);
+
+       pEnrichedText->Add(*pNameText);
+       pCanvas->DrawText(Point(X_ITEM_TEXT, Y_ITEM_NAME), *pEnrichedText);
+       pEnrichedText->Remove(*pNameText, true);
+
+       pEnrichedText->Add(*pCountText);
+       pCanvas->DrawText(Point(X_ITEM_TEXT, Y_ITEM_COUNT), *pEnrichedText);
+       pEnrichedText->Remove(*pCountText, true);
+
+       r = ArrangeThumbnails(*pCanvas, groupBoxIndex, contactCount);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to arrange thumbnails", GetErrorMessage(r));
+
+       Bitmap* pBitmap = new (std::nothrow) Bitmap();
+       pBitmap->Construct(*pCanvas, Rectangle(0, 0, W_ITEM, H_ITEM));
+
+       pContainer->SetBackgroundBitmap(*pBitmap);
+
+       delete pEnrichedText;
+       delete pCanvas;
+       delete pBitmap;
+
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+       if (pContactsApp->GetOperationId() != OPERATION_ID_PICK)
+       {
+               Label* pToggle = new (std::nothrow) Label();
+               pToggle->Construct(Rectangle(itemPosition.x + X_TOGGLE_BG, itemPosition.y + Y_ITEM_HEADER, W_TOGGLE_BG, H_ITEM_HEADER), L"");
+               pToggle->AddTouchEventListener(*this);
+               pToggle->SetName(Integer::ToString(CONTEXT_MENU_MASK + groupBoxIndex));
+               item.AddControl(*pToggle);
+
+               pCanvas = new (std::nothrow) Canvas();
+               pCanvas->Construct(Rectangle(0, 0, W_TOGGLE_BG, H_ITEM_HEADER));
+               pCanvas->SetBackgroundColor(COLOR_ITEM_HEADER[groupBoxIndex % THUMBNAIL_MAXIMUM_COUNT]);
+               pCanvas->Clear();
+
+               Bitmap* pToggleBitmap = ResourceManager::GetBitmapN(IDB_EXPAND_OPENED);
+               if (pToggleBitmap != null)
+               {
+                       pCanvas->DrawBitmap(Rectangle(X_TOGGLE, Y_TOGGLE, W_TOGGLE, H_TOGGLE), *pToggleBitmap);
+               }
+
+               Bitmap* pToggleBgBitmap = new (std::nothrow) Bitmap();
+               pToggleBgBitmap->Construct(*pCanvas, Rectangle(0, 0, W_TOGGLE_BG, H_ITEM_HEADER));
+               pToggle->SetBackgroundBitmap(*pToggleBgBitmap);
+
+               delete pCanvas;
+               delete pToggleBitmap;
+               delete pToggleBgBitmap;
+       }
+
+       return r;
+}
+
+result
+GroupListPanel::ArrangeThumbnails(Tizen::Graphics::Canvas& canvas, int groupBoxIndex, int contactCount)
+{
+       result r = E_SUCCESS;
+
+       Rectangle itemBounds;
+
+       r = __pPresentationModel->UpdatePersonList(groupBoxIndex);
+       TryReturn(r == E_SUCCESS, r, "[%s] Unable to update person list", GetErrorMessage(r));
+
+       Bitmap* pCategoryThumbnail = __pPresentationModel->GetThumbnailN(Dimension(W_THUMBNAIL_WIDEST, W_THUMBNAIL_WIDEST), groupBoxIndex, -1);
+       if (pCategoryThumbnail != null)
+       {
+               canvas.DrawBitmap(Rectangle(X_THUMBNAIL_LEFT, Y_THUMBNAIL_TOP, W_THUMBNAIL_WIDEST, H_THUMBNAIL_TALL), *pCategoryThumbnail);
+               return E_SUCCESS;
+       }
+
+       if (contactCount == THUMBNAIL_COUNT_SINGLE)
+       {
+               itemBounds.x = X_THUMBNAIL_LEFT;
+               itemBounds.y = Y_THUMBNAIL_TOP;
+               itemBounds.width = W_THUMBNAIL_WIDEST;
+               itemBounds.height = H_THUMBNAIL_TALL;
+               r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, 0);
+               TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+       }
+       else if (contactCount == THUMBNAIL_COUNT_DOUBLE)
+       {
+               itemBounds.x = X_THUMBNAIL_LEFT;
+               itemBounds.y = Y_THUMBNAIL_TOP;
+               itemBounds.width = W_THUMBNAIL_WIDER;
+               itemBounds.height = H_THUMBNAIL_TALL;
+
+               for (int index = 0; index < contactCount; index++)
+               {
+                       r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, index);
+                       TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+
+                       itemBounds.x = X_THUMBNAIL_RIGHT;
+                       itemBounds.width = W_THUMBNAIL;
+               }
+       }
+       else if (contactCount >= THUMBNAIL_COUNT_TRIPLE_RANGE_MIN && contactCount <= THUMBNAIL_COUNT_TRIPLE_RANGE_MAX)
+       {
+               itemBounds.x = X_THUMBNAIL_LEFT;
+               itemBounds.y = Y_THUMBNAIL_TOP;
+               itemBounds.width = W_THUMBNAIL_WIDER;
+               itemBounds.height = H_THUMBNAIL_TALL;
+
+               for (int index = 0; index < THUMBNAIL_COUNT_TRIPLE; index++)
+               {
+                       r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, index);
+                       TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+
+                       if (index == 0)
+                       {
+                               itemBounds.x = X_THUMBNAIL_RIGHT;
+                               itemBounds.width = W_THUMBNAIL;
+                               itemBounds.height = H_THUMBNAIL_SHORT;
+                       }
+                       else if (index == 1)
+                       {
+                               itemBounds.y = Y_THUMBNAIL_BOTTOM;
+                       }
+               }
+       }
+       else if (contactCount >= THUMBNAIL_COUNT_MULTIPLE)
+       {
+               itemBounds.width = W_THUMBNAIL;
+               itemBounds.height = H_THUMBNAIL_SHORT;
+
+               for (int index = 0; index < THUMBNAIL_MAXIMUM_COUNT; index++)
+               {
+                       switch ((index % MULTIPLE_COLUMN_COUNT))
+                       {
+                       case 0:
+                               itemBounds.x = X_THUMBNAIL_LEFT;
+                               break;
+                       case 1:
+                               itemBounds.x = X_THUMBNAIL_CENTER;
+                               break;
+                       case 2:
+                               itemBounds.x = X_THUMBNAIL_RIGHT;
+                               break;
+                       }
+
+                       if (index < MULTIPLE_COLUMN_COUNT)
+                       {
+                               itemBounds.y = Y_THUMBNAIL_TOP;
+                       }
+                       else
+                       {
+                               itemBounds.y = Y_THUMBNAIL_BOTTOM;
+                       }
+
+                       r = PlaceThumbnail(canvas, itemBounds, groupBoxIndex, index);
+                       TryReturn(r == E_SUCCESS, r, "[%s] Unable to place thumbnail", GetErrorMessage(r));
+               }
+       }
+
+       return r;
+}
+
+result
+GroupListPanel::PlaceThumbnail(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, int groupBoxIndex, int contactIndex)
+{
+       result r = E_SUCCESS;
+
+       bool isDefaultThumbnail = false;
+
+       Bitmap* pPersonThumbnail = null;
+       Bitmap* pClippedThumbnail = new (std::nothrow) Bitmap();
+       if (bounds.width > bounds.height)
+       {
+               pPersonThumbnail = __pPresentationModel->GetThumbnailN(Dimension(bounds.width, bounds.width), groupBoxIndex, contactIndex);
+               if (pPersonThumbnail == null)
+               {
+                       pPersonThumbnail = __pDefaultThumbnail;
+                       pPersonThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+                       pPersonThumbnail->Scale(Dimension(bounds.width, bounds.width));
+                       isDefaultThumbnail = true;
+               }
+
+               pClippedThumbnail->Construct(*pPersonThumbnail, Rectangle(0, (bounds.width - bounds.height) / 2, bounds.width, bounds.height));
+               canvas.DrawBitmap(bounds, *pClippedThumbnail);
+       }
+       else if (bounds.width < bounds.height)
+       {
+               pPersonThumbnail = __pPresentationModel->GetThumbnailN(Dimension(bounds.height, bounds.height), groupBoxIndex, contactIndex);
+               if (pPersonThumbnail == null)
+               {
+                       pPersonThumbnail = __pDefaultThumbnail;
+                       pPersonThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+                       pPersonThumbnail->Scale(Dimension(bounds.height, bounds.height));
+                       isDefaultThumbnail = true;
+               }
+
+               pClippedThumbnail->Construct(*pPersonThumbnail, Rectangle((bounds.height - bounds.width) / 2, 0, bounds.width, bounds.height));
+               canvas.DrawBitmap(bounds, *pClippedThumbnail);
+       }
+       else
+       {
+               pPersonThumbnail = __pPresentationModel->GetThumbnailN(Dimension(bounds.width, bounds.height), groupBoxIndex, contactIndex);
+               if (pPersonThumbnail == null)
+               {
+                       pPersonThumbnail = __pDefaultThumbnail;
+                       pPersonThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+                       pPersonThumbnail->Scale(Dimension(bounds.width, bounds.height));
+                       isDefaultThumbnail = true;
+               }
+
+               canvas.DrawBitmap(bounds, *pPersonThumbnail);
+       }
+
+       if (isDefaultThumbnail == false)
+       {
+               delete pPersonThumbnail;
+       }
+       delete pClippedThumbnail;
+
+       return r;
+}
+
+void
+GroupListPanel::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
+{
+       __isTouchMoved = false;
+}
+
+void
+GroupListPanel::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+       if (source.Contains(currentPosition) == false || touchInfo.IsFlicked() == true)
+       {
+               return;
+       }
+
+       if (__isTouchMoved)
+       {
+               return;
+       }
+
+       int groupBoxIndex = 0;
+       Integer::Parse(source.GetName(), groupBoxIndex);
+
+       if (groupBoxIndex >= CONTEXT_MENU_MASK)
+       {
+               TableViewItem* pParent = static_cast<TableViewItem*>(source.GetParent());
+               if (pParent == null)
+               {
+                       return;
+               }
+
+               const Form* pForm = dynamic_cast<Form*>(GetParent());
+               AppAssert(pForm);
+
+               Point point;
+               point.x = source.GetBounds().x + (source.GetBounds().width / 2);
+               point.y = pForm->GetClientAreaBounds().y + pParent->GetY() + H_ITEM_HEADER - __scrolledDistance;
+
+               __pContextMenuQuickMenu->SetName(Integer::ToString(groupBoxIndex - CONTEXT_MENU_MASK));
+               __pContextMenuQuickMenu->SetAnchorPosition(point);
+               __pContextMenuQuickMenu->SetShowState(true);
+               __pContextMenuQuickMenu->Show();
+       }
+       else
+       {
+               ArrayList* pList = new (std::nothrow) ArrayList();
+               pList->Construct();
+
+               if (__pPresentationModel->GetCategoryCount() == groupBoxIndex)
+               {
+                       pList->Add(*(new (std::nothrow) Integer(ID_GROUP_CONTACT_NOT_ASSIGNED)));
+               }
+               else
+               {
+                       pList->Add(*(new (std::nothrow) Integer(__pPresentationModel->GetCategoryId(groupBoxIndex))));
+               }
+
+               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+               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::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupListPanel::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupListPanel::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+void
+GroupListPanel::OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
+{
+}
+
+int
+GroupListPanel::GetItemCount(void)
+{
+       ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+       int count = __pPresentationModel->GetCategoryCount();
+
+       if (__pPresentationModel->GetContactCountInNotAssignedCategory(pContactsApp->GetReturnType()) > 0)
+       {
+               count++;
+       }
+
+       if (count % COLUMN_COUNT == 1)
+       {
+               count = count / COLUMN_COUNT + 1;
+       }
+       else if (count % COLUMN_COUNT == 0)
+       {
+               count = count / COLUMN_COUNT;
+       }
+
+       // Add Account name
+       return ++count;
+}
+
+Tizen::Ui::Controls::TableViewItem*
+GroupListPanel::CreateItem(int itemIndex, int itemWidth)
+{
+       if (itemIndex == 0)
+       {
+               TableViewItem* pItem = new (std::nothrow) TableViewItem();
+               pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
+
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+               Label* pAccountLabel = new (std::nothrow) Label();
+               pAccountLabel->Construct(Rectangle(X_ITEM, Y_ACCOUNT_LABEL, itemWidth - X_ITEM, H_ACCOUNT_LABEL),
+                                                                                                               ResourceManager::GetString(L"IDS_PB_BODY_PHONE"));
+               pAccountLabel->SetTextConfig(FONT_SIZE_ACCOUNT_LABEL, LABEL_TEXT_STYLE_BOLD);
+               pAccountLabel->SetTextColor(Color(COLOR_ACCOUNT_LABEL));
+               pAccountLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+               pItem->AddControl(*pAccountLabel);
+
+               return pItem;
+       }
+       else
+       {
+               TableViewItem* pItem = new (std::nothrow) TableViewItem();
+               pItem->Construct(Dimension(itemWidth, H_ITEM + H_ITEM_GAP));
+
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
+               pItem->SetBackgroundColor(COLOR_TABLE_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
+
+               ContactsApp* pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
+
+               int groupBoxIndex = (itemIndex - 1) * COLUMN_COUNT;
+
+               Point itemPosition;
+               itemPosition.x = X_ITEM;
+               itemPosition.y = H_ITEM_GAP / 2;
+
+               for (int index = 0; index < COLUMN_COUNT; index++)
+               {
+                       int contactCount = __pPresentationModel->GetContactCountInCategory(groupBoxIndex, pContactsApp->GetReturnType());
+                       if (contactCount >= 0)
+                       {
+                               ComposeGroupItem(*pItem, groupBoxIndex, itemPosition, contactCount, false);
+                       }
+                       else
+                       {
+                               contactCount = __pPresentationModel->GetContactCountInNotAssignedCategory(pContactsApp->GetReturnType());
+                               if (contactCount > 0)
+                               {
+                                       ComposeGroupItem(*pItem, groupBoxIndex, itemPosition, contactCount, true);
+                                       break;
+                               }
+                       }
+
+                       itemPosition.x = X_ITEM + W_ITEM + W_ITEM_GAP;
+                       groupBoxIndex++;
+               }
+
+               return pItem;
+       }
+}
+
+bool
+GroupListPanel::DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+       delete pItem;
+       return true;
+}
+
+void
+GroupListPanel::UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
+{
+}
+
+int
+GroupListPanel::GetDefaultItemHeight(void)
+{
+       return H_ITEM;
+}
+
+void
+GroupListPanel::OnScrollEndReached(Tizen::Ui::Control& source, Tizen::Ui::Controls::ScrollEndEvent type)
+{
+
+}
+
+void
+GroupListPanel::OnScrollPositionChanged(Tizen::Ui::Control& source, int scrollPos)
+{
+       __scrolledDistance = scrollPos;
+       __isTouchMoved = true;
+}
+
diff --git a/src/CtGroupListPresentationModel.cpp b/src/CtGroupListPresentationModel.cpp
new file mode 100644 (file)
index 0000000..1650350
--- /dev/null
@@ -0,0 +1,454 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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->SetEventListener(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();
+
+       if (pCategory->IsDefault())
+       {
+               if (returnName.Equals(DEFAULT_GROUP_FAMILY, false))
+               {
+                       returnName.Clear();
+                       returnName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FAMILY");
+               }
+               else if (returnName.Equals(DEFAULT_GROUP_FRIENDS, false))
+               {
+                       returnName.Clear();
+                       returnName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_FRIENDS");
+               }
+               else if (returnName.Equals(DEFAULT_GROUP_COWORKERS, false))
+               {
+                       returnName.Clear();
+                       returnName = ResourceManager::GetString(L"IDS_PB_BODY_DEFAULT_GROUP_WORK");
+               }
+       }
+
+       return returnName;
+}
+
+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::GetContactCountInCategory(int index, 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();
+
+       pList->RemoveAll(true);
+       delete 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();
+}
+
+Tizen::Graphics::Bitmap*
+GroupListPresentationModel::GetThumbnailN(const Tizen::Graphics::Dimension& dimension, int categoryIndex, int contactIndex)
+{
+       TryReturn(__pPersonList != null, null, "Invalid state");
+
+       String filePath;
+       if (contactIndex == -1)
+       {
+               Category* pCategory = static_cast<Category*>(__pCategoryList->GetAt(categoryIndex));
+               TryReturn(pCategory != null, null, "Unable to get a category");
+               filePath = pCategory->GetThumbnailPath();
+       }
+       else
+       {
+               Person* pPerson = static_cast<Person*>(__pPersonList->GetAt(contactIndex));
+               TryReturn(pPerson != null, null, "Unable to get a person");
+               filePath = pPerson->GetThumbnailPath();
+       }
+
+       Bitmap* pThumbnail = null;
+       ImageBuffer thumbnailImageBuffer;
+       result r = thumbnailImageBuffer.Construct(filePath);
+       if (r == E_SUCCESS)
+       {
+               pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_NONE);
+       }
+
+       if (pThumbnail != null)
+       {
+               pThumbnail->SetScalingQuality(BITMAP_SCALING_QUALITY_LOW);
+               pThumbnail->Scale(dimension);
+       }
+
+       return pThumbnail;
+}
+
+result
+GroupListPresentationModel::UpdatePersonList(int categoryIndex)
+{
+       RecordId categoryId = INVALID_RECORD_ID;
+       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;
+}
+
+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..bb6d86c
--- /dev/null
@@ -0,0 +1,274 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Social;
+
+GroupPresentationModel::GroupPresentationModel(void)
+ : __pAddressbook(null)
+ , __categoryId(INVALID_RECORD_ID)
+{
+}
+
+GroupPresentationModel::~GroupPresentationModel(void)
+{
+       delete __pAddressbook;
+}
+
+result
+GroupPresentationModel::Construct(Tizen::Social::RecordId categoryId)
+{
+       __categoryId = categoryId;
+
+       AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
+       __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
+       if (__pAddressbook == null)
+       {
+               return E_FAILURE;
+       }
+
+       return E_SUCCESS;
+}
+
+bool
+GroupPresentationModel::IsDuplicatedCategory(const Tizen::Base::String& groupName)
+{
+       bool isDuplicated = false;
+       Category* pCategory = null;
+       RecordId otherCategoryId = 0;
+
+       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;
+               }
+
+               otherCategoryId = pCategory->GetRecordId();
+
+               if (otherCategoryId != __categoryId && pCategory->GetName().Equals(groupName) == true)
+               {
+                       isDuplicated = true;
+               }
+       }
+
+CATCH:
+       pList->RemoveAll(true);
+       delete pList;
+       delete pEnum;
+
+       return isDuplicated;
+}
+
+bool
+GroupPresentationModel::IsDefaultCategory(void)
+{
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+
+       if (pCategory != null)
+       {
+               return pCategory->IsDefault();
+       }
+
+       return false;
+}
+
+result
+GroupPresentationModel::SetCategoryName(const Tizen::Base::String& groupName)
+{
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory == null)
+       {
+               return E_FAILURE;
+       }
+
+       pCategory->SetName(groupName);
+       __pAddressbook->UpdateCategory(*pCategory);
+
+       delete pCategory;
+
+       return E_SUCCESS;
+}
+
+result
+GroupPresentationModel::SetRingtone(const Tizen::Base::String& groupName, const Tizen::Base::String& ringtonePath)
+{
+       result r = E_SUCCESS;
+
+       IList* pAllCategories = null;
+       IEnumerator* pEnum = null;
+
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+
+       if (pCategory != null)
+       {
+               r = pCategory->SetRingtonePath(ringtonePath);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to set ringtone", GetErrorMessage(r));
+
+               r = __pAddressbook->UpdateCategory(*pCategory);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to update category", GetErrorMessage(r));
+       }
+       else
+       {
+               pAllCategories = __pAddressbook->GetAllCategoriesN();
+               pEnum = pAllCategories->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pCategory = static_cast<Category*>(pEnum->GetCurrent());
+                       TryCatch(pCategory != null, r = E_FAILURE, "Unable to cast category");
+
+                       if (pCategory->GetName().Equals(groupName, true) == true)
+                       {
+                               r = pCategory->SetRingtonePath(ringtonePath);
+                               TryCatch(r == E_SUCCESS, , "[%s] Unable to set ringtone", GetErrorMessage(r));
+
+                               r = __pAddressbook->UpdateCategory(*pCategory);
+                               TryCatch(r == E_SUCCESS, , "[%s] Unable to update category", GetErrorMessage(r));
+                       }
+               }
+       }
+
+CATCH:
+       delete pCategory;
+       delete pEnum;
+       delete pAllCategories;
+
+       return r;
+}
+
+result
+GroupPresentationModel::AddCategory(const Tizen::Base::String& groupName)
+{
+       result r = E_SUCCESS;
+       Category* pCategory = new (std::nothrow) Category();
+
+       pCategory->SetName(groupName);
+       r = __pAddressbook->AddCategory(*pCategory);
+
+       delete pCategory;
+
+       return r;
+}
+
+result
+GroupPresentationModel::SetThumbnailPath(const Tizen::Base::String& groupName, const Tizen::Base::String& filePath)
+{
+       result r = E_SUCCESS;
+
+       IList* pAllCategories = null;
+       IEnumerator* pEnum = null;
+
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory != null)
+       {
+               r = pCategory->SetThumbnail(filePath);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to set thumbnail path", GetErrorMessage(r));
+
+               r = __pAddressbook->UpdateCategory(*pCategory);
+               TryCatch(r == E_SUCCESS, , "[%s] Unable to update category", GetErrorMessage(r));
+       }
+       else
+       {
+               pAllCategories = __pAddressbook->GetAllCategoriesN();
+               pEnum = pAllCategories->GetEnumeratorN();
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       pCategory = static_cast<Category*>(pEnum->GetCurrent());
+                       TryCatch(pCategory != null, r = E_FAILURE, "Unable to cast category");
+
+                       if (pCategory->GetName().Equals(groupName, true) == true)
+                       {
+                               r = pCategory->SetThumbnail(filePath);
+                               TryCatch(r == E_SUCCESS, , "[%s] Unable to set thumbnail path", GetErrorMessage(r));
+
+                               r = __pAddressbook->UpdateCategory(*pCategory);
+                               TryCatch(r == E_SUCCESS, , "[%s] Unable to update category", GetErrorMessage(r));
+                       }
+               }
+       }
+
+CATCH:
+       delete pCategory;
+       delete pEnum;
+       delete pAllCategories;
+
+       return r;
+}
+
+Tizen::Base::String
+GroupPresentationModel::GetThumbnailPath(void)
+{
+       String thumbnailPath;
+
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory == null)
+       {
+               return thumbnailPath;
+       }
+
+       thumbnailPath = pCategory->GetThumbnailPath();
+       delete pCategory;
+
+       return thumbnailPath;
+}
+
+Tizen::Base::String
+GroupPresentationModel::GetCategoryName(void)
+{
+       String returnString;
+
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory != null)
+       {
+               returnString = pCategory->GetName();
+               delete pCategory;
+       }
+
+       return returnString;
+}
+
+Tizen::Base::String
+GroupPresentationModel::GetRingtone(void)
+{
+       String returnString;
+
+       Category* pCategory = __pAddressbook->GetCategoryN(__categoryId);
+       if (pCategory != null)
+       {
+               returnString = pCategory->GetRingtonePath();
+               delete pCategory;
+       }
+
+       return returnString;
+}
diff --git a/src/CtGroupSelectorForm.cpp b/src/CtGroupSelectorForm.cpp
new file mode 100644 (file)
index 0000000..b8d0e5d
--- /dev/null
@@ -0,0 +1,376 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "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_MORE = 10;
+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 = 32;
+
+static const int H_ITEM = 112;
+static const int X_MORE = 55;
+
+GroupSelectorForm::GroupSelectorForm(void)
+ : __pGroupListPresentationModel(null)
+ , __pListView(null)
+ , __pBottomLabel(null)
+ , __pContextMenuMore(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(0, false);
+       pFooter->AddActionEventListener(*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());
+
+       __pContextMenuMore = new (std::nothrow) ContextMenu();
+       __pContextMenuMore->Construct(Point(X_MORE, GetClientAreaBounds().y + GetClientAreaBounds().height), CONTEXT_MENU_STYLE_LIST);
+       __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_COM_BODY_CREATE"), IDA_MORE_CREATE_GROUP);
+       __pContextMenuMore->AddActionEventListener(*this);
+
+       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 __pContextMenuMore;
+
+       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_FOOTER_MORE:
+               {
+                       __pContextMenuMore->SetShowState(true);
+                       __pContextMenuMore->Show();
+               }
+               break;
+       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:
+               {
+                       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)
+{
+       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);
+               }
+       }
+
+       String selected(ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + L" (" + Integer::ToString(__pGroupIdList->GetCount()) + L")");
+       __pBottomLabel->SetText(selected);
+
+       __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));
+               }
+       }
+}
+
+void
+GroupSelectorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+}
+
+Tizen::Ui::Controls::ListItemBase*
+GroupSelectorForm::CreateItem(int index, int itemWidth)
+{
+       result r = E_SUCCESS;
+       String name;
+
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM),  LIST_ANNEX_STYLE_MARK);
+
+       name = __pGroupListPresentationModel->GetCategoryName(index);
+
+       r = pItem->AddElement(Rectangle(0, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), H_ITEM), index, name);
+       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();
+       pFooter->SetItemEnabled(0, true);
+       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);
+       __pBottomLabel->Invalidate(false);
+
+       return E_SUCCESS;
+}
+
+void
+GroupSelectorForm::OnContactsChanged(void)
+{
+}
+
+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);
+}
diff --git a/src/CtMainForm.cpp b/src/CtMainForm.cpp
new file mode 100644 (file)
index 0000000..c3e4c98
--- /dev/null
@@ -0,0 +1,150 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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;
+       }
+
+       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);
+
+       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))
+       {
+               AppControlProviderManager::GetInstance()->SendAppControlResult(pContactsApp->GetRequestId(), APP_CTRL_RESULT_CANCELED, null);
+       }
+
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->Terminate();
+}
+
diff --git a/src/CtMainFrame.cpp b/src/CtMainFrame.cpp
new file mode 100644 (file)
index 0000000..ea8325d
--- /dev/null
@@ -0,0 +1,56 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..58ad7a8
--- /dev/null
@@ -0,0 +1,115 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..81a3aa2
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..6b565bd
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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..ea23ddf
--- /dev/null
@@ -0,0 +1,117 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtResourceManager.h"
+#include "CtSearchListEventListener.h"
+#include "CtSearchListItem.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+
+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)
+{
+}
+
+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;
+
+       __pContactListPresentationModel->GetSearchedContactItemInfo(itemIndex, name, pThumbnail);
+
+       pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, H_ITEM), __itemAnnexStyle);
+
+       pCustomElement = new (std::nothrow) SearchListItem(name, pThumbnail, __pContactListPresentationModel->GetSearchText());
+
+       if (__itemAnnexStyle == LIST_ANNEX_STYLE_MARK)
+       {
+               searchItemWidth -= (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN);
+       }
+
+       pItem->AddElement(Rectangle(0, 0, searchItemWidth, H_ITEM), 0, *(static_cast<ICustomElement *>(pCustomElement)));
+
+       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)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
+
+bool
+SearchListEventListener::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+
+       return true;
+}
diff --git a/src/CtSearchListItem.cpp b/src/CtSearchListItem.cpp
new file mode 100644 (file)
index 0000000..5f31e9d
--- /dev/null
@@ -0,0 +1,174 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "CtSearchListItem.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+
+static const int W_THUMBNAIL_AREA = 112;
+static const int Y_THUMBNAIL = 8;
+static const int W_THUMBNAIL = 96;
+static const int H_THUMBNAIL = 96;
+static const int X_TEXT = 16;
+static const int H_TEXT = 80;
+static const int Y_NAME = 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<255, 0, 255>::Value;
+
+static const int FONT_SIZE_NAME = 44;
+
+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;
+
+       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);
+                       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);
+
+               pEnrichedText->Add(*pPreNameTextElement);
+       }
+
+       if (searchedText.GetLength() > 0)
+       {
+               pSearchedTextElement = new (std::nothrow) TextElement();
+               pSearchedTextElement->Construct(searchedText);
+               pSearchedTextElement->SetTextColor(searchedTextColor);
+
+               pEnrichedText->Add(*pSearchedTextElement);
+       }
+
+       if (postSearchedText.GetLength() > 0)
+       {
+               pPostNameTextElement = new (std::nothrow) TextElement();
+               pPostNameTextElement->Construct(postSearchedText);
+               pPostNameTextElement->SetTextColor(textColor);
+
+               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;
+
+       font.Construct(FONT_STYLE_PLAIN , FONT_SIZE_NAME);
+       canvas.SetFont(font);
+
+       enrichedTextBounds.height = H_TEXT;
+       pEnrichedText = GetDisplayEnrichedTextN(enrichedTextBounds, __name, itemStatus);
+
+       r = canvas.DrawText(Point(rect.x + X_TEXT, Y_NAME), *pEnrichedText);
+       TryCatch(r == E_SUCCESS, ret = false, "Unable to draw text.");
+
+       if (__pThumbnail != null)
+       {
+               r = canvas.DrawBitmap(Rectangle(rect.width - W_THUMBNAIL_AREA, Y_THUMBNAIL, 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..c157f88
--- /dev/null
@@ -0,0 +1,237 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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 "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 = 22;
+static const int H_TEXT_ITEM_TITLE = 54;
+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 = 100;
+static const int LIST_ITEM_COUNT = 3;
+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_EXPANDED_ITEM_BG = Color32<220, 218, 211>::Value;
+
+static const int FONT_SIZE_ITEM_TITLE = 44;
+static const int FONT_SIZE_ITEM_SELECTED = 32;
+
+static const wchar_t* SETTING_KEY_FIRST_NAME = L"http://tizen.org/setting/contacts.order.firstname";
+
+SettingsForm::SettingsForm(void)
+: __pListView(null)
+, __isExpanded(false)
+, __isFirstNameFirst(false)
+{
+}
+
+SettingsForm::~SettingsForm(void)
+{
+}
+
+void
+SettingsForm::Initialize(void)
+{
+       Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
+}
+
+result
+SettingsForm::OnInitializing(void)
+{
+       Header* pHeader = GetHeader();
+       pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_CONTACTS"));
+
+       Footer* pFooter = GetFooter();
+       pFooter->SetBackButton();
+       pFooter->AddActionEventListener(*this);
+
+       SetFormBackEventListener(this);
+
+       __pListView = new (std::nothrow) ListView();
+       __pListView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height), true, false);
+       __pListView->AddListViewItemEventListener(*this);
+       __pListView->SetItemProvider(*this);
+
+       AddControl(*__pListView);
+
+       SettingInfo::GetValue(SETTING_KEY_FIRST_NAME, __isFirstNameFirst);
+
+       return E_SUCCESS;
+}
+
+result
+SettingsForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       return r;
+}
+
+void
+SettingsForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+}
+
+void
+SettingsForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       UiApp* pApp = UiApp::GetInstance();
+       pApp->Terminate();
+}
+
+int
+SettingsForm::GetItemCount(void)
+{
+       return LIST_ITEM_COUNT;
+}
+
+Tizen::Ui::Controls::ListItemBase*
+SettingsForm::CreateItem(int index, int itemWidth)
+{
+       CustomItem* pItem = null;
+
+       if (index == 0)
+       {
+               pItem = new (std::nothrow) CustomItem();
+               pItem->Construct(Dimension(itemWidth, H_ITEM_MAIN), LIST_ANNEX_STYLE_DETAILED);
+
+               pItem->AddElement(Rectangle(X_TEXT, Y_TEXT_ITEM_TITLE, itemWidth - W_EXPAND, H_TEXT_ITEM_TITLE), 0, ResourceManager::GetString(L"IDS_PB_BODY_ORDER_OF_DISPLAY_NAME"),
+                               FONT_SIZE_ITEM_TITLE, COLOR_TEXT_ITEM_TITLE, COLOR_TEXT_ITEM_TITLE, COLOR_TEXT_ITEM_TITLE);
+
+               String selectedItem;
+               if (__isFirstNameFirst == true)
+               {
+                       selectedItem = ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME_FIRST");
+               }
+               else
+               {
+                       selectedItem = ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME_FIRST_ABB");
+               }
+               pItem->AddElement(Rectangle(X_TEXT, Y_TEXT_ITEM_SELECTED, itemWidth - W_EXPAND, H_TEXT_ITEM_SELECTED), 1, selectedItem,
+                               FONT_SIZE_ITEM_SELECTED, COLOR_TEXT_ITEM_SELECTED, COLOR_TEXT_ITEM_SELECTED, COLOR_TEXT_ITEM_SELECTED);
+
+               return pItem;
+       }
+
+       String nameOrder;
+       int itemHeight = H_ITEM_SUB;
+       if (__isExpanded == false)
+       {
+               itemHeight = 0;
+       }
+
+       if (index == INDEX_FIRST_NAME)
+       {
+               nameOrder = ResourceManager::GetString(L"IDS_PB_BODY_FIRST_NAME_FIRST");
+       }
+       else if (index == INDEX_LAST_NAME)
+       {
+               nameOrder = ResourceManager::GetString(L"IDS_PB_BODY_LAST_NAME_FIRST_ABB");
+       }
+
+       pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(Dimension(itemWidth, itemHeight), LIST_ANNEX_STYLE_RADIO);
+       pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, COLOR_EXPANDED_ITEM_BG);
+
+       pItem->AddElement(Rectangle(0, Y_SUB_TEXT, itemWidth, H_TEXT_ITEM_TITLE), 0, nameOrder,
+                       FONT_SIZE_ITEM_TITLE, COLOR_TEXT_ITEM_TITLE, COLOR_TEXT_ITEM_TITLE, COLOR_TEXT_ITEM_TITLE);
+
+       return pItem;
+}
+
+bool
+SettingsForm::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+       return true;
+}
+
+void
+SettingsForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
+{
+       if (index == 0)
+       {
+               if (status == LIST_ITEM_STATUS_SELECTED || status == LIST_ITEM_STATUS_MORE)
+               {
+                       __isExpanded ? __isExpanded = false : __isExpanded = true;
+               }
+       }
+       else if (index == INDEX_FIRST_NAME)
+       {
+               if (status == LIST_ITEM_STATUS_CHECKED)
+               {
+                       __isFirstNameFirst = true;
+                       SettingInfo::SetValue(SETTING_KEY_FIRST_NAME, true);
+               }
+       }
+       else if (index == INDEX_LAST_NAME)
+       {
+               if (status == LIST_ITEM_STATUS_CHECKED)
+               {
+                       __isFirstNameFirst = false;
+                       SettingInfo::SetValue(SETTING_KEY_FIRST_NAME, false);
+               }
+       }
+
+       __pListView->UpdateList();
+
+       if (__isFirstNameFirst == true)
+       {
+               __pListView->SetItemChecked(INDEX_FIRST_NAME, true);
+               __pListView->SetItemChecked(INDEX_LAST_NAME, false);
+       }
+       else
+       {
+               __pListView->SetItemChecked(INDEX_FIRST_NAME, false);
+               __pListView->SetItemChecked(INDEX_LAST_NAME, true);
+       }
+
+       __pListView->Invalidate(true);
+}
+
+void
+SettingsForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
+{
+}
+
+void
+SettingsForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status)
+{
+}
diff --git a/src/CtTypes.cpp b/src/CtTypes.cpp
new file mode 100644 (file)
index 0000000..b63b47f
--- /dev/null
@@ -0,0 +1,96 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://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/createcontent";
+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* 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_CONTACT_ID = L"contactId";
+
+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.phone";
+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* 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* CHARACTER_SPACE = L" ";
+const wchar_t* DELIMITER = L":";
+const wchar_t* DELIMITER_SEMICOLON = 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"coworkers";
+
+const int ID_GROUP_CONTACT_NOT_ASSIGNED = 0xFFFFFFFF;
+const int ID_GROUP_CONTACT_SELECT_MESSAGE = 0xFFFFFFFE;
+const int ID_GROUP_CONTACT_SELECT_EMAIL = 0xFFFFFFFD;
+