summaryrefslogtreecommitdiff
path: root/lib-phone
diff options
context:
space:
mode:
authorjk7744.park <jk7744.park@samsung.com>2015-10-24 15:42:16 +0900
committerjk7744.park <jk7744.park@samsung.com>2015-10-24 15:42:16 +0900
commit2aa01f1ea98ff42e4bfef6da401eb19383f2f4ce (patch)
tree7eb4f13beea5ba0aae81b66d48630f87848a6435 /lib-phone
parent331d162934ac346a137b6a3a17074d948a3c6c41 (diff)
downloadphone-contacts-2aa01f1ea98ff42e4bfef6da401eb19383f2f4ce.tar.gz
phone-contacts-2aa01f1ea98ff42e4bfef6da401eb19383f2f4ce.tar.bz2
phone-contacts-2aa01f1ea98ff42e4bfef6da401eb19383f2f4ce.zip
Diffstat (limited to 'lib-phone')
-rwxr-xr-xlib-phone/CMakeLists.txt6
-rw-r--r--lib-phone/ph-common/.cproject519
-rw-r--r--lib-phone/ph-common/.project43
-rw-r--r--lib-phone/ph-common/.tproject11
-rwxr-xr-xlib-phone/ph-common/CMakeLists.txt18
-rwxr-xr-xlib-phone/ph-common/inc/PhCommon.h78
-rw-r--r--lib-phone/ph-common/inc/PhDbListener.h28
-rwxr-xr-xlib-phone/ph-common/inc/PhPath.h57
-rw-r--r--lib-phone/ph-common/inc/PhStrings.h432
-rwxr-xr-xlib-phone/ph-common/src/PhCommon.cpp273
-rw-r--r--lib-phone/ph-dialer/.cproject594
-rw-r--r--lib-phone/ph-dialer/.project43
-rw-r--r--lib-phone/ph-dialer/.tproject11
-rwxr-xr-xlib-phone/ph-dialer/CMakeLists.txt26
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerAddToContactsPopup.h42
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerEntry.h67
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerKey.h68
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerResultListPopup.h49
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerSearchController.h84
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerSpeeddialPopup.h39
-rw-r--r--lib-phone/ph-dialer/inc/PhDialerView.h89
-rw-r--r--lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumber.h82
-rw-r--r--lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberTypes.h39
-rw-r--r--lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberUtils.h70
-rw-r--r--lib-phone/ph-dialer/inc/predictive-number/PhDialerSearchInfo.h117
-rw-r--r--lib-phone/ph-dialer/res/edje/CMakeLists.txt30
-rw-r--r--lib-phone/ph-dialer/res/edje/PhDialerLayout.h83
-rw-r--r--lib-phone/ph-dialer/res/edje/PhDialerLayoutColors.h100
-rw-r--r--lib-phone/ph-dialer/res/edje/PhDialerLayoutMetrics.h78
-rw-r--r--lib-phone/ph-dialer/res/edje/ph-dialer-keypad.edc153
-rw-r--r--lib-phone/ph-dialer/res/edje/ph-dialer-layout.edc118
-rw-r--r--lib-phone/ph-dialer/res/edje/ph-dialer-predictive.edc388
-rw-r--r--lib-phone/ph-dialer/res/images/contacts_caller_id_default_02.pngbin0 -> 2782 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/contacts_caller_id_default_bg_02.pngbin0 -> 2400 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/contacts_caller_id_default_masking_02.pngbin0 -> 2400 bytes
-rwxr-xr-xlib-phone/ph-dialer/res/images/default_contact.pngbin0 -> 2162 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_01.pngbin0 -> 1627 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_02.pngbin0 -> 1347 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_03.pngbin0 -> 1356 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_04.pngbin0 -> 1385 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_05.pngbin0 -> 1620 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_06.pngbin0 -> 1766 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_07.pngbin0 -> 1452 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_08.pngbin0 -> 1751 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_english_10.pngbin0 -> 1152 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_ic_back.pngbin0 -> 4017 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_ic_call.pngbin0 -> 2172 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_00.pngbin0 -> 1719 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_01.pngbin0 -> 1267 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_02.pngbin0 -> 1602 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_03.pngbin0 -> 1587 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_04.pngbin0 -> 1449 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_05.pngbin0 -> 1606 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_06.pngbin0 -> 1755 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_07.pngbin0 -> 1419 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_08.pngbin0 -> 1831 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_09.pngbin0 -> 1760 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_asterisk.pngbin0 -> 1573 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_number_sharp.pngbin0 -> 1507 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_predictive_arrow.pngbin0 -> 1340 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_speed_dial_add.pngbin0 -> 1225 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_speed_dial_ic.pngbin0 -> 1230 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/keypad_speed_dial_ic_bg.#.pngbin0 -> 1667 bytes
-rw-r--r--lib-phone/ph-dialer/res/images/predictive_results_mask.pngbin0 -> 3219 bytes
-rw-r--r--lib-phone/ph-dialer/src/PhDialerAddToContactsPopup.cpp98
-rw-r--r--lib-phone/ph-dialer/src/PhDialerEntry.cpp89
-rw-r--r--lib-phone/ph-dialer/src/PhDialerKey.cpp108
-rw-r--r--lib-phone/ph-dialer/src/PhDialerResultListPopup.cpp126
-rw-r--r--lib-phone/ph-dialer/src/PhDialerSearchController.cpp210
-rw-r--r--lib-phone/ph-dialer/src/PhDialerSpeeddialPopup.cpp81
-rw-r--r--lib-phone/ph-dialer/src/PhDialerView.cpp392
-rw-r--r--lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumber.cpp223
-rw-r--r--lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumberUtils.cpp219
-rw-r--r--lib-phone/ph-dialer/src/predictive-number/PhDialerSearchInfo.cpp157
-rw-r--r--lib-phone/ph-loglist/.cproject569
-rw-r--r--lib-phone/ph-loglist/.project43
-rw-r--r--lib-phone/ph-loglist/.tproject11
-rwxr-xr-xlib-phone/ph-loglist/CMakeLists.txt26
-rwxr-xr-xlib-phone/ph-loglist/icu/PhLogIcu.cpp319
-rwxr-xr-xlib-phone/ph-loglist/icu/PhLogIcu.h58
-rwxr-xr-xlib-phone/ph-loglist/inc/PhLogDbMgr.h99
-rwxr-xr-xlib-phone/ph-loglist/inc/PhLogGenlistHelper.h109
-rwxr-xr-xlib-phone/ph-loglist/inc/PhLogListView.h64
-rwxr-xr-xlib-phone/ph-loglist/inc/PhLogMainListCheckView.h96
-rwxr-xr-xlib-phone/ph-loglist/inc/PhLogMainListView.h99
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDbMgr.cpp663
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDefines.h104
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.cpp128
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.h52
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDetailCheckView.cpp541
-rw-r--r--lib-phone/ph-loglist/src/PhLogDetailCheckView.h75
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDetailContactInfoControl.cpp111
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDetailContactInfoControl.h59
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogDetailView.cpp364
-rw-r--r--lib-phone/ph-loglist/src/PhLogDetailView.h71
-rw-r--r--lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.cpp84
-rw-r--r--lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.h51
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogGenlistHelper.cpp352
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogListView.cpp155
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogMainListCheckView.cpp745
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogMainListView.cpp834
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogUtil.cpp607
-rwxr-xr-xlib-phone/ph-loglist/src/PhLogUtil.h61
-rw-r--r--lib-phone/ph-speeddial/.cproject594
-rw-r--r--lib-phone/ph-speeddial/.project43
-rw-r--r--lib-phone/ph-speeddial/.tproject11
-rwxr-xr-xlib-phone/ph-speeddial/CMakeLists.txt23
-rw-r--r--lib-phone/ph-speeddial/inc/PhSpeedDialItem.h60
-rw-r--r--lib-phone/ph-speeddial/inc/PhSpeedDialView.h43
-rw-r--r--lib-phone/ph-speeddial/res/edje/CMakeLists.txt12
-rw-r--r--lib-phone/ph-speeddial/res/edje/PhSpeedDialLayout.h36
-rw-r--r--lib-phone/ph-speeddial/res/edje/PhSpeedDialLayoutMetrics.h43
-rw-r--r--lib-phone/ph-speeddial/res/edje/ph-speeddial-layout.edc235
-rw-r--r--lib-phone/ph-speeddial/res/images/keypad_speed_dial_add.pngbin0 -> 1225 bytes
-rw-r--r--lib-phone/ph-speeddial/res/images/keypad_speed_dial_bg.pngbin0 -> 4203 bytes
-rw-r--r--lib-phone/ph-speeddial/res/images/keypad_speed_dial_del.pngbin0 -> 2993 bytes
-rw-r--r--lib-phone/ph-speeddial/src/PhSpeedDialItem.cpp174
-rw-r--r--lib-phone/ph-speeddial/src/PhSpeedDialView.cpp108
118 files changed, 13470 insertions, 0 deletions
diff --git a/lib-phone/CMakeLists.txt b/lib-phone/CMakeLists.txt
new file mode 100755
index 0000000..d33384f
--- /dev/null
+++ b/lib-phone/CMakeLists.txt
@@ -0,0 +1,6 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+ADD_SUBDIRECTORY(ph-common)
+ADD_SUBDIRECTORY(ph-dialer)
+ADD_SUBDIRECTORY(ph-loglist)
+ADD_SUBDIRECTORY(ph-speeddial)
diff --git a/lib-phone/ph-common/.cproject b/lib-phone/ph-common/.cproject
new file mode 100644
index 0000000..15a551c
--- /dev/null
+++ b/lib-phone/ph-common/.cproject
@@ -0,0 +1,519 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.debug.110410643">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.110410643" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-common" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.110410643" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.so.debug">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.110410643." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug.1871207700" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1523697046" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder autoBuildTarget="all" buildPath="${workspace_loc:/ph-common}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.319291132" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.242438497" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.588133801" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.355409593" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.545752178" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1555916959" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.446128825" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.60667326" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.372393810" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1362030673" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc/app-assist}&quot;"/>
+ <listOptionValue builtIn="false" value="../../../app-assist-efl/inc"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1334627285" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.preprocessor.def.1729376624" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ <listOptionValue builtIn="false" value="TIZEN_DEBUG_ENABLE"/>
+ <listOptionValue builtIn="false" value="_SDK_BUILD"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.other.other.1157581696" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++0x" valueType="string"/>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.166734976"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1209813936" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.333419547" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1390462842" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.1961349290" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.1142121979" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.1172464776" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.518631842" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.2073375329" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.75876670" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.1230132729" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.c.compiler.option.preprocessor.def.symbols.1405813005" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.714569740"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1680583043" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.161583984" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.150861271" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.1936471852" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1961074596" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1839067735" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="../../../app-assist-efl/Debug"/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.130262527" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" srcPrefixMapping="" srcRootPath="" value="app-assist-efl"/>
+ <listOptionValue builtIn="false" srcPrefixMapping="" srcRootPath="" value="common"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.346061771" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1414608648" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1651997926" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.945112215" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.550161325" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.156796759" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1947663034" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.1769918872" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.732507952" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.release.485995869">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.release.485995869" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-common" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.release.485995869" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.so.release">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.release.485995869." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.release.16959222" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.release">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.179360142" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder buildPath="${workspace_loc:/ph-common}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1651135625" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1264660674" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.320037124" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.165082582" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.813575973" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.642426593" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.137753700" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.375243157" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.160267345" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1453121176" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1937508833" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.921623300"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.521869643" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1360440380" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.2047451182" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.685415700" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.2075053766" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.1061023312" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1504250693" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1015521082" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1904082481" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.1579962873" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.1921191624"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1712790233" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1186164243" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.626301945" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.1845140570" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.462295479" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1461135042" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/Release}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/Release}&quot;"/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.2081253130" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="app-assist-efl"/>
+ <listOptionValue builtIn="false" value="common"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.504505289" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.490685510" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1833131107" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.41136201" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1544846794" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.1327329465" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1587469156" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.685668383" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.1369876982" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="ph-common.org.tizen.nativecore.target.sbi.gcc45.so.945715298" name="Tizen Core Shared Library" projectType="org.tizen.nativecore.target.sbi.gcc45.so"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.release.485995869">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.debug.110410643">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="org.tizen.tizen.nativeapp.projectInfo" version="1.0.0"/>
+ <storageModule moduleId="refreshScope" versionNumber="2">
+ <configuration configurationName="Release">
+ <resource resourceType="PROJECT" workspacePath="/ph-common"/>
+ </configuration>
+ <configuration configurationName="Debug">
+ <resource resourceType="PROJECT" workspacePath="/ph-common"/>
+ </configuration>
+ </storageModule>
+</cproject>
diff --git a/lib-phone/ph-common/.project b/lib-phone/ph-common/.project
new file mode 100644
index 0000000..2bb9311
--- /dev/null
+++ b/lib-phone/ph-common/.project
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ph-common</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.nativecore.apichecker.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ <nature>org.tizen.nativecore.apichecker.core.tizenCppNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1413282642078</id>
+ <name></name>
+ <type>26</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/lib-phone/ph-common/.tproject b/lib-phone/ph-common/.tproject
new file mode 100644
index 0000000..f1cc1fd
--- /dev/null
+++ b/lib-phone/ph-common/.tproject
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+ <platforms>
+ <platform>
+ <name>mobile-2.3</name>
+ </platform>
+ </platforms>
+ <package>
+ <blacklist/>
+ </package>
+</tproject>
diff --git a/lib-phone/ph-common/CMakeLists.txt b/lib-phone/ph-common/CMakeLists.txt
new file mode 100755
index 0000000..bda54e2
--- /dev/null
+++ b/lib-phone/ph-common/CMakeLists.txt
@@ -0,0 +1,18 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ph-common CXX)
+
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/app-assist-efl/inc
+ ${CMAKE_SOURCE_DIR}/lib-common/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc
+)
+
+FILE(GLOB SRCS "src/*.cpp")
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${TIZEN_PKGS_LDFLAGS}
+ "app-assist-efl"
+ "contacts-common"
+)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_APP_LIB_DIR})
diff --git a/lib-phone/ph-common/inc/PhCommon.h b/lib-phone/ph-common/inc/PhCommon.h
new file mode 100755
index 0000000..dc27072
--- /dev/null
+++ b/lib-phone/ph-common/inc/PhCommon.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_COMMON_H_
+#define _PH_COMMON_H_
+
+#include "WDefine.h"
+#include <Elementary.h>
+#include <string>
+#include <app.h>
+
+#define STD_LIST_FREE(target) \
+ if(target)\
+ {\
+ for (auto iter = target->begin(); iter != target->end(); ++iter)\
+ {\
+ delete *iter;\
+ }\
+ delete target;\
+ target = NULL; \
+ }
+
+class WAPP_ASSIST_EXPORT PhCommon
+{
+public:
+ PhCommon();
+ virtual ~PhCommon();
+
+public:
+ static Evas_Object* createImage(Evas_Object* parent, const char* edj, const char* imagePath, const char* colorCode);
+ static Evas_Object* createLayout(Evas_Object* parent, const char* edj, const char* layoutName);
+ static Evas_Object* createButton(Evas_Object* parent, const char* buttonStyle, const char* buttonText, Evas_Smart_Cb clickedCb, void* userData );
+
+ typedef enum{
+ NORMAL_CALL = 0,
+ EMERGENCY_NUMBER,
+ EMERGENCY_CONTACTS,
+ }emergencyType;
+
+ static void launchCallSetting(Evas_Object *win, Evas_Object *nf);
+
+ /**
+ * @brief Add speed dial number
+ * @param[in] speedNumber Number on the dialer
+ * @param[in] numberId ID of number to assign to @a speedNumber
+ * @return true on success, false if number with this @a numberId already exists.
+ */
+ static bool addSpeedDialNumber(int speedNumber, int numberId);
+
+ static void terminateChildAppControl(void);
+
+ static void adjustMatchedLenForName(const char* displayName, const char* keyword, int* index, int* len);
+ static int getSavedNumberStartIndex(const char* source, const char* keyword);
+ static void adjustMatchedLenForNum(const char* number, const char* keyword, int* index, int* len);
+ static std::string convert2MarkupString(const char* source);
+
+private:
+ static int __checkUtf8(char c);
+ static bool __isDash(char ch);
+ static void image_mask_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+};
+
+#endif /* _PH_COMMON_H_ */
+
diff --git a/lib-phone/ph-common/inc/PhDbListener.h b/lib-phone/ph-common/inc/PhDbListener.h
new file mode 100644
index 0000000..96595ae
--- /dev/null
+++ b/lib-phone/ph-common/inc/PhDbListener.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DB_LISTENER_H_
+#define _PH_DB_LISTENER_H_
+
+class PhDbListener
+{
+public:
+ virtual ~PhDbListener(){};
+ virtual void onDbChanged() = 0;
+};
+
+#endif //_PH_DB_LISTENER_H_
diff --git a/lib-phone/ph-common/inc/PhPath.h b/lib-phone/ph-common/inc/PhPath.h
new file mode 100755
index 0000000..d5e772b
--- /dev/null
+++ b/lib-phone/ph-common/inc/PhPath.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __PH_PATH_H_
+#define __PH_PATH_H_
+
+#define LOG_LIST_EDJ "phone/ph-loglist.edj"
+#define SPEED_DIAL_EDJ "phone/ph-speeddial.edj"
+#define DIALER_EDJ "phone/ph-dialer.edj"
+
+#if !defined(PHIMGDIR)
+# define PHIMGDIR "/usr/ug/res/images/ug-phone/contacts/"
+#endif
+
+//default Thumbnail
+#define PH_LOG_ICON_DETAIL_THUMBNAIL_MASKING_IMAGE "logs_default_masking_134.png"
+#define PH_LOG_ICON_DETAIL_THUMBNAIL_MASKING PHIMGDIR"" PH_LOG_ICON_DETAIL_THUMBNAIL_MASKING_IMAGE
+#define PH_LOG_ICON_DETAIL_THUMBNAIL "contacts_default_134.png"
+
+#define PH_LOG_ICON_LIST_THUMBNAIL_MASKING_IMAGE "logs_id_default_bg_74.png"
+#define PH_LOG_ICON_LIST_THUMBNAIL_MASKING PHIMGDIR"" PH_LOG_ICON_LIST_THUMBNAIL_MASKING_IMAGE
+#define PH_LOG_ICON_LIST_THUMBNAIL "contacts_default_74.png"
+
+// Log info icon
+#define PH_LOG_ICON_INFO_CONTAINER "logs_icon_info_bg.png"
+#define PH_LOG_ICON_INFO "logs_icon_info.png"
+
+// call state icon
+#define PH_LOG_ICON_CONTAINER "logs_icon_badge_container_02.png"
+#define PH_LOG_ICON_INCOMING "logs_icon_in.png"
+#define PH_LOG_ICON_OUTGOING "logs_icon_out.png"
+#define PH_LOG_ICON_MISSED "logs_icon_missed.png"
+#define PH_LOG_ICON_REJECTED "logs_icon_reject.png"
+#define PH_LOG_ICON_AUTO_REJECTED "logs_icon_reject_auto.png"
+
+//log detail button image
+#define PH_LOG_ICON_DETAIL_MESSAGE "logs_icon_call_message.PNG"
+#define PH_LOG_ICON_DETAIL_VOICE_CALL "logs_icon_call.PNG"
+#define PH_LOG_ICON_DETAIL_VIDEO_CALL "logs_icon_call_02.png"
+
+#define PH_LOG_ICON_DETAIL_BACK_ICON "logs_details_back_ic.png"
+
+#endif
diff --git a/lib-phone/ph-common/inc/PhStrings.h b/lib-phone/ph-common/inc/PhStrings.h
new file mode 100644
index 0000000..a3038b6
--- /dev/null
+++ b/lib-phone/ph-common/inc/PhStrings.h
@@ -0,0 +1,432 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __PH_STRINGS_H_ //auto-generated on 2014. 12. 05. (금) 17:45:57 KST
+#define __PH_STRINGS_H_
+
+
+#define STRING_PACKAGE "contacts"
+#define PST_(did) dgettext("sys_string", did)
+#define PAT_(did) dgettext(STRING_PACKAGE, did)
+#define PXT_(did) did
+
+
+#define PH_PB_SK_CREATE_ABB "IDS_PB_SK_CREATE_ABB"
+#define PH_MF_POP_INPUT_TEXT "IDS_MF_POP_INPUT_TEXT"
+#define PH_PB_BODY_PHOTO "IDS_PB_BODY_PHOTO"
+#define PH_PB_TAB_CONTACTS "IDS_PB_TAB_CONTACTS"
+#define PH_PB_BODY_ADD_ACCOUNT "IDS_PB_BODY_ADD_ACCOUNT"
+#define PH_PB_BODY_OTHER_EMAILS "IDS_PB_BODY_OTHER_EMAILS"
+#define PH_PB_MBODY_SCANNING_DEVICES_ING "IDS_PB_MBODY_SCANNING_DEVICES_ING"
+#define PH_PB_POP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED "IDS_PB_POP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+#define PH_PB_BODY_AB_M_BLOOD "IDS_PB_BODY_AB_M_BLOOD"
+#define PH_PB_BODY_IMAGE "IDS_PB_BODY_IMAGE"
+#define PH_PB_POP_ADDING_ING "IDS_PB_POP_ADDING_ING"
+#define PH_PB_POP_REMOVING "IDS_PB_POP_REMOVING"
+#define PH_PB_BODY_NO_GROUPS "IDS_PB_BODY_NO_GROUPS"
+#define PH_PB_HEADER_PHONE_M_CALL "IDS_PB_HEADER_PHONE_M_CALL"
+#define PH_COM_BODY_PRIVATE_NUMBER "IDS_COM_BODY_PRIVATE_NUMBER"
+#define PH_CALL_BODY_PAYPHONE "IDS_CALL_BODY_PAYPHONE"
+#define PH_COM_POP_CONNECTION_PROBLEM_OR_INVALID_MMI_CODE "IDS_COM_POP_CONNECTION_PROBLEM_OR_INVALID_MMI_CODE"
+#define PH_PB_BODY_BUTTON_FOR_EXPANDING_THE_LIST_T_TTS "IDS_PB_BODY_BUTTON_FOR_EXPANDING_THE_LIST_T_TTS"
+#define PH_PB_BUTTON_TRY_AGAIN "IDS_PB_BUTTON_TRY_AGAIN"
+#define PH_PB_HEADER_SELECT_SIM_CARD_TO_CALL "IDS_PB_HEADER_SELECT_SIM_CARD_TO_CALL"
+#define PH_PB_BODY_GALLERY "IDS_PB_BODY_GALLERY"
+#define PH_PB_HEADER_CONTACTS_M_APPLICATION "IDS_PB_HEADER_CONTACTS_M_APPLICATION"
+#define PH_PB_OPT_ACCOUNT "IDS_PB_OPT_ACCOUNT"
+#define PH_PB_HEADER_DELETE_ITEM "IDS_PB_HEADER_DELETE_ITEM"
+#define PH_PB_POP_MOVE_COMPLETED "IDS_PB_POP_MOVE_COMPLETED"
+#define PH_PB_BODY_MOVING_ING "IDS_PB_BODY_MOVING_ING"
+#define PH_ST_POP_PUK2_VERIFIED "IDS_ST_POP_PUK2_VERIFIED"
+#define PH_ST_POP_PUK1_VERIFIED "IDS_ST_POP_PUK1_VERIFIED"
+#define PH_ST_POP_PIN_UNBLOCKED "IDS_ST_POP_PIN_UNBLOCKED"
+#define PH_ST_POP_PIN_CHANGED "IDS_ST_POP_PIN_CHANGED"
+#define PH_ST_POP_PIN2_UNBLOCKED "IDS_ST_POP_PIN2_UNBLOCKED"
+#define PH_ST_POP_PIN2_CHANGED "IDS_ST_POP_PIN2_CHANGED"
+#define PH_ST_POP_PIN2_BLOCKED "IDS_ST_POP_PIN2_BLOCKED"
+#define PH_ST_POP_PIN1_CHANGED "IDS_ST_POP_PIN1_CHANGED"
+#define PH_ST_POP_PIN1_BLOCKED "IDS_ST_POP_PIN1_BLOCKED"
+#define PH_ST_POP_INCORRECT_PUK2_PD_ATTEMPTS_LEFT "IDS_ST_POP_INCORRECT_PUK2_PD_ATTEMPTS_LEFT"
+#define PH_ST_POP_INCORRECT_PUK2_CODE "IDS_ST_POP_INCORRECT_PUK2_CODE"
+#define PH_ST_POP_INCORRECT_PUK1_PD_ATTEMPTS_LEFT "IDS_ST_POP_INCORRECT_PUK1_PD_ATTEMPTS_LEFT"
+#define PH_ST_POP_INCORRECT_PUK1_CODE "IDS_ST_POP_INCORRECT_PUK1_CODE"
+#define PH_ST_POP_INCORRECT_PIN2 "IDS_ST_POP_INCORRECT_PIN2"
+#define PH_ST_POP_INCORRECT_PIN1 "IDS_ST_POP_INCORRECT_PIN1"
+#define PH_ST_BODY_NEW_PIN2_AND_CONFIRM_PIN2_DO_NOT_MATCH "IDS_ST_BODY_NEW_PIN2_AND_CONFIRM_PIN2_DO_NOT_MATCH"
+#define PH_LCKSCN_HEADER_INCORRECT_PIN_ABB "IDS_LCKSCN_HEADER_INCORRECT_PIN_ABB"
+#define PH_PB_HEADER_UNABLE_TO_ADD "IDS_PB_HEADER_UNABLE_TO_ADD"
+#define PH_PB_HEADER_UNABLE_TO_ADD_ABB "IDS_PB_HEADER_UNABLE_TO_ADD_ABB"
+#define PH_PB_BODY_AUTO_RECOMMENDATIONS_CAN_EXTRACT_THE_HIGHLIGHTS_FROM_SOUND_FILES "IDS_PB_BODY_AUTO_RECOMMENDATIONS_CAN_EXTRACT_THE_HIGHLIGHTS_FROM_SOUND_FILES"
+#define PH_IDLE_BODY_SIM_BLOCKED "IDS_IDLE_BODY_SIM_BLOCKED"
+#define PH_ST_POP_PIN_BLOCKED "IDS_ST_POP_PIN_BLOCKED"
+#define PH_KPD_ITAB3_KEYPAD "IDS_KPD_ITAB3_KEYPAD"
+#define PH_KPD_OPT_ADD_2_SECOND_PAUSE_ABB "IDS_KPD_OPT_ADD_2_SECOND_PAUSE_ABB"
+#define PH_KPD_OPT_ADD_WAIT_ABB "IDS_KPD_OPT_ADD_WAIT_ABB"
+#define PH_KPD_OPT_SPEED_DIAL_SETTINGS_ABB2 "IDS_KPD_OPT_SPEED_DIAL_SETTINGS_ABB2"
+#define PH_KPD_OPT_CALL_SETTINGS_ABB "IDS_KPD_OPT_CALL_SETTINGS_ABB"
+#define PH_KPD_HEADER_ASSIGN_AS_SPEED_DIAL_NUMBER_ABB "IDS_KPD_HEADER_ASSIGN_AS_SPEED_DIAL_NUMBER_ABB"
+#define PH_KPD_BUTTON_CANCEL_ABB "IDS_KPD_BUTTON_CANCEL_ABB"
+#define PH_KPD_TPOP_SPEED_DIAL_NUMBER_ASSIGNED "IDS_KPD_TPOP_SPEED_DIAL_NUMBER_ASSIGNED"
+#define PH_KPD_BUTTON_ADD_TO_CONTACTS_ABB2 "IDS_KPD_BUTTON_ADD_TO_CONTACTS_ABB2"
+#define PH_KPD_OPT_CREATE_CONTACT_ABB2 "IDS_KPD_OPT_CREATE_CONTACT_ABB2"
+#define PH_KPD_OPT_VOICEMAIL_ABB "IDS_KPD_OPT_VOICEMAIL_ABB"
+#define PH_KPD_TPOP_SPEED_DIAL_NUMBER_PD_REMOVED "IDS_KPD_TPOP_SPEED_DIAL_NUMBER_PD_REMOVED"
+#define PH_KPD_HEADER_EMERGENCY_CALL_ABB2 "IDS_KPD_HEADER_EMERGENCY_CALL_ABB2"
+#define PH_KPD_OPT_REMOVE "IDS_KPD_OPT_REMOVE"
+#define PH_KPD_HEADER_UNABLE_TO_CONNECT_TO_NETWORK_ABB "IDS_KPD_HEADER_UNABLE_TO_CONNECT_TO_NETWORK_ABB"
+#define PH_PB_BODY_UPDATING_CONTACT_LIST_ING "IDS_PB_BODY_UPDATING_CONTACT_LIST_ING"
+#define PH_PB_HEADER_MAINLIST "IDS_PB_HEADER_MAINLIST"
+#define PH_MUSIC_POP_INVALID_CHARACTER "IDS_MUSIC_POP_INVALID_CHARACTER"
+#define PH_PB_OPT_UPDATE_SERVICE_PROVIDER_INFO "IDS_PB_OPT_UPDATE_SERVICE_PROVIDER_INFO"
+#define PH_PB_BODY_THE_SERVICE_PROVIDER_INFORMATION_OF_THE_SELECTED_CONTACTS_WILL_BE_UPDATED_MSG "IDS_PB_BODY_THE_SERVICE_PROVIDER_INFORMATION_OF_THE_SELECTED_CONTACTS_WILL_BE_UPDATED_MSG"
+#define PH_PB_HEADER_SERVICE_PROVIDER "IDS_PB_HEADER_SERVICE_PROVIDER"
+#define PH_PB_POP_SOME_OR_ALL_CONTACTS_MAY_NOT_HAVE_BEEN_UPDATED "IDS_PB_POP_SOME_OR_ALL_CONTACTS_MAY_NOT_HAVE_BEEN_UPDATED"
+#define PH_PB_POP_UPDATING_SERVICE_PROVIDER_INFO_ING "IDS_PB_POP_UPDATING_SERVICE_PROVIDER_INFO_ING"
+#define PH_PB_POP_1_PHONE_NUMBER_HAS_BEEN_UPDATED "IDS_PB_POP_1_PHONE_NUMBER_HAS_BEEN_UPDATED"
+#define PH_PB_POP_PD_PHONE_NUMBERS_HAVE_BEEN_UPDATED "IDS_PB_POP_PD_PHONE_NUMBERS_HAVE_BEEN_UPDATED"
+#define PH_PB_BODY_CHAMADA_CERTA_APPLICATION_IDENTIFIES_THE_SERVICE_PROVIDER_OF_YOUR_CONTACTS_AND_CHOOSES_A_SIM_CARD_OF_THE_SAME_SERVICE_PROVIDER_TO_MAKE_A_CALL_MSG_LAX "IDS_PB_BODY_CHAMADA_CERTA_APPLICATION_IDENTIFIES_THE_SERVICE_PROVIDER_OF_YOUR_CONTACTS_AND_CHOOSES_A_SIM_CARD_OF_THE_SAME_SERVICE_PROVIDER_TO_MAKE_A_CALL_MSG_LAX"
+#define PH_PB_POP_THE_CHAMADA_CERTA_FEATURE_CAN_BE_USED_TO_IDENTIFY_YOUR_CONTACTS_SERVICE_PROVIDERS_AND_DISPLAY_THEM_IN_YOUR_CONTACT_LIST_MSG "IDS_PB_POP_THE_CHAMADA_CERTA_FEATURE_CAN_BE_USED_TO_IDENTIFY_YOUR_CONTACTS_SERVICE_PROVIDERS_AND_DISPLAY_THEM_IN_YOUR_CONTACT_LIST_MSG"
+#define PH_PB_BODY_DISCARD_CHANGES "IDS_PB_BODY_DISCARD_CHANGES"
+#define PH_PB_POP_ALREADY_EXISTS_LC "IDS_PB_POP_ALREADY_EXISTS_LC"
+#define PH_PB_BODY_SELECTED_MADJ "IDS_PB_BODY_SELECTED_MADJ"
+#define PH_PB_HEADER_SELECT "IDS_PB_HEADER_SELECT"
+#define PH_ST_BODY_SET_DATE "IDS_ST_BODY_SET_DATE"
+#define PH_PB_NPBODY_SEARCH "IDS_PB_NPBODY_SEARCH"
+#define PH_PB_HEADER_FAVOURITES "IDS_PB_HEADER_FAVOURITES"
+#define PH_PB_HEADER_ME "IDS_PB_HEADER_ME"
+#define PH_PB_OPT_CREATE "IDS_PB_OPT_CREATE"
+#define PH_PB_OPT_SHARE "IDS_PB_OPT_SHARE"
+#define PH_PB_OPT_MANAGE_FAVOURITES_ABB "IDS_PB_OPT_MANAGE_FAVOURITES_ABB"
+#define PH_PB_OPT_SETTINGS "IDS_PB_OPT_SETTINGS"
+#define PH_LOGS_SBODY_UNSAVED_M_STATUS "IDS_LOGS_SBODY_UNSAVED_M_STATUS"
+#define PH_LOGS_SBODY_SAVED_M_STATUS "IDS_LOGS_SBODY_SAVED_M_STATUS"
+#define PH_LOGS_MBODY_UNKNOWN "IDS_LOGS_MBODY_UNKNOWN"
+#define PH_LOGS_MBODY_UNKNOWN_NUMBER_ABB "IDS_LOGS_MBODY_UNKNOWN_NUMBER_ABB"
+#define PH_LOGS_NPBODY_MISSED_CALLS_ABB "IDS_LOGS_NPBODY_MISSED_CALLS_ABB"
+#define PH_LOGS_BODY_VOICE_CALLS_ABB "IDS_LOGS_BODY_VOICE_CALLS_ABB"
+#define PH_LOGS_BODY_VIDEO_CALLS_ABB "IDS_LOGS_BODY_VIDEO_CALLS_ABB"
+#define PH_LOGS_HEADER_DELETE "IDS_LOGS_HEADER_DELETE"
+#define PH_CLOG_OPT_VIEW_BY "IDS_CLOG_OPT_VIEW_BY"
+#define PH_LOGS_HEADER_DELETE_LOG_ABB "IDS_LOGS_HEADER_DELETE_LOG_ABB"
+#define PH_LOGS_HEADER_DELETE_LOG_ITEMS_ABB "IDS_LOGS_HEADER_DELETE_LOG_ITEMS_ABB"
+#define PH_LOGS_HEADER_DELETE_PD_LOGS_ABB "IDS_LOGS_HEADER_DELETE_PD_LOGS_ABB"
+#define PH_LOGS_POP_1_LOG_ITEM_WILL_BE_DELETED "IDS_LOGS_POP_1_LOG_ITEM_WILL_BE_DELETED"
+#define PH_LOGS_POP_PD_LOG_ITEMS_WILL_BE_DELETED "IDS_LOGS_POP_PD_LOG_ITEMS_WILL_BE_DELETED"
+#define PH_LOGS_POP_ALL_LOG_ITEMS_WILL_BE_DELETED "IDS_LOGS_POP_ALL_LOG_ITEMS_WILL_BE_DELETED"
+#define PH_LOGS_BUTTON_CANCEL_ABB3 "IDS_LOGS_BUTTON_CANCEL_ABB3"
+#define PH_LOGS_BUTTON_DELETE_ABB4 "IDS_LOGS_BUTTON_DELETE_ABB4"
+#define PH_LOGS_HEADER_PD_SELECTED_ABB3 "IDS_LOGS_HEADER_PD_SELECTED_ABB3"
+#define PH_LOGS_MBODY_SELECT_ALL "IDS_LOGS_MBODY_SELECT_ALL"
+#define PH_LOGS_OPT_SEND_NUMBER "IDS_LOGS_OPT_SEND_NUMBER"
+#define PH_LOGS_NPBODY_DO_NOT_SHOW_AGAIN_ABB "IDS_LOGS_NPBODY_DO_NOT_SHOW_AGAIN_ABB"
+#define PH_LOGS_BODY_SIM_CARD "IDS_LOGS_BODY_SIM_CARD"
+#define PH_PB_BODY_AFTER_YOU_CREATE_CONTACTS_THEY_WILL_BE_SHOWN_HERE "IDS_PB_BODY_AFTER_YOU_CREATE_CONTACTS_THEY_WILL_BE_SHOWN_HERE"
+#define PH_PB_BODY_CONTACTS_THAT_HAVE_BEEN_IDENTIFIED_AS_BEING_DUPLICATES_WILL_BE_SUGGESTED_AUTOMATICALLY "IDS_PB_BODY_CONTACTS_THAT_HAVE_BEEN_IDENTIFIED_AS_BEING_DUPLICATES_WILL_BE_SUGGESTED_AUTOMATICALLY"
+#define PH_LOGS_BODY_AFTER_YOU_MAKE_OR_RECEIVE_CALLS_LOG_ITEMS_WILL_BE_SHOWN_HERE "IDS_LOGS_BODY_AFTER_YOU_MAKE_OR_RECEIVE_CALLS_LOG_ITEMS_WILL_BE_SHOWN_HERE"
+#define PH_PB_ITAB3_CONTACTS "IDS_PB_ITAB3_CONTACTS"
+#define PH_LOGS_ITAB3_LOGS "IDS_LOGS_ITAB3_LOGS"
+#define PH_PB_NPBODY_NO_CONTACTS "IDS_PB_NPBODY_NO_CONTACTS"
+#define PH_PB_MBODY_SET_PROFILE "IDS_PB_MBODY_SET_PROFILE"
+#define PH_PB_HEADER_MANAGE_FAVOURITES_ABB "IDS_PB_HEADER_MANAGE_FAVOURITES_ABB"
+#define PH_PB_OPT_REORDER "IDS_PB_OPT_REORDER"
+#define PH_PB_POP_THE_MAXIMUM_NUMBER_OF_CONTACTS_THAT_CAN_BE_SHARED_AT_ONE_TIME_HP1SD_HAS_BEEN_EXCEEDED_ONLY_THE_FIRST_P2SD_WILL_BE_SHARED "IDS_PB_POP_THE_MAXIMUM_NUMBER_OF_CONTACTS_THAT_CAN_BE_SHARED_AT_ONE_TIME_HP1SD_HAS_BEEN_EXCEEDED_ONLY_THE_FIRST_P2SD_WILL_BE_SHARED"
+#define PH_PB_BUTTON_OK_ABB2 "IDS_PB_BUTTON_OK_ABB2"
+#define PH_PB_POP_1_CONTACT_WILL_BE_DELETED "IDS_PB_POP_1_CONTACT_WILL_BE_DELETED"
+#define PH_PB_POP_PD_CONTACTS_WILL_BE_DELETED "IDS_PB_POP_PD_CONTACTS_WILL_BE_DELETED"
+#define PH_PB_POP_ALL_CONTACTS_WILL_BE_DELETED "IDS_PB_POP_ALL_CONTACTS_WILL_BE_DELETED"
+#define PH_PB_BUTTON_CANCEL "IDS_PB_BUTTON_CANCEL"
+#define PH_PB_BUTTON_DELETE_ABB4 "IDS_PB_BUTTON_DELETE_ABB4"
+#define PH_PB_HEADER_REORDER "IDS_PB_HEADER_REORDER"
+#define PH_PB_HEADER_MERGE_CONTACTS_ABB "IDS_PB_HEADER_MERGE_CONTACTS_ABB"
+#define PH_PB_TPOP_SOME_OF_YOUR_CONTACTS_APPEAR_TO_BE_DUPLICATES "IDS_PB_TPOP_SOME_OF_YOUR_CONTACTS_APPEAR_TO_BE_DUPLICATES"
+#define PH_PB_TPOP_CONTACTS_LINKED "IDS_PB_TPOP_CONTACTS_LINKED"
+#define PH_PB_HEADER_CREATE "IDS_PB_HEADER_CREATE"
+#define PH_PB_BODY_NAME "IDS_PB_BODY_NAME"
+#define PH_PB_BODY_TITLE_M_NAMEPREFIX "IDS_PB_BODY_TITLE_M_NAMEPREFIX"
+#define PH_PB_BODY_FIRST_NAME_ABB "IDS_PB_BODY_FIRST_NAME_ABB"
+#define PH_PB_BODY_MIDDLE_NAME_ABB "IDS_PB_BODY_MIDDLE_NAME_ABB"
+#define PH_PB_BODY_LAST_NAME_ABB "IDS_PB_BODY_LAST_NAME_ABB"
+#define PH_PB_BODY_NAME_SUFFIX_ABB "IDS_PB_BODY_NAME_SUFFIX_ABB"
+#define PH_PB_BODY_PHONETIC_NAME_ABB "IDS_PB_BODY_PHONETIC_NAME_ABB"
+#define PH_PB_BODY_NICKNAME_ABB "IDS_PB_BODY_NICKNAME_ABB"
+#define PH_PB_OPT_ORGANISATION_ABB "IDS_PB_OPT_ORGANISATION_ABB"
+#define PH_PB_BODY_COMPANY_ABB "IDS_PB_BODY_COMPANY_ABB"
+#define PH_PB_BODY_JOB_TITLE_ABB "IDS_PB_BODY_JOB_TITLE_ABB"
+#define PH_PB_BUTTON_PHONE "IDS_PB_BUTTON_PHONE"
+#define PH_PB_BODY_PHONE_NUMBER_ABB "IDS_PB_BODY_PHONE_NUMBER_ABB"
+#define PH_PB_OPT_MOBILE "IDS_PB_OPT_MOBILE"
+#define PH_PB_OPT_WORK "IDS_PB_OPT_WORK"
+#define PH_PB_OPT_HOME "IDS_PB_OPT_HOME"
+#define PH_PB_OPT_MAIN "IDS_PB_OPT_MAIN"
+#define PH_PB_OPT_FAX_HWORK_ABB "IDS_PB_OPT_FAX_HWORK_ABB"
+#define PH_PB_OPT_FAX_HHOME_ABB "IDS_PB_OPT_FAX_HHOME_ABB"
+#define PH_PB_OPT_PAGER "IDS_PB_OPT_PAGER"
+#define PH_PB_OPT_OTHER "IDS_PB_OPT_OTHER"
+#define PH_PB_OPT_CUSTOM "IDS_PB_OPT_CUSTOM"
+#define PH_PB_BUTTON_EMAIL_ABB3 "IDS_PB_BUTTON_EMAIL_ABB3"
+#define PH_PB_BODY_EMAIL "IDS_PB_BODY_EMAIL"
+#define PH_PB_BUTTON_NOTES "IDS_PB_BUTTON_NOTES"
+#define PH_PB_BODY_NOTES "IDS_PB_BODY_NOTES"
+#define PH_PB_BUTTON_MORE "IDS_PB_BUTTON_MORE"
+#define PH_PB_OPT_SAVE_CONTACT_TO "IDS_PB_OPT_SAVE_CONTACT_TO"
+#define PH_PB_BODY_ADDRESS_ABB2 "IDS_PB_BODY_ADDRESS_ABB2"
+#define PH_PB_BODY_DATE "IDS_PB_BODY_DATE"
+#define PH_PB_OPT_BIRTHDAY "IDS_PB_OPT_BIRTHDAY"
+#define PH_PB_OPT_ANNIVERSARY_ABB "IDS_PB_OPT_ANNIVERSARY_ABB"
+#define PH_PB_OPT_RELATIONSHIP_ABB2 "IDS_PB_OPT_RELATIONSHIP_ABB2"
+#define PH_PB_OPT_ASSISTANT_M_CONTACTS "IDS_PB_OPT_ASSISTANT_M_CONTACTS"
+#define PH_PB_OPT_BROTHER "IDS_PB_OPT_BROTHER"
+#define PH_PB_OPT_CHILD "IDS_PB_OPT_CHILD"
+#define PH_PB_OPT_DOMESTIC_PARTNER_ABB2 "IDS_PB_OPT_DOMESTIC_PARTNER_ABB2"
+#define PH_PB_OPT_FATHER "IDS_PB_OPT_FATHER"
+#define PH_PB_OPT_FRIEND "IDS_PB_OPT_FRIEND"
+#define PH_PB_OPT_MANAGER "IDS_PB_OPT_MANAGER"
+#define PH_PB_OPT_MOTHER "IDS_PB_OPT_MOTHER"
+#define PH_PB_OPT_PARENT "IDS_PB_OPT_PARENT"
+#define PH_PB_OPT_PARTNER "IDS_PB_OPT_PARTNER"
+#define PH_PB_OPT_REFERRED_BY_ABB "IDS_PB_OPT_REFERRED_BY_ABB"
+#define PH_PB_OPT_RELATIVE "IDS_PB_OPT_RELATIVE"
+#define PH_PB_OPT_SISTER "IDS_PB_OPT_SISTER"
+#define PH_PB_OPT_SPOUSE "IDS_PB_OPT_SPOUSE"
+#define PH_PB_BODY_WEBSITE_ABB "IDS_PB_BODY_WEBSITE_ABB"
+#define PH_PB_BODY_IM "IDS_PB_BODY_IM"
+#define PH_PB_OPT_AIM "IDS_PB_OPT_AIM"
+#define PH_PB_OPT_YAHOO_E "IDS_PB_OPT_YAHOO_E"
+#define PH_PB_OPT_SKYPE "IDS_PB_OPT_SKYPE"
+#define PH_PB_OPT_QQ "IDS_PB_OPT_QQ"
+#define PH_PB_OPT_HANGOUTS "IDS_PB_OPT_HANGOUTS"
+#define PH_PB_OPT_ICQ "IDS_PB_OPT_ICQ"
+#define PH_PB_OPT_JABBER "IDS_PB_OPT_JABBER"
+#define PH_PB_HEADER_SAVE_CONTACTS_TO_ABB "IDS_PB_HEADER_SAVE_CONTACTS_TO_ABB"
+#define PH_PB_POP_NEW_CONTACTS_WILL_BE_SAVED_IN_CONTACTS_ON_YOUR_DEVICE "IDS_PB_POP_NEW_CONTACTS_WILL_BE_SAVED_IN_CONTACTS_ON_YOUR_DEVICE"
+#define PH_PB_BUTTON_ADD_ACCOUNT_ABB2 "IDS_PB_BUTTON_ADD_ACCOUNT_ABB2"
+#define PH_PB_BUTTON_SAVE "IDS_PB_BUTTON_SAVE"
+#define PH_PB_OPT_DEVICE "IDS_PB_OPT_DEVICE"
+#define PH_PB_OPT_SIM_CARD "IDS_PB_OPT_SIM_CARD"
+#define PH_PB_HEADER_SET_CONTACT_PICTURE_ABB "IDS_PB_HEADER_SET_CONTACT_PICTURE_ABB"
+#define PH_PB_OPT_FROM_GALLERY_ABB2 "IDS_PB_OPT_FROM_GALLERY_ABB2"
+#define PH_PB_OPT_TAKE_PICTURE_ABB "IDS_PB_OPT_TAKE_PICTURE_ABB"
+#define PH_PB_HEADER_CHANGE_SAVE_LOCATION_ABB "IDS_PB_HEADER_CHANGE_SAVE_LOCATION_ABB"
+#define PH_PB_POP_SOME_CONTACT_INFORMATION_MAY_BE_LOST "IDS_PB_POP_SOME_CONTACT_INFORMATION_MAY_BE_LOST"
+#define PH_PB_BUTTON_CHANGE_ABB "IDS_PB_BUTTON_CHANGE_ABB"
+#define PH_PB_HEADER_LINKED_CONTACTS_ABB "IDS_PB_HEADER_LINKED_CONTACTS_ABB"
+#define PH_PB_HEADER_ENTER_CUSTOM_LABEL_ABB "IDS_PB_HEADER_ENTER_CUSTOM_LABEL_ABB"
+#define PH_PB_BUTTON_CREATE_ABB2 "IDS_PB_BUTTON_CREATE_ABB2"
+#define PH_PB_HEADER_SUGGESTED_CONTACTS_ABB "IDS_PB_HEADER_SUGGESTED_CONTACTS_ABB"
+#define PH_PB_OPT_DO_NOT_SHOW_AGAIN_ABB2 "IDS_PB_OPT_DO_NOT_SHOW_AGAIN_ABB2"
+#define PH_PB_HEADER_PRIMARY_CONTACTS_HPD_ABB "IDS_PB_HEADER_PRIMARY_CONTACTS_HPD_ABB"
+#define PH_PB_HEADER_EMERGENCY_SERVICES_ABB "IDS_PB_HEADER_EMERGENCY_SERVICES_ABB"
+#define PH_PB_HEADER_PERSONAL_CONTACTS_ABB "IDS_PB_HEADER_PERSONAL_CONTACTS_ABB"
+#define PH_PB_HEADER_REMOVE "IDS_PB_HEADER_REMOVE"
+#define PH_PB_OPT_ADD "IDS_PB_OPT_ADD"
+#define PH_PB_OPT_REMOVE "IDS_PB_OPT_REMOVE"
+#define PH_PB_NPBODY_NO_RESULTS_FOUND_ABB "IDS_PB_NPBODY_NO_RESULTS_FOUND_ABB"
+#define PH_PB_HEADER_SETTINGS "IDS_PB_HEADER_SETTINGS"
+#define PH_PB_HEADER_CONTACTS_TO_DISPLAY_ABB "IDS_PB_HEADER_CONTACTS_TO_DISPLAY_ABB"
+#define PH_PB_TMBODY_CONTACTS_TO_DISPLAY "IDS_PB_TMBODY_CONTACTS_TO_DISPLAY"
+#define PH_PB_SBODY_ALL_CONTACTS "IDS_PB_SBODY_ALL_CONTACTS"
+#define PH_PB_MBODY_DISPLAY_CONTACTS_WITH_NUMBERS_ABB "IDS_PB_MBODY_DISPLAY_CONTACTS_WITH_NUMBERS_ABB"
+#define PH_PB_MBODY_SORT_BY "IDS_PB_MBODY_SORT_BY"
+#define PH_PB_OPT_FIRST_NAME "IDS_PB_OPT_FIRST_NAME"
+#define PH_PB_OPT_LAST_NAME "IDS_PB_OPT_LAST_NAME"
+#define PH_PB_OPT_FIRST_NAME_FIRST_ABB "IDS_PB_OPT_FIRST_NAME_FIRST_ABB"
+#define PH_PB_OPT_LAST_NAME_FIRST_ABB "IDS_PB_OPT_LAST_NAME_FIRST_ABB"
+#define PH_PB_TMBODY_LINK_CONTACTS "IDS_PB_TMBODY_LINK_CONTACTS"
+#define PH_PB_TMBODY_MERGE_CONTACTS "IDS_PB_TMBODY_MERGE_CONTACTS"
+#define PH_PB_MBODY_IMPORT "IDS_PB_MBODY_IMPORT"
+#define PH_PB_MBODY_EXPORT "IDS_PB_MBODY_EXPORT"
+#define PH_PB_BODY_ACCOUNTS "IDS_PB_BODY_ACCOUNTS"
+#define PH_PB_TMBODY_SERVICE_NUMBERS "IDS_PB_TMBODY_SERVICE_NUMBERS"
+#define PH_PB_MBODY_SEND_CONTACT_INFORMATION_ABB "IDS_PB_MBODY_SEND_CONTACT_INFORMATION_ABB"
+#define PH_PB_OPT_SD_CARD "IDS_PB_OPT_SD_CARD"
+#define PH_PB_HEADER_IMPORT "IDS_PB_HEADER_IMPORT"
+#define PH_PB_SBODY_IMPORTING_CONTACTS_ING_ABB "IDS_PB_SBODY_IMPORTING_CONTACTS_ING_ABB"
+#define PH_PB_SBODY_CONTACTS_IMPORTED_M_STATUS_ABB "IDS_PB_SBODY_CONTACTS_IMPORTED_M_STATUS_ABB"
+#define PH_PB_SBODY_IMPORTING_CANCELLED_M_STATUS_ABB "IDS_PB_SBODY_IMPORTING_CANCELLED_M_STATUS_ABB"
+#define PH_PB_MBODY_1_CONTACT_ABB "IDS_PB_MBODY_1_CONTACT_ABB"
+#define PH_PB_MBODY_PD_CONTACTS_ABB "IDS_PB_MBODY_PD_CONTACTS_ABB"
+#define PH_PB_HEADER_CANCEL_IMPORTING_ABB "IDS_PB_HEADER_CANCEL_IMPORTING_ABB"
+#define PH_PB_POP_TAP_OK_TO_STOP_IMPORTING_CONTACTS_FROM_SIM_CARD "IDS_PB_POP_TAP_OK_TO_STOP_IMPORTING_CONTACTS_FROM_SIM_CARD"
+#define PH_PB_HEADER_EXPORT "IDS_PB_HEADER_EXPORT"
+#define PH_PB_SBODY_EXPORTING_CONTACTS_ING_ABB "IDS_PB_SBODY_EXPORTING_CONTACTS_ING_ABB"
+#define PH_PB_SBODY_CONTACTS_EXPORTED_M_STATUS_ABB "IDS_PB_SBODY_CONTACTS_EXPORTED_M_STATUS_ABB"
+#define PH_PB_SBODY_EXPORTING_CANCELLED_M_STATUS_ABB "IDS_PB_SBODY_EXPORTING_CANCELLED_M_STATUS_ABB"
+#define PH_PB_HEADER_CANCEL_EXPORTING_ABB "IDS_PB_HEADER_CANCEL_EXPORTING_ABB"
+#define PH_PB_POP_TAP_OK_TO_STOP_EXPORTING_CONTACTS_TO_PS "IDS_PB_POP_TAP_OK_TO_STOP_EXPORTING_CONTACTS_TO_PS"
+#define PH_PB_HEADER_SEND_CONTACT_INFORMATION_ABB "IDS_PB_HEADER_SEND_CONTACT_INFORMATION_ABB"
+#define PH_PB_MBODY_SEND_TOGETHER_ABB "IDS_PB_MBODY_SEND_TOGETHER_ABB"
+#define PH_PB_MBODY_SEND_INDIVIDUALLY_ABB "IDS_PB_MBODY_SEND_INDIVIDUALLY_ABB"
+#define PH_PB_BODY_SELECT_HOW_TO_SEND_CONTACT_INFORMATION "IDS_PB_BODY_SELECT_HOW_TO_SEND_CONTACT_INFORMATION"
+#define PH_PB_BODY_SENDING_A_NUMBER_OF_CONTACTS_TOGETHER_REDUCES_TRANSMISSION_TIME_HOWEVER_IF_THE_OTHER_DEVICE_DOES_NOT_SUPPORT_THIS_ONLY_ONE_CONTACT_WILL_BE_SENT "IDS_PB_BODY_SENDING_A_NUMBER_OF_CONTACTS_TOGETHER_REDUCES_TRANSMISSION_TIME_HOWEVER_IF_THE_OTHER_DEVICE_DOES_NOT_SUPPORT_THIS_ONLY_ONE_CONTACT_WILL_BE_SENT"
+#define PH_PB_BODY_SENDING_NAME_CARDS_INDIVIDUALLY_MAY_TAKE_LONGER_BECAUSE_THE_RECEIVING_DEVICE_MUST_ACCEPT_THEM_ONE_AT_A_TIME "IDS_PB_BODY_SENDING_NAME_CARDS_INDIVIDUALLY_MAY_TAKE_LONGER_BECAUSE_THE_RECEIVING_DEVICE_MUST_ACCEPT_THEM_ONE_AT_A_TIME"
+#define PH_PB_HEADER_PD_SELECTED_ABB3 "IDS_PB_HEADER_PD_SELECTED_ABB3"
+#define PH_PB_MBODY_SELECT_ALL "IDS_PB_MBODY_SELECT_ALL"
+#define PH_PB_BODY_CONTACTS "IDS_PB_BODY_CONTACTS"
+#define PH_PB_NPBODY_TAP_TO_ADD_SHORTCUT "IDS_PB_NPBODY_TAP_TO_ADD_SHORTCUT"
+#define PH_PB_OPT_VOICE_CALL "IDS_PB_OPT_VOICE_CALL"
+#define PH_PB_OPT_MESSAGE "IDS_PB_OPT_MESSAGE"
+#define PH_PB_OPT_VIDEO_CALL "IDS_PB_OPT_VIDEO_CALL"
+#define PH_PB_HEADER_SELECT_SIM_CARD_FOR_CALL_ABB "IDS_PB_HEADER_SELECT_SIM_CARD_FOR_CALL_ABB"
+#define PH_LOGS_BODY_ALL_CALLS "IDS_LOGS_BODY_ALL_CALLS"
+#define PH_LOGS_HEADER_TODAY "IDS_LOGS_HEADER_TODAY"
+#define PH_LOGS_HEADER_YESTERDAY "IDS_LOGS_HEADER_YESTERDAY"
+#define PH_LOGS_OPT_DELETE "IDS_LOGS_OPT_DELETE"
+#define PH_LOGS_OPT_CALL_DURATIONS_ABB "IDS_LOGS_OPT_CALL_DURATIONS_ABB"
+#define PH_LOGS_BODY_AFTER_YOU_MAKE_OR_RECEIVE_CALLS_THEY_WILL_BE_LOGGED_HERE "IDS_LOGS_BODY_AFTER_YOU_MAKE_OR_RECEIVE_CALLS_THEY_WILL_BE_LOGGED_HERE"
+#define PH_PB_HEADER_USB_STORAGE_NOT_AVAILABLE "IDS_PB_HEADER_USB_STORAGE_NOT_AVAILABLE"
+#define PH_PB_BODY_EXPORT_TO_SIM2_CARD "IDS_PB_BODY_EXPORT_TO_SIM2_CARD"
+#define PH_PB_BODY_EXPORT_TO_SIM_CARD "IDS_PB_BODY_EXPORT_TO_SIM_CARD"
+#define PH_PB_BODY_IMPORT_FROM_SIM2_CARD "IDS_PB_BODY_IMPORT_FROM_SIM2_CARD"
+#define PH_PB_BODY_IMPORT_FROM_SIM_CARD "IDS_PB_BODY_IMPORT_FROM_SIM_CARD"
+#define PH_PB_NPBODY_NO_SERVICE_NUMBERS "IDS_PB_NPBODY_NO_SERVICE_NUMBERS"
+#define PH_CHATON_ACBUTTON_EDIT_ABB "MIDS_CHATON_ACBUTTON_EDIT_ABB"
+#define PH_PB_BODY_FAX "IDS_PB_BODY_FAX"
+#define PH_PB_OPT_HOME_ABB "IDS_PB_OPT_HOME_ABB"
+#define PH_ST_BODY_AFTER_YOU_CREATE_PRIMARY_CONTACTS_THEY_WILL_BE_SHOWN_HERE "IDS_ST_BODY_AFTER_YOU_CREATE_PRIMARY_CONTACTS_THEY_WILL_BE_SHOWN_HERE"
+#define PH_ST_HEADER_PRIMARY_CONTACTS_ABB "IDS_ST_HEADER_PRIMARY_CONTACTS_ABB"
+#define PH_ST_NPBODY_NO_PRIMARY_CONTACTS "IDS_ST_NPBODY_NO_PRIMARY_CONTACTS"
+#define PH_ST_OPT_ADD_EXISTING_CONTACT_ABB "IDS_ST_OPT_ADD_EXISTING_CONTACT_ABB"
+#define PH_ST_HEADER_ADD_PRIMARY_CONTACTS_ABB2 "IDS_ST_HEADER_ADD_PRIMARY_CONTACTS_ABB2"
+#define PH_ST_HEADER_CREATE_PRIMARY_CONTACT_ABB "IDS_ST_HEADER_CREATE_PRIMARY_CONTACT_ABB"
+#define PH_CST_POP_PASSWORDS_DO_NOT_MATCH "IDS_CST_POP_PASSWORDS_DO_NOT_MATCH"
+#define PH_KPD_POP_YOUR_PIN_MUST_BE_BETWEEN_P1SD_AND_P2SD_DIGITS_LONG_TRY_AGAIN "IDS_KPD_POP_YOUR_PIN_MUST_BE_BETWEEN_P1SD_AND_P2SD_DIGITS_LONG_TRY_AGAIN"
+#define PH_COM_OPT_SIM_CARD_BUSY_TRY_LATER_VODA "IDS_COM_OPT_SIM_CARD_BUSY_TRY_LATER_VODA"
+#define PH_COM_BODY_NETWORK_OR_SIM_CARD_ERROR "IDS_COM_BODY_NETWORK_OR_SIM_CARD_ERROR"
+#define PH_COM_BODY_SIM_RUIM_CARD_LOCKED "IDS_COM_BODY_SIM_RUIM_CARD_LOCKED"
+#define PH_PB_BODY_SIM_CARD_INITIALISING_ING "IDS_PB_BODY_SIM_CARD_INITIALISING_ING"
+#define PH_COM_BODY_NO_SIM_CARD_FOUND_PLEASE_INSERT_A_SIM_CARD_INTO_THE_PHONE "IDS_COM_BODY_NO_SIM_CARD_FOUND_PLEASE_INSERT_A_SIM_CARD_INTO_THE_PHONE"
+#define PH_ST_BODY_NEW_PIN_AND_CONFIRM_PIN_DO_NOT_MATCH "IDS_ST_BODY_NEW_PIN_AND_CONFIRM_PIN_DO_NOT_MATCH"
+#define PH_STU_POP_PIN_BLOCKED_ENTER_PUK_CODE "IDS_STU_POP_PIN_BLOCKED_ENTER_PUK_CODE"
+#define PH_CLOG_BODY_PIN2_BLOCKED_CONTACT_PROVIDER_HSIM_PUK2_REQUIRED "IDS_CLOG_BODY_PIN2_BLOCKED_CONTACT_PROVIDER_HSIM_PUK2_REQUIRED"
+#define PH_KPD_POP_PIN_HAS_BEEN_DISABLED_ENABLE_PIN_BEFORE_CHANGING "IDS_KPD_POP_PIN_HAS_BEEN_DISABLED_ENABLE_PIN_BEFORE_CHANGING"
+#define PH_KPD_POP_YOUR_PIN2_MUST_BE_P1SD_TO_P2SD_DIGITS_TRY_AGAIN "IDS_KPD_POP_YOUR_PIN2_MUST_BE_P1SD_TO_P2SD_DIGITS_TRY_AGAIN"
+#define PH_HS_BUTTON_PHONE_M_CALL "IDS_HS_BUTTON_PHONE_M_CALL"
+#define PH_KPD_TPOP_ENTER_NUMBER "IDS_KPD_TPOP_ENTER_NUMBER"
+#define PH_KPD_BUTTON_SET_NUMBER_ABB "IDS_KPD_BUTTON_SET_NUMBER_ABB"
+#define PH_KPD_POP_THERE_IS_NO_CONTACT_ASSIGNED_TO_THIS_SPEED_DIAL_NUMBER_TAP_OK_TO_ASSIGN_ONE_NOW "IDS_KPD_POP_THERE_IS_NO_CONTACT_ASSIGNED_TO_THIS_SPEED_DIAL_NUMBER_TAP_OK_TO_ASSIGN_ONE_NOW"
+#define PH_KPD_TPOP_VIBRATION_FEEDBACK_ENABLED "IDS_KPD_TPOP_VIBRATION_FEEDBACK_ENABLED"
+#define PH_KPD_TPOP_VIBRATION_FEEDBACK_DISABLED "IDS_KPD_TPOP_VIBRATION_FEEDBACK_DISABLED"
+#define PH_KPD_HEADER_SEARCH_RESULTS_HPD_ABB "IDS_KPD_HEADER_SEARCH_RESULTS_HPD_ABB"
+#define PH_KPD_OPT_UPDATE_CONTACT_ABB "IDS_KPD_OPT_UPDATE_CONTACT_ABB"
+#define PH_KPD_TPOP_UNABLE_TO_CALL_NUMBER_PD_NOT_EMERGENCY_NUMBER "IDS_KPD_TPOP_UNABLE_TO_CALL_NUMBER_PD_NOT_EMERGENCY_NUMBER"
+#define PH_KPD_HEADER_SELECT_SIM_CARD_FOR_CALL_ABB "IDS_KPD_HEADER_SELECT_SIM_CARD_FOR_CALL_ABB"
+#define PH_CALL_TPOP_INSERT_SIM_CARD "IDS_CALL_TPOP_INSERT_SIM_CARD"
+#define PH_CALL_HEADER_USE_PS_SIM_CARD_ABB "IDS_CALL_HEADER_USE_PS_SIM_CARD_ABB"
+#define PH_CALL_POP_THE_SERVICE_PROVIDER_OF_THE_CONTACT_YOU_ARE_CALLING_IS_P1SS_TAP_OK_TO_MAKE_THIS_CALL_USING_YOUR_P2SS_SIM_CARD "IDS_CALL_POP_THE_SERVICE_PROVIDER_OF_THE_CONTACT_YOU_ARE_CALLING_IS_P1SS_TAP_OK_TO_MAKE_THIS_CALL_USING_YOUR_P2SS_SIM_CARD"
+#define PH_CALL_BUTTON_CURRENT_SIM_ABB "IDS_CALL_BUTTON_CURRENT_SIM_ABB"
+#define PH_LOGS_OPT_MISSED_CALLS "IDS_LOGS_OPT_MISSED_CALLS"
+#define PH_LOGS_BUTTON_CREATE_CONTACT_ABB "IDS_LOGS_BUTTON_CREATE_CONTACT_ABB"
+#define PH_LOGS_BUTTON_UPDATE_CONTACT_ABB2 "IDS_LOGS_BUTTON_UPDATE_CONTACT_ABB2"
+#define PH_LOGS_OPT_VIEW_CONTACT_DETAILS_ABB "IDS_LOGS_OPT_VIEW_CONTACT_DETAILS_ABB"
+#define PH_PB_HEADER_MOST_FREQUENT_CONTACTS_ABB2 "IDS_PB_HEADER_MOST_FREQUENT_CONTACTS_ABB2"
+#define PH_PB_MBODY_EVENT "IDS_PB_MBODY_EVENT"
+#define PH_PB_HEADER_EDIT "IDS_PB_HEADER_EDIT"
+#define PH_PB_OPT_EDIT "IDS_PB_OPT_EDIT"
+#define PH_PB_POP_THIS_CONTACT_WILL_BE_DELETED "IDS_PB_POP_THIS_CONTACT_WILL_BE_DELETED"
+#define PH_PB_POP_WHEN_SYNC_IS_ENABLED_THIS_CONTACT_AND_ALL_ITS_LINKED_CONTACTS_IN_OTHER_SYNCED_ACCOUNTS_WILL_BE_DELETED "IDS_PB_POP_WHEN_SYNC_IS_ENABLED_THIS_CONTACT_AND_ALL_ITS_LINKED_CONTACTS_IN_OTHER_SYNCED_ACCOUNTS_WILL_BE_DELETED"
+#define PH_PB_POP_WHEN_SYNC_IS_ENABLED_THIS_CONTACT_WILL_BE_DELETED_FROM_ANY_SYNCED_ACCOUNTS_IT_IS_SAVED_IN "IDS_PB_POP_WHEN_SYNC_IS_ENABLED_THIS_CONTACT_WILL_BE_DELETED_FROM_ANY_SYNCED_ACCOUNTS_IT_IS_SAVED_IN"
+#define PH_PB_POP_THIS_CONTACT_AND_ALL_ITS_LINKED_CONTACTS_WILL_BE_DELETED "IDS_PB_POP_THIS_CONTACT_AND_ALL_ITS_LINKED_CONTACTS_WILL_BE_DELETED"
+#define PH_PB_HEADER_EMERGENCY_CONTACTS_ABB2 "IDS_PB_HEADER_EMERGENCY_CONTACTS_ABB2"
+#define PH_PB_BUTTON_DONE_ABB3 "IDS_PB_BUTTON_DONE_ABB3"
+#define PH_PB_MBODY_ONLY_CONTACTS_WITH_PHONES "IDS_PB_MBODY_ONLY_CONTACTS_WITH_PHONES"
+#define PH_PB_TMBODY_NAME_FORMAT "IDS_PB_TMBODY_NAME_FORMAT"
+#define PH_PB_HEADER_NAME_FORMAT_ABB "IDS_PB_HEADER_NAME_FORMAT_ABB"
+#define PH_PB_POP_P1SD_CONTACTS_HAVE_BEEN_EXPORTED_TO_DEVICE_CONTACTS_IMPORTED_P2SSVCF "IDS_PB_POP_P1SD_CONTACTS_HAVE_BEEN_EXPORTED_TO_DEVICE_CONTACTS_IMPORTED_P2SSVCF"
+#define PH_PB_HEADER_EXPORT_CONTACTS_ABB "IDS_PB_HEADER_EXPORT_CONTACTS_ABB"
+#define PH_PB_HEADER_CONTACTS_EXPORTED_ABB "IDS_PB_HEADER_CONTACTS_EXPORTED_ABB"
+#define PH_PB_POP_TAP_EXPORT_TO_SELECT_WHICH_CONTACTS_TO_EXPORT_SOME_CONTACT_INFORMATION_MAY_BE_LOST "IDS_PB_POP_TAP_EXPORT_TO_SELECT_WHICH_CONTACTS_TO_EXPORT_SOME_CONTACT_INFORMATION_MAY_BE_LOST"
+#define PH_PB_HEADER_EXPORT_CONTACTS_TO_SIM_CARD_ABB "IDS_PB_HEADER_EXPORT_CONTACTS_TO_SIM_CARD_ABB"
+#define PH_PB_BUTTON_EXPORT "IDS_PB_BUTTON_EXPORT"
+#define PH_PB_HEADER_SELECT_CONTACT_ABB2 "IDS_PB_HEADER_SELECT_CONTACT_ABB2"
+#define PH_PB_HEADER_IMPORT_CONTACTS_ABB2 "IDS_PB_HEADER_IMPORT_CONTACTS_ABB2"
+#define PH_PB_HEADER_DISCARD_CHANGES_ABB "IDS_PB_HEADER_DISCARD_CHANGES_ABB"
+#define PH_PB_POP_ALL_CHANGES_WILL_BE_DISCARDED "IDS_PB_POP_ALL_CHANGES_WILL_BE_DISCARDED"
+#define PH_PB_BUTTON_DISCARD_ABB "IDS_PB_BUTTON_DISCARD_ABB"
+#define PH_PB_OPT_UNLINK_CONTACTS "IDS_PB_OPT_UNLINK_CONTACTS"
+#define PH_PB_OPT_UNLINK_CONTACT_ABB "IDS_PB_OPT_UNLINK_CONTACT_ABB"
+#define PH_PB_BODY_SERVICE_NUMBER "IDS_PB_BODY_SERVICE_NUMBER"
+#define PH_PB_POP_DISCARD_CHANGES_Q "IDS_PB_POP_DISCARD_CHANGES_Q"
+#define PH_PB_BODY_WINDOWS_LIVE_UC "IDS_PB_BODY_WINDOWS_LIVE_UC"
+#define PH_PB_BODY_SKYPE "IDS_PB_BODY_SKYPE"
+#define PH_PB_HEADER_DISPLAY_NAMES_BY "IDS_PB_HEADER_DISPLAY_NAMES_BY"
+#define PH_PB_POP_THE_MAXIMUM_NUMBER_OF_ITEMS_THAT_CAN_BE_SELECTED_HPD_HAS_BEEN_EXCEEDED "IDS_PB_POP_THE_MAXIMUM_NUMBER_OF_ITEMS_THAT_CAN_BE_SELECTED_HPD_HAS_BEEN_EXCEEDED"
+#define PH_WMGR_HEADER_UNABLE_TO_SELECT_MORE_ITEMS_ABB "IDS_WMGR_HEADER_UNABLE_TO_SELECT_MORE_ITEMS_ABB"
+#define PH_PB_SK_SET "IDS_PB_SK_SET"
+#define PH_PB_HEADER_DISPLAY "IDS_PB_HEADER_DISPLAY"
+#define PH_PB_TPOP_1_NUMBER_REMOVED_FROM_AUTO_REJECT_LIST "IDS_PB_TPOP_1_NUMBER_REMOVED_FROM_AUTO_REJECT_LIST"
+#define PH_PB_MBODY_SET_MY_PROFILE "IDS_PB_MBODY_SET_MY_PROFILE"
+#define PH_PB_BODY_EXPORT_TO_SD_CARD "IDS_PB_BODY_EXPORT_TO_SD_CARD"
+#define PH_PB_POP_P1SD_CONTACTS_HAVE_BEEN_EXPORTED_TO_P2SS "IDS_PB_POP_P1SD_CONTACTS_HAVE_BEEN_EXPORTED_TO_P2SS"
+#define PH_PB_POP_CONTACTS_WILL_STOP_BEING_IMPORTED_FROM_PS "IDS_PB_POP_CONTACTS_WILL_STOP_BEING_IMPORTED_FROM_PS"
+#define PH_PB_OPT_SELECT_FROM_CONTACTS_ABB "IDS_PB_OPT_SELECT_FROM_CONTACTS_ABB"
+#define PH_CLOG_BODY_NO_LOGS "IDS_CLOG_BODY_NO_LOGS"
+#define PH_CLOG_BODY_AFTER_YOU_MAKE_RECEIVE_A_CALL_OR_SEND_RECEIVE_A_MESSAGE_LOGS_WILL_BE_SHOWN "IDS_CLOG_BODY_AFTER_YOU_MAKE_RECEIVE_A_CALL_OR_SEND_RECEIVE_A_MESSAGE_LOGS_WILL_BE_SHOWN"
+#define PH_PB_BODY_NAME_PREFIX "IDS_PB_BODY_NAME_PREFIX"
+#define PH_PB_OPT_TAKE_A_PHOTO "IDS_PB_OPT_TAKE_A_PHOTO"
+#define PH_PB_SK_ADD_FIELDS "IDS_PB_SK_ADD_FIELDS"
+#define PH_PB_HEADER_CONTACT_IMAGE "IDS_PB_HEADER_CONTACT_IMAGE"
+#define PH_PB_HEADER_SELECT_SIM_FOR_CALL "IDS_PB_HEADER_SELECT_SIM_FOR_CALL"
+#define PH_PB_BODY_ADD_TO_FAVOURITES "IDS_PB_BODY_ADD_TO_FAVOURITES"
+#define PH_PB_BODY_REMOVE_FROM_FAVOURITES "IDS_PB_BODY_REMOVE_FROM_FAVOURITES"
+#define PH_LOGS_SBODY_MISSEDM_CALL_STATUS "IDS_LOGS_SBODY_MISSEDM_CALL_STATUS"
+#define PH_LOGS_SBODY_CANCELLED_M_STATUS "IDS_LOGS_SBODY_CANCELLED_M_STATUS"
+#define PH_LOGS_SBODY_FAILED_M_STATUS "IDS_LOGS_SBODY_FAILED_M_STATUS"
+#define PH_CALL_BODY_INCOMING_CALL "IDS_CALL_BODY_INCOMING_CALL"
+#define PH_ST_BODY_OUTGOING_CALL "IDS_ST_BODY_OUTGOING_CALL"
+#define PH_PB_NPBODY_NO_EMERGENCY_CONTACTS "IDS_PB_NPBODY_NO_EMERGENCY_CONTACTS"
+#define PH_PB_OPT_FDN_CONTACT "IDS_PB_OPT_FDN_CONTACT"
+#define PH_PB_BODY_UNABLE_TO_SAVE_DUE_TO_SIM_ERROR "IDS_PB_BODY_UNABLE_TO_SAVE_DUE_TO_SIM_ERROR"
+#define PH_PB_HEADER_SHARE_VIA "IDS_PB_HEADER_SHARE_VIA"
+#define PH_PB_BODY_IF_YOUR_SERVICE_PROVIDER_HAS_PRELOADED_SERVICE_NUMBERS_ON_YOUR_SIM_CARD_THEY_WILL_BE_SHOWN_HERE "IDS_PB_BODY_IF_YOUR_SERVICE_PROVIDER_HAS_PRELOADED_SERVICE_NUMBERS_ON_YOUR_SIM_CARD_THEY_WILL_BE_SHOWN_HERE"
+#define PH_PB_BODY_NO_SEARCH_RESULT "IDS_PB_BODY_NO_SEARCH_RESULT"
+#define PH_PB_POP_1_CONTACT_REMOVED "IDS_PB_POP_1_CONTACT_REMOVED"
+#define PH_PB_HEADER_PD_SELECTED_ABB "IDS_PB_HEADER_PD_SELECTED_ABB"
+#define PH_PB_POP_FAILED "IDS_PB_POP_FAILED"
+#define PH_PB_HEADER_PRIMARY_CONTACTS_HP1SD_P2SD_ABB "IDS_PB_HEADER_PRIMARY_CONTACTS_HP1SD_P2SD_ABB"
+#define PH_PB_BODY_AFTER_YOU_ADD_CONTACTS_THEY_WILL_BE_SHOWN_HERE "IDS_PB_BODY_AFTER_YOU_ADD_CONTACTS_THEY_WILL_BE_SHOWN_HERE"
+#define PH_PB_POP_FDN_MODE_ACTIVATED "IDS_PB_POP_FDN_MODE_ACTIVATED"
+#define PH_TPLATFORM_ACBUTTON_SEND_ABB "IDS_TPLATFORM_ACBUTTON_SEND_ABB"
+#define PH_TPLATFORM_ACBUTTON_DONE_ABB "IDS_TPLATFORM_ACBUTTON_DONE_ABB"
+#define PH_TPLATFORM_ACBUTTON_CANCEL_ABB "IDS_TPLATFORM_ACBUTTON_CANCEL_ABB"
+#define PH_TPLATFORM_ACBUTTON_DELETE_ABB "IDS_TPLATFORM_ACBUTTON_DELETE_ABB"
+#define PH_PB_BODY_IMPORTING_ING "IDS_PB_BODY_IMPORTING_ING"
+#define PH_PB_TPOP_PD_CONTACTS_IMPORTED "IDS_PB_TPOP_PD_CONTACTS_IMPORTED"
+#define PH_PB_OPT_ADD_FIELD "IDS_PB_OPT_ADD_FIELD"
+#define PH_PB_POP_ALL_LINKED_CONTACTS_WILL_BE_DELETED "IDS_PB_POP_ALL_LINKED_CONTACTS_WILL_BE_DELETED"
+#define PH_PB_BODY_THIS_CONTACT_WILL_BE_DELETED "IDS_PB_BODY_THIS_CONTACT_WILL_BE_DELETED"
+#define PH_PB_POP_DELETING_CONTACTS_CANCELLED_SOME_CONTACTS_MAY_ALREADY_HAVE_BEEN_DELETED "IDS_PB_POP_DELETING_CONTACTS_CANCELLED_SOME_CONTACTS_MAY_ALREADY_HAVE_BEEN_DELETED"
+#define PH_PB_POP_DELETING_CONTACTS_ING "IDS_PB_POP_DELETING_CONTACTS_ING"
+#define PH_PB_TPOP_1_CONTACT_IMPORTED "IDS_PB_TPOP_1_CONTACT_IMPORTED"
+#define PH_PB_OPT_SHARE_VIA "IDS_PB_OPT_SHARE_VIA"
+#define PH_PB_BODY_PHONETIC_FIRST_NAME_ABB "IDS_PB_BODY_PHONETIC_FIRST_NAME_ABB"
+#define PH_PB_BODY_PHONETIC_MIDDLE_NAME_ABB "IDS_PB_BODY_PHONETIC_MIDDLE_NAME_ABB"
+#define PH_PB_BODY_PHONETIC_LAST_NAME_ABB "IDS_PB_BODY_PHONETIC_LAST_NAME_ABB"
+#define PH_PB_BODY_DEFAULT_GROUP_FAMILY "IDS_PB_BODY_DEFAULT_GROUP_FAMILY"
+#define PH_PB_BODY_CO_WORKERS "IDS_PB_BODY_CO_WORKERS"
+#define PH_PB_BODY_DEFAULT_GROUP_FRIENDS "IDS_PB_BODY_DEFAULT_GROUP_FRIENDS"
+#define PH_PB_BODY_MY_CONTACTS "IDS_PB_BODY_MY_CONTACTS"
+#define PH_PB_POP_SIM_MEMROY_FULL "IDS_PB_POP_SIM_MEMROY_FULL"
+#define PH_PB_POP_UNABLE_TO_ADD_CONTACT_MAXIMUM_NUMBER_OF_LINKABLE_CONTACTS_HPD_REACHED "IDS_PB_POP_UNABLE_TO_ADD_CONTACT_MAXIMUM_NUMBER_OF_LINKABLE_CONTACTS_HPD_REACHED"
+#define PH_PB_POP_UNABLE_TO_ADD_CONTACTS_MAXIMUM_NUMBER_OF_LINKABLE_CONTACTS_HPD_REACHED "IDS_PB_POP_UNABLE_TO_ADD_CONTACTS_MAXIMUM_NUMBER_OF_LINKABLE_CONTACTS_HPD_REACHED"
+#define PH_PB_BODY_TELEPHONE "IDS_PB_BODY_TELEPHONE"
+#define PH_PB_POP_NOT_ENOUGH_MEMORY "IDS_PB_POP_NOT_ENOUGH_MEMORY"
+#define PH_PB_POP_WHEN_SYNC_IS_ENABLED_THIS_CONTACT_AND_ALL_ITS_LINKED_CONTACTS_IN_OTHER_SYNCED_ACCOUNTS_WILL_BE_DELETED_OR_HIDDEN_IF_THE_INFORMATION_MSG "IDS_PB_POP_WHEN_SYNC_IS_ENABLED_THIS_CONTACT_AND_ALL_ITS_LINKED_CONTACTS_IN_OTHER_SYNCED_ACCOUNTS_WILL_BE_DELETED_OR_HIDDEN_IF_THE_INFORMATION_MSG"
+#define PH_PB_POP_YOU_CANNOT_DELETE_CONTACTS_FROM_READ_ONLY_ACCOUNTS_BUT_YOU_CAN_HIDE_THEM_IN_CONTACTS "IDS_PB_POP_YOU_CANNOT_DELETE_CONTACTS_FROM_READ_ONLY_ACCOUNTS_BUT_YOU_CAN_HIDE_THEM_IN_CONTACTS"
+#define PH_KPD_BUTTON_SEND_MESSAGE "IDS_KPD_BUTTON_SEND_MESSAGE"
+
+
+#endif// __PH_STRINGS_H_
diff --git a/lib-phone/ph-common/src/PhCommon.cpp b/lib-phone/ph-common/src/PhCommon.cpp
new file mode 100755
index 0000000..795f583
--- /dev/null
+++ b/lib-phone/ph-common/src/PhCommon.cpp
@@ -0,0 +1,273 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dlfcn.h>
+#include <app.h>
+#include <contacts.h>
+
+#include "ContactsDebug.h"
+#include "ContactsAppControlLauncher.h"
+
+#include "PhPath.h"
+#include "PhCommon.h"
+#include "ContactsCommon.h"
+
+#define UG_CALL_SETTING "setting-call-efl"
+
+#define PH_TEXT_MAX_LEN (1024)
+
+PhCommon::PhCommon()
+{
+}
+
+PhCommon::~PhCommon()
+{
+}
+
+Evas_Object* PhCommon::createImage(Evas_Object* parent, const char* edj, const char* imagePath, const char* colorCode)
+{
+ Evas_Object *icon = elm_image_add(parent);
+ WPRET_VM( NULL == icon, NULL, "elm_image_add() is failed");
+
+ if(edj && *edj)
+ elm_image_file_set(icon, ContactsCommon::getAppEdjePath(edj).c_str(), imagePath);
+ else
+ elm_image_file_set(icon, imagePath, NULL);
+
+ evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ return icon;
+}
+
+Evas_Object* PhCommon::createLayout(Evas_Object* parent, const char* edj, const char* layoutName)
+{
+ Evas_Object *layout = elm_layout_add(parent);
+ WPRET_VM(NULL == layout, NULL, "elm_layout_add() return NULL");
+
+ if(edj && *edj)
+ elm_layout_file_set(layout, ContactsCommon::getAppEdjePath(edj).c_str(), layoutName);
+ else
+ {
+ if(layoutName && *layoutName)
+ elm_layout_theme_set(layout, "layout", layoutName, "default");
+ else
+ elm_layout_theme_set( layout, "layout", "application", "default");
+ }
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(layout);
+
+ return layout;
+}
+
+void PhCommon::image_mask_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ WPRET_M(!obj, "obj is NULL");
+ void *mask = evas_object_image_data_get(obj, EINA_TRUE);
+ if(mask) {
+ free(mask);
+ mask = NULL;
+ }
+}
+
+
+Evas_Object* PhCommon::createButton(Evas_Object* parent, const char* buttonStyle, const char* buttonText, Evas_Smart_Cb clickedCb, void* userData )
+{
+ Evas_Object *button = elm_button_add(parent);
+ WPRET_VM( NULL == button, NULL, "elm_button_add() is failed");
+ if(buttonStyle)
+ elm_object_style_set(button, buttonStyle);
+ if(buttonText)
+ elm_object_text_set(button, buttonText);
+
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_smart_callback_add(button, "clicked", clickedCb, userData);
+ evas_object_show(button);
+
+ return button;
+}
+
+void PhCommon::launchCallSetting(Evas_Object *win, Evas_Object *nf)
+{
+ WHIT();
+ app_control_h service;
+ app_control_create(&service);
+ app_control_set_app_id(service, UG_CALL_SETTING);
+ app_control_set_launch_mode(service, APP_CONTROL_LAUNCH_MODE_GROUP);
+ ContactsAppControlLauncher::getInstance().sendLaunchRequest(service, NULL, NULL, nf);
+}
+
+bool PhCommon::addSpeedDialNumber(int speedNumber, int numberId)
+{
+ contacts_filter_h filter = nullptr;
+ contacts_filter_create(_contacts_speeddial._uri, &filter);
+ contacts_filter_add_int(filter, _contacts_speeddial.number_id, CONTACTS_MATCH_EQUAL, numberId);
+
+ contacts_query_h query = nullptr;
+ contacts_query_create(_contacts_speeddial._uri, &query);
+ contacts_query_set_filter(query, filter);
+
+ contacts_list_h list = nullptr;
+ int err = contacts_db_get_records_with_query(query, 0, 1, &list);
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+ WPRET_VM(err != CONTACTS_ERROR_NONE, false, "contacts_db_get_records_with_query() failed(%d)", err);
+
+ int count = 0;
+ contacts_list_get_count(list, &count);
+ contacts_list_destroy(list, true);
+ if (count > 0) {
+ return false;
+ }
+
+ contacts_record_h record = nullptr;
+ contacts_record_create(_contacts_speeddial._uri, &record);
+ contacts_record_set_int(record, _contacts_speeddial.speeddial_number, speedNumber);
+ contacts_record_set_int(record, _contacts_speeddial.number_id, numberId);
+ err = contacts_db_insert_record(record, nullptr);
+ contacts_record_destroy(record, true);
+ WPRET_VM(err != CONTACTS_ERROR_NONE, false, "contacts_db_insert_record() failed(%d)", err);
+
+ return true;
+}
+
+void PhCommon::terminateChildAppControl(void)
+{
+ ContactsAppControlLauncher::getInstance().terminate();
+}
+
+void PhCommon::adjustMatchedLenForName(const char* displayName, const char* keyword, int* index, int* len)
+{
+ WPRET_M(displayName == NULL, "displayName is NULL");
+ WPRET_M(keyword == NULL, "keyword is NULL");
+ int i = 0;
+ int strLen = strlen(keyword);
+ int charBytes = 0;;
+
+ while(i < (int)strlen(displayName) && *index > i)
+ {
+ charBytes = __checkUtf8(displayName[i]);
+ *index += (charBytes-1);
+ i += charBytes;
+ }
+
+ i = *index;
+ while(i < (int)strlen(displayName) && strLen > 0)
+ {
+ charBytes = __checkUtf8(displayName[i]);
+ *len += (charBytes-1);
+ i += charBytes;
+ strLen--;
+ }
+}
+
+int PhCommon::__checkUtf8(char c)
+{
+ if (c < 128)
+ return 1;
+ else if ((c & (char)0xe0) == (char)0xc0)
+ return 2;
+ else if ((c & (char)0xf0) == (char)0xe0)
+ return 3;
+ else if ((c & (char)0xf8) == (char)0xf0)
+ return 4;
+ else if ((c & (char)0xfc) == (char)0xf8)
+ return 5;
+ else if ((c & (char)0xfe) == (char)0xfc)
+ return 6;
+ else
+ return -1;
+}
+
+int PhCommon::getSavedNumberStartIndex(const char* source, const char* keyword)
+{
+ int pos = -1;
+ std::string tmp = ContactsCommon::removeNumberDashes(source);
+ if (tmp.c_str()) {
+ if(strstr(tmp.c_str(), keyword)) {
+ pos = (strstr(tmp.c_str(), keyword) - tmp.c_str());
+ }
+ }
+ return pos;
+}
+
+void PhCommon::adjustMatchedLenForNum(const char* number, const char* keyword, int* index, int* len)
+{
+ WPRET_M(number == NULL, "number is NULL");
+ WPRET_M(keyword == NULL, "keyword is NULL");
+ int i = 0;
+ int strLen = strlen(keyword);
+ int charBytes = 0;;
+
+ while (i < (int)strlen(number) && *index > i)
+ {
+ charBytes = __checkUtf8(number[i]);
+
+ if(__isDash(number[i])) {
+ *index += charBytes;
+ i++;
+ }
+ else {
+ *index += (charBytes-1);
+ i += charBytes;
+ }
+ }
+
+ while (__isDash(number[*index])) {
+ *index += 1;
+ }
+
+ i = *index;
+ while (i < (int)strlen(number) && strLen > 0)
+ {
+ charBytes = __checkUtf8(number[i]);
+
+ if(__isDash(number[i])) {
+ *len += charBytes;
+ i++;
+ }
+ else {
+ *len += (charBytes-1);
+ i += charBytes;
+ strLen--;
+ }
+ }
+}
+
+bool PhCommon::__isDash(char ch)
+{
+ if (ch == '-' || ch == '(' || ch == ')' || ch == ' ') {
+ return true;
+ }
+ return false;
+}
+
+std::string PhCommon::convert2MarkupString(const char* source)
+{
+ WPRET_VM(source == NULL, "", "source is NULL");
+ std::string markupStr;
+ char *temp = elm_entry_utf8_to_markup(source);
+
+ if(temp)
+ {
+ markupStr = temp;
+ free(temp);
+ return markupStr;
+ }
+ else
+ return "";
+}
diff --git a/lib-phone/ph-dialer/.cproject b/lib-phone/ph-dialer/.cproject
new file mode 100644
index 0000000..4fd20e9
--- /dev/null
+++ b/lib-phone/ph-dialer/.cproject
@@ -0,0 +1,594 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-dialer" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.so.debug">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug.1901856276" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.109029664" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder autoBuildTarget="all" buildPath="${workspace_loc:/ph-dialer}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.33649487" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1405004172" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1950179025" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.315623720" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.1861914823" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1074302357" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.1760981851" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1951899281" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1138204775" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1198911347" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc/app-assist}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/dbus}&quot;"/>
+ <listOptionValue builtIn="false" value="../../../app-assist-efl/inc"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1703854218" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.preprocessor.def.1422240551" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ <listOptionValue builtIn="false" value="TIZEN_DEBUG_ENABLE"/>
+ <listOptionValue builtIn="false" value="_SDK_BUILD"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.other.other.1518675757" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++0x" valueType="string"/>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.2136307221"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.560868363" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1466654101" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.1448906718" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.790106586" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.2088959274" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.305788398" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1437660569" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1449885404" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.1143175968" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.c.compiler.option.preprocessor.def.symbols.556123847" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.1271839318"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.187306255" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1746596689" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1561214539" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.1602429789" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.487061050" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1725268383" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="../../../app-assist-efl/Debug"/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.1672653320" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="common"/>
+ <listOptionValue builtIn="false" value="ph-common"/>
+ <listOptionValue builtIn="false" value="carriermatch"/>
+ <listOptionValue builtIn="false" srcPrefixMapping="" srcRootPath="" value="app-assist-efl"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2001966770" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1663226854" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1653697587" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.854294349" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.914715388" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.730258204" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1802661538" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.2114540036" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.945547352" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067.1970268669" name="/" resourcePath="dbus">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug.1698842383" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug" unusedChildren="">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1862062100" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.1405004172"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1950179025">
+ <option id="gnu.cpp.compiler.option.include.paths.1862024141" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/dbus}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.801747878" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.2055251519"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.1212492831"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.1127111318"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.536892725"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.983250407"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.328190824"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.677325310"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.864011291"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.700307932"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288">
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1235218917" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1563160697"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1071647721"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.769788277"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1030493901"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1783671564"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.997359349"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.705477442"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.65243218"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1155268849"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.578327765" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1746596689"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1274254929" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1561214539"/>
+ <tool id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1226503116" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1663226854">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1421785689" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.1714536879" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.730258204"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.226210515" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp.1802661538"/>
+ <tool id="org.tizen.nativecore.tool.ast.1435515500" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast.2114540036"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.981231587" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp.945547352"/>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1245617004" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler.854294349"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.668555117" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler.914715388"/>
+ </toolChain>
+ </folderInfo>
+ <fileInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067.1505275290" name="dbus_async_base.c" rcbsApplicability="disable" resourcePath="dbus/dbus_async_base.c" toolsToInvoke="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227">
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288">
+ <option id="gnu.c.compiler.option.include.paths.699057084" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.726109033" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.261590111"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1451193473"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1132199515"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1591402278"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.62950640"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1833409931"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.2031417097"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.2039087771"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1097643191"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.569597624"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1348198631"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1341746581"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.317438633"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.377523416"/>
+ </tool>
+ </fileInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="dbus"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-dialer" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.so.release">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.release.2103970634" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.release">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.482636569" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder buildPath="${workspace_loc:/ph-dialer}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1168087568" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.582015912" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.2112780933" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.1070303096" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.1116646323" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.983700984" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.583665033" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1528573108" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.527401068" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1695246603" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.269168654" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.387448962"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1176017145" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.631239000" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1093071292" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.577917793" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.1659273903" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.1632820987" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1999072555" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1884899962" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1481984696" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.947209727" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.443814160"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1326071906" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1440071815" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.759705633" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.419497209" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1194318619" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1675585394" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1090659610" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1451815898" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.967540411" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.555891162" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1519348535" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.881350209" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1758335872" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.139286310" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.295723611" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="ph-dialer.org.tizen.nativecore.target.sbi.gcc45.so.738986982" name="Tizen Core Shared Library" projectType="org.tizen.nativecore.target.sbi.gcc45.so"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="org.tizen.tizen.nativeapp.projectInfo" version="1.0.0"/>
+ <storageModule moduleId="refreshScope" versionNumber="2">
+ <configuration configurationName="Release">
+ <resource resourceType="PROJECT" workspacePath="/ph-dialer"/>
+ </configuration>
+ <configuration configurationName="Debug">
+ <resource resourceType="PROJECT" workspacePath="/ph-dialer"/>
+ </configuration>
+ </storageModule>
+</cproject>
diff --git a/lib-phone/ph-dialer/.project b/lib-phone/ph-dialer/.project
new file mode 100644
index 0000000..5cc7b71
--- /dev/null
+++ b/lib-phone/ph-dialer/.project
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ph-dialer</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.nativecore.apichecker.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ <nature>org.tizen.nativecore.apichecker.core.tizenCppNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1413282659403</id>
+ <name></name>
+ <type>26</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/lib-phone/ph-dialer/.tproject b/lib-phone/ph-dialer/.tproject
new file mode 100644
index 0000000..f1cc1fd
--- /dev/null
+++ b/lib-phone/ph-dialer/.tproject
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+ <platforms>
+ <platform>
+ <name>mobile-2.3</name>
+ </platform>
+ </platforms>
+ <package>
+ <blacklist/>
+ </package>
+</tproject>
diff --git a/lib-phone/ph-dialer/CMakeLists.txt b/lib-phone/ph-dialer/CMakeLists.txt
new file mode 100755
index 0000000..4ed5da4
--- /dev/null
+++ b/lib-phone/ph-dialer/CMakeLists.txt
@@ -0,0 +1,26 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ph-dialer CXX)
+
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/lib-common/inc
+ ${CMAKE_SOURCE_DIR}/app-assist-efl/inc
+ ${CMAKE_SOURCE_DIR}/lib-phone/ph-common/inc
+ ${CMAKE_SOURCE_DIR}/lib-phone/ph-speeddial/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc/predictive-number
+ ${CMAKE_CURRENT_SOURCE_DIR}/res/edje
+)
+
+FILE(GLOB_RECURSE SRCS "src/*.cpp")
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${TIZEN_PKGS_LDFLAGS}
+ "app-assist-efl"
+ "contacts-common"
+ "ph-common"
+ "ph-speeddial"
+)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_APP_LIB_DIR})
+
+ADD_SUBDIRECTORY(res/edje)
diff --git a/lib-phone/ph-dialer/inc/PhDialerAddToContactsPopup.h b/lib-phone/ph-dialer/inc/PhDialerAddToContactsPopup.h
new file mode 100644
index 0000000..aff43d0
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerAddToContactsPopup.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __PH_DIALER_ADD_TO_CONTACTS_POPUP_H__
+#define __PH_DIALER_ADD_TO_CONTACTS_POPUP_H__
+
+#include "WPopup.h"
+#include <Elementary.h>
+
+class PhDialerAddToContactsPopup : public WPopup
+{
+public:
+ PhDialerAddToContactsPopup(std::string number);
+
+private:
+ virtual Evas_Object *onCreate(Evas_Object *parent, void *param);
+
+ Evas_Object *createGenlist(Evas_Object *parent);
+ Elm_Genlist_Item_Class *createItemClass();
+ static char *getItemText(void *data, Evas_Object *obj, const char *part);
+
+ static void launchContactCreate(void *data, Evas_Object *obj, void *event_info);
+ static void launchContactUpdate(void *data, Evas_Object *obj, void *event_info);
+
+ std::string m_Number;
+};
+
+#endif /* __PH_DIALER_ADD_TO_CONTACTS_POPUP_H__ */
diff --git a/lib-phone/ph-dialer/inc/PhDialerEntry.h b/lib-phone/ph-dialer/inc/PhDialerEntry.h
new file mode 100644
index 0000000..ed4b6dd
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerEntry.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_ENTRY_H_
+#define _PH_DIALER_ENTRY_H_
+
+#include "WControl.h"
+#include <string>
+#include <functional>
+
+class PhDialerEntry : public WControl
+{
+public:
+ /**
+ * @return Entered number
+ */
+ std::string getNumber();
+
+ /**
+ * @brief Set number
+ */
+ void setNumber(const std::string &number);
+
+ /**
+ * @brief Insert character at the cursor position.
+ * @param c Character to insert
+ */
+ void insert(char c);
+
+ /**
+ * @brief Remove last character from the current entry.
+ */
+ void popBack();
+
+ /**
+ * @brief Erase current entry.
+ */
+ void clear();
+
+ /**
+ * @brief Set changed event callback.
+ */
+ void setOnChanged(std::function<void(PhDialerEntry&)> callback);
+
+private:
+ virtual Evas_Object *onCreate(Evas_Object *parent, void *param);
+
+ static void onChanged(void *data, Evas_Object *obj, void *event_info);
+
+ std::function<void(PhDialerEntry&)> m_Changed;
+};
+
+#endif /* _PH_DIALER_ENTRY_H_ */
diff --git a/lib-phone/ph-dialer/inc/PhDialerKey.h b/lib-phone/ph-dialer/inc/PhDialerKey.h
new file mode 100644
index 0000000..b085ffb
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerKey.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_KEY_H_
+#define _PH_DIALER_KEY_H_
+
+#include "WButton.h"
+
+class PhDialerKey : public WButton
+{
+public:
+ enum Id
+ {
+ ID_1,
+ ID_2,
+ ID_3,
+ ID_4,
+ ID_5,
+ ID_6,
+ ID_7,
+ ID_8,
+ ID_9,
+ ID_STAR,
+ ID_0,
+ ID_SHARP,
+ };
+
+ /**
+ * @brief Create dialer key.
+ * @param id Key ID
+ */
+ PhDialerKey(Id id);
+
+ /**
+ * @return Key character value.
+ */
+ char getValue() const;
+
+ /**
+ * @return Key ID.
+ */
+ Id getId() const;
+
+private:
+ virtual Evas_Object *onCreate(Evas_Object *parent, void *param);
+ static void onMouseDown(void *data, Evas *e, Evas_Object *obj, void *event_info);
+ static void onMouseUp(void *data, Evas *e, Evas_Object *obj, void *event_info);
+
+ Id m_Id;
+ char m_Value;
+ int m_Tone;
+};
+
+#endif /* _PH_DIALER_KEY_H_ */
diff --git a/lib-phone/ph-dialer/inc/PhDialerResultListPopup.h b/lib-phone/ph-dialer/inc/PhDialerResultListPopup.h
new file mode 100644
index 0000000..a6e90f9
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerResultListPopup.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_RESULT_LIST_POPUP_H_
+#define _PH_DIALER_RESULT_LIST_POPUP_H_
+
+#include "PhDialerPredictiveNumberTypes.h"
+#include "WPopup.h"
+#include <Elementary.h>
+
+class PhDialerEntry;
+
+class PhDialerResultListPopup : public WPopup
+{
+public:
+ /**
+ * @brief Constructor
+ * @param[in] result Search data
+ * @param[in] entry Dialer entry
+ */
+ PhDialerResultListPopup(const Ph::Dialer::SearchList &result, PhDialerEntry &entry);
+
+private:
+ virtual Evas_Object *onCreate(Evas_Object *parent, void *param);
+ Evas_Object *createContactList(Evas_Object *parent);
+ Elm_Genlist_Item_Class *createItemClass();
+ static char *getItemText(void *data, Evas_Object *obj, const char *part);
+
+ static void onItemClicked(void *data, Evas_Object *obj, void *event_info);
+
+ const Ph::Dialer::SearchList &m_Result;
+ PhDialerEntry &m_Entry;
+};
+
+#endif //_PH_DIALER_RESULT_LIST_POPUP_H_
diff --git a/lib-phone/ph-dialer/inc/PhDialerSearchController.h b/lib-phone/ph-dialer/inc/PhDialerSearchController.h
new file mode 100644
index 0000000..ed761c9
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerSearchController.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_SEARCH_CONTROLLER_H_
+#define _PH_DIALER_SEARCH_CONTROLLER_H_
+
+#include <memory>
+#include <Evas.h>
+
+class PhDialerEntry;
+class PhDialerView;
+
+namespace Ph
+{
+ namespace Dialer
+ {
+ class PredictiveNumber;
+ class SearchInfo;
+ }
+}
+
+class PhDialerSearchController
+{
+public:
+ PhDialerSearchController();
+ ~PhDialerSearchController();
+
+ /**
+ * @brief Creates predictive layout
+ * @param[in] view Parent view
+ */
+ void create(PhDialerView &view);
+
+private:
+ enum class LayoutType
+ {
+ NONE,
+ NO_CONTACTS,
+ ONE_CONTACT,
+ FEW_CONTACTS
+ };
+
+private:
+ void onEntryChanged(PhDialerEntry &entry);
+
+ void setLayout(const std::string &number);
+ void setNoContactsLayout();
+ void setLayoutWithContacts(const Ph::Dialer::SearchInfo &info);
+ void setResultLayout(Evas_Object *parent, size_t count);
+
+ void createSpeeddialLayout(Evas_Object *parent, const Ph::Dialer::SearchInfo &info);
+
+ static void fillPredictiveLayout(Evas_Object *layout, const Ph::Dialer::SearchInfo &info);
+
+ static void showResulListPopup(void *data, Evas *e, Evas_Object *obj, void *event_info);
+
+ static void createAddToContactsPopup(void* data, Evas* e, Evas_Object* obj, void* event_info);
+
+ static void onDbChanged(const char *view_uri, void *data);
+
+ PhDialerView *m_View;
+
+ std::unique_ptr<Ph::Dialer::PredictiveNumber> m_PredictiveNumber;
+
+ LayoutType m_CurrentLayoutType;
+ Evas_Object *m_Layout;
+ Evas_Object *m_ResultLayout;
+};
+
+#endif //_PH_DIALER_SEARCH_CONTROLLER_H_
diff --git a/lib-phone/ph-dialer/inc/PhDialerSpeeddialPopup.h b/lib-phone/ph-dialer/inc/PhDialerSpeeddialPopup.h
new file mode 100644
index 0000000..25b2eaa
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerSpeeddialPopup.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_SPEEDDIAL_POPUP_H_
+#define _PH_DIALER_SPEEDDIAL_POPUP_H_
+
+#include "WPopup.h"
+#include <app_control.h>
+
+class PhDialerSpeeddialPopup : public WPopup
+{
+public:
+ PhDialerSpeeddialPopup(int speedNumber);
+
+private:
+ virtual Evas_Object *onCreate(Evas_Object* parent, void* param);
+ void onOkPressed(bool *destroyPopup);
+
+ static void onPickResult(app_control_h request, app_control_h reply,
+ app_control_result_e result, void *data);
+
+ int m_SpeedNumber;
+};
+
+#endif /* _PH_DIALER_SPEEDDIAL_POPUP_H_ */
diff --git a/lib-phone/ph-dialer/inc/PhDialerView.h b/lib-phone/ph-dialer/inc/PhDialerView.h
new file mode 100644
index 0000000..a8675c0
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/PhDialerView.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_VIEW_H_
+#define _PH_DIALER_VIEW_H_
+
+#include "IContactsTabPageView.h"
+#include <string>
+
+class WButton;
+class PhDialerEntry;
+class PhDialerSearchController;
+
+class WAPP_ASSIST_EXPORT PhDialerView : public IContactsTabPageView
+{
+public:
+ PhDialerView();
+ ~PhDialerView();
+
+ /**
+ * @brief Sets predictive layout
+ * @param[in] layout Layout with predictive search results
+ */
+ void setPredictiveLayout(Evas_Object *layout);
+
+ /**
+ * @return dialer entry
+ */
+ PhDialerEntry *getEntry() const;
+
+ /**
+ * @brief set number
+ * @param[in] number Number
+ */
+ void setNumber(std::string& number);
+
+private:
+ virtual Evas_Object *onCreate(Evas_Object *parent, void *viewParam);
+ virtual void onPush(Elm_Object_Item *naviItem);
+ virtual void onTabSelect(Elm_Object_Item *naviItem);
+ virtual void onTabUnselect(Elm_Object_Item *naviItem);
+ virtual bool onTabPop();
+ virtual void onTabScrollStart();
+ virtual void onTabScrollStop();
+
+ Evas_Object *createKeypad(Evas_Object *parent);
+ Evas_Object *createCallButton(Evas_Object *parent);
+ Evas_Object *createBackspaceButton(Evas_Object *parent);
+
+ void onKeyPressed(WButton &button);
+ bool onKeyLongpressed(WButton &button);
+
+ void onBackspacePressed(WButton &button);
+ bool onBackspaceLongpressed(WButton &button);
+
+ static void onCallPressed(void *data, Evas_Object *obj, void *event_info);
+ static void onMenuPressed(void *data, Evas_Object *obj, void *event_info);
+
+ void onSendMessage();
+ void onAddWait();
+ void onAddPause();
+ void onSpeeddialSettings();
+ void onCallSettings();
+
+ static void launchCall(const std::string &number);
+ void launchSpeeddial(int digit);
+ static std::string getSpeeddialNumber(int digit);
+ static std::string getLastNumber();
+
+ PhDialerEntry *m_Entry;
+ PhDialerSearchController *m_Controller;
+ std::string m_InitialNumber;
+};
+
+#endif /* _PH_DIALER_VIEW_H_ */
diff --git a/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumber.h b/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumber.h
new file mode 100644
index 0000000..0d5c0d5
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumber.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_PREDICTIVE_NUMBER_
+#define _PH_DIALER_PREDICTIVE_NUMBER_
+
+#include <string>
+
+#include "PhDialerSearchInfo.h"
+#include "PhDialerPredictiveNumberTypes.h"
+
+namespace Ph {
+
+ namespace Dialer {
+
+ /**
+ * @brief This class provides incremental search logic for predictive number functionality
+ */
+ class PredictiveNumber
+ {
+ public:
+ PredictiveNumber();
+
+ /**
+ * @brief Perform incremental search
+ * @param[in] number Value to find
+ */
+ void search(const std::string &number);
+
+ /**
+ * @brief Retrieves result list
+ * @return Result list or nullptr on empty list
+ */
+ const SearchList *getSearchResult() const;
+
+ /**
+ * @return true if there is no results, otherwise false
+ */
+ bool empty() const;
+
+ /**
+ * @brief make search like a first time
+ * @param[in] number value to find
+ */
+ void searchFromScratch(const std::string &number);
+
+ private:
+ void distinctLogs(SearchList &searchList);
+ void firstSearch(const std::string &number);
+ SearchList searchInDB(const std::string &number);
+ void chooseSearch(const std::string &number);
+
+ bool searchInCache(Cache::iterator from, const std::string &number);
+ Cache::reverse_iterator firstMismatch(const std::string &number);
+ Cache::reverse_iterator skipEmptyResults(size_t offset);
+
+ void clear();
+
+ bool needSearch(const std::string &number);
+
+ std::string m_Number;
+ Cache m_PredictiveNumberCache;
+ int m_LastFoundIndex;
+ };
+ }
+}
+
+#endif //_PH_DIALER_PREDICTIVE_NUMBER_
diff --git a/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberTypes.h b/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberTypes.h
new file mode 100644
index 0000000..988f63d
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberTypes.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_PREDICTIVE_NUMBER_TYPES_H_
+#define _PH_DIALER_PREDICTIVE_NUMBER_TYPES_H_
+
+#include "PhDialerSearchInfo.h"
+#include <memory>
+#include <vector>
+
+namespace Ph {
+
+ namespace Dialer {
+ //Smart pointer on SearchInfo
+ typedef std::shared_ptr<SearchInfo> PSearchInfo;
+
+ //List of searchable results
+ typedef std::vector<PSearchInfo> SearchList;
+
+ //History of results
+ typedef std::vector<SearchList> Cache;
+ }
+}
+
+#endif //_PH_DIALER_PREDICTIVE_NUMBER_TYPES_H_
diff --git a/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberUtils.h b/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberUtils.h
new file mode 100644
index 0000000..0bfc676
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/predictive-number/PhDialerPredictiveNumberUtils.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_PREDICTIVE_NUMBER_UTILS_H_
+#define _PH_DIALER_PREDICTIVE_NUMBER_UTILS_H_
+
+#include <string>
+#include <contacts.h>
+#include <Evas.h>
+
+namespace Ph {
+
+ namespace Dialer {
+
+ namespace Utils {
+
+ /**
+ * @param[in] number Speed dial number
+ * @return contact with speed dial matched @a number
+ */
+ contacts_list_h getSpeedDial(char number);
+
+ /**
+ * @param[in] digit Digit in log number
+ * @return log list with numbers contains @a digit
+ */
+ contacts_list_h getLogList(char digit);
+
+ /**
+ * @param[in] digit Digit on keypad
+ * @return contacts list with names contains @a digit on phone keypad
+ */
+ contacts_list_h getContactListByName(char digit);
+
+ /**
+ * @param[in] digit Digit in contact's number
+ * @return contacts list with numbers contains @a digit
+ */
+ contacts_list_h getContactListByNumber(char digit);
+
+ /**
+ * @param[in] name Contact name
+ * @return converted contact name to letter mask
+ */
+ std::string contactNameToMask(const std::string &name);
+
+ /**
+ * param[in] parent Parent layout
+ * param[in] contactId Contact ID
+ */
+ Evas_Object *createThumbnail(Evas_Object *parent, int contactId);
+ }
+ }
+}
+
+#endif //_PH_DIALER_PREDICTIVE_NUMBER_UTILS_H_
diff --git a/lib-phone/ph-dialer/inc/predictive-number/PhDialerSearchInfo.h b/lib-phone/ph-dialer/inc/predictive-number/PhDialerSearchInfo.h
new file mode 100644
index 0000000..e978b02
--- /dev/null
+++ b/lib-phone/ph-dialer/inc/predictive-number/PhDialerSearchInfo.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_SEARCH_INFO_H_
+#define _PH_DIALER_SEARCH_INFO_H_
+
+#include <string>
+#include <contacts.h>
+
+/**
+ * @brief This class provides contact info for predictive number functionality
+ */
+namespace Ph {
+ namespace Dialer {
+
+ enum InfoType {
+ IT_NONE = -1,
+ IT_SPEED_DIAL,
+ IT_LOG,
+ IT_NAME,
+ IT_NUMBER,
+ IT_MAX
+ };
+
+ class SearchInfo
+ {
+ public:
+ SearchInfo(InfoType type, const contacts_record_h record = NULL);
+
+ /**
+ * @brief Gets searchable string, according to info type
+ * @return Returns searchable string
+ */
+ std::string getSearchString() const;
+
+ /**
+ * @return info type value on successfully constructed object, otherwise IT_NONE value
+ */
+ InfoType getType() const;
+
+ /**
+ * @return contact ID on success or 0 if object constructed with errors
+ */
+ int getId() const;
+
+ /**
+ * @return speeddial ID on success or 0 if object constructed with errors
+ */
+ int getSpeedDialId() const;
+
+ /**
+ * @brief Gets normal or highlighted name
+ * @param[in] isHighlighted Should highlighted name be returned
+ * @return name of contact
+ *
+ * @remark This function returns reference to string,
+ * it should be used before object destruction
+ */
+ const std::string &getName(bool isHighlighted) const;
+
+ /**
+ * @brief Gets normal or highlighted number
+ * @param[in] isHighlighted Should highlighted number be returned
+ * @return number of contact
+ *
+ * @remark This function returns reference to string,
+ * it should be used before object destruction
+ */
+ const std::string &getNumber(bool isHighlighted) const;
+
+ /**
+ * @return highlighted text
+ *
+ * @remark This function returns reference to string,
+ * it should be used before object destruction
+ */
+ const std::string &getHighlightedText() const;
+
+ /**
+ * @brief Highlights match text
+ * @param[in] searchStr Search string
+ * @return true if text was highlighted
+ */
+ bool updateHighlightText(const std::string searchStr, size_t position);
+
+ private:
+ bool fillWithRecord(InfoType type, const contacts_record_h record);
+ void fillSpeedDial(const contacts_record_h record);
+ void fillLog(const contacts_record_h record);
+ void fillContact(InfoType type, const contacts_record_h record);
+
+ InfoType m_Type;
+ int m_Id;
+ int m_SpeedDialId;
+ std::string m_MaskedName;
+ std::string m_Name;
+ std::string m_Number;
+ std::string m_HighlightedText;
+ };
+ }
+}
+
+#endif //_PH_DIALER_SEARCH_INFO_H_
diff --git a/lib-phone/ph-dialer/res/edje/CMakeLists.txt b/lib-phone/ph-dialer/res/edje/CMakeLists.txt
new file mode 100644
index 0000000..aebb2a6
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/CMakeLists.txt
@@ -0,0 +1,30 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(PH_EDJ_PATH "${CMAKE_APP_RES_DIR}/edje/phone")
+
+ADD_CUSTOM_TARGET(ph-dialer-layout.edj
+ COMMAND edje_cc ${EDJE_CFLAGS}
+ -id ${CMAKE_CURRENT_SOURCE_DIR}/../images
+ ${CMAKE_CURRENT_SOURCE_DIR}/ph-dialer-layout.edc ph-dialer-layout.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ph-dialer-layout.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} ph-dialer-layout.edj)
+INSTALL(FILES ph-dialer-layout.edj DESTINATION ${PH_EDJ_PATH})
+
+ADD_CUSTOM_TARGET(ph-dialer-keypad.edj
+ COMMAND edje_cc ${EDJE_CFLAGS}
+ -id ${CMAKE_CURRENT_SOURCE_DIR}/../images
+ ${CMAKE_CURRENT_SOURCE_DIR}/ph-dialer-keypad.edc ph-dialer-keypad.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ph-dialer-keypad.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} ph-dialer-keypad.edj)
+INSTALL(FILES ph-dialer-keypad.edj DESTINATION ${PH_EDJ_PATH})
+
+ADD_CUSTOM_TARGET(ph-dialer-predictive.edj
+ COMMAND edje_cc ${EDJE_CFLAGS}
+ -id ${CMAKE_CURRENT_SOURCE_DIR}/../images
+ ${CMAKE_CURRENT_SOURCE_DIR}/ph-dialer-predictive.edc ph-dialer-predictive.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ph-dialer-predictive.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} ph-dialer-predictive.edj)
+INSTALL(FILES ph-dialer-predictive.edj DESTINATION ${PH_EDJ_PATH})
diff --git a/lib-phone/ph-dialer/res/edje/PhDialerLayout.h b/lib-phone/ph-dialer/res/edje/PhDialerLayout.h
new file mode 100644
index 0000000..de831f8
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/PhDialerLayout.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_LAYOUT_H_
+#define _PH_DIALER_LAYOUT_H_
+
+#define GROUP_DIALER "dialer"
+#define PART_SWALLOW_ENTRY "swallow.entry"
+#define PART_SWALLOW_PREDICTIVE "swallow.predictive"
+#define PART_SWALLOW_KEYPAD "swallow.keypad"
+#define PART_SWALLOW_CALL "swallow.call"
+#define PART_SWALLOW_BACKSPACE "swallow.backspace"
+
+#define GROUP_PREDICTIVE_NO_RESULTS "predictive_noresults"
+#define PART_TEXT_ADD "text.add"
+
+#define GROUP_PREDICTIVE "predictive"
+#define PART_SWALLOW_THUMBNAIL "swallow.thumbnail"
+#define PART_SWALLOW_SPEEDDIAL "swallow.speeddial"
+#define PART_TEXT_NAME "text.name"
+#define PART_TEXT_NUMBER "text.number"
+#define PART_TEXT_1_LINE "text.1line"
+#define PART_SWALLOW_RESULTS "swallow.results"
+
+#define GROUP_SPEEDDIAL_NUMBER "speeddial_number"
+
+#define GROUP_PREDICTIVE_RES_COUNT "predictive_res_count"
+#define PART_TEXT_COUNT "text.count"
+#define PART_SWALLOW_ARROW "swallow.arrow"
+
+#define KEYPAD_NUMBER_1 "keypad_number_01"
+#define KEYPAD_NUMBER_2 "keypad_number_02"
+#define KEYPAD_NUMBER_3 "keypad_number_03"
+#define KEYPAD_NUMBER_4 "keypad_number_04"
+#define KEYPAD_NUMBER_5 "keypad_number_05"
+#define KEYPAD_NUMBER_6 "keypad_number_06"
+#define KEYPAD_NUMBER_7 "keypad_number_07"
+#define KEYPAD_NUMBER_8 "keypad_number_08"
+#define KEYPAD_NUMBER_9 "keypad_number_09"
+#define KEYPAD_NUMBER_ASTERISK "keypad_number_asterisk"
+#define KEYPAD_NUMBER_0 "keypad_number_00"
+#define KEYPAD_NUMBER_SHARP "keypad_number_sharp"
+
+#define KEYPAD_LETTERS_2 "keypad_english_01"
+#define KEYPAD_LETTERS_3 "keypad_english_02"
+#define KEYPAD_LETTERS_4 "keypad_english_03"
+#define KEYPAD_LETTERS_5 "keypad_english_04"
+#define KEYPAD_LETTERS_6 "keypad_english_05"
+#define KEYPAD_LETTERS_7 "keypad_english_06"
+#define KEYPAD_LETTERS_8 "keypad_english_07"
+#define KEYPAD_LETTERS_9 "keypad_english_08"
+#define KEYPAD_LETTERS_0 "keypad_english_10"
+
+#define BUTTON_CALL "keypad_ic_call"
+#define BUTTON_BACKSPACE "keypad_ic_back"
+
+#define PREDICTIVE_ADD "keypad_speed_dial_add"
+
+#define PREDICTIVE_RESULTS_MASK "predictive_results_mask"
+#define PREDICTIVE_ARROW "keypad_predictive_arrow"
+
+#define SPEEDDIAL_IC_BG "keypad_speed_dial_ic_bg.#"
+#define SPEEDDIAL_IC "keypad_speed_dial_ic"
+#define PART_TEXT_NUMBER "text.number"
+
+#define BUTTON_CALL_NORMAL 89, 176, 58, 255
+#define BUTTON_CALL_PRESSED 127, 184, 106, 255
+
+#endif /* _PH_DIALER_LAYOUT_H_ */
diff --git a/lib-phone/ph-dialer/res/edje/PhDialerLayoutColors.h b/lib-phone/ph-dialer/res/edje/PhDialerLayoutColors.h
new file mode 100644
index 0000000..161ba41
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/PhDialerLayoutColors.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_LAYOUT_COLORS_H_
+#define _PH_DIALER_LAYOUT_COLORS_H_
+
+color_classes {
+ color_class {//AO005
+ name: "keypad_bg_normal";
+ color: 255 255 255 255;
+ }
+ color_class {//AO005P
+ name: "keypad_bg_pressed";
+ color: 61 185 204 77;
+ }
+ color_class {//AO003
+ name: "button_number";
+ color: 0 0 0 217;
+ }
+ color_class {//AO003D
+ name: "button_number_pressed";
+ color: 0 0 0 77;
+ }
+ color_class {//AO004
+ name: "button_letter";
+ color: 51 51 51 205;
+ }
+ color_class {//AO004D
+ name: "button_letter_pressed";
+ color: 51 51 51 64;
+ }
+ color_class {//AO002
+ name: "action_button_normal";
+ color: 90 176 58 255;
+ }
+ color_class {//AO002D
+ name: "action_button_pressed";
+ color: 120 84 97 255;
+ }
+ color_class {//AO008
+ name: "divider_bg";
+ color: 217 217 217 255;
+ }
+ color_class {//AO006
+ name: "predictive_bg";
+ color: 255 255 255 26;
+ }
+ color_class {
+ name: "predictive_bg_pressed";
+ color: 0 0 0 26;
+ }
+ color_class {//A03O003L1
+ name: "predictive_icon";
+ color: 61 185 204 128;
+ }
+ color_class {//A03O003
+ name: "predictive_icon_bg";
+ color: 255 255 255 255;
+ }
+ color_class {//AO001
+ name: "action_panel_bg";
+ color: 255 255 255 255;
+ }
+ color_class {//AO014
+ name: "action_button_icon_normal";
+ color: 255 255 255 255;
+ }
+ color_class {
+ name: "back_button_icon_normal";
+ color: 180 180 180 255;
+ }
+ color_class {//AO014D
+ name: "action_button_icon_pressed";
+ color: 255 255 255 128;
+ }
+ color_class {
+ name: "transparent_bg";
+ color: 0 0 0 0;
+ }
+ color_class {//AO027
+ name: "speeddial_ic_bg";
+ color: 250 250 250 102;
+ }
+}
+
+#endif /* _PH_DIALER_LAYOUT_COLORS_H_ */
diff --git a/lib-phone/ph-dialer/res/edje/PhDialerLayoutMetrics.h b/lib-phone/ph-dialer/res/edje/PhDialerLayoutMetrics.h
new file mode 100644
index 0000000..b3e9988
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/PhDialerLayoutMetrics.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_DIALER_LAYOUT_METRICS_H_
+#define _PH_DIALER_LAYOUT_METRICS_H_
+
+#define TOTAL_W 720
+#define TOTAL_H 1120
+
+#define ENTRY_H 296
+#define PREDICTIVE_H 144
+#define KEYPAD_H 528
+#define ACTION_PANEL_H 152
+
+#define BUTTON_NUMBER_W 238
+#define BUTTON_NUMBER_H 130
+#define DIVIDER_SIZE 2
+
+#define BUTTON_PART_W 108
+#define BUTTON_PART_NUMBER_H 71
+#define BUTTON_PART_LETTERS_H 36
+
+#define OFFSET_BUTTON_PART_X 65
+#define OFFSET_BUTTON_PART_Y 12
+
+#define ACTION_BUTTONS_H 152
+
+#define BUTTON_CALL_SIZE 104
+#define BUTTON_CALL_X ((TOTAL_W - BUTTON_CALL_SIZE) / 2)
+#define BUTTON_CALL_Y ((ACTION_BUTTONS_H - BUTTON_CALL_SIZE) / 2)
+
+#define BUTTON_BACKSPACE_SIZE 90
+#define BUTTON_BACKSPACE_X 82
+#define BUTTON_BACKSPACE_Y ((ACTION_BUTTONS_H - BUTTON_BACKSPACE_SIZE) / 2)
+
+#define PREDICTIVE_PICTURE_BG_W 162
+#define PREDICTIVE_PICTURE_SIZE 98
+#define PREDICTIVE_MAIN_TEXT_H 57
+#define PREDICTIVE_SUB_TEXT_H 45
+#define PREDICTIVE_TEXT_W 446
+#define PREDICTIVE_PARTS_H 48
+#define PREDICTIVE_PARTS_W 48
+#define PREDICTIVE_RESULTS_BG_W 112
+#define PREDICTIVE_ADD_SIZE 80
+
+#define OFFSET_PREDICTIVE_Y 24
+#define OFFSET_PREDICTIVE_TEXT_Y ((PREDICTIVE_H - PREDICTIVE_MAIN_TEXT_H - PREDICTIVE_SUB_TEXT_H) / 2)
+#define OFFSET_PREDICTIVE_1_LINE_TEXT_Y ((PREDICTIVE_H - PREDICTIVE_MAIN_TEXT_H) / 2)
+#define SPACER_PREDICTIVE_Y 1
+#define SPACER_PREDICTIVE_X 32
+#define OFFSET_PREDICTIVE_ADD 32
+
+#define SPEEDDIAL_AREA_W 76
+#define SPEEDDIAL_AREA_H 45
+#define SPEEDDIAL_IC_SIZE 28
+#define SPEEDIAL_TEXT_W 18
+
+#define SPEEDDIAL_SPACER 12
+#define OFFSET_INNER_SPEEDDIAL_AREA_H ((SPEEDDIAL_AREA_W - SPEEDDIAL_IC_SIZE - SPEEDIAL_TEXT_W) / 2)
+#define OFFSET_T_SPEEDDIAL_IC 9
+#define OFFSET_B_SPEEDDIAL_IC 8
+
+
+#endif /* _PH_DIALER_LAYOUT_METRICS_H_ */
diff --git a/lib-phone/ph-dialer/res/edje/ph-dialer-keypad.edc b/lib-phone/ph-dialer/res/edje/ph-dialer-keypad.edc
new file mode 100644
index 0000000..0882b6a
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/ph-dialer-keypad.edc
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerLayout.h"
+#include "PhDialerLayoutMetrics.h"
+#include "PhDialerLayoutColors.h"
+
+#define PART_BG \
+ part { \
+ name: "bg"; \
+ type: RECT; \
+ description { \
+ state: "default" 0.0; \
+ color_class: "keypad_bg_normal"; \
+ } \
+ description { \
+ state: "pressed" 0.0; \
+ color_class: "keypad_bg_pressed"; \
+ } \
+ }
+
+#define PART_NUMBER(number_name) \
+ part { \
+ name: "image.number"; \
+ type: IMAGE; \
+ description { \
+ state: "default" 0.0; \
+ aspect: 0.0 1.0; \
+ aspect_preference: SOURCE; \
+ color_class: "button_number"; \
+ rel1 { relative: (OFFSET_BUTTON_PART_X / BUTTON_NUMBER_W) (OFFSET_BUTTON_PART_Y / BUTTON_NUMBER_H); } \
+ rel2 { relative: ((OFFSET_BUTTON_PART_X + BUTTON_PART_W) / BUTTON_NUMBER_W) ((OFFSET_BUTTON_PART_Y + BUTTON_PART_NUMBER_H) / BUTTON_NUMBER_H); } \
+ image.normal: number_name".png"; \
+ } \
+ description { \
+ inherit: "default" 0.0; \
+ state: "pressed" 0.0; \
+ color_class: "button_number_pressed"; \
+ } \
+ }
+
+#define PART_LETTERS(letter_name) \
+ part { \
+ name: "image.letters"; \
+ type: IMAGE; \
+ description { \
+ state: "default" 0.0; \
+ aspect: 1.0 1.0; \
+ aspect_preference: SOURCE; \
+ color_class: "button_letter"; \
+ rel1 { relative: (OFFSET_BUTTON_PART_X / BUTTON_NUMBER_W) ((OFFSET_BUTTON_PART_Y + BUTTON_PART_NUMBER_H) / BUTTON_NUMBER_H); } \
+ rel2 { relative: ((OFFSET_BUTTON_PART_X + BUTTON_PART_W) / BUTTON_NUMBER_W) ((OFFSET_BUTTON_PART_Y + BUTTON_PART_NUMBER_H + BUTTON_PART_LETTERS_H) / BUTTON_NUMBER_H); } \
+ image.normal: letter_name".png"; \
+ } \
+ description { \
+ inherit: "default" 0.0; \
+ state: "pressed" 0.0; \
+ color_class: "button_letter_pressed"; \
+ } \
+ }
+
+#define PROGRAMS \
+ programs { \
+ program { \
+ name: "pressed"; \
+ signal: "mouse,down,*"; \
+ source: "*"; \
+ action: STATE_SET "pressed" 0.0; \
+ target: "bg"; \
+ } \
+ program { \
+ name: "unpressed"; \
+ signal: "mouse,up,*"; \
+ source: "*"; \
+ action: STATE_SET "default" 0.0; \
+ target: "bg"; \
+ } \
+ }
+
+#define KEYPAD_BUTTON_WITH_LETTERS(number_name, letter_name) \
+ group { \
+ name: number_name; \
+ parts { \
+ PART_BG \
+ PART_NUMBER(number_name) \
+ PART_LETTERS(letter_name) \
+ } \
+ PROGRAMS \
+ }
+
+#define KEYPAD_BUTTON_WITHOUT_LETTERS(number_name) \
+ group { \
+ name: number_name; \
+ parts { \
+ PART_BG \
+ PART_NUMBER(number_name) \
+ } \
+ PROGRAMS \
+ }
+
+images {
+ image: KEYPAD_NUMBER_1".png" COMP;
+ image: KEYPAD_NUMBER_2".png" COMP;
+ image: KEYPAD_NUMBER_3".png" COMP;
+ image: KEYPAD_NUMBER_4".png" COMP;
+ image: KEYPAD_NUMBER_5".png" COMP;
+ image: KEYPAD_NUMBER_6".png" COMP;
+ image: KEYPAD_NUMBER_7".png" COMP;
+ image: KEYPAD_NUMBER_8".png" COMP;
+ image: KEYPAD_NUMBER_9".png" COMP;
+ image: KEYPAD_NUMBER_ASTERISK".png" COMP;
+ image: KEYPAD_NUMBER_0".png" COMP;
+ image: KEYPAD_NUMBER_SHARP".png" COMP;
+
+ image: KEYPAD_LETTERS_2".png" COMP;
+ image: KEYPAD_LETTERS_3".png" COMP;
+ image: KEYPAD_LETTERS_4".png" COMP;
+ image: KEYPAD_LETTERS_5".png" COMP;
+ image: KEYPAD_LETTERS_6".png" COMP;
+ image: KEYPAD_LETTERS_7".png" COMP;
+ image: KEYPAD_LETTERS_8".png" COMP;
+ image: KEYPAD_LETTERS_9".png" COMP;
+ image: KEYPAD_LETTERS_0".png" COMP;
+}
+
+collections {
+ KEYPAD_BUTTON_WITHOUT_LETTERS(KEYPAD_NUMBER_1);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_2, KEYPAD_LETTERS_2);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_3, KEYPAD_LETTERS_3);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_4, KEYPAD_LETTERS_4);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_5, KEYPAD_LETTERS_5);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_6, KEYPAD_LETTERS_6);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_7, KEYPAD_LETTERS_7);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_8, KEYPAD_LETTERS_8);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_9, KEYPAD_LETTERS_9);
+ KEYPAD_BUTTON_WITHOUT_LETTERS(KEYPAD_NUMBER_ASTERISK);
+ KEYPAD_BUTTON_WITH_LETTERS(KEYPAD_NUMBER_0, KEYPAD_LETTERS_0);
+ KEYPAD_BUTTON_WITHOUT_LETTERS(KEYPAD_NUMBER_SHARP);
+} \ No newline at end of file
diff --git a/lib-phone/ph-dialer/res/edje/ph-dialer-layout.edc b/lib-phone/ph-dialer/res/edje/ph-dialer-layout.edc
new file mode 100644
index 0000000..b9f381b
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/ph-dialer-layout.edc
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerLayout.h"
+#include "PhDialerLayoutMetrics.h"
+#include "../../../../lib-common/res/edje/Utils.h"
+#include "PhDialerLayoutColors.h"
+
+
+collections {
+ base_scale: 2.6;
+
+ group {
+ name: GROUP_DIALER;
+
+ parts {
+ part {
+ name: PART_SWALLOW_ENTRY;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 (ENTRY_H / TOTAL_H); }
+ }
+ }
+ part {
+ name: PART_SWALLOW_PREDICTIVE;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ rel1 { relative: 0.0 ((ENTRY_H + 1) / TOTAL_H); }
+ rel2 { relative: 1.0 ((ENTRY_H + PREDICTIVE_H) / TOTAL_H); }
+ }
+ }
+ part {
+ name: "keypad_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "divider_bg";
+ rel1 { relative: 0.0 ((ENTRY_H + PREDICTIVE_H + 1) / TOTAL_H); }
+ rel2 { relative: 1.0 ((ENTRY_H + PREDICTIVE_H + KEYPAD_H - DIVIDER_SIZE) / TOTAL_H); }
+ }
+ }
+ part {
+ name: PART_SWALLOW_KEYPAD;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "keypad_bg"; }
+ rel2 { relative: 1.0 1.0; to: "keypad_bg"; }
+ }
+ }
+ part {
+ name: "divider";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "divider_bg";
+ rel1 { relative: 0.0 1.0; to: "keypad_bg"; }
+ rel2 { relative: 1.0 ((ENTRY_H + PREDICTIVE_H + KEYPAD_H) / TOTAL_H); }
+ }
+ }
+ part {
+ name: "action_panel_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "action_panel_bg";
+ rel1 { relative: 0.0 1.0; to: "divider"; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+ part {
+ name: PART_SWALLOW_CALL;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ aspect_preference: SOURCE;
+ fixed: 1 1;
+ rel1 { relative: (BUTTON_CALL_X / TOTAL_W) (BUTTON_CALL_Y / ACTION_PANEL_H); to: "action_panel_bg"; }
+ rel2 { relative: (1.0 - (BUTTON_CALL_X / TOTAL_W)) (1.0 - (BUTTON_CALL_Y / ACTION_PANEL_H)); to: "action_panel_bg"; }
+ }
+ }
+ part {
+ name: PART_SWALLOW_BACKSPACE;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ aspect_preference: SOURCE;
+ fixed: 1 1;
+ rel1 { relative: (1.0 - ((BUTTON_BACKSPACE_X + BUTTON_BACKSPACE_SIZE) / TOTAL_W)) (BUTTON_BACKSPACE_Y / ACTION_PANEL_H); to: "action_panel_bg"; }
+ rel2 { relative: (1.0 - (BUTTON_BACKSPACE_X / TOTAL_W)) (1.0 - (BUTTON_BACKSPACE_Y / ACTION_PANEL_H)); to: "action_panel_bg"; }
+ }
+ }
+ }
+ }
+
+ RESOURCE_IMAGE_WITH_COLOR_CODE(BUTTON_CALL, "action_button_icon_normal");
+ RESOURCE_IMAGE_WITH_COLOR_CODE(BUTTON_BACKSPACE, "back_button_icon_normal");
+}
diff --git a/lib-phone/ph-dialer/res/edje/ph-dialer-predictive.edc b/lib-phone/ph-dialer/res/edje/ph-dialer-predictive.edc
new file mode 100644
index 0000000..7ff0bb9
--- /dev/null
+++ b/lib-phone/ph-dialer/res/edje/ph-dialer-predictive.edc
@@ -0,0 +1,388 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerLayout.h"
+#include "PhDialerLayoutMetrics.h"
+#include "PhDialerLayoutColors.h"
+
+images {
+ image: PREDICTIVE_ADD".png" COMP;
+ image: PREDICTIVE_ARROW".png" COMP;
+ image: SPEEDDIAL_IC_BG".png" COMP;
+ image: SPEEDDIAL_IC".png" COMP;
+}
+
+styles {
+ style {
+ name: "add_to_contacts_style";
+ base: "font=Tizen:style=Light font_size=46 color=#FAFAFA ellipsis=1.0";
+ }
+ style {
+ name: "highlight_style";
+ base: "font=Tizen:style=Light font_size=40 color=#FAFAFA ellipsis=1.0";
+ tag: "match" "+color=#86EDFC";
+ }
+ style {
+ name: "small_highlight_style";
+ base: "font=Tizen:style=Light font_size=32 color=#FAFAFA ellipsis=1.0";
+ tag: "match" "+color=#86EDFC";
+ }
+ style {
+ name: "count_style";
+ base: "font=Tizen:style=Regular font_size=36 align=center color=#FAFAFA ellipsis=1.0";
+ }
+ style {
+ name: "predictive_speeddial_style";
+ base: "font=Tizen:style=Regular font_size=32 color=#FFFAFA";
+ }
+
+}
+
+collections {
+ base_scale: 2.6;
+ group {
+ name: GROUP_PREDICTIVE_NO_RESULTS;
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "predictive_bg";
+ }
+ }
+ part {
+ name: PART_TEXT_ADD;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ text {
+ align: 0.1 0.5;
+ style: "add_to_contacts_style";
+ }
+ rel1 { relative: ((OFFSET_PREDICTIVE_ADD + 1) / TOTAL_W) ((OFFSET_PREDICTIVE_ADD + 1) / PREDICTIVE_H); }
+ rel2 { relative: ((TOTAL_W - PREDICTIVE_H) / TOTAL_W) ((OFFSET_PREDICTIVE_ADD + PREDICTIVE_ADD_SIZE) / PREDICTIVE_H); to_x: "add_bg"; }
+ }
+ }
+ part {
+ name: "add_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "transparent_bg";
+ rel1 { relative: ((TOTAL_W - PREDICTIVE_H + 1) / TOTAL_W) 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+ part {
+ name: "image.add";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ aspect_preference: SOURCE;
+ image.normal: PREDICTIVE_ADD".png";
+ rel1 { relative: ((OFFSET_PREDICTIVE_ADD + 1) / PREDICTIVE_H) ((OFFSET_PREDICTIVE_ADD + 1) / PREDICTIVE_H); to:"add_bg"; }
+ rel2 { relative: ((OFFSET_PREDICTIVE_ADD + PREDICTIVE_ADD_SIZE) / PREDICTIVE_H) ((OFFSET_PREDICTIVE_ADD + PREDICTIVE_ADD_SIZE) / PREDICTIVE_H); to:"add_bg"; }
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color_class: "predictive_icon";
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "pressed";
+ signal: "mouse,down,*";
+ source: "*";
+ action: STATE_SET "pressed" 0.0;
+ target: "image.add";
+ }
+ program {
+ name: "unpressed";
+ signal: "mouse,up,*";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "image.add";
+ }
+ }
+ }
+
+ group {
+ name: GROUP_PREDICTIVE;
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "predictive_bg";
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color_class: "predictive_bg_pressed";
+ }
+ }
+ part {
+ name: "thumbnail_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "transparent_bg";
+ rel2 { relative: (PREDICTIVE_PICTURE_BG_W / TOTAL_W) 1.0; }
+ }
+ }
+ part {
+ name: PART_SWALLOW_THUMBNAIL;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: ((SPACER_PREDICTIVE_X + 1) / PREDICTIVE_PICTURE_BG_W) ((OFFSET_PREDICTIVE_Y + 1) / PREDICTIVE_H); to: "thumbnail_bg"; }
+ rel2 { relative: ((SPACER_PREDICTIVE_X + PREDICTIVE_PICTURE_SIZE) / PREDICTIVE_PICTURE_BG_W) ((OFFSET_PREDICTIVE_Y + PREDICTIVE_PICTURE_SIZE) / PREDICTIVE_H); to: "thumbnail_bg"; }
+ }
+ }
+ part {
+ name: PART_SWALLOW_SPEEDDIAL;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 1.0 ((OFFSET_PREDICTIVE_TEXT_Y + 1) / PREDICTIVE_H); to_x: "thumbnail_bg"; }
+ rel2 { relative: ((PREDICTIVE_PICTURE_BG_W + SPEEDDIAL_AREA_W) / TOTAL_W) ((OFFSET_PREDICTIVE_TEXT_Y + PREDICTIVE_MAIN_TEXT_H) / PREDICTIVE_H); }
+ }
+ description {
+ state: "speeddial" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part {
+ name: PART_TEXT_NAME;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ text {
+ align: 0.0 0.5;
+ style: "highlight_style";
+ }
+ rel1 { relative: 1.0 ((OFFSET_PREDICTIVE_TEXT_Y + 1) / PREDICTIVE_H); to_x: "thumbnail_bg"; }
+ rel2 { relative: 0.0 ((OFFSET_PREDICTIVE_TEXT_Y + PREDICTIVE_MAIN_TEXT_H) / PREDICTIVE_H); to_x: "result_bg"; }
+ }
+ description {
+ state: "speeddial" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ relative: ((PREDICTIVE_PICTURE_BG_W + SPEEDDIAL_AREA_W + SPEEDDIAL_SPACER) / TOTAL_W) ((OFFSET_PREDICTIVE_TEXT_Y + 1) / PREDICTIVE_H);
+ to_x: "";
+ }
+ rel2 {
+ relative: 0.0 ((OFFSET_PREDICTIVE_TEXT_Y + PREDICTIVE_MAIN_TEXT_H) / PREDICTIVE_H);
+ to_x: "result_bg";
+ }
+ }
+ }
+ part {
+ name: PART_TEXT_NUMBER;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ text {
+ align: 0.0 0.5;
+ style: "small_highlight_style";
+ }
+ rel1 { relative: 1.0 ((OFFSET_PREDICTIVE_TEXT_Y + PREDICTIVE_MAIN_TEXT_H + 1) / PREDICTIVE_H); to_x: "thumbnail_bg"; }
+ rel2 { relative: 0.0 ((OFFSET_PREDICTIVE_TEXT_Y + PREDICTIVE_MAIN_TEXT_H + PREDICTIVE_SUB_TEXT_H) / PREDICTIVE_H); to_x: "result_bg"; }
+ }
+ }
+ part {
+ name: PART_TEXT_1_LINE;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ text {
+ align: 0.0 0.5;
+ style: "highlight_style";
+ }
+ rel1 { relative: 1.0 ((OFFSET_PREDICTIVE_1_LINE_TEXT_Y + 1) / PREDICTIVE_H); to_x: "thumbnail_bg"; }
+ rel2 { relative: 0.0 ((OFFSET_PREDICTIVE_1_LINE_TEXT_Y + PREDICTIVE_MAIN_TEXT_H) / PREDICTIVE_H); to_x: "result_bg"; }
+ }
+ }
+ part {
+ name: "result_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: "transparent_bg";
+ rel1 { relative: ((PREDICTIVE_PICTURE_BG_W + PREDICTIVE_TEXT_W + 1) / TOTAL_W) 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+ part {
+ name: PART_SWALLOW_RESULTS;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "result_bg";
+ rel2.to: "result_bg";
+ }
+ }
+ }
+ programs {
+ program {
+ name: "pressed";
+ signal: "mouse,down,*";
+ source: "*";
+ action: STATE_SET "pressed" 0.0;
+ target: "bg";
+ }
+ program {
+ name: "unpressed";
+ signal: "mouse,up,*";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ }
+ program {
+ name: "show_speeddial_icon";
+ signal: "show,speeddial,icon";
+ action: STATE_SET "speeddial" 0.0;
+ target: PART_SWALLOW_SPEEDDIAL;
+ target: PART_TEXT_NAME;
+ }
+ program {
+ name: "hide_speeddial_icon";
+ signal: "hide,speeddial,icon";
+ action: STATE_SET "default" 0.0;
+ target: PART_SWALLOW_SPEEDDIAL;
+ target: PART_TEXT_NAME;
+ }
+ }
+ }
+
+ group {
+ name: GROUP_SPEEDDIAL_NUMBER;
+ parts {
+ part {
+ name: "bg";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ image.normal: SPEEDDIAL_IC_BG".png";
+ color_class: "speeddial_ic_bg";
+ }
+ }
+ part {
+ name: "swallow.icon";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: (OFFSET_INNER_SPEEDDIAL_AREA_H / SPEEDDIAL_AREA_W) (OFFSET_T_SPEEDDIAL_IC / SPEEDDIAL_AREA_H);
+ rel2.relative: ((OFFSET_INNER_SPEEDDIAL_AREA_H + SPEEDDIAL_IC_SIZE) / SPEEDDIAL_AREA_W) ((OFFSET_T_SPEEDDIAL_IC + SPEEDDIAL_IC_SIZE) / SPEEDDIAL_AREA_H);
+ image.normal: SPEEDDIAL_IC".png";
+ }
+ }
+ part {
+ name: PART_TEXT_NUMBER;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "swallow.icon";
+ }
+ rel2.relative: 1.0 1.0;
+ text {
+ align: 0.0 0.5;
+ style: "predictive_speeddial_style";
+ }
+ }
+ }
+ }
+ }
+
+ group {
+ name: GROUP_PREDICTIVE_RES_COUNT;
+ parts {
+ part {
+ name: "bg";
+ type: "RECT";
+ description {
+ state: "default" 0.0;
+ color_class: "transparent_bg";
+ }
+ }
+ part {
+ name: PART_TEXT_COUNT;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ text {
+ align: 0.5 0.0;
+ style: "count_style";
+ }
+ rel1 { relative: 0.0 ((OFFSET_PREDICTIVE_Y + 1) / PREDICTIVE_H); }
+ rel2 { relative: 1.0 ((OFFSET_PREDICTIVE_Y + PREDICTIVE_PARTS_H) / PREDICTIVE_H); }
+ }
+ }
+ part {
+ name: PART_SWALLOW_ARROW;
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ aspect_preference: SOURCE;
+ rel1 { relative: ((SPACER_PREDICTIVE_X + 1) / PREDICTIVE_RESULTS_BG_W) ((OFFSET_PREDICTIVE_Y + PREDICTIVE_PARTS_H + SPACER_PREDICTIVE_Y + 1) / PREDICTIVE_H); }
+ rel2 { relative: ((SPACER_PREDICTIVE_X + PREDICTIVE_PARTS_W) / PREDICTIVE_RESULTS_BG_W) ((OFFSET_PREDICTIVE_Y + 2 * PREDICTIVE_PARTS_H + SPACER_PREDICTIVE_Y) / PREDICTIVE_H); }
+ image.normal: PREDICTIVE_ARROW".png";
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color_class: "predictive_icon";
+ }
+ }
+ }
+ programs {
+ program {
+ name: "pressed";
+ signal: "mouse,down,*";
+ source: "*";
+ action: STATE_SET "pressed" 0.0;
+ target: PART_SWALLOW_ARROW;
+ }
+ program {
+ name: "unpressed";
+ signal: "mouse,up,*";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: PART_SWALLOW_ARROW;
+ }
+ }
+ }
+}
diff --git a/lib-phone/ph-dialer/res/images/contacts_caller_id_default_02.png b/lib-phone/ph-dialer/res/images/contacts_caller_id_default_02.png
new file mode 100644
index 0000000..9715b8b
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/contacts_caller_id_default_02.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/contacts_caller_id_default_bg_02.png b/lib-phone/ph-dialer/res/images/contacts_caller_id_default_bg_02.png
new file mode 100644
index 0000000..6c51cac
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/contacts_caller_id_default_bg_02.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/contacts_caller_id_default_masking_02.png b/lib-phone/ph-dialer/res/images/contacts_caller_id_default_masking_02.png
new file mode 100644
index 0000000..37787dd
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/contacts_caller_id_default_masking_02.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/default_contact.png b/lib-phone/ph-dialer/res/images/default_contact.png
new file mode 100755
index 0000000..c63d7f0
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/default_contact.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_01.png b/lib-phone/ph-dialer/res/images/keypad_english_01.png
new file mode 100644
index 0000000..309dd86
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_01.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_02.png b/lib-phone/ph-dialer/res/images/keypad_english_02.png
new file mode 100644
index 0000000..2fa7a0b
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_02.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_03.png b/lib-phone/ph-dialer/res/images/keypad_english_03.png
new file mode 100644
index 0000000..98f7ad1
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_03.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_04.png b/lib-phone/ph-dialer/res/images/keypad_english_04.png
new file mode 100644
index 0000000..6b6a172
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_04.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_05.png b/lib-phone/ph-dialer/res/images/keypad_english_05.png
new file mode 100644
index 0000000..288854f
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_05.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_06.png b/lib-phone/ph-dialer/res/images/keypad_english_06.png
new file mode 100644
index 0000000..f346c46
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_06.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_07.png b/lib-phone/ph-dialer/res/images/keypad_english_07.png
new file mode 100644
index 0000000..e70e9a8
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_07.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_08.png b/lib-phone/ph-dialer/res/images/keypad_english_08.png
new file mode 100644
index 0000000..f4de8af
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_08.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_english_10.png b/lib-phone/ph-dialer/res/images/keypad_english_10.png
new file mode 100644
index 0000000..2072f56
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_english_10.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_ic_back.png b/lib-phone/ph-dialer/res/images/keypad_ic_back.png
new file mode 100644
index 0000000..2f08d97
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_ic_back.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_ic_call.png b/lib-phone/ph-dialer/res/images/keypad_ic_call.png
new file mode 100644
index 0000000..526483c
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_ic_call.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_00.png b/lib-phone/ph-dialer/res/images/keypad_number_00.png
new file mode 100644
index 0000000..255c897
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_00.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_01.png b/lib-phone/ph-dialer/res/images/keypad_number_01.png
new file mode 100644
index 0000000..409bfb8
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_01.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_02.png b/lib-phone/ph-dialer/res/images/keypad_number_02.png
new file mode 100644
index 0000000..b12b92f
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_02.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_03.png b/lib-phone/ph-dialer/res/images/keypad_number_03.png
new file mode 100644
index 0000000..058876c
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_03.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_04.png b/lib-phone/ph-dialer/res/images/keypad_number_04.png
new file mode 100644
index 0000000..3906f18
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_04.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_05.png b/lib-phone/ph-dialer/res/images/keypad_number_05.png
new file mode 100644
index 0000000..a104591
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_05.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_06.png b/lib-phone/ph-dialer/res/images/keypad_number_06.png
new file mode 100644
index 0000000..4c0893b
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_06.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_07.png b/lib-phone/ph-dialer/res/images/keypad_number_07.png
new file mode 100644
index 0000000..e9eb6a0
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_07.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_08.png b/lib-phone/ph-dialer/res/images/keypad_number_08.png
new file mode 100644
index 0000000..f6bd01b
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_08.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_09.png b/lib-phone/ph-dialer/res/images/keypad_number_09.png
new file mode 100644
index 0000000..ede6db2
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_09.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_asterisk.png b/lib-phone/ph-dialer/res/images/keypad_number_asterisk.png
new file mode 100644
index 0000000..923ea88
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_asterisk.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_number_sharp.png b/lib-phone/ph-dialer/res/images/keypad_number_sharp.png
new file mode 100644
index 0000000..e0118d4
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_number_sharp.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_predictive_arrow.png b/lib-phone/ph-dialer/res/images/keypad_predictive_arrow.png
new file mode 100644
index 0000000..7617f4e
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_predictive_arrow.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_speed_dial_add.png b/lib-phone/ph-dialer/res/images/keypad_speed_dial_add.png
new file mode 100644
index 0000000..39c6a86
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_speed_dial_add.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_speed_dial_ic.png b/lib-phone/ph-dialer/res/images/keypad_speed_dial_ic.png
new file mode 100644
index 0000000..7297b95
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_speed_dial_ic.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/keypad_speed_dial_ic_bg.#.png b/lib-phone/ph-dialer/res/images/keypad_speed_dial_ic_bg.#.png
new file mode 100644
index 0000000..584f366
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/keypad_speed_dial_ic_bg.#.png
Binary files differ
diff --git a/lib-phone/ph-dialer/res/images/predictive_results_mask.png b/lib-phone/ph-dialer/res/images/predictive_results_mask.png
new file mode 100644
index 0000000..b247e5d
--- /dev/null
+++ b/lib-phone/ph-dialer/res/images/predictive_results_mask.png
Binary files differ
diff --git a/lib-phone/ph-dialer/src/PhDialerAddToContactsPopup.cpp b/lib-phone/ph-dialer/src/PhDialerAddToContactsPopup.cpp
new file mode 100644
index 0000000..4ed3e85
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerAddToContactsPopup.cpp
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "ContactsAppControl.h"
+#include "PhDialerAddToContactsPopup.h"
+#include "PhStrings.h"
+#include "WDebugBase.h"
+
+#define STYLE_ITEM "type1"
+#define PART_MAIN_TEXT "elm.text"
+
+PhDialerAddToContactsPopup::PhDialerAddToContactsPopup(std::string number)
+ : m_Number(std::move(number))
+{}
+
+Evas_Object* PhDialerAddToContactsPopup::onCreate(Evas_Object *parent, void *param)
+{
+ setTitle(PAT_(PH_KPD_BUTTON_ADD_TO_CONTACTS_ABB2));
+ setContent(std::bind(&PhDialerAddToContactsPopup::createGenlist, this, std::placeholders::_1));
+
+ Evas_Object *popup = WPopup::onCreate(parent, param);
+ elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
+
+ return popup;
+}
+
+Evas_Object *PhDialerAddToContactsPopup::createGenlist(Evas_Object *parent)
+{
+ Evas_Object *genlist = elm_genlist_add(parent);
+ elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+ elm_genlist_mode_set( genlist, ELM_LIST_COMPRESS );
+ elm_scroller_content_min_limit( genlist, EINA_FALSE, EINA_TRUE );
+
+ Elm_Genlist_Item_Class *itc = createItemClass();
+
+ elm_genlist_item_append(genlist, itc, PAT_(PH_LOGS_BUTTON_CREATE_CONTACT_ABB),
+ NULL, ELM_GENLIST_ITEM_NONE, launchContactCreate, this);
+ elm_genlist_item_append(genlist, itc, PAT_(PH_LOGS_BUTTON_UPDATE_CONTACT_ABB2),
+ NULL, ELM_GENLIST_ITEM_NONE, launchContactUpdate, this);
+
+ elm_genlist_item_class_free(itc);
+ return genlist;
+}
+
+Elm_Genlist_Item_Class *PhDialerAddToContactsPopup::createItemClass()
+{
+ Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+ WPRET_VM(!itc, NULL, "elm_genlist_item_class_new() failed");
+ itc->item_style = STYLE_ITEM;
+ itc->func.text_get = getItemText;
+ return itc;
+}
+
+char *PhDialerAddToContactsPopup::getItemText(void *data, Evas_Object *obj, const char *part)
+{
+ WPRET_VM(!data, NULL, "data = NULL");
+ const char *text = (const char *)data;
+
+ if(!strcmp(part, PART_MAIN_TEXT)) {
+ return strdup(text);
+ }
+
+ return NULL;
+}
+
+void PhDialerAddToContactsPopup::launchContactCreate(void *data,
+ Evas_Object *obj, void *event_info)
+{
+ WPRET_M(!data, "data = NULL");
+ PhDialerAddToContactsPopup *popup = (PhDialerAddToContactsPopup*)data;
+
+ ::launchContactCreate(popup->m_Number.c_str());
+ popup->destroy();
+}
+
+void PhDialerAddToContactsPopup::launchContactUpdate(void *data,
+ Evas_Object *obj, void *event_info)
+{
+ WPRET_M(!data, "data = NULL");
+ PhDialerAddToContactsPopup *popup = (PhDialerAddToContactsPopup*)data;
+
+ ::launchContactEdit(0, popup->m_Number.c_str());
+ popup->destroy();
+}
diff --git a/lib-phone/ph-dialer/src/PhDialerEntry.cpp b/lib-phone/ph-dialer/src/PhDialerEntry.cpp
new file mode 100644
index 0000000..960bb27
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerEntry.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerEntry.h"
+#include <Elementary.h>
+#include <efl_extension.h>
+
+std::string PhDialerEntry::getNumber()
+{
+ std::string number;
+
+ char *str = elm_entry_markup_to_utf8(elm_entry_entry_get(getEvasObj()));
+ if (str) {
+ number = str;
+ free(str);
+ }
+
+ return number;
+}
+
+void PhDialerEntry::setNumber(const std::string &number)
+{
+ elm_entry_entry_set(getEvasObj(), number.c_str());
+ elm_entry_cursor_line_end_set(getEvasObj());
+}
+
+void PhDialerEntry::insert(char c)
+{
+ char str[] = { c, '\0' };
+ elm_entry_entry_insert(getEvasObj(), str);
+}
+
+void PhDialerEntry::popBack()
+{
+ int pos = elm_entry_cursor_pos_get(getEvasObj());
+ if (pos > 0) {
+ elm_entry_select_region_set(getEvasObj(), pos - 1, pos);
+ elm_entry_entry_insert(getEvasObj(), "");
+ }
+}
+
+void PhDialerEntry::clear()
+{
+ elm_entry_entry_set(getEvasObj(), "");
+}
+
+void PhDialerEntry::setOnChanged(std::function<void(PhDialerEntry&)> callback)
+{
+ m_Changed = std::move(callback);
+}
+
+Evas_Object *PhDialerEntry::onCreate(Evas_Object *parent, void *param)
+{
+ Evas_Object *entry = elm_entry_add(parent);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+
+ static Elm_Entry_Filter_Accept_Set filter = { "+*#;,1234567890", NULL };
+ elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, &filter);
+ elm_entry_text_style_user_push(entry, "DEFAULT='font=Tizen:style=Light font_size=60 color=#fff align=center'");
+
+ eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+ evas_object_smart_callback_add(entry, "changed",
+ &PhDialerEntry::onChanged, this);
+ return entry;
+}
+
+void PhDialerEntry::onChanged(void *data, Evas_Object *obj, void *event_info)
+{
+ PhDialerEntry *entry = (PhDialerEntry*) data;
+ if (entry->m_Changed) {
+ entry->m_Changed(*entry);
+ }
+}
diff --git a/lib-phone/ph-dialer/src/PhDialerKey.cpp b/lib-phone/ph-dialer/src/PhDialerKey.cpp
new file mode 100644
index 0000000..bf42fb9
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerKey.cpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerKey.h"
+#include "ContactsCommon.h"
+#include "ContactsDebug.h"
+#include "PhDialerLayout.h"
+
+#include <Elementary.h>
+#include <feedback.h>
+
+#define DIALER_LAYOUT_EDJ "phone/ph-dialer-keypad.edj"
+
+namespace
+{
+ char values[] = {
+ '1',
+ '2',
+ '3',
+ '4',
+ '5',
+ '6',
+ '7',
+ '8',
+ '9',
+ '*',
+ '0',
+ '#',
+ };
+
+ const char *groups[] = {
+ KEYPAD_NUMBER_1,
+ KEYPAD_NUMBER_2,
+ KEYPAD_NUMBER_3,
+ KEYPAD_NUMBER_4,
+ KEYPAD_NUMBER_5,
+ KEYPAD_NUMBER_6,
+ KEYPAD_NUMBER_7,
+ KEYPAD_NUMBER_8,
+ KEYPAD_NUMBER_9,
+ KEYPAD_NUMBER_ASTERISK,
+ KEYPAD_NUMBER_0,
+ KEYPAD_NUMBER_SHARP
+ };
+
+ const feedback_pattern_e patterns[] = {
+ FEEDBACK_PATTERN_KEY1,
+ FEEDBACK_PATTERN_KEY2,
+ FEEDBACK_PATTERN_KEY3,
+ FEEDBACK_PATTERN_KEY4,
+ FEEDBACK_PATTERN_KEY5,
+ FEEDBACK_PATTERN_KEY6,
+ FEEDBACK_PATTERN_KEY7,
+ FEEDBACK_PATTERN_KEY8,
+ FEEDBACK_PATTERN_KEY9,
+ FEEDBACK_PATTERN_KEY_STAR,
+ FEEDBACK_PATTERN_KEY0,
+ FEEDBACK_PATTERN_KEY_SHARP
+ };
+}
+
+PhDialerKey::PhDialerKey(Id id)
+ : m_Id(id), m_Value(values[id]), m_Tone(0)
+{
+}
+
+Evas_Object *PhDialerKey::onCreate(Evas_Object *parent, void *param)
+{
+ static const std::string path = ContactsCommon::getAppEdjePath(DIALER_LAYOUT_EDJ);
+ Evas_Object *layout = elm_layout_add(parent);
+ Eina_Bool res = elm_layout_file_set(layout, path.c_str(), groups[m_Id]);
+ WPWARN(res != EINA_TRUE, "elm_layout_file_set() failed");
+
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN,
+ &PhDialerKey::onMouseDown, this);
+
+ return layout;
+}
+
+char PhDialerKey::getValue() const
+{
+ return m_Value;
+}
+
+PhDialerKey::Id PhDialerKey::getId() const
+{
+ return m_Id;
+}
+
+void PhDialerKey::onMouseDown(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ PhDialerKey *key = (PhDialerKey*) data;
+ feedback_play(patterns[key->m_Id]);
+}
diff --git a/lib-phone/ph-dialer/src/PhDialerResultListPopup.cpp b/lib-phone/ph-dialer/src/PhDialerResultListPopup.cpp
new file mode 100644
index 0000000..f923c18
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerResultListPopup.cpp
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerResultListPopup.h"
+#include "PhDialerLayout.h"
+#include "PhDialerPredictiveNumberUtils.h"
+#include "PhStrings.h"
+#include "PhDialerEntry.h"
+#include "ContactsCommon.h"
+#include "ContactsDebug.h"
+
+#include <Elementary.h>
+
+#define PREDICTIVE_LAYOUT_EDJ "phone/ph-dialer-predictive.edj"
+
+#define STYLE_ITEM "type1"
+#define PART_MAIN_TEXT "elm.text"
+#define PART_SUB_TEXT "elm.text.sub"
+#define PART_CONTENT "elm.swallow.icon"
+
+using namespace Ph::Dialer;
+
+namespace
+{
+ const std::string layoutFilePath = ContactsCommon::getAppEdjePath(PREDICTIVE_LAYOUT_EDJ);
+}
+
+PhDialerResultListPopup::PhDialerResultListPopup(const Ph::Dialer::SearchList &result, PhDialerEntry &entry)
+ : m_Result(result), m_Entry(entry)
+{}
+
+Evas_Object* PhDialerResultListPopup::onCreate(Evas_Object *parent, void *param)
+{
+ const size_t bufferSize = 32;
+ char buffer[bufferSize];
+ snprintf(buffer, bufferSize, PAT_(PH_KPD_HEADER_SEARCH_RESULTS_HPD_ABB), m_Result.size());
+
+ setTitle(buffer);
+ setContent(std::bind(&PhDialerResultListPopup::createContactList, this, std::placeholders::_1));
+
+ Evas_Object *popup = WPopup::onCreate(parent, param);
+ elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+ elm_object_style_set(popup, "theme_bg");
+ elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
+
+ return popup;
+}
+
+Evas_Object* PhDialerResultListPopup::createContactList(Evas_Object *parent)
+{
+ Evas_Object *genlist = elm_genlist_add(parent);
+ elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+ elm_genlist_mode_set( genlist, ELM_LIST_COMPRESS );
+
+ Elm_Genlist_Item_Class *itc = createItemClass();
+
+ for(auto &info : m_Result) {
+ elm_genlist_item_append(genlist, itc, info.get(), nullptr,
+ ELM_GENLIST_ITEM_NONE, onItemClicked, this);
+ }
+
+ elm_genlist_item_class_free(itc);
+ return genlist;
+}
+
+Elm_Genlist_Item_Class* PhDialerResultListPopup::createItemClass()
+{
+ Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+ WPRET_VM(!itc, NULL, "elm_genlist_item_class_new() failed");
+ itc->item_style = STYLE_ITEM;
+ itc->func.text_get = getItemText;
+ itc->func.content_get = [](void *data, Evas_Object *obj, const char *part) -> Evas_Object* {
+ const SearchInfo &info = *(SearchInfo*)data;
+
+ if(!strcmp(part, PART_CONTENT)) {
+ return Utils::createThumbnail(obj, info.getId());
+ }
+
+ return nullptr;
+ };
+
+ return itc;
+}
+
+char *PhDialerResultListPopup::getItemText(void *data, Evas_Object *obj, const char *part)
+{
+ const SearchInfo &info = *(SearchInfo*)data;
+ const std::string &name = info.getName(true);
+ const std::string &number = info.getNumber(true);
+
+ if(!strcmp(part, PART_MAIN_TEXT)) {
+ return strdup(name.empty() ? number.c_str() : name.c_str());
+ } else if(!strcmp(part, PART_SUB_TEXT)) {
+ if (!name.empty()) {
+ return strdup(number.c_str());
+ }
+ }
+
+ return nullptr;
+}
+
+void PhDialerResultListPopup::onItemClicked(void* data, Evas_Object* obj, void* event_info)
+{
+ elm_genlist_item_selected_set((Elm_Object_Item*)event_info, false);
+
+ const SearchInfo *info = (SearchInfo*)elm_object_item_data_get((Elm_Object_Item*)event_info);
+
+ PhDialerResultListPopup *self = (PhDialerResultListPopup*)data;
+ self->m_Entry.setNumber(info->getNumber(false));
+
+ self->destroy();
+}
diff --git a/lib-phone/ph-dialer/src/PhDialerSearchController.cpp b/lib-phone/ph-dialer/src/PhDialerSearchController.cpp
new file mode 100644
index 0000000..6ae90fd
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerSearchController.cpp
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerSearchController.h"
+#include "PhDialerAddToContactsPopup.h"
+#include "PhDialerResultListPopup.h"
+#include "PhDialerView.h"
+#include "PhDialerPredictiveNumber.h"
+#include "PhDialerPredictiveNumberUtils.h"
+#include "PhDialerLayout.h"
+#include "PhDialerEntry.h"
+#include "PhPath.h"
+#include "PhStrings.h"
+#include "ContactsDebug.h"
+
+#define PREDICTIVE_LAYOUT_EDJ "phone/ph-dialer-predictive.edj"
+
+using namespace Ph::Dialer;
+
+namespace
+{
+ const std::string layoutFilePath = ContactsCommon::getAppEdjePath(PREDICTIVE_LAYOUT_EDJ);
+}
+
+PhDialerSearchController::PhDialerSearchController()
+ : m_View(nullptr),
+ m_PredictiveNumber(new PredictiveNumber()),
+ m_CurrentLayoutType(LayoutType::NONE),
+ m_Layout(nullptr),
+ m_ResultLayout(nullptr)
+{
+ int err = CONTACTS_ERROR_NONE;
+ err = contacts_db_add_changed_cb(_contacts_contact._uri, &PhDialerSearchController::onDbChanged, this);
+ WPWARN(CONTACTS_ERROR_NONE != err,"contacts_db_add_changed_cb() Failed(%d)", err);
+}
+
+PhDialerSearchController::~PhDialerSearchController()
+{
+ int err = CONTACTS_ERROR_NONE;
+ err = contacts_db_remove_changed_cb(_contacts_contact._uri, &PhDialerSearchController::onDbChanged, this);
+ WPWARN(CONTACTS_ERROR_NONE != err,"contacts_db_add_changed_cb() Failed(%d)", err);
+}
+
+void PhDialerSearchController::create(PhDialerView &view)
+{
+ m_View = &view;
+ PhDialerEntry *entry = m_View->getEntry();
+
+ entry->setOnChanged(std::bind(&PhDialerSearchController::onEntryChanged, this, std::placeholders::_1));
+}
+
+void PhDialerSearchController::setLayout(const std::string &number)
+{
+ if(number.empty()) {
+ m_Layout = nullptr;
+ m_CurrentLayoutType = LayoutType::NONE;
+ m_View->setPredictiveLayout(nullptr);
+ } else {
+ if(m_PredictiveNumber->empty()) {
+ setNoContactsLayout();
+ } else {
+ const SearchList &result = *m_PredictiveNumber->getSearchResult();
+ setLayoutWithContacts(*result.front());
+ setResultLayout(m_Layout, result.size());
+ }
+ }
+}
+
+void PhDialerSearchController::onEntryChanged(PhDialerEntry &entry)
+{
+ std::string number(entry.getNumber());
+ m_PredictiveNumber->search(number);
+
+ setLayout(number);
+}
+
+void PhDialerSearchController::setNoContactsLayout()
+{
+ if(m_CurrentLayoutType == LayoutType::NO_CONTACTS) {
+ return;
+ }
+ m_CurrentLayoutType = LayoutType::NO_CONTACTS;
+
+ m_Layout = elm_layout_add(m_View->getEvasObj());
+ elm_layout_file_set(m_Layout, layoutFilePath.c_str(), GROUP_PREDICTIVE_NO_RESULTS);
+ elm_object_part_text_set(m_Layout, PART_TEXT_ADD, PH_KPD_BUTTON_ADD_TO_CONTACTS_ABB2);
+ elm_object_domain_part_text_translatable_set(m_Layout, PART_TEXT_ADD, STRING_PACKAGE, true);
+
+ evas_object_event_callback_add(m_Layout, EVAS_CALLBACK_MOUSE_UP, &createAddToContactsPopup, this);
+
+ m_View->setPredictiveLayout(m_Layout);
+}
+
+void PhDialerSearchController::setLayoutWithContacts(const Ph::Dialer::SearchInfo &info)
+{
+ if(m_CurrentLayoutType != LayoutType::ONE_CONTACT
+ && m_CurrentLayoutType != LayoutType::FEW_CONTACTS) {
+
+ m_CurrentLayoutType = LayoutType::ONE_CONTACT;
+
+ m_Layout = elm_layout_add(m_View->getEvasObj());
+ elm_layout_file_set(m_Layout, layoutFilePath.c_str(), GROUP_PREDICTIVE);
+
+ evas_object_event_callback_add(m_Layout, EVAS_CALLBACK_MOUSE_UP,
+ [](void *data, Evas *e, Evas_Object *obj, void *event_info) {
+ PhDialerSearchController *self = (PhDialerSearchController*)data;
+ const SearchList *result = self->m_PredictiveNumber->getSearchResult();
+ if (result) {
+ SearchInfo &info = *result->front();
+ self->m_View->getEntry()->setNumber(info.getNumber(false));
+ }
+ },
+ this);
+
+ m_View->setPredictiveLayout(m_Layout);
+ }
+
+ if(info.getType() == IT_SPEED_DIAL) {
+ createSpeeddialLayout(m_Layout, info);
+ elm_object_signal_emit(m_Layout, "show,speeddial,icon", "");
+ } else {
+ elm_object_signal_emit(m_Layout, "hide,speeddial,icon", "");
+ }
+
+ fillPredictiveLayout(m_Layout, info);
+}
+
+void PhDialerSearchController::setResultLayout(Evas_Object *parent, size_t count)
+{
+ if(count > 1) {
+ if(m_CurrentLayoutType != LayoutType::FEW_CONTACTS) {
+ m_CurrentLayoutType = LayoutType::FEW_CONTACTS;
+
+ m_ResultLayout = elm_layout_add(parent);
+ elm_layout_file_set(m_ResultLayout, layoutFilePath.c_str(), GROUP_PREDICTIVE_RES_COUNT);
+
+ evas_object_event_callback_add(m_ResultLayout, EVAS_CALLBACK_MOUSE_UP, &showResulListPopup, this);
+ evas_object_propagate_events_set(m_ResultLayout, EINA_FALSE);
+ }
+
+ elm_object_part_text_set(m_ResultLayout, PART_TEXT_COUNT, std::to_string(count).c_str());
+ } else {
+ m_ResultLayout = nullptr;
+ m_CurrentLayoutType = LayoutType::ONE_CONTACT;
+ }
+ elm_object_part_content_set(parent, PART_SWALLOW_RESULTS, m_ResultLayout);
+}
+
+void PhDialerSearchController::createSpeeddialLayout(Evas_Object *parent, const Ph::Dialer::SearchInfo &info)
+{
+ Evas_Object *speeddialLayout = elm_layout_add(parent);
+ elm_layout_file_set(speeddialLayout, layoutFilePath.c_str(), GROUP_SPEEDDIAL_NUMBER);
+ elm_object_part_text_set(speeddialLayout, PART_TEXT_NUMBER, info.getSearchString().c_str());
+
+ elm_object_part_content_set(parent, PART_SWALLOW_SPEEDDIAL, speeddialLayout);
+}
+
+void PhDialerSearchController::fillPredictiveLayout(Evas_Object *layout, const Ph::Dialer::SearchInfo &info)
+{
+ elm_object_part_content_set(layout, PART_SWALLOW_THUMBNAIL,
+ Utils::createThumbnail(layout, info.getId()));
+
+ if(info.getName(false).empty()) {
+ elm_object_part_text_set(layout, PART_TEXT_1_LINE, info.getNumber(true).c_str());
+ elm_object_part_text_set(layout, PART_TEXT_NAME, "");
+ elm_object_part_text_set(layout, PART_TEXT_NUMBER, "");
+ } else {
+ elm_object_part_text_set(layout, PART_TEXT_1_LINE, "");
+ elm_object_part_text_set(layout, PART_TEXT_NAME, info.getName(true).c_str());
+ elm_object_part_text_set(layout, PART_TEXT_NUMBER, info.getNumber(true).c_str());
+ }
+}
+
+void PhDialerSearchController::showResulListPopup(void* data, Evas* e,
+ Evas_Object* obj, void* event_info)
+{
+ PhDialerSearchController *searchController = (PhDialerSearchController*)data;
+ searchController->m_View->attachPopup(
+ new PhDialerResultListPopup(*searchController->m_PredictiveNumber->getSearchResult(), *searchController->m_View->getEntry()));
+}
+
+void PhDialerSearchController::createAddToContactsPopup(void* data, Evas* e,
+ Evas_Object* obj, void* event_info)
+{
+ WPRET_M(!data, "data = NULL");
+ PhDialerSearchController *searchController = (PhDialerSearchController*)data;
+ searchController->m_View->attachPopup(new PhDialerAddToContactsPopup(searchController->m_View->getEntry()->getNumber()));
+}
+
+void PhDialerSearchController::onDbChanged(const char *view_uri, void *data)
+{
+ PhDialerSearchController* controller = (PhDialerSearchController*) data;
+ std::string number(controller->m_View->getEntry()->getNumber());
+ controller->m_PredictiveNumber->searchFromScratch(number);
+ controller->setLayout(number);
+}
diff --git a/lib-phone/ph-dialer/src/PhDialerSpeeddialPopup.cpp b/lib-phone/ph-dialer/src/PhDialerSpeeddialPopup.cpp
new file mode 100644
index 0000000..83fbd52
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerSpeeddialPopup.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerSpeeddialPopup.h"
+#include "PhCommon.h"
+
+#include "ContactsDebug.h"
+#include "ContactsAppControl.h"
+#include "ContactsLocalization.h"
+
+#include <contacts.h>
+#include <Elementary.h>
+#include <notification.h>
+
+PhDialerSpeeddialPopup::PhDialerSpeeddialPopup(int speedNumber)
+ : m_SpeedNumber(speedNumber)
+{
+}
+
+Evas_Object *PhDialerSpeeddialPopup::onCreate(Evas_Object* parent, void* param)
+{
+ setTextTranslatable(TEXT_DOMAIN);
+ setTitle("IDS_KPD_HEADER_ASSIGN_AS_SPEED_DIAL_NUMBER_ABB");
+ setContent("IDS_KPD_POP_THERE_IS_NO_CONTACT_ASSIGNED_TO_THIS_SPEED_DIAL_NUMBER_TAP_OK_TO_ASSIGN_ONE_NOW");
+
+ using namespace std::placeholders;
+ addButton("IDS_LOGS_BUTTON_CANCEL_ABB3", nullptr);
+ addButton("IDS_PB_BUTTON_OK_ABB2", std::bind(&PhDialerSpeeddialPopup::onOkPressed, this, _1));
+ return WPopup::onCreate(parent, param);
+}
+
+void PhDialerSpeeddialPopup::onOkPressed(bool *destroyPopup)
+{
+ int err = launchContactPick(APP_CONTROL_DATA_SELECTION_MODE_SINGLE,
+ APP_CONTROL_DATA_TYPE_PHONE,
+ &PhDialerSpeeddialPopup::onPickResult, this);
+ WPRET_M(err != APP_CONTROL_ERROR_NONE, "launchContactPick() failed(0x%x)", err);
+ *destroyPopup = false;
+}
+
+void PhDialerSpeeddialPopup::onPickResult(app_control_h request, app_control_h reply,
+ app_control_result_e result, void *data)
+{
+ PhDialerSpeeddialPopup *popup = (PhDialerSpeeddialPopup*) data;
+
+ char **numberIds = 0;
+ int count = 0;
+ int err = app_control_get_extra_data_array(reply, APP_CONTROL_DATA_SELECTED, &numberIds, &count);
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "app_control_get_extra_data() failed(0x%x)", err);
+ if (numberIds && numberIds[0]) {
+ int numberId = atoi(numberIds[0]);
+ if (numberId > 0) {
+ if (PhCommon::addSpeedDialNumber(popup->m_SpeedNumber, numberId)) {
+ notification_status_message_post(T_("IDS_KPD_TPOP_SPEED_DIAL_NUMBER_ASSIGNED"));
+ } else {
+ notification_status_message_post(T_("IDS_PB_POP_ALREADY_EXISTS_LC"));
+ }
+ }
+ }
+
+ for (int i = 0; i < count; ++i) {
+ free(numberIds[i]);
+ }
+ free(numberIds);
+
+ popup->destroy();
+}
diff --git a/lib-phone/ph-dialer/src/PhDialerView.cpp b/lib-phone/ph-dialer/src/PhDialerView.cpp
new file mode 100644
index 0000000..1a2df0f
--- /dev/null
+++ b/lib-phone/ph-dialer/src/PhDialerView.cpp
@@ -0,0 +1,392 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerView.h"
+#include "PhDialerEntry.h"
+#include "PhDialerKey.h"
+#include "PhDialerLayout.h"
+#include "PhDialerSpeeddialPopup.h"
+#include "PhSpeedDialView.h"
+#include "PhDialerSearchController.h"
+
+#include "ContactsAppControl.h"
+#include "ContactsDebug.h"
+#include "PhStrings.h"
+#include "WMenuPopup.h"
+
+#include <app_control.h>
+#include <contacts.h>
+#include <feedback.h>
+
+#define KEYPAD_ROWS 4
+#define KEYPAD_COLS 3
+
+#define UG_CALL_SETTING "setting-call-efl"
+#define DIALER_LAYOUT_EDJ "phone/ph-dialer-layout.edj"
+
+namespace
+{
+ const std::string layoutFilePath = ContactsCommon::getAppEdjePath(DIALER_LAYOUT_EDJ);
+}
+
+PhDialerView::PhDialerView()
+ : m_Entry(nullptr), m_Controller(nullptr)
+{
+ feedback_initialize();
+}
+
+PhDialerView::~PhDialerView()
+{
+ feedback_deinitialize();
+}
+
+void PhDialerView::setPredictiveLayout(Evas_Object *layout)
+{
+ elm_object_part_content_set(getEvasObj(), PART_SWALLOW_PREDICTIVE, layout);
+}
+
+PhDialerEntry* PhDialerView::getEntry() const
+{
+ return m_Entry;
+}
+
+Evas_Object *PhDialerView::onCreate(Evas_Object *parent, void *viewParam)
+{
+ elm_theme_extension_add(nullptr, ContactsCommon::getAppEdjePath("common/custom_button_styles.edj").c_str());
+
+ Evas_Object *layout = elm_layout_add(parent);
+ Eina_Bool res = elm_layout_file_set(layout, layoutFilePath.c_str(), GROUP_DIALER);
+ WPWARN(res != EINA_TRUE, "elm_layout_file_set() failed");
+
+ m_Entry = new PhDialerEntry();
+ m_Entry->create(layout, nullptr);
+ elm_object_part_content_set(layout, PART_SWALLOW_ENTRY, m_Entry->getEvasObj());
+ elm_object_part_content_set(layout, PART_SWALLOW_KEYPAD, createKeypad(layout));
+ elm_object_part_content_set(layout, PART_SWALLOW_CALL, createCallButton(layout));
+ elm_object_part_content_set(layout, PART_SWALLOW_BACKSPACE, createBackspaceButton(layout));
+
+ m_Controller = new PhDialerSearchController();
+ m_Controller->create(*this);
+
+ m_Entry->setNumber(m_InitialNumber);
+
+ return layout;
+}
+
+void PhDialerView::setNumber(std::string &number)
+{
+ m_InitialNumber = number;
+ if(m_Entry) {
+ m_Entry->setNumber(number);
+ }
+}
+
+void PhDialerView::onPush(Elm_Object_Item *naviItem)
+{
+ enableMoreButton(naviItem, &PhDialerView::onMenuPressed, this);
+}
+
+void PhDialerView::onTabSelect(Elm_Object_Item *naviItem)
+{
+ Evas_Object *conf = getWindow()->getConformantEvasObj();
+ elm_object_signal_emit(conf, "elm,state,virtualkeypad,disable", "");
+ elm_object_signal_emit(conf, "elm,state,clipboard,disable", "");
+
+ enableMoreButton(naviItem, &PhDialerView::onMenuPressed, this);
+}
+
+void PhDialerView::onTabUnselect(Elm_Object_Item *naviItem)
+{
+ Evas_Object *conf = getWindow()->getConformantEvasObj();
+ elm_object_signal_emit(conf, "elm,state,virtualkeypad,enable", "");
+ elm_object_signal_emit(conf, "elm,state,clipboard,enable", "");
+}
+
+bool PhDialerView::onTabPop()
+{
+ return true;
+}
+
+void PhDialerView::onTabScrollStart()
+{
+}
+
+void PhDialerView::onTabScrollStop()
+{
+}
+
+Evas_Object *PhDialerView::createKeypad(Evas_Object *parent)
+{
+ Evas_Object *table = elm_table_add(parent);
+ elm_table_padding_set(table, 2, 2);
+
+ int id = 0;
+ for(int i = 0; i < KEYPAD_ROWS; ++i) {
+ for(int j = 0; j < KEYPAD_COLS; ++j, ++id) {
+ using namespace std::placeholders;
+
+ PhDialerKey *key = new PhDialerKey((PhDialerKey::Id) id);
+ key->create(table, nullptr);
+ key->setOnPressed(std::bind(&PhDialerView::onKeyPressed, this, _1));
+ key->setOnLongpressed(std::bind(&PhDialerView::onKeyLongpressed, this, _1));
+
+ Evas_Object *button = key->getEvasObj();
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_table_pack(table, button, j, i, 1, 1);
+ evas_object_show(button);
+ }
+ }
+
+ return table;
+}
+
+Evas_Object *PhDialerView::createCallButton(Evas_Object *parent)
+{
+ Evas_Object *button = elm_button_add(parent);
+ elm_object_style_set(button, "custom_circle");
+ evas_object_smart_callback_add(button, "clicked",
+ &PhDialerView::onCallPressed, this);
+
+ Evas_Object *edje = elm_layout_edje_get(button);
+ edje_object_color_class_set(edje, "button_normal", BUTTON_CALL_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0);
+ edje_object_color_class_set(edje, "button_pressed", BUTTON_CALL_PRESSED, 0, 0, 0, 0, 0, 0, 0, 0);
+
+ Evas_Object *image = elm_image_add(button);
+ Eina_Bool res = elm_image_file_set(image, layoutFilePath.c_str(), BUTTON_CALL);
+ WPWARN(res != EINA_TRUE, "elm_layout_file_set() failed");
+ elm_object_part_content_set(button, "elm.swallow.content", image);
+
+ return button;
+}
+
+Evas_Object *PhDialerView::createBackspaceButton(Evas_Object *parent)
+{
+ using namespace std::placeholders;
+ WButton *key = new WButton();
+ key->create(parent, nullptr);
+ key->setOnPressed(std::bind(&PhDialerView::onBackspacePressed, this, _1));
+ key->setOnLongpressed(std::bind(&PhDialerView::onBackspaceLongpressed, this, _1));
+
+ Evas_Object *button = key->getEvasObj();
+ elm_object_style_set(button, "transparent");
+ Evas_Object *image = elm_image_add(button);
+ Eina_Bool res = elm_image_file_set(image, layoutFilePath.c_str(), BUTTON_BACKSPACE);
+ WPWARN(res != EINA_TRUE, "elm_layout_file_set() failed");
+ elm_object_part_content_set(button, "elm.swallow.content", image);
+
+ return button;
+}
+
+void PhDialerView::onKeyPressed(WButton &button)
+{
+ PhDialerKey &key = static_cast<PhDialerKey&>(button);
+ m_Entry->insert(key.getValue());
+}
+
+bool PhDialerView::onKeyLongpressed(WButton &button)
+{
+ PhDialerKey &key = static_cast<PhDialerKey&>(button);
+ int id = key.getId();
+
+ if (m_Entry->getNumber().empty()) {
+ if (id >= PhDialerKey::ID_1 && id <= PhDialerKey::ID_9) {
+ launchSpeeddial(key.getValue() - '0');
+ return true;
+ }
+ }
+
+ if (id == PhDialerKey::ID_0) {
+ m_Entry->insert('+');
+ return true;
+ }
+
+ return false;
+}
+
+void PhDialerView::onBackspacePressed(WButton &button)
+{
+ feedback_play(FEEDBACK_PATTERN_KEY_BACK);
+ m_Entry->popBack();
+}
+
+bool PhDialerView::onBackspaceLongpressed(WButton &button)
+{
+ m_Entry->clear();
+ return true;
+}
+
+void PhDialerView::onCallPressed(void *data, Evas_Object *obj, void *event_info)
+{
+ PhDialerView *view = (PhDialerView*) data;
+
+ std::string number = view->m_Entry->getNumber();
+ if (!number.empty()) {
+ launchCall(number);
+ view->m_Entry->clear();
+ } else {
+ view->m_Entry->setNumber(getLastNumber());
+ }
+}
+
+void PhDialerView::onMenuPressed(void *data, Evas_Object *obj, void *event_info)
+{
+ PhDialerView *view = (PhDialerView*) data;
+
+ WMenuPopup *popup = new WMenuPopup();
+ popup->prepare(view->getWindow()->getEvasObj(),
+ view->getNaviframe()->getEvasObj());
+
+ if (!view->m_Entry->getNumber().empty()) {
+ popup->appendItem(PAT_(PH_KPD_BUTTON_SEND_MESSAGE),
+ std::bind(&PhDialerView::onSendMessage, view));
+ popup->appendItem(PAT_(PH_KPD_OPT_ADD_2_SECOND_PAUSE_ABB),
+ std::bind(&PhDialerView::onAddPause, view));
+ popup->appendItem(PAT_(PH_KPD_OPT_ADD_WAIT_ABB),
+ std::bind(&PhDialerView::onAddWait, view));
+ }
+
+ popup->appendItem(PAT_(PH_KPD_OPT_SPEED_DIAL_SETTINGS_ABB2),
+ std::bind(&PhDialerView::onSpeeddialSettings, view));
+ popup->appendItem(PAT_(PH_KPD_OPT_CALL_SETTINGS_ABB),
+ std::bind(&PhDialerView::onCallSettings, view));
+
+ view->attachPopup(popup);
+}
+
+void PhDialerView::onSendMessage()
+{
+ int err = launchMessageComposer("sms:", m_Entry->getNumber().c_str());
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "launchMessageComposer() failed(0x%x)", err);
+}
+
+void PhDialerView::onAddWait()
+{
+ m_Entry->insert(';');
+}
+
+void PhDialerView::onAddPause()
+{
+ m_Entry->insert(',');
+}
+
+void PhDialerView::onSpeeddialSettings()
+{
+ getNaviframe()->push(new PhSpeedDialView(), NULL, NULL);
+}
+
+void PhDialerView::onCallSettings()
+{
+ app_control_h request;
+ app_control_create(&request);
+ app_control_set_app_id(request, UG_CALL_SETTING);
+ app_control_set_launch_mode(request, APP_CONTROL_LAUNCH_MODE_GROUP);
+ int err = app_control_send_launch_request(request, NULL, NULL);
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "app_control_send_launch_request() failed(0x%x)", err);
+ app_control_destroy(request);
+}
+
+void PhDialerView::launchCall(const std::string &number)
+{
+ int err = ::launchCall(number.c_str());
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "launchCall() failed(0x%x)", err);
+}
+
+void PhDialerView::launchSpeeddial(int digit)
+{
+ std::string number = getSpeeddialNumber(digit);
+ if (!number.empty()) {
+ launchCall(number);
+ } else {
+ attachPopup(new PhDialerSpeeddialPopup(digit));
+ }
+}
+
+std::string PhDialerView::getSpeeddialNumber(int digit)
+{
+ std::string number;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+ contacts_list_h list = NULL;
+
+ contacts_filter_create(_contacts_speeddial._uri, &filter);
+ contacts_filter_add_int(filter, _contacts_speeddial.speeddial_number, CONTACTS_MATCH_EQUAL, digit);
+
+ contacts_query_create(_contacts_speeddial._uri, &query);
+ contacts_query_set_filter(query, filter);
+
+ int err = contacts_db_get_records_with_query(query, 0, 1, &list);
+ WPWARN(err != CONTACTS_ERROR_NONE, "contacts_db_get_records_with_query() failed(0x%x)", err);
+ if (list) {
+ contacts_record_h record = NULL;
+ contacts_list_get_current_record_p(list, &record);
+ if (record) {
+ char *str = NULL;
+ contacts_record_get_str_p(record, _contacts_speeddial.number, &str);
+ if (str) {
+ number = str;
+ }
+ }
+
+ contacts_list_destroy(list, true);
+ }
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+
+ return number;
+}
+
+std::string PhDialerView::getLastNumber()
+{
+ std::string number;
+ contacts_list_h list = NULL;
+ contacts_query_h query = NULL;
+ contacts_filter_h filter = NULL;
+
+ contacts_filter_create(_contacts_person_phone_log._uri, &filter);
+ contacts_filter_add_int(filter, _contacts_person_phone_log.log_type,
+ CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING);
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+ contacts_filter_add_int(filter, _contacts_person_phone_log.log_type,
+ CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_BLOCKED);
+
+ contacts_query_create(_contacts_person_phone_log._uri, &query);
+ contacts_query_set_filter(query, filter);
+ contacts_query_set_sort(query, _contacts_person_phone_log.log_time, false);
+
+ int err = contacts_db_get_records_with_query(query, 0, 1, &list);
+ WPWARN(err != CONTACTS_ERROR_NONE, "contacts_db_get_records_with_query() failed(0x%x)", err);
+ if (list) {
+ contacts_record_h record = NULL;
+ contacts_list_get_current_record_p(list, &record);
+ if (record) {
+ char *str = NULL;
+ contacts_record_get_str_p(record, _contacts_person_phone_log.address, &str);
+ if (str) {
+ number = str;
+ }
+ }
+
+ contacts_list_destroy(list, true);
+ }
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+
+ return number;
+}
diff --git a/lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumber.cpp b/lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumber.cpp
new file mode 100644
index 0000000..8158e22
--- /dev/null
+++ b/lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumber.cpp
@@ -0,0 +1,223 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerPredictiveNumber.h"
+#include "PhDialerPredictiveNumberUtils.h"
+#include "PhDialerSearchInfo.h"
+#include "PhDialerPredictiveNumberTypes.h"
+#include "ContactsUtils.h"
+#include <utility>
+#include <algorithm>
+
+using namespace Ph::Dialer;
+
+namespace
+{
+ typedef contacts_list_h (*ContactListGetter)(char digit);
+
+ ContactListGetter contactListGetters[] = {
+ Utils::getSpeedDial,
+ Utils::getLogList,
+ Utils::getContactListByName,
+ Utils::getContactListByNumber
+ };
+}
+
+PredictiveNumber::PredictiveNumber()
+ :m_LastFoundIndex(-1)
+{}
+
+void PredictiveNumber::search(const std::string &number)
+{
+ if(number.empty()) {
+ clear();
+ } else {
+ chooseSearch(number);
+ }
+
+ m_Number = number;
+}
+
+const SearchList * PredictiveNumber::getSearchResult() const
+{
+ if(!m_PredictiveNumberCache.empty()) {
+ return &m_PredictiveNumberCache.back();
+ }
+
+ return nullptr;
+}
+
+bool Ph::Dialer::PredictiveNumber::empty() const
+{
+ return m_PredictiveNumberCache.empty() || m_PredictiveNumberCache.back().empty();
+}
+
+void PredictiveNumber::distinctLogs(SearchList &searchList)
+{
+ auto logPred = [](PSearchInfo pSearchInfo) -> bool {
+ return pSearchInfo->getType() == IT_LOG;
+ };
+
+ auto logComp = [](PSearchInfo lhs, PSearchInfo rhs) -> bool {
+ return lhs->getSearchString() < rhs->getSearchString();
+ };
+
+ auto eqPred = [](PSearchInfo lhs, PSearchInfo rhs) -> bool {
+ return lhs->getSearchString() == rhs->getSearchString();
+ };
+
+ SearchList::iterator beg = std::find_if(searchList.begin(), searchList.end(), logPred);
+ SearchList::iterator end = std::find_if_not(beg, searchList.end(), logPred);
+
+ if(beg != end) {
+ std::sort(beg, end, logComp);
+ SearchList::iterator itForErase = std::unique(beg, end, eqPred);
+
+ searchList.erase(itForErase, end);
+ }
+}
+
+void PredictiveNumber::firstSearch(const std::string &number)
+{
+ clear();
+
+ SearchList searchList = searchInDB(number);
+
+ if(!searchList.empty()) {
+ distinctLogs(searchList);
+
+ m_PredictiveNumberCache.resize(number.size());
+ m_PredictiveNumberCache.front() = std::move(searchList);
+ m_LastFoundIndex = 0;
+
+ if(number.size() > 1) {
+ if(!searchInCache(m_PredictiveNumberCache.begin(), number)) {
+ clear();
+ }
+ }
+ }
+}
+
+SearchList Ph::Dialer::PredictiveNumber::searchInDB(const std::string &number)
+{
+ SearchList searchList;
+ contacts_record_h record = NULL;
+
+ for(int i = IT_SPEED_DIAL; i < IT_MAX; ++i) {
+ contacts_list_h list = contactListGetters[i](number.front());
+ CONTACTS_LIST_FOREACH(list, record) {
+ SearchInfo searchInfo((InfoType)i, record);
+ if(searchInfo.getType() != IT_NONE) {
+ size_t position = searchInfo.getSearchString().find(number);
+ if (position != std::string::npos) {
+ searchInfo.updateHighlightText(number, position);
+ }
+ searchList.push_back(std::make_shared<SearchInfo>(std::move(searchInfo)));
+ }
+ }
+ contacts_list_destroy(list, true);
+ }
+
+ return searchList;
+}
+
+void PredictiveNumber::chooseSearch(const std::string &number)
+{
+ if(m_Number.empty()) {
+ firstSearch(number);
+ }
+
+ if(!needSearch(number)) {
+ return;
+ }
+
+ m_PredictiveNumberCache.resize(number.size());
+ auto rIt = firstMismatch(number);
+ if(rIt == m_PredictiveNumberCache.rend()) {//Perform initial search
+ firstSearch(number);
+ } else {
+ searchInCache(rIt.base() - 1, number);
+ }
+}
+
+bool PredictiveNumber::searchInCache(Cache::iterator from, const std::string &number)
+{
+ SearchList searchRes;
+ for(PSearchInfo &sInfo : *from) {
+ if(sInfo) {
+ size_t position = sInfo->getSearchString().find(number);
+ if (position != std::string::npos) {
+ sInfo->updateHighlightText(number, position);
+ searchRes.push_back(sInfo);
+ }
+ }
+ }
+
+ if(!searchRes.empty()) {
+ m_LastFoundIndex = m_PredictiveNumberCache.size() - 1;
+ m_PredictiveNumberCache.back() = std::move(searchRes);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+Cache::reverse_iterator PredictiveNumber::firstMismatch(const std::string &number)
+{
+ size_t minSize = std::min(m_Number.size(), number.size());
+ auto itPair = std::mismatch(m_Number.begin(), m_Number.begin() + minSize, number.begin());
+
+ auto rIt = skipEmptyResults(itPair.first - m_Number.begin());
+ return rIt;
+}
+
+Cache::reverse_iterator PredictiveNumber::skipEmptyResults(size_t offset)
+{
+ auto rIt = std::reverse_iterator<Cache::iterator>(m_PredictiveNumberCache.begin() + offset);
+
+ while(rIt != m_PredictiveNumberCache.rend() && rIt->empty()) {
+ ++rIt;
+ }
+
+ return rIt;
+}
+
+void PredictiveNumber::clear()
+{
+ m_PredictiveNumberCache.clear();
+ m_LastFoundIndex = -1;
+}
+
+bool PredictiveNumber::needSearch(const std::string &number)
+{
+ if( number.size() >= m_Number.size()
+ &&(int)(m_PredictiveNumberCache.size() - 1) > m_LastFoundIndex) {
+ return false;
+ }
+ return true;
+}
+
+void PredictiveNumber::searchFromScratch(const std::string& number)
+{
+ if(number.empty()) {
+ clear();
+ } else {
+ firstSearch(number);
+ }
+
+ m_Number = number;
+}
diff --git a/lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumberUtils.cpp b/lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumberUtils.cpp
new file mode 100644
index 0000000..699b87d
--- /dev/null
+++ b/lib-phone/ph-dialer/src/predictive-number/PhDialerPredictiveNumberUtils.cpp
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "ContactsThumbnail.h"
+#include "ContactsUtils.h"
+#include "PhDialerPredictiveNumberUtils.h"
+#include "PhDialerLayout.h"
+#include "ContactsDebug.h"
+
+#include <Elementary.h>
+
+using namespace Ph::Dialer;
+using namespace Ph::Dialer::Utils;
+
+namespace
+{
+ const char *mask[] = {
+ "+",
+ "",
+ "abc",
+ "def",
+ "ghi",
+ "jkl",
+ "mno",
+ "pqrs",
+ "tuv",
+ "wxyz"
+ };
+
+ char getDigit(char c)
+ {
+ static const char hash[] = "22233344455566677778889999";
+
+ if(c == '+') {
+ return '0';
+ }
+
+ size_t index = tolower(c) - 'a';
+
+ if(index >= sizeof(hash) - 1) {
+ return '\0';
+ }
+
+ return hash[index];
+ }
+
+ std::string getDigitMask(char digit)
+ {
+ if(digit > '9' || digit < '0') {
+ WERROR("getDigitMask expected digit(0-9) argument, but %c is provided", digit);
+ return "";
+ }
+
+ int index = digit - '0';
+ return mask[index];
+ }
+
+ contacts_filter_h createContactNameFilters(char digit)
+ {
+ std::string mask = getDigitMask(digit);
+ if (mask.empty()) {
+ return NULL;
+ }
+
+ contacts_filter_h filter = NULL;
+ contacts_filter_create(_contacts_contact_number._uri, &filter);
+ bool isFirst = true;
+ for(auto &x : mask) {
+ if(!isFirst) {
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
+ }
+
+ char str[] = { x, '\0' };
+ contacts_filter_add_str(filter, _contacts_contact_number.display_name, CONTACTS_MATCH_CONTAINS, str);
+ isFirst = false;
+ }
+ return filter;
+ }
+
+ contacts_list_h runQuery(const char *tableUri, contacts_filter_h filter)
+ {
+ contacts_list_h list = NULL;
+ contacts_query_h query = NULL;
+
+ contacts_query_create(tableUri, &query);
+ contacts_query_set_filter(query, filter);
+
+ contacts_db_get_records_with_query(query, 0, 0, &list);
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+
+ return list;
+ }
+
+ std::string getThumbnail(int id)
+ {
+ std::string path;
+ contacts_record_h record = NULL;
+ if(contacts_db_get_record(_contacts_contact._uri, id, &record) == CONTACTS_ERROR_NONE) {
+ char *imgPath = NULL;
+ contacts_record_get_str_p(record, _contacts_contact.image_thumbnail_path, &imgPath);
+ if(imgPath) {
+ path = imgPath;
+ }
+ contacts_record_destroy(record, true);
+ }
+ return path;
+ }
+}
+
+contacts_list_h Ph::Dialer::Utils::getSpeedDial(char number)
+{
+ contacts_filter_h filter = NULL;
+ contacts_filter_create(_contacts_speeddial._uri, &filter);
+ contacts_filter_add_int(filter, _contacts_speeddial.speeddial_number, CONTACTS_MATCH_EQUAL, number - '0');
+
+ contacts_list_h list = runQuery(_contacts_speeddial._uri, filter);
+
+ return list;
+}
+
+contacts_list_h Ph::Dialer::Utils::getLogList(char digit)
+{
+ char number [] = { digit, '\0' };
+ contacts_filter_h filter = NULL;
+ contacts_filter_create(_contacts_phone_log._uri, &filter);
+
+ contacts_filter_add_str(filter, _contacts_phone_log.address, CONTACTS_MATCH_CONTAINS, number);
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+ contacts_filter_add_int(filter, _contacts_phone_log.log_type,
+ CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING);
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+ contacts_filter_add_int(filter, _contacts_phone_log.log_type,
+ CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_BLOCKED);
+
+ contacts_list_h list = runQuery(_contacts_phone_log._uri, filter);
+
+ contacts_list_h retList = NULL;
+ contacts_list_create(&retList);
+ contacts_record_h record = NULL;
+ CONTACTS_LIST_FOREACH(list, record) {
+ int personId = 0;
+ contacts_record_get_int(record, _contacts_phone_log.person_id, &personId);
+ if(personId == 0) {
+ contacts_list_add(retList, record);
+ } else {
+ contacts_record_destroy(record, true);
+ }
+ }
+ contacts_list_destroy(list, false);
+
+ return retList;
+}
+
+contacts_list_h Ph::Dialer::Utils::getContactListByName(char digit)
+{
+ contacts_query_h query = NULL;
+ contacts_list_h list = NULL;
+ contacts_query_create(_contacts_contact_number._uri, &query);
+ contacts_filter_h filter = createContactNameFilters(digit);
+ if(filter) {
+ contacts_query_set_filter(query, filter);
+ contacts_db_get_records_with_query(query, 0, 0, &list);
+ }
+
+ contacts_filter_destroy(filter);
+ contacts_query_destroy(query);
+ return list;
+}
+
+contacts_list_h Ph::Dialer::Utils::getContactListByNumber(char digit)
+{
+ char number [] = { digit, '\0' };
+ contacts_filter_h filter = NULL;
+ contacts_filter_create(_contacts_contact_number._uri, &filter);
+ contacts_filter_add_str(filter, _contacts_contact_number.number, CONTACTS_MATCH_CONTAINS, number);
+
+ contacts_list_h list = runQuery(_contacts_contact_number._uri, filter);
+
+ return list;
+}
+
+std::string Ph::Dialer::Utils::contactNameToMask(const std::string &name)
+{
+ std::string number;
+ number.reserve(name.size());
+
+ for(auto &x : name) {
+ char digit = getDigit(x);
+ if(digit == '\0') {
+ break;
+ }
+ number.push_back(digit);
+ }
+ return number;
+}
+
+Evas_Object *Ph::Dialer::Utils::createThumbnail(Evas_Object *parent, int contactId)
+{
+ std::string thumbnailPath = getThumbnail(contactId);
+ Evas_Object *thumbnailImage = createThumbnail(parent, THUMBNAIL_98, thumbnailPath.c_str(), true);
+
+ return thumbnailImage;
+}
diff --git a/lib-phone/ph-dialer/src/predictive-number/PhDialerSearchInfo.cpp b/lib-phone/ph-dialer/src/predictive-number/PhDialerSearchInfo.cpp
new file mode 100644
index 0000000..f048090
--- /dev/null
+++ b/lib-phone/ph-dialer/src/predictive-number/PhDialerSearchInfo.cpp
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhDialerSearchInfo.h"
+#include "PhDialerPredictiveNumberUtils.h"
+#include "ContactsCommon.h"
+
+using namespace Ph::Dialer;
+using namespace Ph::Dialer::Utils;
+
+SearchInfo::SearchInfo(InfoType type, const contacts_record_h record)
+ : m_Type(type), m_Id(0), m_SpeedDialId(0)
+{
+ if(record) {
+ if(!fillWithRecord(type, record)) {
+ m_Type = IT_NONE;
+ }
+ }
+}
+
+std::string SearchInfo::getSearchString() const
+{
+ switch(m_Type) {
+ case IT_SPEED_DIAL:
+ return std::string(1, (m_SpeedDialId + '0'));
+ case IT_LOG:
+ case IT_NUMBER:
+ return m_Number;
+ case IT_NAME:
+ return m_MaskedName;
+ case IT_NONE:
+ case IT_MAX:
+ default:
+ return "";
+ }
+}
+
+InfoType SearchInfo::getType() const
+{
+ return m_Type;
+}
+
+int SearchInfo::getId() const
+{
+ return m_Id;
+}
+
+int Ph::Dialer::SearchInfo::getSpeedDialId() const
+{
+ return m_SpeedDialId;
+}
+
+const std::string &Ph::Dialer::SearchInfo::getName(bool isHighlighted) const
+{
+ bool returnHighlight = isHighlighted && (m_Type == IT_NAME) && !m_HighlightedText.empty();
+ return returnHighlight ? m_HighlightedText : m_Name;
+}
+
+const std::string &Ph::Dialer::SearchInfo::getNumber(bool isHighlighted) const
+{
+ bool returnHighlight = isHighlighted && ((m_Type == IT_LOG) || (m_Type == IT_NUMBER)) && !m_HighlightedText.empty();
+ return returnHighlight ? m_HighlightedText : m_Number;
+}
+
+const std::string &Ph::Dialer::SearchInfo::getHighlightedText() const
+{
+ return m_HighlightedText;
+}
+
+bool SearchInfo::updateHighlightText(const std::string searchStr, size_t position)
+{
+ switch(m_Type)
+ {
+ case IT_LOG:
+ case IT_NUMBER:
+ m_HighlightedText = ContactsCommon::highlightTextByPos(m_Number, position, searchStr.size());
+ return true;
+ case IT_NAME:
+ m_HighlightedText = ContactsCommon::highlightTextByPos(m_Name, position, searchStr.size());
+ return true;
+ case IT_NONE:
+ case IT_SPEED_DIAL:
+ case IT_MAX:
+ default:
+ return false;
+ }
+}
+
+bool Ph::Dialer::SearchInfo::fillWithRecord(InfoType type, const contacts_record_h record)
+{
+ switch(type)
+ {
+ case IT_SPEED_DIAL:
+ fillSpeedDial(record);
+ return true;
+ case IT_LOG:
+ fillLog(record);
+ return true;
+ case IT_NAME:
+ case IT_NUMBER:
+ fillContact(type, record);
+ return true;
+ case IT_NONE:
+ case IT_MAX:
+ default:
+ return false;
+ }
+}
+
+void SearchInfo::fillSpeedDial(const contacts_record_h record)
+{
+ char *tempStr = NULL;
+
+ contacts_record_get_int(record, _contacts_speeddial.person_id, &m_Id);
+ contacts_record_get_int(record, _contacts_speeddial.speeddial_number, &m_SpeedDialId);
+ contacts_record_get_str_p(record, _contacts_speeddial.number, &tempStr);
+ m_Number = tempStr;
+ contacts_record_get_str_p(record, _contacts_speeddial.display_name, &tempStr);
+ m_Name = tempStr;
+}
+
+void SearchInfo::fillLog(const contacts_record_h record)
+{
+ char *tempStr = NULL;
+
+ contacts_record_get_int(record, _contacts_phone_log.person_id, &m_Id);
+ contacts_record_get_str_p(record, _contacts_phone_log.address, &tempStr);
+ m_Number = tempStr;
+}
+
+void SearchInfo::fillContact(InfoType type, const contacts_record_h record)
+{
+ char *tempStr = NULL;
+
+ contacts_record_get_int(record, _contacts_contact_number.contact_id, &m_Id);
+ contacts_record_get_str_p(record, _contacts_contact_number.display_name, &tempStr);
+ m_Name = tempStr;
+ contacts_record_get_str_p(record, _contacts_contact_number.number, &tempStr);
+ m_Number = tempStr;
+ if(type == IT_NAME) {
+ m_MaskedName = Utils::contactNameToMask(m_Name);
+ }
+}
diff --git a/lib-phone/ph-loglist/.cproject b/lib-phone/ph-loglist/.cproject
new file mode 100644
index 0000000..8f8d239
--- /dev/null
+++ b/lib-phone/ph-loglist/.cproject
@@ -0,0 +1,569 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-loglist" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.so.debug">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug.1268564374" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.357656315" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder autoBuildTarget="all" buildPath="${workspace_loc:/ph-loglist}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.374765326" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.210949800" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.526577659" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.1852203539" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1537092892" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.780850730" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1392951409" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1486723187" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.691335267" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc/app-assist}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/dbus}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/icu}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.571115734" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.preprocessor.def.1425542116" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ <listOptionValue builtIn="false" value="TIZEN_DEBUG_ENABLE"/>
+ <listOptionValue builtIn="false" value="_SDK_BUILD"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.other.other.1087282265" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++0x" valueType="string"/>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1058541102"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1568618654" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1571538028" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.1351273991" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.1032488492" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.15180974" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1750798455" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.2049631956" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1869181376" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.2012388161" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.c.compiler.option.preprocessor.def.symbols.2004094523" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.1775860804"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1595990485" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.859964084" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1066378633" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.230901020" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1057067056" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.910559997" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/Debug}&quot;"/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.1246540549" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="app-assist-efl"/>
+ <listOptionValue builtIn="false" value="common"/>
+ <listOptionValue builtIn="false" value="ph-common"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1999672878" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.52283727" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.133753733" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.2034841340" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.64064899" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.1449153983" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.840760033" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.1112553035" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.1256022557" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <fileInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417.2091195160" name="PhLogDbus.c" rcbsApplicability="disable" resourcePath="dbus/PhLogDbus.c" toolsToInvoke="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661">
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244">
+ <option id="gnu.c.compiler.option.include.paths.781192619" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1537400239" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1683811059"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1933179288"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1625711111"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.268811411"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.2099423160"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1154310846"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1750264319"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.776728515"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.878672231"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.2145790635"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1245035685"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.1630547299"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.2109885153"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1862095244.1918651661.2128240331"/>
+ </tool>
+ <tool customBuildStep="true" id="org.eclipse.cdt.managedbuilder.ui.rcbs.2131434453" name="Resource Custom Build Step">
+ <inputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.inputtype.2066301971" name="Resource Custom Build Step Input Type">
+ <additionalInput kind="additionalinputdependency" paths=""/>
+ </inputType>
+ <outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1861482786" name="Resource Custom Build Step Output Type"/>
+ </tool>
+ </fileInfo>
+ <fileInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417.1406579334" name="PhLogMainListView.cpp" rcbsApplicability="disable" resourcePath="src/PhLogMainListView.cpp" toolsToInvoke="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109">
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366">
+ <option id="gnu.cpp.compiler.option.preprocessor.def.2021569939" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ <listOptionValue builtIn="false" value="_SDK_BUILD"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1981265741" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.1876033264"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.753535715"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.1880266644"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.1302435615"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.1942195483"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.1206305339"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.338825111"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.415199366.1189446109.2007274907"/>
+ </tool>
+ </fileInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="dbus"/>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="icu"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.release.1907562476">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.release.1907562476" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-loglist" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.release.1907562476" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.so.release">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.release.1907562476." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.release.1479264651" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.release">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1072303678" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder buildPath="${workspace_loc:/ph-loglist}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1199889709" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1845460411" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.128717458" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.1003461665" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.844519924" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.114265932" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.1503875434" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.2094071815" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1089338488" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.2070783741" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1567105913" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.431474728"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.621750961" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.64352589" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1466556173" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.2017322390" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.1800024028" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.2106195166" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.2022723296" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1857647731" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1129221857" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.1725210508" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.1270711219"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.652487094" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.240750179" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1941015730" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.1222299802" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.471048839" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.438916348" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1458984705" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.199837942" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.645048697" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1182209747" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.971618823" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.1812689761" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.818440247" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.402643839" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.20766984" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="ph-loglist.org.tizen.nativecore.target.sbi.gcc45.so.247786340" name="Tizen Core Shared Library" projectType="org.tizen.nativecore.target.sbi.gcc45.so"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.debug.2086950417">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.release.1907562476">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="org.tizen.tizen.nativeapp.projectInfo" version="1.0.0"/>
+ <storageModule moduleId="refreshScope" versionNumber="2">
+ <configuration configurationName="Release">
+ <resource resourceType="PROJECT" workspacePath="/ph-loglist"/>
+ </configuration>
+ <configuration configurationName="Debug">
+ <resource resourceType="PROJECT" workspacePath="/ph-loglist"/>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+</cproject>
diff --git a/lib-phone/ph-loglist/.project b/lib-phone/ph-loglist/.project
new file mode 100644
index 0000000..497753e
--- /dev/null
+++ b/lib-phone/ph-loglist/.project
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ph-loglist</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.nativecore.apichecker.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ <nature>org.tizen.nativecore.apichecker.core.tizenCppNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1413871690242</id>
+ <name></name>
+ <type>26</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/lib-phone/ph-loglist/.tproject b/lib-phone/ph-loglist/.tproject
new file mode 100644
index 0000000..f1cc1fd
--- /dev/null
+++ b/lib-phone/ph-loglist/.tproject
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+ <platforms>
+ <platform>
+ <name>mobile-2.3</name>
+ </platform>
+ </platforms>
+ <package>
+ <blacklist/>
+ </package>
+</tproject>
diff --git a/lib-phone/ph-loglist/CMakeLists.txt b/lib-phone/ph-loglist/CMakeLists.txt
new file mode 100755
index 0000000..5ce0881
--- /dev/null
+++ b/lib-phone/ph-loglist/CMakeLists.txt
@@ -0,0 +1,26 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ph-loglist CXX)
+
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/app-assist-efl/inc
+ ${CMAKE_SOURCE_DIR}/lib-common/inc
+ ${CMAKE_SOURCE_DIR}/lib-phone/ph-common/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/icu
+)
+
+FILE(GLOB SRCS
+ "src/*.cpp"
+ "icu/*.cpp"
+)
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${TIZEN_PKGS_LDFLAGS}
+ "app-assist-efl"
+ "contacts-common"
+ "ph-common"
+)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_APP_LIB_DIR})
+
diff --git a/lib-phone/ph-loglist/icu/PhLogIcu.cpp b/lib-phone/ph-loglist/icu/PhLogIcu.cpp
new file mode 100755
index 0000000..3e6b7a2
--- /dev/null
+++ b/lib-phone/ph-loglist/icu/PhLogIcu.cpp
@@ -0,0 +1,319 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <utils_i18n.h>
+#include <system_settings.h>
+
+#include "ContactsDebug.h"
+#include "PhLogIcu.h"
+#include <string>
+
+#define LOGS_COMMON_MAX_UCHAR_PATTERN_LEN 64
+#define LOGS_COMMON_MAX_CHAR_PATTERN_LEN 128
+#define PH_TEXT_SHORT_LEN 256
+
+//// for ICU ///
+static char *systemLocale = NULL;
+static char *systemTimezone = NULL;
+static std::string groupFormatType("dd/MM/y");
+static PhLogIcu::PhTimeFormat timeFormatType = PhLogIcu::PH_TIME_FORMAT_12H;
+
+PhLogIcu::PhLogIcu()
+{
+ // TODO Auto-generated constructor stub
+
+}
+
+PhLogIcu::~PhLogIcu()
+{
+ // TODO Auto-generated destructor stub
+}
+
+char *PhLogIcu::__getString(const char *pattern, time_t timeData)
+{
+ WENTER();
+
+ i18n_udate_format_h formatter = NULL;
+ i18n_uchar formatted[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0,};
+ char result[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0,};
+ int formattedLength;
+ i18n_udate date;
+
+ i18n_uchar bestPattern[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0,};
+ i18n_ustring_copy_ua_n(bestPattern, pattern, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+ i18n_uchar utf16_timezone[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0,};
+
+ if(NULL == systemTimezone)
+ {
+ WWARNING("systemTimezone = NULL");
+ }
+ i18n_ustring_copy_ua_n(utf16_timezone, systemTimezone, SAFE_STRLEN(systemTimezone));
+ i18n_udate_create(I18N_UDATE_PATTERN , I18N_UDATE_PATTERN , systemLocale, utf16_timezone, -1, bestPattern, -1, &formatter);
+ date = (i18n_udate)timeData * 1000;
+
+ i18n_udate_format_date(formatter, date, formatted, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN, NULL, &formattedLength);
+ i18n_ustring_copy_au_n(result, formatted, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+ i18n_udate_destroy(formatter);
+
+ return strdup(result);
+
+}
+
+char *PhLogIcu::__getDateByBestPattern(const char* skeleton)
+{
+ WPRET_VM(systemLocale == NULL, NULL, "systemLocale is NULL");
+ WPRET_VM(skeleton == NULL, NULL, "skeleton is NULL");
+
+ static char lastTimezoneId[PH_TEXT_SHORT_LEN+1] = {0};
+ static char lastLocale[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0};
+ static char lastSkeleton[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0};
+ static char lastBestPatternString[LOGS_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0};
+
+ // Use previous cache (for performance)
+ if(strcmp(systemLocale, lastLocale) == 0 && strcmp(skeleton, lastSkeleton) == 0 && (strlen(lastBestPatternString) > 0)
+ && (systemTimezone && strncmp(systemTimezone, lastTimezoneId, PH_TEXT_SHORT_LEN-1) == 0))
+ {
+ return strdup(lastBestPatternString);
+ }
+
+ WWARNING("ICU cache updated!");
+ if(systemTimezone)
+ {
+ strncpy(lastTimezoneId, systemTimezone, PH_TEXT_SHORT_LEN-1);
+ }
+
+ i18n_udatepg_h pattern_generator = NULL;
+
+ if(!pattern_generator) {
+ i18n_udatepg_create(systemLocale, &pattern_generator);
+ }
+ if(!pattern_generator) {
+ WDEBUG("udatpg_open fail");
+ return NULL;
+ }
+
+ i18n_uchar bestPattern[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0,};
+ char bestPatternString[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0,};
+ int bestPatternLength, len;
+ i18n_uchar uch_custom_format[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {0};
+
+ int skeletonLength = strlen(skeleton);
+
+ if (skeletonLength <= LOGS_COMMON_MAX_UCHAR_PATTERN_LEN)
+ i18n_ustring_copy_ua_n(uch_custom_format, skeleton, skeletonLength);
+
+ else
+ i18n_ustring_copy_ua_n(uch_custom_format, skeleton, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+ len = i18n_ustring_get_length(uch_custom_format);
+
+ i18n_udatepg_get_best_pattern(pattern_generator, uch_custom_format, len, bestPattern, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN, &bestPatternLength);
+ i18n_ustring_copy_au_n(bestPatternString, bestPattern, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN);
+ i18n_udatepg_destroy(pattern_generator);
+
+ strncpy(lastLocale, systemLocale, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN-1);
+ strncpy(lastSkeleton, skeleton, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN-1);
+ strncpy(lastBestPatternString, bestPatternString, LOGS_COMMON_MAX_CHAR_PATTERN_LEN);
+
+ return strdup(bestPatternString);
+}
+
+void PhLogIcu::setTimeFormat()
+{
+ bool timeformat = false;
+
+ system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, &timeformat);
+
+ if (timeformat == true)
+ timeFormatType = PH_TIME_FORMAT_24H;
+ else
+ timeFormatType = PH_TIME_FORMAT_12H;
+}
+
+int PhLogIcu::generatePatternForLocal(const char *locale, const char *patternFormat, char *genPattern, int genPatternSize)
+{
+ WENTER();
+ int status = 0;
+ i18n_udatepg_h udatepg = NULL;
+ i18n_uchar format[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {'\0'};
+ i18n_uchar bestPattern[LOGS_COMMON_MAX_UCHAR_PATTERN_LEN] = {'\0'};
+ int patternLen = 0;
+
+ status = i18n_udatepg_create(locale, &udatepg);
+ if (!udatepg || status != 0) {
+ WDEBUG("i18n_udatepg_create() failed: %d", status);
+ return -1;
+ }
+
+ i18n_ustring_copy_ua_n(format, patternFormat, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+ status = i18n_udatepg_get_best_pattern(udatepg, format, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN,
+ bestPattern, LOGS_COMMON_MAX_UCHAR_PATTERN_LEN, &patternLen);
+ if (status != I18N_ERROR_NONE) {
+ WDEBUG("i18n_udatepg_get_best_pattern() failed: %d", status);
+ i18n_udatepg_destroy(udatepg);
+ return -1;
+ }
+
+ i18n_ustring_copy_au_n(genPattern, bestPattern, genPatternSize);
+ i18n_udatepg_destroy(udatepg);
+
+ return 0;
+}
+
+void PhLogIcu::setDateFormat()
+{
+ WENTER();
+ char *country = NULL;
+ char result[LOGS_COMMON_MAX_CHAR_PATTERN_LEN] = { '\0' };
+ int res = 0;
+
+ res = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &country);
+ if (res != SYSTEM_SETTINGS_ERROR_NONE )
+ {
+ return;
+ }
+
+ res = generatePatternForLocal(country, "yy-MM-dd", result, LOGS_COMMON_MAX_CHAR_PATTERN_LEN);
+ free(country);
+ if (res != 0)
+ {
+ WDEBUG("failed to generate pattern for local");
+ return ;
+ }
+ groupFormatType = result;
+}
+
+void PhLogIcu::setLocale()
+{
+ WENTER();
+ int status = I18N_ERROR_NONE ;
+
+ status = i18n_ulocale_set_default(getenv("LC_TIME"));
+ WDEBUG("status : [%d]", status);
+ if (systemLocale)
+ {
+ free(systemLocale);
+ systemLocale = NULL;
+ }
+ const char* locale;
+ i18n_ulocale_get_default(&locale);
+ systemLocale = SAFE_STRDUP(locale);
+ WDEBUG("%s",systemLocale);
+ strtok((char *)systemLocale, ".UTF8");
+}
+
+char *PhLogIcu::getTimeString(int time)
+{
+ time_t timeData = time;
+ char *timeFormat = NULL;
+ char *resultString = NULL;
+
+ if (timeFormatType == PH_TIME_FORMAT_12H)
+ timeFormat = __getDateByBestPattern("hma");
+ else
+ timeFormat = __getDateByBestPattern("Hm");
+
+ resultString = __getString(timeFormat, timeData);
+
+ if (timeFormat) free(timeFormat);
+
+ return resultString;
+}
+
+char *PhLogIcu::getGroupIndexDateString(int time)
+{
+ time_t timeData = time;
+ return __getString(groupFormatType.c_str(), timeData);
+}
+
+char *PhLogIcu::getCallDurationString(int time)
+{
+ int sec, min, hour, day;
+ struct tm tmp={0};
+ char buf_t[1024]={0};
+
+ sec = time;
+ day = sec/(60*60*24);
+ sec %= (60*60*24);
+ hour = sec/(60*60);
+ sec %= (60*60);
+ min = sec/(60);
+ sec %= (60);
+ tmp.tm_mday = day;
+ tmp.tm_hour = hour;
+ tmp.tm_min = min;
+ tmp.tm_sec = sec;
+ strftime(buf_t, sizeof(buf_t), "%H:%M:%S", &tmp);
+
+ return strdup(buf_t);
+}
+
+void PhLogIcu::setDefaultTimezoneId()
+{
+ WENTER();
+ int error = I18N_ERROR_NONE;
+ i18n_uchar utimezone_id[PH_TEXT_SHORT_LEN] = {0};
+ char timezone_buffer[PH_TEXT_SHORT_LEN] = {0};
+ char timezone_id[PH_TEXT_SHORT_LEN] = {0};
+ char* buffer;
+ int res = 0;
+ int timezone_str_size;
+
+ res = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, &buffer);
+ WPRET_M(SYSTEM_SETTINGS_ERROR_NONE != res, "SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE is NULL");
+ strncpy(timezone_id, buffer, sizeof(timezone_id)-1);
+ timezone_str_size = readlink("/opt/etc/localtime", timezone_buffer, sizeof(timezone_buffer)-1);
+ free(buffer);
+
+ if (timezone_str_size > 0) {
+ char *ptr, *sp, *zone = NULL, *city = NULL;
+ ptr = strtok_r(timezone_buffer, "/", &sp);
+
+ while((ptr = strtok_r(NULL, "/", &sp))) {
+ zone = city;
+ city = ptr;
+ }
+
+ if(zone != NULL && city != NULL) {
+ if(strcmp("zoneinfo", zone) == 0) {
+ snprintf(timezone_id, sizeof(timezone_id), "%s", city);
+ }
+ else {
+ snprintf(timezone_id, sizeof(timezone_id), "%s/%s", zone, city);
+ }
+ }
+ WDEBUG("timezone_id:%s", timezone_id);
+ if (systemTimezone)
+ free(systemTimezone);
+ systemTimezone = strdup(timezone_id);
+ }
+ else {
+ WDEBUG("%s", "readlink fail");
+ }
+
+ if (*timezone_id) {
+ i18n_ustring_copy_ua_n(utimezone_id, timezone_id, PH_TEXT_SHORT_LEN);
+ error = i18n_ucalendar_set_default_timezone(utimezone_id);
+ WDEBUG("error:%d, utimezone_id:%s, timezone_id:%s", error, utimezone_id, timezone_id);
+ }
+ else {
+ WPRET_M(NULL == timezone_id, "get timezone_id is failed(%d)", error);
+ }
+}
diff --git a/lib-phone/ph-loglist/icu/PhLogIcu.h b/lib-phone/ph-loglist/icu/PhLogIcu.h
new file mode 100755
index 0000000..9f9e947
--- /dev/null
+++ b/lib-phone/ph-loglist/icu/PhLogIcu.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_ICU_H_
+#define _PH_LOG_ICU_H_
+
+class PhLogIcu
+{
+public:
+ PhLogIcu();
+ virtual ~PhLogIcu();
+
+public:
+ typedef enum {
+ PH_TIME_FORMAT_12H = 0,
+ PH_TIME_FORMAT_24H,
+ PH_TIME_FORMAT_UNKNOWN
+ } PhTimeFormat;
+
+ typedef enum {
+ PH_DATE_FORMAT_DD_MM_YYYY = 0,
+ PH_DATE_FORMAT_MM_DD_YYYY,
+ PH_DATE_FORMAT_YYYY_DD_MM,
+ PH_DATE_FORMAT_YYYY_MM_DD,
+ PH_DATE_FORMAT_UNKNOWN
+ } PhGroupIndexDateFormat;
+
+ static void setTimeFormat();
+ static int generatePatternForLocal(const char *locale, const char *patternFormat, char *genPattern, int genPatternSize);
+ static void setDateFormat();
+ static void setLocale();
+ static void setDefaultTimezoneId();
+
+ static char *getTimeString(int time);
+ static char *getGroupIndexDateString(int time);
+ static char *getCallDurationString(int time);
+
+private:
+ static char *__getString(const char *pattern, time_t timeData);
+ static char *__getDateByBestPattern(const char* skeleton);
+};
+
+#endif /* _PH_LOG_ICU_H_ */
+
diff --git a/lib-phone/ph-loglist/inc/PhLogDbMgr.h b/lib-phone/ph-loglist/inc/PhLogDbMgr.h
new file mode 100755
index 0000000..02ae6af
--- /dev/null
+++ b/lib-phone/ph-loglist/inc/PhLogDbMgr.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_DB_MGR_H_
+#define _PH_LOG_DB_MGR_H_
+
+#include <list>
+#include <string>
+
+#include <contacts.h>
+////#include <contacts_product.h>
+
+#include "PhDbListener.h"
+
+class PhLogDbMgr
+{
+public:
+ static PhLogDbMgr* getInstance();
+
+public:
+ typedef enum {
+ LIST_TYPE_ALL_CALL_MESSAGE,
+ LIST_TYPE_MISSED_CALL,
+ LIST_TYPE_EMAIL,
+ LIST_TYPE_ALL_CALL,//more_popup
+ LIST_TYPE_DIALED_CALL,
+ LIST_TYPE_RECEIVED_CALL,
+ LIST_TYPE_REJECTED_CALL,
+ LIST_TYPE_ALL_MESSAGE,
+ LIST_TYPE_ALL_CALL_MESSAGE_EMAIL,
+ LIST_TYPE_SENT_MESSAGE,
+ LIST_TYPE_RECEIVED_MESSAGE,
+ LIST_TYPE_DETAIL_VIEW,
+ LIST_TYPE_VOICE_CALLS,
+ LIST_TYPE_VIDEO_CALLS,
+ LIST_TYPE_ALL_CALL_SIM_INDEX_1,
+ LIST_TYPE_ALL_CALL_SIM_INDEX_2
+ }ListType; //log type
+
+ typedef struct RecordInfo
+ {
+ RecordInfo();
+ ~RecordInfo();
+
+ char *displayName;
+ char *imgPath;
+ char *number;
+ char *callDesc;
+ char *displayLogTime;
+
+ int logId;
+ int personId;
+ int numberType;
+ int logTime;
+ int logType;
+ int callDuration;
+
+ std::list<PhLogDbMgr::RecordInfo*> *groupedList;
+ }RecordInfo;
+
+ std::list<PhLogDbMgr::RecordInfo*>* loadLogList(ListType listType, bool isUnknownIncluded, int limit = 0);
+ std::list<PhLogDbMgr::RecordInfo*>* loadDetailList(const char* searchNumber, const char* searchDesc);
+
+ bool deleteLogList(std::list<RecordInfo*> *logList, int totalCount);
+ void dumpLogList(const std::list<RecordInfo*>* list);
+ void updateMissedLogDbAsSeen(int index, int type);
+
+ void attach(PhDbListener* listener);
+ void detach(PhDbListener* listener);
+ static void onNotify(const char* view_uri, void* data);
+
+private:
+ PhLogDbMgr(const char* name);
+ virtual ~PhLogDbMgr();
+
+ unsigned int __getLogListDataFromDb(contacts_list_h* ctsList, ListType type, int limit);
+ unsigned int __getDetailListDataFromDb(contacts_list_h* ctsList, const char* number);
+
+ ListType __requestedListType;
+ bool __requestedIsUnknownIncluded;
+ std::list<PhDbListener*> __listenerList;
+};
+
+#endif //_PH_LOG_DB_MGR_H_
+
diff --git a/lib-phone/ph-loglist/inc/PhLogGenlistHelper.h b/lib-phone/ph-loglist/inc/PhLogGenlistHelper.h
new file mode 100755
index 0000000..6f97eb1
--- /dev/null
+++ b/lib-phone/ph-loglist/inc/PhLogGenlistHelper.h
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_GENLIST_HELPER_H_
+#define _PH_LOG_GENLIST_HELPER_H_
+
+#include "Elementary.h"
+#include "WControl.h"
+#include <functional>
+#include <vector>
+
+class PhLogGenlistHelper : public WControl
+{
+public:
+ PhLogGenlistHelper(Evas_Object* parent);
+
+public:
+ typedef struct {
+ Elm_Object_Item* it;
+ const void* data;
+ const void* p;
+ void* contents;
+ Ecore_Timer *thumbnailUpdateTimer;
+ } ItemData;
+
+ typedef struct {
+ Elm_Object_Item* it;
+ const void* data;
+ const void* p;
+ Eina_Bool isChecked;
+ Evas_Object *checkButton;
+ } CheckedItemData;
+
+ typedef enum{
+ SWIPE_TO_RIGHT,
+ SWIPE_TO_LEFT
+ }SwipeDirection;
+public:
+ Evas_Object* getEvasObj(){return __genlist;}
+ Elm_Object_Item* appendItem(
+ const Elm_Genlist_Item_Class *itc,
+ const void *data,
+ Elm_Object_Item *parent,
+ Elm_Genlist_Item_Type type,
+ Evas_Smart_Cb func,
+ const void *func_data);
+
+
+ Elm_Object_Item* appendCheckItem(
+ const Elm_Genlist_Item_Class *itc,
+ const void *data,
+ Elm_Object_Item *parent,
+ Elm_Genlist_Item_Type type,
+ Evas_Smart_Cb func,
+ const void *func_data,
+ Eina_Bool isChecked = EINA_FALSE);
+
+ void appendFinish();
+
+ void updateItems(void);
+
+ void setSwipeHandler(const std::function<void(SwipeDirection, void*)>& func) {__swipeHandler = func;}
+
+private:
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* param );
+ virtual void onDestroy();
+
+ static void __swipeStartCb(void *data, Elm_Object_Item *it, const char *em, const char *src);
+ static void __swipeInvokeCb(void *data, Elm_Object_Item *it, const char *em, const char *src);
+ static void __swipeCancleCb(void *data, Elm_Object_Item *it, const char *em, const char *src);
+ static void __genlistRealizedCb(void *data, Evas_Object *obj, void *event_info);
+ static void __genlistUnrealizedCb(void *data, Evas_Object *obj, void *event_info);
+ static void __languageChangedCb(void *data, Evas_Object *obj, void *event_info);
+ static void __longPressedCb(void *data, Evas_Object *obj, void *event_info);
+ static Eina_Bool __scrollTimerCb(void *data);
+ static void __scrollCb(void *data, Evas_Object *obj, void *event_info);
+ static void __mouseUpCb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
+
+ Evas_Object* __createGenlist(void);
+private:
+ PhLogGenlistHelper();
+ virtual ~PhLogGenlistHelper();
+
+private:
+ Evas_Object* __genlist;
+ Evas_Object* __parent;
+ std::function<void(SwipeDirection, void*)> __swipeHandler;
+ Ecore_Timer* __scrollTimer;
+ bool __isClearRequested;
+
+ int __smartAppendIndex;
+};
+
+#endif //_PH_LOG_GENLIST_HELPER_H_
+
diff --git a/lib-phone/ph-loglist/inc/PhLogListView.h b/lib-phone/ph-loglist/inc/PhLogListView.h
new file mode 100755
index 0000000..b6f5565
--- /dev/null
+++ b/lib-phone/ph-loglist/inc/PhLogListView.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_LIST_VIEW_H_
+#define _PH_LOG_LIST_VIEW_H_
+#include <system_settings.h>
+
+#include "WView.h"
+
+#include "IContactsTabPageView.h"
+
+#include "PhDbListener.h"
+
+#include "PhLogGenlistHelper.h"
+
+#define LOGLIST_SUB_TEXT_SIZE 22
+
+
+class PhLogListView : public PhDbListener, public IContactsTabPageView
+{
+public:
+ PhLogListView();
+
+public:
+ PhLogGenlistHelper* getGlHelper(void);
+ virtual void updateList(void) {};
+
+protected:
+ virtual void setGenlistLayout();
+ virtual void setNoContentLayout(void);
+
+ virtual void onTabSelect(Elm_Object_Item *naviItem);
+ virtual void onTabUnselect(Elm_Object_Item *naviItem);
+ virtual bool onTabPop(){return true;}
+ virtual void onTabScrollStart() {return;}
+ virtual void onTabScrollStop() {return;}
+ static void formatTimeDateChangedCb(system_settings_key_e key, void *data);
+ virtual void onCreated(void);
+ virtual void onDestroy(void);
+
+protected:
+ virtual ~PhLogListView();
+
+private:
+ PhLogGenlistHelper* __glHelper;
+};
+
+#endif //_PH_LOG_LIST_VIEW_H_
+
+
diff --git a/lib-phone/ph-loglist/inc/PhLogMainListCheckView.h b/lib-phone/ph-loglist/inc/PhLogMainListCheckView.h
new file mode 100755
index 0000000..fbe59bc
--- /dev/null
+++ b/lib-phone/ph-loglist/inc/PhLogMainListCheckView.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef PHLOGMAINLISTCHECKVIEW_H_
+#define PHLOGMAINLISTCHECKVIEW_H_
+
+#include "PhLogDbMgr.h"
+#include "PhLogListView.h"
+#include "ContactsCommon.h"
+
+class WAPP_ASSIST_EXPORT PhLogMainListCheckView : public PhLogListView
+{
+public:
+ PhLogMainListCheckView(ContactsData *contactsData);
+ PhLogMainListCheckView(PhLogDbMgr::ListType currentListType, int listPosition);
+
+protected:
+ virtual void onPushed(Elm_Object_Item* naviItem);
+ virtual void onSetAsPageContent(Elm_Object_Item* parentNaviItem);
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* viewParam);
+ virtual void onCreated();
+
+private:
+ typedef enum{
+ LAUNCH_MODE_NORMAL = 0,
+ LAUNCH_MODE_MESSAGE_COMPOSER,
+ LAUNCH_MODE_EMAIL_COMPOSER
+ }__LaunchMode;
+
+ virtual void onDbChanged();
+
+ virtual void updateList(void);
+
+ void __enableTitleBtn();
+
+ void __setGenlistItcs();
+
+ void __setList(void);
+
+ void __initializeTitleInfo();
+ void __updateTitleInfo();
+
+ static void __checkAllItems(PhLogGenlistHelper* glHelper);
+ static void __uncheckAllItems(PhLogGenlistHelper* glHelper);
+ static void __checkItem(PhLogGenlistHelper::CheckedItemData * itemData);
+ static void __uncheckItem(PhLogGenlistHelper::CheckedItemData * itemData);
+ static void __checkAllClickedCb(void *data, Evas_Object *obj, void *event_info);
+
+ static void __selectItemCb(void *data, Evas_Object *obj, void *event_info);
+
+ PhLogMainListCheckView::__LaunchMode __decideLaunchMode(ContactsData* contactsData);
+ void __replyToUgRequest();
+
+ //from IContactsTabPageView
+ virtual void onTabSelect(Elm_Object_Item *naviItem);
+ virtual void onTabUnselect(Elm_Object_Item *naviItem);
+ virtual bool onTabPop();
+
+private:
+ PhLogMainListCheckView();
+ virtual ~PhLogMainListCheckView();
+
+private:
+ Elm_Genlist_Item_Class *__itcGroupIndex;
+ Elm_Genlist_Item_Class *__itcDeleteList;
+ Elm_Genlist_Item_Class *__itcSelectAll;
+ std::list<PhLogDbMgr::RecordInfo*>* __logList;
+ Evas_Object *__checkAllButton;
+ Evas_Object *__deleteButton;
+ std::list<PhLogDbMgr::RecordInfo*> *__checkedList;
+ ContactsData* __contactsData;
+ __LaunchMode __launchMode;
+ PhLogDbMgr::ListType __currentListType;
+ PhLogDbMgr::RecordInfo* __newRecord;
+ bool __enableTitleButton;
+ bool __enableCheckAllButton;
+ int __checkedCount;
+ int __totalCount;
+ int __listInitialPosition;
+};
+
+#endif /* PHLOGMAINLISTCHECKVIEW_H_ */
diff --git a/lib-phone/ph-loglist/inc/PhLogMainListView.h b/lib-phone/ph-loglist/inc/PhLogMainListView.h
new file mode 100755
index 0000000..1cd9955
--- /dev/null
+++ b/lib-phone/ph-loglist/inc/PhLogMainListView.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_MAIN_LIST_VIEW_H_
+#define _PH_LOG_MAIN_LIST_VIEW_H_
+
+#include <map>
+#include <system_settings.h>
+
+#include "ContactsCommon.h"
+
+#include "PhLogListView.h"
+#include "PhLogDbMgr.h"
+#include "WUiTimer.h"
+
+class WAPP_ASSIST_EXPORT PhLogMainListView : public PhLogListView
+{
+public:
+ PhLogMainListView(ContactsData *contactsData);
+
+protected:
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* viewParam);
+ virtual void onCreated(void);
+ virtual void onDestroy(void);
+ virtual void onSetAsPageContent(Elm_Object_Item* parentNaviItem);
+
+private:
+ typedef enum{
+ LAUNCH_MODE_NORMAL = 0,
+ LAUNCH_MODE_SINGLE_SELECT_UG,
+ LAUNCH_MODE_EMAIL_ADD_PRIORITY_SENDER_UG,
+ LAUNCH_MODE_DURING_CALL_TABUG
+ } __LaunchMode;
+
+ __LaunchMode __decideLaunchMode(ContactsData* contactsData);
+ void __createViewBy();
+ void __resetMissedCallCount();
+ void __setMoreBtn(Elm_Object_Item *naviItem);
+ void __setList(void);
+ void __setGenlistItcs();
+ int __getListPosition();
+ void __initIcuPattern();
+
+ Evas_Object* __getCachedContents(std::string keyString);
+ Evas_Object* __createListContents(std::string contentsType);
+
+ static void __onViewByCallsCb(void *data, Evas_Object *obj, void *event_info);
+ static void __selectDetailButtonCb(void *data, Evas_Object *obj, void *event_info);
+ static void __selectItemCb(void *data, Evas_Object *obj, void *event_info);
+ static void __genlistUnswallowCb(void *data, Evas_Object* obj, void *event_info);
+ static void __windowFocusInCb(void *data, Evas_Object *obj, void *event_info);
+
+ //from PhLogListView
+ virtual void updateList(void);
+
+ //from PhDbListener
+ virtual void onDbChanged();
+
+ //from IContactsTabPageView
+ virtual void onTabSelect(Elm_Object_Item *naviItem);
+ virtual void onTabUnselect(Elm_Object_Item *naviItem);
+ virtual bool onTabPop();
+private:
+ PhLogMainListView();
+ virtual ~PhLogMainListView();
+
+private:
+ Elm_Genlist_Item_Class *__itcGroupIndex;
+ Elm_Genlist_Item_Class *__itcMainList;
+ std::list<PhLogDbMgr::RecordInfo*>* __logList;
+
+ bool __enableViewByButton;
+ Evas_Object* __viewByButton;
+ PhLogDbMgr::ListType __currentListType;
+ std::map<Evas_Object*,std::string> __logCacheList;
+
+ __LaunchMode __launchMode;
+ ContactsData* __contactsData;
+ WUiTimer* __dbUpdateTimer;
+ bool __isActive;
+ bool __isScrollStopped;
+ bool __isUpdateImmediate;
+};
+
+#endif /* _PH_LOG_MAIN_LIST_VIEW_H_ */
diff --git a/lib-phone/ph-loglist/src/PhLogDbMgr.cpp b/lib-phone/ph-loglist/src/PhLogDbMgr.cpp
new file mode 100755
index 0000000..35b62b6
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDbMgr.cpp
@@ -0,0 +1,663 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhCommon.h"
+#include "PhLogDbMgr.h"
+#include "ContactsDebug.h"
+#include "PhLogUtil.h"
+#include "PhLogIcu.h"
+
+#include <vector>
+
+PhLogDbMgr::RecordInfo::RecordInfo()
+{
+ displayName = NULL;
+ imgPath = NULL;
+ number = NULL;
+ callDesc = NULL;
+
+ logId = 0;
+ personId = 0;
+ numberType = 0;
+ logTime = 0;
+ logType = 0;
+ callDuration = 0;
+
+ groupedList = NULL;
+};
+PhLogDbMgr::RecordInfo::~RecordInfo()
+{
+ SAFE_FREE(displayName);
+ SAFE_FREE(imgPath);
+ SAFE_FREE(number);
+ SAFE_FREE(callDesc);
+
+ delete groupedList;
+};
+
+PhLogDbMgr* PhLogDbMgr::getInstance()
+{
+ static PhLogDbMgr __instance("LogDbMgr");
+ return &__instance;
+}
+
+PhLogDbMgr::PhLogDbMgr(const char* name)
+{
+ WENTER();
+ int err = CONTACTS_ERROR_NONE;
+
+ err = contacts_db_add_changed_cb(_contacts_person._uri, onNotify, this);
+ if (CONTACTS_ERROR_NONE != err) WWARNING("contacts_db_remove_changed_cb() Failed(%d)", err);
+ err = contacts_db_add_changed_cb(_contacts_phone_log._uri, onNotify, this);
+ if (CONTACTS_ERROR_NONE != err) WWARNING("contacts_db_remove_changed_cb() Failed(%d)", err);
+}
+
+PhLogDbMgr::~PhLogDbMgr()
+{
+ WENTER();
+ int err = CONTACTS_ERROR_NONE;
+
+ err = contacts_db_remove_changed_cb(_contacts_person._uri, onNotify, this);
+ if (CONTACTS_ERROR_NONE != err) WWARNING("contacts_db_remove_changed_cb() Failed(%d)", err);
+// err = contacts_db_remove_changed_cb_with_info(_contacts_phone_log._uri, onNotify, this);
+ err = contacts_db_remove_changed_cb(_contacts_phone_log._uri, onNotify, this);
+ if (CONTACTS_ERROR_NONE != err) WWARNING("contacts_db_remove_changed_cb() Failed(%d)", err);
+}
+
+unsigned int PhLogDbMgr::__getDetailListDataFromDb(contacts_list_h* ctsList, const char* number)
+{
+ WENTER();
+ int err = CONTACTS_ERROR_NONE;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+ int recordCnt = 0;
+
+ do{
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_create(_contacts_person_phone_log._uri, &query))) break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_create( _contacts_person_phone_log._uri, &filter))) break;
+
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_BLOCKED)))break;
+
+ if (SAFE_STRLEN(number)>0)
+ {
+ WHIT();
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_str(filter, _contacts_person_phone_log.address, CONTACTS_MATCH_EXACTLY, number)))break;
+ }
+
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_set_sort(query, _contacts_person_phone_log.log_time, false)))break;
+
+ if(ctsList != NULL)
+ {
+ if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, ctsList)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_list_get_count(*ctsList, &recordCnt)))break;
+ }
+ else
+ {
+ if (CONTACTS_ERROR_NONE != (err = contacts_db_get_count_with_query(query, (int *)(&recordCnt))))break;;
+ WDEBUG("get count! (%d records)", recordCnt);
+ }
+ }while(0);
+
+ if (query)
+ contacts_query_destroy(query);
+ if (filter)
+ contacts_filter_destroy(filter);
+
+ WDEBUG("get db records (ctsList: 0x%x, count:%d, error:%d)", ctsList, recordCnt, err);
+ return recordCnt;
+
+}
+
+unsigned int PhLogDbMgr::__getLogListDataFromDb(contacts_list_h* ctsList, ListType type, int limit)
+{
+ WENTER();
+ int err = CONTACTS_ERROR_NONE;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+ int recordCnt = 0;
+
+ int logTypeMin = CONTACTS_PLOG_TYPE_NONE;
+ int logTypeMax = CONTACTS_PLOG_TYPE_NONE;
+ err = contacts_query_create(_contacts_person_phone_log._uri, &query);
+ WPRET_VM(CONTACTS_ERROR_NONE != err, 0, "contacts_query_create() Failed(%d)", err);
+
+ err = contacts_filter_create( _contacts_person_phone_log._uri, &filter);
+ if (CONTACTS_ERROR_NONE != err) {
+ WERROR("contacts_filter_create() Failed(%d)", err);
+ err = contacts_query_destroy(query);
+ if(CONTACTS_ERROR_NONE != err)
+ WWARNING("contacts_query_destroy() Failed(%d)", err);
+ return 0;
+ }
+
+ switch (type)
+ {
+ case LIST_TYPE_MISSED_CALL:
+ logTypeMin = CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN;
+ logTypeMax = CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN;
+ break;
+ case LIST_TYPE_EMAIL:
+ logTypeMin = CONTACTS_PLOG_TYPE_EMAIL_RECEIVED;
+ logTypeMax = CONTACTS_PLOG_TYPE_EMAIL_SENT;
+ break;
+ case LIST_TYPE_ALL_CALL:
+ case LIST_TYPE_ALL_CALL_SIM_INDEX_1:
+ case LIST_TYPE_ALL_CALL_SIM_INDEX_2:
+ logTypeMin = CONTACTS_PLOG_TYPE_VOICE_INCOMMING;
+ logTypeMax = CONTACTS_PLOG_TYPE_VIDEO_BLOCKED;
+ break;
+ case LIST_TYPE_DIALED_CALL:
+ logTypeMin = CONTACTS_PLOG_TYPE_VOICE_OUTGOING;
+ logTypeMax = CONTACTS_PLOG_TYPE_VIDEO_OUTGOING;
+ break;
+ case LIST_TYPE_RECEIVED_CALL:
+ logTypeMin = CONTACTS_PLOG_TYPE_VOICE_INCOMMING;
+ logTypeMax = CONTACTS_PLOG_TYPE_VIDEO_INCOMMING;
+ break;
+ case LIST_TYPE_REJECTED_CALL:
+ logTypeMin = CONTACTS_PLOG_TYPE_VOICE_REJECT;
+ logTypeMax = CONTACTS_PLOG_TYPE_VIDEO_BLOCKED;
+ break;
+ case LIST_TYPE_ALL_MESSAGE:
+ logTypeMin = CONTACTS_PLOG_TYPE_MMS_INCOMMING;
+ logTypeMax = CONTACTS_PLOG_TYPE_MMS_BLOCKED;
+ break;
+ case LIST_TYPE_SENT_MESSAGE:
+ logTypeMin = CONTACTS_PLOG_TYPE_MMS_OUTGOING;
+ logTypeMax = CONTACTS_PLOG_TYPE_SMS_OUTGOING;
+ break;
+ case LIST_TYPE_RECEIVED_MESSAGE:
+ logTypeMin = CONTACTS_PLOG_TYPE_MMS_INCOMMING;
+ logTypeMax = CONTACTS_PLOG_TYPE_SMS_INCOMMING;
+ break;
+ case LIST_TYPE_VOICE_CALLS:
+ break;
+ case LIST_TYPE_VIDEO_CALLS:
+ break;
+ case LIST_TYPE_ALL_CALL_MESSAGE:
+ default:
+ logTypeMin = CONTACTS_PLOG_TYPE_VOICE_INCOMMING;
+ logTypeMax = CONTACTS_PLOG_TYPE_MMS_BLOCKED;
+ break;
+ }
+
+ if(type == LIST_TYPE_DIALED_CALL
+ || type == LIST_TYPE_RECEIVED_CALL
+ || type == LIST_TYPE_SENT_MESSAGE
+ || type == LIST_TYPE_RECEIVED_MESSAGE)
+ {
+ do {
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, logTypeMin)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, logTypeMax)))break;
+// if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+// if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_RCS)))break;
+ }while(0);
+ }
+ else if(type == LIST_TYPE_VOICE_CALLS)
+ {
+ do {
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_OUTGOING)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_REJECT)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_BLOCKED)))break;
+ }while(0);
+ }
+ else if(type == LIST_TYPE_VIDEO_CALLS)
+ {
+ do {
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_OUTGOING)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_REJECT)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_BLOCKED)))break;
+ }while(0);
+ }
+ else if(type == LIST_TYPE_ALL_CALL_SIM_INDEX_1 )
+ {
+ do{
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, logTypeMin)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, logTypeMax)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.sim_slot_no, CONTACTS_MATCH_EQUAL, 0)))break;
+ }while(0);
+ }
+ else if(type == LIST_TYPE_ALL_CALL_SIM_INDEX_2 )
+ {
+ do{
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, logTypeMin)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, logTypeMax)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.sim_slot_no, CONTACTS_MATCH_EQUAL, 1)))break;
+ }while(0);
+ }
+ else
+ {
+ do{
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, logTypeMin)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, logTypeMax)))break;
+ }while(0);
+ }
+
+ if (CONTACTS_ERROR_NONE == err)
+ {
+ WHIT();
+ do{
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_set_sort(query, _contacts_person_phone_log.log_time, false)))break;
+
+ // if output param NULL, just count the records
+ if(ctsList != NULL)
+ {
+ if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, limit, ctsList)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_list_get_count(*ctsList, &recordCnt)))break;
+ }
+ else
+ {
+ if (CONTACTS_ERROR_NONE != (err = contacts_db_get_count_with_query(query, (int *)(&recordCnt))))break;;
+ WDEBUG("get count! (%d records)", recordCnt);
+ }
+ }while(0);
+ }
+
+ if (query)
+ contacts_query_destroy(query);
+ if (filter)
+ contacts_filter_destroy(filter);
+
+ WDEBUG("get db records (ctsList: 0x%x, type:%d, count:%d, error:%d)", ctsList, type, recordCnt, err);
+ return recordCnt;
+
+}
+
+bool PhLogDbMgr::deleteLogList(std::list<RecordInfo*> *logList, int totalCount)
+{
+ WHIT();
+
+ WPRET_VM( NULL == logList, false, "Invalid parameter(data) is NULL");
+
+ int err = CONTACTS_ERROR_NONE;
+ std::vector<int> logIdArray;
+ logIdArray.reserve(totalCount);
+
+ for (auto &selectedRecordInfo : *logList) {
+ logIdArray.push_back(selectedRecordInfo->logId);
+
+ if (selectedRecordInfo->groupedList) {
+ for (auto &groupedRecordInfo : *selectedRecordInfo->groupedList) {
+ logIdArray.push_back(groupedRecordInfo->logId);
+ }
+ }
+ }
+
+ err = contacts_db_delete_records(_contacts_phone_log._uri, logIdArray.data(), logIdArray.size());
+ WPWARN(CONTACTS_ERROR_NONE != err, "contacts_db_delete_records() Failed(%d)", err);
+
+ return true;
+}
+
+std::list<PhLogDbMgr::RecordInfo*>* PhLogDbMgr::loadDetailList(const char* searchNumber, const char* searchDesc)
+{
+ WENTER();
+ WDEBUG("searchNumber[%s], searchDesc[%s]", searchNumber, searchDesc);
+
+ int err = CONTACTS_ERROR_NONE;
+ contacts_list_h ctsList = NULL;
+ contacts_record_h record = NULL;
+// bool isMessageType = PhLogUtil::isMsgType( searchRecord->logType);
+ __getDetailListDataFromDb(&ctsList, searchNumber);
+ WPRET_VM(ctsList == NULL, NULL, "__getLogListDataFromDb Failed.");
+
+ std::list<RecordInfo*>* list = new std::list<RecordInfo*>;
+ do{
+ err = contacts_list_get_current_record_p(ctsList, &record);
+ if(CONTACTS_ERROR_NONE != err){
+ WERROR("contacts_list_get_current_record_p() Failed(%d)", err);
+ break;
+ }
+
+ char *tmpNumber = NULL;
+ err = contacts_record_get_str_p(record, _contacts_person_phone_log.address, &tmpNumber);
+ if(CONTACTS_ERROR_NONE != err){
+ WERROR("contacts_record_get_str_p() Failed(%d)", err);
+ break;
+ }
+
+ char * tempDesc = NULL;
+ err = contacts_record_get_str_p(record, _contacts_person_phone_log.extra_data2, &tempDesc);
+ if(CONTACTS_ERROR_NONE != err){
+ WERROR("contacts_record_get_int() Failed(%d)", err);
+ break;
+ }
+
+ if( !( SAFE_STRLEN(searchNumber) > 0 ) )
+ {
+ if ( tmpNumber || !PhLogUtil::isGroupedByDesc(searchDesc, (const char*)tempDesc)) {
+ err = contacts_list_next(ctsList);
+ if (CONTACTS_ERROR_NONE != err) {
+ WERROR("contacts_list_next() Failed(%d)", err);
+ break;
+ }
+// free(tmpNumber);
+// free(tempDesc);
+ continue;
+ }
+ }
+
+ RecordInfo *recordInfo = new RecordInfo;
+ recordInfo->number = SAFE_STRDUP(tmpNumber);
+ recordInfo->callDesc = SAFE_STRDUP(tempDesc);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.log_id, &recordInfo->logId);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.person_id, &recordInfo->personId);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.log_time, &recordInfo->logTime);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.log_type, &recordInfo->logType);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.extra_data1, &recordInfo->callDuration);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.address_type, &recordInfo->numberType);
+ err = contacts_record_get_str(record, _contacts_person_phone_log.display_name, &recordInfo->displayName);
+ err = contacts_record_get_str(record, _contacts_person_phone_log.image_thumbnail_path, &recordInfo->imgPath);
+
+ if(PhLogUtil::isVoiceCallType(recordInfo->logType) || PhLogUtil::isVideoCallType(recordInfo->logType))
+ recordInfo->logTime -= recordInfo->callDuration;
+
+ list->push_back(recordInfo);
+
+ err = contacts_list_next(ctsList);
+// free(tmpNumber);
+// free(tempDesc);
+ if(CONTACTS_ERROR_NONE != err)
+ {
+ WERROR("contacts_list_next() Failed(%d)", err);
+ break;
+ }
+ }while (1);
+
+ contacts_list_destroy(ctsList, true);
+
+ return list;
+}
+
+std::list<PhLogDbMgr::RecordInfo*>* PhLogDbMgr::loadLogList(ListType listType, bool isUnknownIncluded, int limit /* = 0 */ )
+{
+ WENTER();
+
+ int err = CONTACTS_ERROR_NONE;
+ contacts_list_h ctsList;
+ contacts_record_h record = NULL;
+ std::list<RecordInfo*>* list = new std::list<RecordInfo*>;
+
+ __requestedListType = listType;
+ __requestedIsUnknownIncluded = isUnknownIncluded;
+
+ __getLogListDataFromDb(&ctsList, __requestedListType, limit);
+
+ if (ctsList == NULL) {
+ WERROR("__getLogListDataFromDb Failed.");
+ delete list;
+ return NULL;
+ }
+ do{
+ err = contacts_list_get_current_record_p(ctsList, &record);
+ if(CONTACTS_ERROR_NONE != err){
+ WERROR("contacts_list_get_current_record_p() Failed(%d)", err);
+ break;
+ }
+
+ char *number = NULL;
+ err = contacts_record_get_str_p(record, _contacts_person_phone_log.address, &number);
+ if(CONTACTS_ERROR_NONE != err){
+ WERROR("contacts_record_get_str_p() Failed(%d)", err);
+ break;
+ }
+
+ if (__requestedIsUnknownIncluded == false && (!number || !*number)) {
+ err = contacts_list_next(ctsList);
+ if (CONTACTS_ERROR_NONE != err) {
+ WERROR("contacts_list_next() Failed(%d)", err);
+ break;
+ }
+ continue;
+ }
+
+ RecordInfo *recordInfo = new RecordInfo;
+ err = contacts_record_get_int(record, _contacts_person_phone_log.log_id, &recordInfo->logId);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.person_id, &recordInfo->personId);
+ recordInfo->number = SAFE_STRDUP(number);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.log_time, &recordInfo->logTime);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.log_type, &recordInfo->logType);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.extra_data1, &recordInfo->callDuration);
+ err = contacts_record_get_int(record, _contacts_person_phone_log.address_type, &recordInfo->numberType);
+ err = contacts_record_get_str(record, _contacts_person_phone_log.display_name, &recordInfo->displayName);
+ err = contacts_record_get_str(record, _contacts_person_phone_log.image_thumbnail_path, &recordInfo->imgPath);
+ err = contacts_record_get_str(record, _contacts_person_phone_log.extra_data2, &recordInfo->callDesc);
+
+ if(PhLogUtil::isVoiceCallType(recordInfo->logType) || PhLogUtil::isVideoCallType(recordInfo->logType))
+ recordInfo->logTime -= recordInfo->callDuration;
+ recordInfo->displayLogTime = PhLogIcu::getTimeString(recordInfo->logTime);
+
+ list->push_back(recordInfo);
+
+ err = contacts_list_next(ctsList);
+ if(CONTACTS_ERROR_NONE != err)
+ {
+ WERROR("contacts_list_next() Failed(%d)", err);
+ break;
+ }
+ }while (1);
+
+ contacts_list_destroy(ctsList, true);
+
+ WLEAVE();
+ return list;
+}
+
+void PhLogDbMgr::dumpLogList(const std::list<RecordInfo*>* list)
+{
+ WENTER();
+
+ int idx = 0;
+ for (auto it=list->begin(); it != list->end(); it++)
+ {
+ RecordInfo *recordInfo = (RecordInfo*)(*it);
+ WDEBUG("[%d]---------",idx++);
+ WDEBUG("logId %d",recordInfo->logId);
+ WDEBUG("personId %d",recordInfo->personId);
+ WDEBUG("number %s",recordInfo->number);
+ WDEBUG("logTime %ld",recordInfo->logTime);
+ WDEBUG("logType %d",recordInfo->logType);
+ WDEBUG("callDuration %d",recordInfo->callDuration);
+ WDEBUG("displayName %s",recordInfo->displayName);
+ WDEBUG("imgPath %s",recordInfo->imgPath);
+ WDEBUG("callDesc %s",recordInfo->callDesc);
+// WDEBUG("-------------");
+ }
+
+ WLEAVE();
+}
+
+void PhLogDbMgr::updateMissedLogDbAsSeen(int index, int type)
+{
+ WENTER();
+ int logType = 0;
+ int err = CONTACTS_ERROR_NONE;
+ contacts_record_h logRecord = NULL;
+
+ WPRET_M(CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN != type &&
+ CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN != type &&
+ CONTACTS_PLOG_TYPE_NONE != type,
+ "The type is invalid. It must be CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN"
+ " or CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN or none");
+
+ WDEBUG("update phonelogs table records(index: %d, log_type:%d)",index, type);
+ if (0 == index) {
+ contacts_list_h ctsList = NULL;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+ int recordCnt = 0;
+
+ err = contacts_query_create(_contacts_phone_log._uri, &query);
+ WPRET_M(CONTACTS_ERROR_NONE != err, "contacts_query_create() Failed(%d)", err);
+ err = contacts_filter_create(_contacts_phone_log._uri, &filter);
+ if (CONTACTS_ERROR_NONE != err) {
+ WERROR("contacts_filter_create() Failed(%d)", err);
+ contacts_query_destroy(query);
+ return;
+ }
+
+ do {
+ if (CONTACTS_PLOG_TYPE_NONE == type)
+ {
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter)))break;
+ }
+ else
+ {
+ if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_phone_log.log_type, CONTACTS_MATCH_EQUAL, type)))break;
+ if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter)))break;
+ }
+
+ if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, &ctsList)))
+ {
+ err = contacts_list_destroy(ctsList, true);
+ if(CONTACTS_ERROR_NONE != err)
+ WWARNING("contacts_list_destroy() result : error(%d)", err);
+ break;
+ }
+ if (CONTACTS_ERROR_NONE != (err = contacts_list_get_count(ctsList, &recordCnt)))break;
+
+ if (0 < recordCnt)
+ {
+ while(CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(ctsList, &logRecord)) {
+ err = contacts_record_get_int(logRecord, _contacts_phone_log.log_type, &logType);
+ WPWARN(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
+ err = contacts_record_set_int( logRecord, _contacts_phone_log.log_type, logType+1);
+ WPWARN(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err);
+ contacts_list_next(ctsList);
+ }
+
+ WDEBUG("mard_as_read(%d)", recordCnt);
+ ecore_thread_run([](void *data, Ecore_Thread *thread)
+ {
+ WDEBUG("BEGIN(thread) - mark_as_read");
+ contacts_list_h ctsList = (contacts_list_h)data;
+
+ contacts_db_update_records(ctsList);
+ contacts_list_destroy(ctsList, true);
+
+ WDEBUG("LEAVE(thread) - mark_as_read");
+ }, NULL, NULL, ctsList);
+ }
+ else
+ {
+ contacts_list_destroy(ctsList, true);
+ break;
+ }
+ }while(0);
+
+ if (query)
+ contacts_query_destroy(query);
+ if (filter)
+ contacts_filter_destroy(filter);
+ }
+ else {
+ if (CONTACTS_ERROR_NONE != (err = contacts_db_get_record( _contacts_phone_log._uri, index, &logRecord)))
+ {
+ err = contacts_record_get_int( logRecord, _contacts_phone_log.log_type, &logType );
+ if (CONTACTS_ERROR_NONE != err) {
+ WDEBUG("contacts_record_get_int() Failed(%d)", err);
+ }
+ err = contacts_record_set_int( logRecord, _contacts_phone_log.log_type, logType+1);
+ if (CONTACTS_ERROR_NONE != err) {
+ WDEBUG("contacts_record_set_int() Failed(%d)", err);
+ }
+ err = contacts_db_update_record(logRecord);
+ if (CONTACTS_ERROR_NONE != err) {
+ WDEBUG("contacts_db_update_record() Failed(%d)", err);
+ }
+ contacts_record_destroy(logRecord, true);
+ }
+ }
+ WDEBUG("contacts_service err : %d", err);
+ return;
+}
+
+void PhLogDbMgr::attach(PhDbListener* listener)
+{
+ WASSERT_EX(listener, "no listener");
+ WDEBUG("attach Listener: %p", listener);
+ std::list<PhDbListener*>::iterator it;
+ for (it=__listenerList.begin(); it!=__listenerList.end(); it++)
+ {
+ if (*it == listener)
+ {
+ __listenerList.erase(it);
+ break;
+ }
+ }
+ __listenerList.push_back(listener);
+}
+
+void PhLogDbMgr::detach(PhDbListener* listener)
+{
+ WASSERT_EX(listener, "no listener");
+ WDEBUG("detach Listener: %p", listener);
+ std::list<PhDbListener*>::iterator it;
+
+ for (it=__listenerList.begin(); it!=__listenerList.end(); it++)
+ {
+ if (*it == listener)
+ {
+ __listenerList.erase(it);
+ break;
+ }
+ }
+}
+
+void PhLogDbMgr::onNotify(const char* view_uri, void* data)
+{
+ WENTER();
+ WPRET_M(NULL == data , "Invalid Param : data");
+ PhLogDbMgr* p = (PhLogDbMgr*) data;
+
+ std::list<PhDbListener*> copyList(p->__listenerList);
+ std::list<PhDbListener*>::iterator it;
+ for (it=copyList.begin(); it!=copyList.end(); it++)
+ (*it)->onDbChanged();
+}
+
+
diff --git a/lib-phone/ph-loglist/src/PhLogDefines.h b/lib-phone/ph-loglist/src/PhLogDefines.h
new file mode 100755
index 0000000..dc4aeae
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDefines.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_DEFINES_H
+#define _PH_LOG_DEFINES_H
+
+#define PH_TEXT_SHORT_LEN 256
+
+#define _EDJ(obj) (Evas_Object *)elm_layout_edje_get(obj)
+
+
+enum PHUI_UG_LIST_TYPES{
+ PH_UG_REQUEST_SELECT = 11,/**< . */
+ PH_UG_REQUEST_SELECT_NUMBER = 12,/**< . */
+ PH_UG_REQUEST_SELECT_EMAIL = 13,/**< . */
+ PH_UG_REQUEST_SELECT_NUMBER_OR_EMAIL = 17,/**< . */
+
+ PH_UG_REQUEST_SET_WITH_NUM = 21,/**< . */
+ PH_UG_REQUEST_SET_WITH_EMAIL = 22,/**< . */
+ PH_UG_REQUEST_SET_WITH_WEB = 23,/**< . */
+ PH_UG_REQUEST_SET_WITH_IMG = 24,/**< . */
+ PH_UG_REQUEST_SET_WITH_RINGTONE = 25,/**< . */
+
+ PH_UG_REQUEST_CHECK = 31,/**< . */
+ PH_UG_REQUEST_CHECK_FOR_NUMBER = 32,/**< . */
+ PH_UG_REQUEST_CHECK_FOR_EMAIL = 33,/**< . */
+ PH_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL = 34,/**< . */
+
+ PH_UG_REQUEST_LAUNCH_VOICECALL = 51,/**< . */
+
+ PH_UG_REQUEST_LAUNCH_HELP_MAKECALLS = 52,/**< . */
+ PH_UG_REQUEST_LAUNCH_HELP_SAVECONTACTS = 53,/**< . */
+};
+
+enum PH_UG_LOG_TYPES{
+ PH_UG_REQUEST_LOG_CHECK = 11,
+ PH_UG_REQUEST_LOG_SELECT = 12,
+ PH_UG_REQUEST_LOG_DETAIL = 13,
+};
+
+/**
+ * The key of request bundle for type.
+ * \n Value : convert id to string by using \%d.
+ */
+#define PH_UG_BUNDLE_TYPE "type"
+
+/**
+ * The key of result bundle for phonelog index
+ * \n The contact index on #PH_UG_REQUEST_LOG_SELECT
+ * \n Value : convert id to integer by using atoi()
+ */
+#define PH_UG_BUNDLE_RESULT_PLOG_ID "plog_id"
+
+/**
+ * The key of result bundle for a list of phonelog index
+ * \n The phonelog index on #PH_UG_REQUEST_LOG_CHECK
+ * \n Value : convert string to a integer array by using g_base64_decode()
+ * @par example
+ * @code
+ void phonelog_result_cb(struct ui_gadget *ug, bundle *result, void *data)
+ {
+ if(NULL == ug || NULL == data)
+ return;
+
+ if(result) {
+ const char *val;
+ int *list, len, i;
+
+ val = bundle_get_val(result, PH_UG_BUNDLE_RESULT_PLOG_ID_LIST);
+ list = (int *)g_base64_decode(val, &len);
+
+ for(i=0;i<len/sizeof(int);i++)
+ // handle operation for each list[i]
+
+ g_free(list);
+ }
+ }
+ *
+ * @endcode
+ */
+#define PH_UG_BUNDLE_RESULT_PLOG_ID_LIST "get_select_list" // TODO : change to "plog_id_list"
+
+/**
+ * @}
+ */
+
+#define LOG_LIST_CALL_TYPE_SIZE 45
+#define LOG_LIST_INFO_BTN_SIZE 50
+
+#endif //_PH_LOG_DEFINES_H
diff --git a/lib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.cpp b/lib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.cpp
new file mode 100755
index 0000000..353a0a6
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dlfcn.h>
+#include "WUiTimer.h"
+
+#include "ContactsAppControl.h"
+#include "ContactsDebug.h"
+
+#include "PhPath.h"
+#include "PhCommon.h"
+
+#include "PhLogUtil.h"
+#include "PhLogDetailButtonInfoControl.h"
+
+PhLogDetailButtonInfoControl::PhLogDetailButtonInfoControl(Evas_Object* window, Evas_Object* naviframe):
+__messageIcon(NULL),
+__voiceIcon(NULL),
+__videoIcon(NULL),
+__dlHandle(NULL),
+__msgHandler(NULL)
+{
+}
+
+PhLogDetailButtonInfoControl::~PhLogDetailButtonInfoControl()
+{
+ WHIT();
+}
+
+Evas_Object* PhLogDetailButtonInfoControl::onCreate( Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+
+ Evas_Object *baseLayout = PhCommon::createLayout(parent, LOG_LIST_EDJ, "log/detail/info/button");
+ WPRET_VM(NULL == baseLayout, NULL, "PhCommon::createLayout() return NULL");
+
+ //message button
+ Evas_Object *messageButton = PhCommon::createButton(baseLayout, "transparent", NULL, [](void *data, Evas_Object *obj, void *event_info){
+ PhLogDetailButtonInfoControl *p = (PhLogDetailButtonInfoControl*)data;
+ if (p->__msgHandler)
+ p->__msgHandler(p->__number);
+ }, this);
+ WPRET_VM(NULL == messageButton, NULL, "PhCommon::createButton() return NULL");
+ elm_layout_content_set(baseLayout,"elm.swallow.message", messageButton);
+
+ __messageIcon = PhCommon::createLayout(messageButton, LOG_LIST_EDJ, PH_LOG_ICON_DETAIL_MESSAGE);
+ WPRET_VM(NULL == __messageIcon, NULL, "PhCommon::createImage() return NULL");
+ elm_object_content_set(messageButton, __messageIcon);
+
+ //voice call button
+ Evas_Object *voiceButton = PhCommon::createButton(baseLayout, "transparent", NULL, [](void *data, Evas_Object *obj, void *event_info) {
+ PhLogDetailButtonInfoControl *p = (PhLogDetailButtonInfoControl*)data;
+ int err = launchCall(p->__number.c_str());
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "launchCall() failed(%d)", err);
+ }, this);
+ WPRET_VM(NULL == voiceButton, NULL, "PhCommon::createButton() return NULL");
+ elm_layout_content_set(baseLayout, "elm.swallow.voice", voiceButton);
+
+ __voiceIcon = PhCommon::createLayout(voiceButton, LOG_LIST_EDJ, PH_LOG_ICON_DETAIL_VOICE_CALL);
+ WPRET_VM(NULL == __voiceIcon, NULL, "PhCommon::createImage() return NULL");
+ elm_object_content_set(voiceButton, __voiceIcon);
+
+#if 1
+ WINFO("dlopen - request");
+ WUiTimer::addTimer(1.5, [](void* data)->Eina_Bool {
+ PhLogDetailButtonInfoControl* p = (PhLogDetailButtonInfoControl*)data;
+ WINFO("dlopen - try");
+ if((p->__dlHandle = dlopen("/usr/apps/org.tizen.message-lite/lib/ug/libmsg-composer-efl.so", RTLD_NOW)) == NULL)
+ {
+ WWARNING("%s : dlopen Fail {%s}\n", "/usr/apps/org.tizen.message-lite/lib/ug/libmsg-composer-efl.so", dlerror());
+ }
+ else
+ {
+ WDEBUG("dlopen!");
+ dlerror(); // error clear
+ }
+ return ECORE_CALLBACK_CANCEL;
+ }, this, getWeakPtr());
+#else
+ WINFO("dlopen - try");
+ if((__dlHandle = dlopen("/usr/apps/org.tizen.message-lite/lib/ug/libmsg-composer-efl.so", RTLD_NOW)) == NULL)
+ {
+ WWARNING("%s : dlopen Fail {%s}\n", "/usr/apps/org.tizen.message-lite/lib/ug/libmsg-composer-efl.so", dlerror());
+ }
+ else
+ {
+ WDEBUG("dlopen!");
+ dlerror(); // error clear
+ }
+#endif
+ return baseLayout;
+}
+void PhLogDetailButtonInfoControl::onDestroy()
+{
+ WHIT();
+ if(__dlHandle)
+ {
+ WDEBUG("dlclose!");
+ dlclose(__dlHandle);
+ __dlHandle = NULL;
+ }
+}
+
+void PhLogDetailButtonInfoControl::update(const std::string& number)
+{
+ WHIT();
+
+ __number = number;
+}
+
+void PhLogDetailButtonInfoControl::setOnMsgHandler( const std::function<void (const std::string& number)>& handlerFunc )
+{
+ __msgHandler = handlerFunc;
+}
diff --git a/lib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.h b/lib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.h
new file mode 100755
index 0000000..4247020
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailButtonInfoControl.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_DETAIL_LOG_INFO_CONTROL_H_
+#define _PH_LOG_DETAIL_LOG_INFO_CONTROL_H_
+
+#include <string>
+
+#include <Elementary.h>
+#include "WControl.h"
+
+class PhLogDetailButtonInfoControl: public WControl
+{
+public:
+ PhLogDetailButtonInfoControl(Evas_Object* window, Evas_Object* naviframe);
+
+ void update(const std::string& number);
+ void setOnMsgHandler( const std::function<void (const std::string& number)>& handlerFunc );
+
+protected:
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* param );
+ virtual void onDestroy();
+
+private:
+ virtual ~PhLogDetailButtonInfoControl();
+
+private:
+ Evas_Object *__messageIcon;
+ Evas_Object *__voiceIcon;
+ Evas_Object *__videoIcon;
+
+ std::string __number;
+ void *__dlHandle;
+ std::function<void (const std::string& number)> __msgHandler;
+};
+
+#endif /* _PH_LOG_DETAIL_LOG_INFO_CONTROL_H_ */
+
diff --git a/lib-phone/ph-loglist/src/PhLogDetailCheckView.cpp b/lib-phone/ph-loglist/src/PhLogDetailCheckView.cpp
new file mode 100755
index 0000000..e133cad
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailCheckView.cpp
@@ -0,0 +1,541 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "WPopup.h"
+
+#include "ContactsDebug.h"
+
+#include "PhPath.h"
+#include "PhCommon.h"
+#include "PhStrings.h"
+
+#include "PhLogIcu.h"
+#include "PhLogUtil.h"
+#include "PhLogDbMgr.h"
+#include "PhLogDefines.h"
+
+#include "PhLogDetailCheckView.h"
+#include "SystemSettingsMgr.h"
+#include <system_settings.h>
+#include "ContactsCommon.h"
+
+PhLogDetailCheckView::PhLogDetailCheckView(std::string number, std::string callDesc):
+__itcGroupIndex(NULL),
+__itcDeleteList(NULL),
+__itcSelectAll(NULL),
+__logList(NULL),
+__checkAllButton(NULL),
+__deleteButton(NULL)
+{
+ WHIT();
+
+ __checkedCount = 0;
+ __totalCount = 0;
+
+ __enableTitleButton = true;
+ __enableCheckAllButton = true;
+ __checkedList = new std::list<PhLogDbMgr::RecordInfo*>;
+
+ WDEBUG("Start to search Number : %s , callDesc : %s",__number.c_str(),__callDesc.c_str());
+
+ __number = number;
+ __callDesc = callDesc;
+}
+
+
+PhLogDetailCheckView::~PhLogDetailCheckView()
+{
+ WHIT();
+
+ STD_LIST_FREE(__logList)
+
+ if(__checkedList) delete __checkedList;
+
+ elm_genlist_item_class_free(__itcGroupIndex);
+ elm_genlist_item_class_free(__itcDeleteList);
+ elm_genlist_item_class_free(__itcSelectAll);
+}
+
+void PhLogDetailCheckView::onPushed(Elm_Object_Item* naviItem)
+{
+ WHIT();
+ WPRET_M( NULL == naviItem, "Invalid param : naviItem");
+
+ if(__enableTitleButton)
+ __enableTitleBtn(naviItem);
+
+ __updateTitleInfo();
+}
+
+void PhLogDetailCheckView::onSetAsPageContent(Elm_Object_Item* parentNaviItem)
+{
+ WHIT();
+ WPRET_M( NULL == parentNaviItem, "Invalid param : naviItem");
+
+ if(__enableTitleButton)
+ __enableTitleBtn(parentNaviItem);
+}
+
+void PhLogDetailCheckView::__initializeTitleInfo()
+{
+ WHIT();
+ __checkedCount = 0;
+ __totalCount = 0;
+
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ snprintf(buf, sizeof(buf), PAT_(PH_LOGS_HEADER_PD_SELECTED_ABB3), __checkedCount);
+ elm_object_item_part_text_set(getNaviItem(), "elm.text.title", buf );
+
+ if (__enableTitleButton && __deleteButton)
+ elm_object_disabled_set(__deleteButton, EINA_FALSE);
+
+ if (NULL == __checkedList)
+ __checkedList = new std::list<PhLogDbMgr::RecordInfo*>;
+ else
+ __checkedList->clear();
+}
+
+void PhLogDetailCheckView::__updateTitleInfo()
+{
+ WHIT();
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ snprintf(buf, sizeof(buf), PAT_(PH_LOGS_HEADER_PD_SELECTED_ABB3), __checkedCount);
+ elm_object_item_part_text_set(getNaviItem(), "elm.text.title", buf );
+
+ if (__deleteButton)
+ {
+ if(__checkedCount == 0)
+ elm_object_disabled_set(__deleteButton, EINA_TRUE);
+ else if (__checkedCount >0)
+ elm_object_disabled_set(__deleteButton, EINA_FALSE);
+ else
+ WERROR("invalid __checkedCount : %d", __checkedCount);
+ }
+
+ if (__checkAllButton)
+ {
+ Elm_Object_Item *item = elm_genlist_first_item_get(getGlHelper()->getEvasObj());
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData*)elm_object_item_data_get(item);
+ WPRET_M(!itemData, "itemData is NULL");
+ if ( (unsigned int)__totalCount == __logList->size() && !__logList->empty()) {
+ itemData->isChecked = EINA_TRUE;
+ elm_check_state_set(__checkAllButton, EINA_TRUE);
+ }
+ else {
+ itemData->isChecked = EINA_FALSE;
+ elm_check_state_set(__checkAllButton, EINA_FALSE);
+ }
+ }
+}
+
+void PhLogDetailCheckView::__enableTitleBtn(Elm_Object_Item* naviItem)
+{
+ WHIT();
+ Evas_Object * cancelButton = PhCommon::createButton(getNaviframe()->getEvasObj(), "naviframe/title_left", PAT_(PH_TPLATFORM_ACBUTTON_CANCEL_ABB), [](void *data, Evas_Object *obj, void *event_info)->void {
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogDetailCheckView* p = (PhLogDetailCheckView *) data;
+
+ WDEBUG("Close Delete View");
+ p->popOut();
+ }, this);
+ WPRET_M( NULL == cancelButton, "PhCommon::createButton() is failed" );
+ elm_object_item_part_content_set(naviItem, "title_left_btn", cancelButton);
+
+ __deleteButton = PhCommon::createButton(getNaviframe()->getEvasObj(), "naviframe/title_right", PAT_(PH_TPLATFORM_ACBUTTON_DELETE_ABB), [](void *data, Evas_Object *obj, void *event_info)->void {
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogDetailCheckView* p = (PhLogDetailCheckView *) data;
+ PhLogDbMgr::getInstance()->deleteLogList(p->__checkedList, p->__totalCount);
+ if(elm_check_state_get(p->__checkAllButton) == EINA_TRUE)
+ {
+ WDEBUG("Need to delete detail + detail check view..");
+ Eina_List *itemList = elm_naviframe_items_get(p->getNaviframe()->getEvasObj());
+ Elm_Object_Item *it = (Elm_Object_Item*)eina_list_data_get(eina_list_prev(eina_list_last(itemList)));
+ if(it) elm_object_item_del(it);
+ eina_list_free(itemList);
+ }
+ WDEBUG("Close Delete View & Delete logs");
+ p->popOut();
+ }, this);
+ WPRET_M( NULL == __deleteButton, "PhCommon::createButton() is failed" );
+ elm_object_item_part_content_set(naviItem, "title_right_btn", __deleteButton);
+}
+
+void PhLogDetailCheckView::updateList(void)
+{
+ WHIT();
+ std::list<PhLogDbMgr::RecordInfo*> *__oldLogList = __logList;
+
+ __logList = PhLogDbMgr::getInstance()->loadDetailList( __number.c_str(), __callDesc.c_str());
+
+ if(!__logList || __logList->empty())
+ setNoContentLayout();
+ else
+ {
+ setGenlistLayout();
+ __setList();
+ }
+ STD_LIST_FREE(__oldLogList)
+// WDEBUG("exit :__logList : %p", __logList);
+}
+
+
+void PhLogDetailCheckView::__setList(void)
+{
+ WHIT();
+ WPRET_M( NULL == __logList, "__logList is NULL");
+
+ __initializeTitleInfo();
+
+ if (__enableCheckAllButton) {
+ getGlHelper()->appendCheckItem(__itcSelectAll, this, NULL, ELM_GENLIST_ITEM_NONE, PhLogDetailCheckView::__checkAllClickedCb, this);
+ }
+
+ PhLogDbMgr::RecordInfo *prevRecordInfo = NULL;
+ for (auto it=__logList->begin(); it != __logList->end(); it++)
+ {
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)(*it);
+
+ if( !prevRecordInfo || !PhLogUtil::isGroupedbyDate(prevRecordInfo->logTime,recordInfo->logTime) ) {
+ Elm_Object_Item *item = getGlHelper()->appendCheckItem(__itcGroupIndex, recordInfo, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+
+ getGlHelper()->appendCheckItem(__itcDeleteList, recordInfo, NULL, ELM_GENLIST_ITEM_NONE, PhLogDetailCheckView::__selectItemCb, this);
+ prevRecordInfo = recordInfo;
+ }
+ getGlHelper()->appendFinish();
+
+ __updateTitleInfo();
+
+ return;
+}
+
+Evas_Object* PhLogDetailCheckView::onCreate( Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+
+ Evas_Object* layout = PhCommon::createLayout(parent, LOG_LIST_EDJ, "log/list/check/main");
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ __setGenlistItcs();
+
+ return layout;
+}
+
+void PhLogDetailCheckView::onCreated()
+{
+ WHIT();
+ PhLogListView::onCreated();
+ updateList();
+}
+
+void PhLogDetailCheckView::onDbChanged()
+{
+ /*
+ WENTER();
+ std::list<PhLogDbMgr::RecordInfo*> *__oldLogList = __logList;
+
+ __logList = PhLogDbMgr::getInstance()->loadLogList(PhLogDbMgr::LIST_TYPE_ALL_CALL_MESSAGE, true);
+
+ updateList();
+
+ STD_LIST_FREE(__oldLogList)
+
+ __oldLogList = NULL;
+ */
+}
+
+void PhLogDetailCheckView::__setGenlistItcs()
+{
+ WHIT();
+ __itcGroupIndex = elm_genlist_item_class_new();
+ WPRET_M(!__itcGroupIndex, "elm_genlist_item_class_new() failed");
+ __itcGroupIndex->item_style = "group_index";
+ __itcGroupIndex->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+// WDEBUG("part :%s", part);
+ if (!strcmp(part, "elm.text")) {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ time_t itemTime = recordInfo->logTime;
+ time_t nowTime = time(NULL);
+
+ struct tm itemDate;
+ struct tm nowDate;
+
+ localtime_r(&itemTime, &itemDate);
+ localtime_r(&nowTime, &nowDate);
+
+ if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ itemDate.tm_mday == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_TODAY));
+ else if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ ((itemDate.tm_mday)+1) == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_YESTERDAY));
+ else
+ return PhLogIcu::getGroupIndexDateString(recordInfo->logTime);
+ }
+ else
+ return NULL;
+ };
+ __itcGroupIndex->func.content_get = NULL;
+ __itcGroupIndex->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ delete itemData;
+ };
+
+ __itcDeleteList = elm_genlist_item_class_new();
+ WPRET_M(!__itcDeleteList, "elm_genlist_item_class_new() failed");
+ __itcDeleteList->item_style = "type1";
+ __itcDeleteList->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ if (!strcmp(part, "elm.text")) {
+ return PhLogIcu::getTimeString(recordInfo->logTime);
+ }
+ else if (!strcmp(part, "elm.text.sub")) {
+ if(PhLogUtil::isMissedCallType(recordInfo->logType))
+ return strdup(PAT_(PH_LOGS_SBODY_MISSEDM_CALL_STATUS));
+ else if((PhLogUtil::isOutgoingCallType(recordInfo->logType) || PhLogUtil::isIncomingCallType(recordInfo->logType))
+ && (recordInfo->callDuration == 0))
+ return strdup(PAT_(PH_LOGS_SBODY_CANCELLED_M_STATUS));
+ else if(PhLogUtil::isRejectCallType(recordInfo->logType))
+ return strdup(PAT_(PH_LOGS_SBODY_CANCELLED_M_STATUS));
+ else
+ return PhLogIcu::getCallDurationString(recordInfo->callDuration);
+ }
+ else
+ return NULL;
+ };
+ __itcDeleteList->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object* {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ if (!strcmp(part, "elm.swallow.icon")) {
+ Evas_Object *icon = PhLogUtil::getLogTypeIcon(obj, recordInfo->logType);
+ WPRET_VM( NULL == icon, NULL, "PhLogUtil::getLogTypeIcon() is failed");
+ elm_image_aspect_fixed_set(icon, EINA_TRUE);
+ evas_object_size_hint_min_set(icon, ContactsCommon::getScaledWidth(ICON_LOG_DETAIL_WIDTH), ContactsCommon::getScaledHeight(ICON_LOG_DETAIL_HEIGHT));
+
+ return icon;
+ }
+ else if (0 == strcmp(part, "elm.swallow.end")) {
+ itemData->checkButton = elm_check_add(obj);
+ WPRET_VM(NULL == itemData->checkButton, NULL, "elm_check_add() return NULL");
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+ evas_object_repeat_events_set(itemData->checkButton, EINA_TRUE);
+ evas_object_propagate_events_set(itemData->checkButton, EINA_FALSE);
+ evas_object_freeze_events_set (itemData->checkButton, EINA_TRUE);
+ return itemData->checkButton;
+ }
+ else {
+ return NULL;
+ }
+
+ };
+ __itcDeleteList->func.state_get = NULL;
+ __itcDeleteList->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ delete itemData;
+ };
+
+ __itcSelectAll = elm_genlist_item_class_new();
+ WPRET_M(!__itcSelectAll, "elm_genlist_item_class_new() failed");
+ __itcSelectAll->item_style = "type1";
+ __itcSelectAll->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ if (!strcmp(part, "elm.text")) {
+ return strdup(PAT_(PH_LOGS_MBODY_SELECT_ALL));
+ }
+ else
+ return NULL;
+ };
+ __itcSelectAll->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object*{
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ PhLogDetailCheckView *view = (PhLogDetailCheckView*)itemData->data;
+ if (0 == strcmp(part, "elm.swallow.end")) {
+ Evas_Object* check = elm_check_add(obj);
+ elm_check_state_set(check, itemData->isChecked);
+ evas_object_repeat_events_set(check, EINA_TRUE);
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ evas_object_freeze_events_set (check, EINA_TRUE);
+ view->__checkAllButton = check;
+ return check;
+ }
+ else {
+ return NULL;
+ }
+ };
+ __itcSelectAll->func.del = [](void* data, Evas_Object* obj) {
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ delete itemData;
+ };
+
+}
+
+void PhLogDetailCheckView::__checkAllClickedCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M( NULL == event_info,"event_info is NULL");
+ WPRET_M( NULL == data,"data is NULL");
+
+ Elm_Object_Item* item = (Elm_Object_Item*)event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ PhLogDetailCheckView* p = (PhLogDetailCheckView *) data;
+
+ Eina_Bool checkAllBtnState = elm_check_state_get(p->__checkAllButton);
+
+ elm_check_state_set(p->__checkAllButton, !checkAllBtnState);
+
+ if ( !checkAllBtnState)
+ __checkAllItems(p->getGlHelper());
+ else
+ __uncheckAllItems(p->getGlHelper());
+}
+
+void PhLogDetailCheckView::__checkAllItems(PhLogGenlistHelper* glHelper)
+{
+ WHIT();
+ WPRET_M( NULL == glHelper , "glHelper is NULL");
+
+ Evas_Object *genlist = glHelper->getEvasObj();
+ WPRET_M( NULL == genlist , "genlist is NULL");
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
+ while(item)
+ {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData *)elm_object_item_data_get(item);
+
+ PhLogDetailCheckView* p = (PhLogDetailCheckView *)itemData->p;
+ if (p) {
+ if (p->__itcSelectAll == (Elm_Genlist_Item_Class*)elm_genlist_item_item_class_get(item)) {
+ item = elm_genlist_item_next_get(item);
+ continue;
+ }
+ }
+
+ if (!itemData->isChecked)
+ __checkItem(itemData);
+
+ item = elm_genlist_item_next_get(item);
+ }
+}
+
+void PhLogDetailCheckView::__uncheckAllItems(PhLogGenlistHelper* glHelper)
+{
+ WHIT();
+ WPRET_M( NULL == glHelper , "glHelper is NULL");
+
+ Evas_Object *genlist = glHelper->getEvasObj();
+ WPRET_M( NULL == genlist , "genlist is NULL");
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
+ while(item)
+ {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData *)elm_object_item_data_get(item);
+
+ PhLogDetailCheckView* p = (PhLogDetailCheckView *)itemData->p;
+ if (p) {
+ if (p->__itcSelectAll == (Elm_Genlist_Item_Class*)elm_genlist_item_item_class_get(item)) {
+ item = elm_genlist_item_next_get(item);
+ continue;
+ }
+ }
+
+ if (itemData->isChecked)
+ __uncheckItem(itemData);
+
+ item = elm_genlist_item_next_get(item);
+ }
+}
+
+void PhLogDetailCheckView::__checkItem(PhLogGenlistHelper::CheckedItemData * itemData)
+{
+ WHIT();
+ WPRET_M( NULL == itemData , "Invalid Param : itemData");
+
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ WPRET_M( NULL == recordInfo , "recordInfo is NULL");
+
+ PhLogDetailCheckView *p = (PhLogDetailCheckView *)itemData->p;
+ WPRET_M( NULL == p , "p is NULL");
+
+// WDEBUG("number : %s", recordInfo->number);
+ p->__checkedList->push_back(recordInfo);
+ p->__checkedCount++;
+ if(recordInfo->groupedList)
+ p->__totalCount += (recordInfo->groupedList->size()+1);
+ else
+ p->__totalCount++;
+
+ //check button state set
+ itemData->isChecked = EINA_TRUE;
+ if(itemData->checkButton)
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+ WHIT();
+
+ p->__updateTitleInfo();
+}
+
+void PhLogDetailCheckView::__uncheckItem(PhLogGenlistHelper::CheckedItemData * itemData)
+{
+ WHIT();
+ WPRET_M( NULL == itemData , "Invalid Param : itemData");
+
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ WPRET_M( NULL == recordInfo , "recordInfo is NULL");
+
+ PhLogDetailCheckView *p = (PhLogDetailCheckView *)itemData->p;
+ WPRET_M( NULL == p , "p is NULL");
+
+ p->__checkedList->remove(recordInfo);
+ p->__checkedCount--;
+
+ if(recordInfo->groupedList)
+ p->__totalCount -= (recordInfo->groupedList->size()+1);
+ else
+ p->__totalCount--;
+
+ //check button state set
+ itemData->isChecked = EINA_FALSE;
+ if(itemData->checkButton)
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+
+ p->__updateTitleInfo();
+}
+
+
+void PhLogDetailCheckView::__selectItemCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M( NULL == event_info,"event_info is NULL");
+ WPRET_M( NULL == data,"data is NULL");
+
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData *)elm_object_item_data_get(item);
+
+ if(itemData->isChecked)
+ __uncheckItem(itemData);
+ else
+ __checkItem(itemData);
+}
diff --git a/lib-phone/ph-loglist/src/PhLogDetailCheckView.h b/lib-phone/ph-loglist/src/PhLogDetailCheckView.h
new file mode 100644
index 0000000..9b8a972
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailCheckView.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_DETAIL_CHECK_VIEW_H_
+#define _PH_LOG_DETAIL_CHECK_VIEW_H_
+
+#include "ContactsCommon.h"
+
+#include "PhLogListView.h"
+
+class WAPP_ASSIST_EXPORT PhLogDetailCheckView : public PhLogListView
+{
+public:
+ PhLogDetailCheckView(std::string number, std::string callDesc);
+
+protected:
+ virtual void onPushed(Elm_Object_Item* naviItem);
+ virtual void onSetAsPageContent(Elm_Object_Item* parentNaviItem);
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* viewParam);
+ virtual void onCreated(void);
+private:
+ virtual void onDbChanged();
+
+ virtual void updateList(void);
+
+ void __enableTitleBtn(Elm_Object_Item* naviItem);
+
+ void __setGenlistItcs();
+
+ void __setList(void);
+
+ void __initializeTitleInfo();
+ void __updateTitleInfo();
+
+ static void __checkAllItems(PhLogGenlistHelper* glHelper);
+ static void __uncheckAllItems(PhLogGenlistHelper* glHelper);
+ static void __checkItem(PhLogGenlistHelper::CheckedItemData * itemData);
+ static void __uncheckItem(PhLogGenlistHelper::CheckedItemData * itemData);
+ static void __checkAllClickedCb(void *data, Evas_Object *obj, void *event_info);
+ static void __selectItemCb(void *data, Evas_Object *obj, void *event_info);
+
+private:
+ virtual ~PhLogDetailCheckView();
+
+private:
+ Elm_Genlist_Item_Class *__itcGroupIndex;
+ Elm_Genlist_Item_Class *__itcDeleteList;
+ Elm_Genlist_Item_Class *__itcSelectAll;
+ std::list<PhLogDbMgr::RecordInfo*>* __logList;
+ Evas_Object *__checkAllButton;
+ Evas_Object *__deleteButton;
+ int __checkedCount;
+ int __totalCount;
+ bool __enableTitleButton;
+ bool __enableCheckAllButton;
+ std::list<PhLogDbMgr::RecordInfo*> *__checkedList;
+ std::string __number;
+ std::string __callDesc;
+};
+
+#endif /* _PH_LOG_DETAIL_CHECK_VIEW_H_ */
diff --git a/lib-phone/ph-loglist/src/PhLogDetailContactInfoControl.cpp b/lib-phone/ph-loglist/src/PhLogDetailContactInfoControl.cpp
new file mode 100755
index 0000000..0530fce
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailContactInfoControl.cpp
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "ContactsAppControl.h"
+#include "ContactsDebug.h"
+#include "ContactsThumbnail.h"
+#include "WUiTimer.h"
+
+#include "PhPath.h"
+#include "PhCommon.h"
+#include "PhStrings.h"
+
+#include "PhLogUtil.h"
+#include "PhLogDetailContactInfoControl.h"
+#include "ContactsCommon.h"
+
+#define DETAILS_BOX_PADDING 16
+
+PhLogDetailContactInfoControl::PhLogDetailContactInfoControl(const PhLogDbMgr::RecordInfo *recordInfo)
+ : __baseLayout(NULL)
+{
+ __personId = recordInfo->personId;
+
+ if (recordInfo->displayName) __name = recordInfo->displayName;
+ if (recordInfo->number) __number = recordInfo->number;
+ if (recordInfo->imgPath) __imgPath = recordInfo->imgPath;
+ if (recordInfo->callDesc) __callDesc = recordInfo->callDesc;
+ WDEBUG("name : %s ,number : %s, imgPath : %s, callDesc: %s",recordInfo->displayName, recordInfo->number, recordInfo->imgPath, recordInfo->callDesc );
+}
+
+Evas_Object* PhLogDetailContactInfoControl::onCreate( Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+ elm_theme_extension_add(nullptr, ContactsCommon::getAppEdjePath("common/custom_button_styles.edj").c_str());
+
+ if (__personId > 0 || __number.empty()) {
+ __baseLayout = PhCommon::createLayout(parent, LOG_LIST_EDJ, "log/detail/info/contact/contact_info/saved");
+ __setDisplayName();
+ } else {
+ __baseLayout = PhCommon::createLayout(parent, LOG_LIST_EDJ, "log/detail/info/contact/contact_info/unsaved");
+ __setButton();
+ }
+
+ __setThumbnail();
+
+ return __baseLayout;
+}
+
+void PhLogDetailContactInfoControl::__setThumbnail()
+{
+ Evas_Object *thumbnail = createThumbnail(__baseLayout, THUMBNAIL_240, __imgPath.c_str());
+ evas_object_event_callback_add(thumbnail, EVAS_CALLBACK_MOUSE_UP,
+ (Evas_Object_Event_Cb) &PhLogDetailContactInfoControl::onThumbnailPressed, this);
+ elm_layout_content_set(__baseLayout, "image.thumbnail", thumbnail);
+}
+
+void PhLogDetailContactInfoControl::__setDisplayName()
+{
+ WHIT();
+ elm_object_domain_translatable_part_text_set(__baseLayout, "text.name", STRING_PACKAGE, PhCommon::convert2MarkupString(PhLogUtil::getDisplayText(__personId, __name.c_str(), __number.c_str(), __callDesc.c_str())).c_str());
+}
+
+void PhLogDetailContactInfoControl::__setButton()
+{
+ Evas_Object *box = elm_box_add(__baseLayout);
+ elm_box_padding_set(box, ContactsCommon::getScaledWidth(DETAILS_BOX_PADDING), 0);
+ elm_box_horizontal_set(box, EINA_TRUE);
+ elm_layout_content_set(__baseLayout, "box.buttons", box);
+ Evas_Object * createContactBtn = PhCommon::createButton(box, "custom_default", NULL, [](void *data, Evas_Object *obj, void *event_info){
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogDetailContactInfoControl * p = (PhLogDetailContactInfoControl *)data;
+ launchContactCreate(p->__number.c_str());
+ }, this);
+
+ WPRET_M( NULL == createContactBtn, "PhCommon::createButton() is failed!");
+ evas_object_size_hint_align_set(createContactBtn, EVAS_HINT_FILL, 0.5);
+ elm_object_domain_translatable_text_set(createContactBtn, "phone", PAT_(PH_LOGS_BUTTON_CREATE_CONTACT_ABB));
+ elm_box_pack_end(box, createContactBtn);
+
+ Evas_Object * updateContactBtn = PhCommon::createButton(box, "custom_default", NULL, [](void *data, Evas_Object *obj, void *event_info){
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogDetailContactInfoControl * p = (PhLogDetailContactInfoControl *)data;
+ launchContactEdit(0, p->__number.c_str());
+ }, this);
+ WPRET_M( NULL == updateContactBtn, "PhCommon::createButton() is failed!");
+ evas_object_size_hint_align_set(updateContactBtn, EVAS_HINT_FILL, 0.5);
+ elm_object_domain_translatable_text_set(updateContactBtn, "phone", PAT_(PH_LOGS_BUTTON_UPDATE_CONTACT_ABB2));
+ elm_box_pack_end(box, updateContactBtn);
+}
+
+void PhLogDetailContactInfoControl::onThumbnailPressed(void *data)
+{
+ PhLogDetailContactInfoControl *control = (PhLogDetailContactInfoControl*) data;
+ if (control->__personId > 0) {
+ launchContactDetails(control->__personId);
+ }
+}
diff --git a/lib-phone/ph-loglist/src/PhLogDetailContactInfoControl.h b/lib-phone/ph-loglist/src/PhLogDetailContactInfoControl.h
new file mode 100755
index 0000000..c419ade
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailContactInfoControl.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_DETAIL_CONTACT_INFO_CONTROL_H_
+#define _PH_LOG_DETAIL_CONTACT_INFO_CONTROL_H_
+
+#include <string>
+
+#include <Elementary.h>
+
+#include "WControl.h"
+
+#include "PhLogDbMgr.h"
+#include "PhLogGenlistHelper.h"
+
+class PhLogDetailContactInfoControl : public WControl
+{
+public:
+ PhLogDetailContactInfoControl(const PhLogDbMgr::RecordInfo *recordInfo);
+
+ void update();
+
+protected:
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* param );
+
+private:
+ void __setThumbnail();
+ void __setDisplayName();
+ void __setButton();
+
+ static void onThumbnailPressed(void *data);
+
+private:
+ Evas_Object *__baseLayout;
+
+ std::string __number;
+ std::string __name;
+ std::string __imgPath;
+ std::string __callDesc;
+
+ int __personId;
+};
+
+#endif /* _PH_LOG_DETAIL_CONTACT_INFO_CONTROL_H_ */
+
diff --git a/lib-phone/ph-loglist/src/PhLogDetailView.cpp b/lib-phone/ph-loglist/src/PhLogDetailView.cpp
new file mode 100755
index 0000000..a58689e
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailView.cpp
@@ -0,0 +1,364 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <app.h>
+#include <notification.h>
+#include <system_settings.h>
+#include <app_preference.h>
+
+#include "WPopup.h"
+#include "WMenuPopup.h"
+#include "WUiTimer.h"
+
+#include "ContactsAppControl.h"
+#include "ContactsDebug.h"
+
+#include "PhCommon.h"
+#include "PhPath.h"
+#include "PhStrings.h"
+
+#include "PhLogUtil.h"
+#include "PhLogIcu.h"
+#include "PhLogDefines.h"
+
+#include "PhLogDetailCheckView.h"
+#include "PhLogDetailView.h"
+#include "SystemSettingsMgr.h"
+#include "ContactsCommon.h"
+#include "ContactsNumberItemIcons.h"
+
+PhLogDetailView::PhLogDetailView(const PhLogDbMgr::RecordInfo *recordInfo):
+__mainLayout(NULL),
+__itcLogInfo(NULL),
+__itcGroupIndex(NULL),
+__itcHistoryList(NULL),
+__detailList(NULL),
+__contactInfo(NULL),
+__recordInfo(recordInfo)
+{
+ WDEBUG("detailView for Number[%s], callDesc[%s]", recordInfo->number, recordInfo->callDesc);
+
+ if(recordInfo->number)
+ __number = recordInfo->number;
+
+ if(recordInfo->callDesc)
+ __callDesc = recordInfo->callDesc;
+}
+
+PhLogDetailView::~PhLogDetailView()
+{
+ WHIT();
+
+ if (__contactInfo) {
+ edje_object_signal_callback_del(_EDJ(__contactInfo->getEvasObj()), "mouse,clicked,*", "touch.back.btn", __detailBackBtnCb);
+ }
+
+ STD_LIST_FREE(__detailList)
+
+ elm_genlist_item_class_free(__itcLogInfo);
+
+ elm_genlist_item_class_free(__itcGroupIndex);
+ elm_genlist_item_class_free(__itcHistoryList);
+}
+
+void PhLogDetailView::onPushed(Elm_Object_Item* naviItem)
+{
+ WHIT();
+ WPRET_M( !naviItem, "Invalid param : naviItem");
+
+ elm_naviframe_item_title_enabled_set(naviItem, EINA_FALSE, EINA_FALSE);
+ WUiTimer::addAnimator([naviItem](void* data)->Eina_Bool {
+ PhLogDetailView* p = (PhLogDetailView*)data;
+ p->__setMoreBtn(naviItem);
+ return ECORE_CALLBACK_CANCEL;
+ }, this, getWeakPtr());
+}
+
+void PhLogDetailView::__detailBackBtnCb(void *data, Evas_Object *obj, const char *emission, const char *source) {
+ PhLogDetailView* view = (PhLogDetailView*)data;
+ view->popOut();
+}
+
+Evas_Object* PhLogDetailView::onCreate( Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+ __mainLayout = PhCommon::createLayout( parent, LOG_LIST_EDJ, "log/detail/info/contact/main_layout" );
+
+ WPRET_VM( NULL == __mainLayout, NULL, "PhCommon::createLayout() is failed");
+ __setGenlistItcs();
+
+ return __mainLayout;
+}
+
+void PhLogDetailView::onCreated()
+{
+ WHIT();
+ PhLogListView::onCreated();
+ updateList();
+}
+
+void PhLogDetailView::onDestroy()
+{
+ PhLogListView::onDestroy();
+}
+
+void PhLogDetailView::onDbChanged()
+{
+ WENTER();
+ updateList();
+}
+
+void PhLogDetailView::updateList()
+{
+ Evas_Object *genlist = getGlHelper()->getEvasObj();
+
+ elm_object_part_content_set(__mainLayout, "elm.swallow.content", genlist);
+
+
+ std::list<PhLogDbMgr::RecordInfo*> *__oldList = __detailList;
+ __detailList = PhLogDbMgr::getInstance()->loadDetailList( __number.c_str(), __callDesc.c_str());
+
+ if(!__detailList || __detailList->empty())
+ setNoContentLayout();
+ else
+ {
+ setGenlistLayout();
+ __setContactInfo();
+ __setList();
+ }
+
+ STD_LIST_FREE(__oldList)
+}
+
+void PhLogDetailView::__setMoreBtn(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ WPRET_M(!naviItem, "Invalid Param : naviItem");
+
+ enableMoreButton(naviItem, [](void *data, Evas_Object *obj, void *event_info){
+ WPRET_M( NULL == data, "Invalid Parm : data");
+ PhLogDetailView* p = static_cast<PhLogDetailView*>(data);
+ WPRET_M( NULL == p->__detailList || p->__detailList->empty() , "__detaiilList is Empty");
+
+ WMenuPopup* popup = new WMenuPopup();
+ popup->prepare( p->getWindow()->getEvasObj(), p->getNaviframe()->getEvasObj() );
+
+ popup->appendItem(PAT_(PH_LOGS_HEADER_DELETE), [p](){
+ WNaviframe* frame = (WNaviframe*)p->getNaviframe();
+ frame->push(new PhLogDetailCheckView(p->__number, p->__callDesc));
+ });
+
+ p->attachPopup(popup);
+ }, this);
+}
+
+void PhLogDetailView::__setContactInfo()
+{
+ __contactInfo = new PhLogDetailContactInfoControl(__detailList->front());
+ __contactInfo->create(__mainLayout, NULL);
+
+ edje_object_signal_callback_add(_EDJ(__contactInfo->getEvasObj()), "mouse,clicked,*", "touch.back.btn", __detailBackBtnCb, this);
+ elm_object_part_content_set(__mainLayout, "contact_info", __contactInfo->getEvasObj() );
+}
+
+void PhLogDetailView::__setList()
+{
+ WHIT();
+ WPRET_M( !__detailList || __detailList->empty(), "__detailList is not set");
+
+ Elm_Object_Item* item = NULL;
+ PhLogDbMgr::RecordInfo *recordInfo = NULL;
+ PhLogDbMgr::RecordInfo *prevRecordInfo = NULL;
+ for (auto it=__detailList->begin(); it != __detailList->end(); it++)
+ {
+ recordInfo = (PhLogDbMgr::RecordInfo*)(*it);
+ if( it == __detailList->begin() )
+ {
+ if(recordInfo->number && strlen(recordInfo->number) > 0)
+ {
+ item = getGlHelper()->appendItem(__itcLogInfo, recordInfo, NULL, ELM_GENLIST_ITEM_NONE, NULL, this);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+ }
+
+ if( !prevRecordInfo || !PhLogUtil::isGroupedbyDate(prevRecordInfo->logTime,recordInfo->logTime) ) {
+ item = getGlHelper()->appendItem(__itcGroupIndex, recordInfo, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+
+ item = getGlHelper()->appendItem(__itcHistoryList, recordInfo, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+
+ prevRecordInfo = recordInfo;
+ }
+
+ getGlHelper()->appendFinish();
+}
+
+void PhLogDetailView::__setGenlistItcs()
+{
+ __itcLogInfo = elm_genlist_item_class_new();
+ WPRET_M(!__itcLogInfo, "elm_genlist_item_class_new() failed");
+ __itcLogInfo->item_style = "type1";
+ __itcLogInfo->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object*{
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ PhLogDetailView *p = (PhLogDetailView*)itemData->p;
+
+ if (!strcmp(part, "elm.swallow.icon")) {
+ Evas_Object *layout = PhCommon::createLayout(obj, LOG_LIST_EDJ, "list/detail/log_number.type");
+ WPRET_VM( NULL == layout, NULL, "PhCommon::createLayout() is failed");
+
+ char *text = NULL;
+ if ( recordInfo->personId > 0 )
+ text = elm_entry_utf8_to_markup(PhLogUtil::getTextOfNumberType(recordInfo->numberType));
+ else if ( p->__number.empty() && PhLogUtil::isUnknownNumber(recordInfo->callDesc) )
+ text = NULL;
+ else if ( !p->__number.empty() && PhLogUtil::isEmergencyNumber(recordInfo->callDesc) )
+ text = elm_entry_utf8_to_markup(PAT_(PH_KPD_HEADER_EMERGENCY_CALL_ABB2));
+ else
+ text = elm_entry_utf8_to_markup(PAT_(PH_LOGS_SBODY_UNSAVED_M_STATUS));
+ elm_object_domain_translatable_part_text_set(layout, "elm.text.part", PACKAGE, text);
+ free(text);
+ text = NULL;
+
+ Evas_Object *entry = elm_entry_add(layout);
+ WPRET_VM( NULL == entry, NULL, "entry is NULL");
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_editable_set(entry, EINA_FALSE);
+
+ if (p->__number.empty() && PhLogUtil::isUnknownNumber(recordInfo->callDesc))
+ text = elm_entry_utf8_to_markup(PAT_(PH_LOGS_MBODY_UNKNOWN_NUMBER_ABB));
+ else
+ text = elm_entry_utf8_to_markup(recordInfo->number);
+ elm_entry_entry_set(entry, text);
+ free(text);
+
+ elm_layout_content_set(layout, "elm.swallow.2", entry);
+
+ return layout;
+ } else if (!strcmp(part, "elm.swallow.end")) {
+ return createNumberItemIconsLayout(obj, p->__number.c_str());
+ } else
+ return NULL;
+ };
+ __itcLogInfo->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::ItemData* itemData = (PhLogGenlistHelper::ItemData *)data;
+ delete itemData;
+ };
+
+ __itcGroupIndex = elm_genlist_item_class_new();
+ WPRET_M(!__itcGroupIndex, "elm_genlist_item_class_new() failed");
+ __itcGroupIndex->item_style = "group_index";
+ __itcGroupIndex->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+// WDEBUG("part :%s", part);
+ if (!strcmp(part, "elm.text")) {
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ time_t itemTime = recordInfo->logTime;
+ time_t nowTime = time(NULL);
+
+ struct tm itemDate;
+ struct tm nowDate;
+
+ localtime_r(&itemTime, &itemDate);
+ localtime_r(&nowTime, &nowDate);
+
+ if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ itemDate.tm_mday == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_TODAY));
+ else if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ ((itemDate.tm_mday)+1) == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_YESTERDAY));
+ else
+ return PhLogIcu::getGroupIndexDateString(recordInfo->logTime);
+ }
+ else
+ return NULL;
+ };
+ __itcGroupIndex->func.content_get = NULL;
+ __itcGroupIndex->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::ItemData* itemData = (PhLogGenlistHelper::ItemData *)data;
+ delete itemData;
+ };
+
+ __itcHistoryList = elm_genlist_item_class_new();
+ WPRET_M(!__itcHistoryList, "elm_genlist_item_class_new() failed");
+ __itcHistoryList->item_style = "type1";
+ __itcHistoryList->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ if (!strcmp(part, "elm.text")) {
+ return PhLogIcu::getTimeString(recordInfo->logTime);
+ } else if (!strcmp(part, "elm.text.sub")) {
+ if(PhLogUtil::isMissedCallType(recordInfo->logType)) {
+ return strdup(PAT_(PH_LOGS_SBODY_MISSEDM_CALL_STATUS));
+ } else if(PhLogUtil::isOutgoingCallType(recordInfo->logType) || PhLogUtil::isIncomingCallType(recordInfo->logType)) {
+ if (recordInfo->callDuration > 0) {
+ char *duration = PhLogIcu::getCallDurationString(recordInfo->callDuration);
+ const char *type = PhLogUtil::isIncomingCallType(recordInfo->logType)
+ ? PAT_(PH_CALL_BODY_INCOMING_CALL) : PAT_(PH_ST_BODY_OUTGOING_CALL);
+
+ if (duration) {
+ char buf[PH_TEXT_SHORT_LEN];
+ snprintf(buf, sizeof(buf), "%s, %s",type, duration);
+ free(duration);
+ return strdup(buf);
+ } else {
+ return strdup(type);
+ }
+ } else {
+ return strdup(PAT_(PH_LOGS_SBODY_CANCELLED_M_STATUS));
+ }
+ } else if(PhLogUtil::isRejectCallType(recordInfo->logType)) {
+ return strdup(PAT_(PH_LOGS_SBODY_CANCELLED_M_STATUS));
+ } else {
+ return PhLogIcu::getCallDurationString(recordInfo->callDuration);
+ }
+ }
+ else
+ return NULL;
+ };
+ __itcHistoryList->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object* {
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ if (!strcmp(part, "elm.swallow.icon")) {
+ Evas_Object *icon = PhLogUtil::getLogTypeIcon(obj, recordInfo->logType);
+ WPRET_VM( NULL == icon, NULL, "PhLogUtil::getLogTypeIcon() is failed");
+ elm_image_aspect_fixed_set(icon, EINA_TRUE);
+
+ evas_object_size_hint_min_set(icon, ContactsCommon::getScaledWidth(ICON_LOG_DETAIL_WIDTH), ContactsCommon::getScaledHeight(ICON_LOG_DETAIL_HEIGHT));
+ return icon;
+ }
+ else {
+ return NULL;
+ }
+
+ };
+ __itcHistoryList->func.state_get = NULL;
+ __itcHistoryList->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::ItemData* itemData = (PhLogGenlistHelper::ItemData *)data;
+ delete itemData;
+ };
+}
diff --git a/lib-phone/ph-loglist/src/PhLogDetailView.h b/lib-phone/ph-loglist/src/PhLogDetailView.h
new file mode 100644
index 0000000..d47bcb9
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDetailView.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef PHLOGDETAILVIEW_H_
+#define PHLOGDETAILVIEW_H_
+
+#include "PhLogDbMgr.h"
+#include "PhLogListView.h"
+#include "PhLogDetailContactInfoControl.h"
+#include "PhLogDetailButtonInfoControl.h"
+
+class PhLogDetailView : public PhLogListView
+{
+public:
+ PhLogDetailView(const PhLogDbMgr::RecordInfo *recordInfo);
+
+protected:
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* viewParam);
+ virtual void onCreated();
+ virtual void onDestroy();
+ virtual void onPushed(Elm_Object_Item* naviItem);
+
+private:
+ PhLogDetailView();
+
+ void __setMoreBtn(Elm_Object_Item *naviItem);
+ void __setContactInfo();
+ void __setGenlistItcs();
+ void __setList();
+
+ //from PhLogListView
+ virtual void updateList(void);
+
+ virtual void onDbChanged();
+ static void __detailBackBtnCb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+private:
+ virtual ~PhLogDetailView();
+
+private:
+ std::string __number;
+ std::string __callDesc;
+
+ Evas_Object* __mainLayout;
+
+ Elm_Genlist_Item_Class *__itcLogInfo;
+ Elm_Genlist_Item_Class *__itcGroupIndex;
+ Elm_Genlist_Item_Class *__itcHistoryList;
+
+ std::list<PhLogDbMgr::RecordInfo*> *__detailList;
+
+ PhLogDetailContactInfoControl *__contactInfo;
+
+ const PhLogDbMgr::RecordInfo *__recordInfo;
+};
+
+#endif /* PHLOGDETAILVIEW_H_ */
diff --git a/lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.cpp b/lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.cpp
new file mode 100644
index 0000000..14d1ed7
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.cpp
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+////#include <efl_assist.h>
+
+#include "ContactsDebug.h"
+#include "PhLogDropDownCtxPopup.h"
+
+
+PhLogDropDownCtxPopup::PhLogDropDownCtxPopup()
+{
+
+}
+
+Evas_Object* PhLogDropDownCtxPopup::onCreate(Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+
+ __parentButton = parent;
+ Evas_Object *popup = elm_ctxpopup_add(elm_object_top_widget_get(__parentButton));
+ elm_object_style_set(popup, "dropdown/list");
+ //ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+ evas_object_smart_callback_add(popup,"dismissed", [](void *data, Evas_Object *obj, void *event_info){
+ evas_object_del(obj);
+ }, NULL);
+
+ elm_ctxpopup_direction_priority_set(popup, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+ return popup;
+}
+
+void PhLogDropDownCtxPopup::onDestroy()
+{
+ WHIT();
+}
+
+PhLogDropDownCtxPopup::~PhLogDropDownCtxPopup()
+{
+
+}
+Elm_Object_Item* PhLogDropDownCtxPopup::appendItem( const char *label, const std::function< void()>& selectCb )
+{
+ __vSelectItemCb.push_back(selectCb);
+ Elm_Object_Item *item = elm_ctxpopup_item_append(getEvasObj(), label, NULL, __popupSelectCb, (void*)(__vSelectItemCb.size() - 1));
+ WPRET_VM( NULL == item, NULL, "elm_ctxpopup_item_append");
+
+ return item;
+}
+
+void PhLogDropDownCtxPopup::showPopup()
+{
+ Evas_Coord x, y, w, h;
+ evas_object_geometry_get(__parentButton, &x, &y, &w, &h);
+ evas_object_move(getEvasObj(), x + (w / 2), y + h + 1);
+
+ evas_object_show(getEvasObj());
+}
+
+void PhLogDropDownCtxPopup::__popupSelectCb( void* data, Evas_Object* obj, void* event_info )
+{
+ WENTER();
+ PhLogDropDownCtxPopup* self = (PhLogDropDownCtxPopup*)WControl_getInstanceFromEvasObj(obj);
+ if (self) {
+ const unsigned int itemIndex = (unsigned int)data;
+ self->__vSelectItemCb[itemIndex]();
+ }
+
+ evas_object_del(obj);
+}
+
diff --git a/lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.h b/lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.h
new file mode 100644
index 0000000..1cf487f
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogDropDownCtxPopup.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_DROP_DOWN_CTX_POPUP_H_
+#define _PH_LOG_DROP_DOWN_CTX_POPUP_H_
+
+#include <functional>
+#include <vector>
+
+#include <Evas.h>
+#include <Elementary.h>
+
+#include "WControl.h"
+//#include "WNaviframe.h"
+
+class PhLogDropDownCtxPopup : public WControl
+{
+public:
+ PhLogDropDownCtxPopup();
+
+ Elm_Object_Item* appendItem( const char *label, const std::function< void()>& selectCb );
+ void showPopup();
+
+protected:
+ virtual ~PhLogDropDownCtxPopup();
+ virtual Evas_Object* onCreate( Evas_Object* parent, void* viewParam);
+ virtual void onDestroy();
+
+ static void __popupSelectCb( void* data, Evas_Object* obj, void* event_info );
+
+private:
+ Evas_Object* __parentButton;
+
+ std::vector<std::function< void()>> __vSelectItemCb;
+};
+
+#endif //_PH_LOG_DROP_DOWN_CTX_POPUP_H_
diff --git a/lib-phone/ph-loglist/src/PhLogGenlistHelper.cpp b/lib-phone/ph-loglist/src/PhLogGenlistHelper.cpp
new file mode 100755
index 0000000..878449b
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogGenlistHelper.cpp
@@ -0,0 +1,352 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhLogGenlistHelper.h"
+#include "ContactsDebug.h"
+
+#define PH_LOG_SCROLL_TIMER 0.1
+#define PH_LOG_REALIZED_ITEM_COUNT_PER_PAGE 10
+
+PhLogGenlistHelper::PhLogGenlistHelper(Evas_Object* parent):
+__genlist(NULL),
+__parent(parent),
+__swipeHandler(NULL),
+__scrollTimer(NULL),
+__isClearRequested(false),
+__smartAppendIndex(0)
+
+{
+ WHIT();
+}
+
+PhLogGenlistHelper::~PhLogGenlistHelper()
+{
+ WHIT();
+
+}
+
+Evas_Object* PhLogGenlistHelper::onCreate( Evas_Object* parent, void* param )
+{
+ WHIT();
+ return __createGenlist();
+}
+
+void PhLogGenlistHelper::onDestroy()
+{
+ WHIT();
+ if (__scrollTimer)
+ ecore_timer_del(__scrollTimer);
+}
+
+void PhLogGenlistHelper::__swipeStartCb(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+ WHIT();
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+ if (p->__scrollTimer) {
+ elm_object_item_signal_emit(it, "elm,swipe,revert", "");
+ return;
+ }
+ Evas_Object *obj = elm_object_item_widget_get(it);
+ elm_object_scroll_freeze_push(obj);
+ elm_object_scroll_hold_push(p->__genlist);
+}
+
+void PhLogGenlistHelper::__swipeInvokeCb(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+ WHIT();
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+ Evas_Object *obj = elm_object_item_widget_get(it);
+ elm_object_scroll_freeze_pop(obj);
+ elm_object_scroll_hold_pop(p->__genlist);
+
+ if(strcmp(em, "elm,swipe,stop,right") == 0) {
+ p->__swipeHandler(SWIPE_TO_RIGHT, NULL);
+ } else if(strcmp(em, "elm,swipe,stop,left") == 0) {
+ p->__swipeHandler(SWIPE_TO_LEFT, NULL);
+ }
+}
+
+void PhLogGenlistHelper::__swipeCancleCb(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+ WHIT();
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+ Evas_Object *obj = elm_object_item_widget_get(it);
+ elm_object_scroll_freeze_pop(obj);
+ elm_object_scroll_hold_pop(p->__genlist);
+}
+
+void PhLogGenlistHelper::__genlistRealizedCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WPRET_M(NULL == event_info, "parameter(event_info) is NULL");
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ Elm_Object_Item *tmp_item = NULL;
+
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+ tmp_item = elm_genlist_item_next_get(item);// hide bottom line of last itme in loglist group
+ if( tmp_item == NULL || ( ELM_GENLIST_ITEM_GROUP == elm_genlist_item_type_get(tmp_item)) )
+ elm_object_item_signal_emit(item, "elm,state,bottomline,hide", "");
+ else
+ elm_object_item_signal_emit(item, "elm,state,bottomline,show", "");
+
+ if(p->__swipeHandler)
+ {
+ elm_object_item_signal_callback_del(item, "elm,swipe,start", "", __swipeStartCb);
+ elm_object_item_signal_callback_del(item, "elm,swipe,stop,left", "", __swipeInvokeCb);
+ elm_object_item_signal_callback_del(item, "elm,swipe,stop,right", "", __swipeInvokeCb);
+ elm_object_item_signal_callback_del(item, "elm,swipe,stop", "", __swipeCancleCb);
+
+ elm_object_item_signal_callback_add(item, "elm,swipe,start", "", __swipeStartCb, data);
+ elm_object_item_signal_callback_add(item, "elm,swipe,stop,left", "", __swipeInvokeCb, data);
+ elm_object_item_signal_callback_add(item, "elm,swipe,stop,right", "", __swipeInvokeCb, data);
+ elm_object_item_signal_callback_add(item, "elm,swipe,stop", "", __swipeCancleCb, data);
+ }
+}
+
+void PhLogGenlistHelper::__genlistUnrealizedCb(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ WPRET_M(NULL == item, "parameter(item) is NULL");
+
+ elm_object_item_signal_callback_del(item, "elm,swipe,start", "", __swipeStartCb);
+ elm_object_item_signal_callback_del(item, "elm,swipe,stop,left", "", __swipeInvokeCb);
+ elm_object_item_signal_callback_del(item, "elm,swipe,stop,right", "", __swipeInvokeCb);
+ elm_object_item_signal_callback_del(item, "elm,swipe,stop", "", __swipeCancleCb);
+}
+
+void PhLogGenlistHelper::__languageChangedCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+// phct_common_detail_log_init_time_format();
+// phct_common_detail_log_generate_date_format(log_d->formatter);
+
+ elm_genlist_realized_items_update(p->__genlist);
+
+// if(log_d->view_type == LOG_VIEW_TYPE_UG_NUMBER_CHECK)
+// ph_log_check_update_selection_info(log_d);
+
+}
+
+void PhLogGenlistHelper::__longPressedCb(void *data, Evas_Object *obj, void *event_info)
+{
+
+}
+
+Eina_Bool PhLogGenlistHelper::__scrollTimerCb(void *data)
+{
+ WPRET_VM(!data, EINA_FALSE, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+ if (p->__scrollTimer)
+ ecore_timer_del(p->__scrollTimer);
+ p->__scrollTimer = NULL;
+ return EINA_FALSE;
+}
+
+void PhLogGenlistHelper::__scrollCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+ if (p->__scrollTimer)
+ ecore_timer_del(p->__scrollTimer);
+ p->__scrollTimer = ecore_timer_add(PH_LOG_SCROLL_TIMER, __scrollTimerCb, data);
+}
+
+void PhLogGenlistHelper::__mouseUpCb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+ WPRET_M(!data, "data is null");
+ PhLogGenlistHelper* p = (PhLogGenlistHelper*)data;
+
+ elm_object_scroll_hold_pop(p->__genlist);
+ elm_object_scroll_freeze_pop(p->__genlist);
+}
+
+Evas_Object* PhLogGenlistHelper::__createGenlist(void)
+{
+ WHIT();
+ WASSERT_EX(__parent != NULL, "__parent is null.");
+
+ __genlist = elm_genlist_add(__parent);
+ WASSERT_EX(__genlist != NULL, "genlist is not created.");
+
+ evas_object_size_hint_weight_set(__genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(__genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ elm_genlist_mode_set(__genlist, ELM_LIST_COMPRESS);
+ elm_genlist_homogeneous_set(__genlist, EINA_TRUE);
+
+ evas_object_smart_callback_add(__genlist, "realized", __genlistRealizedCb, this);
+ evas_object_smart_callback_add(__genlist, "unrealized", __genlistUnrealizedCb, this);
+ evas_object_smart_callback_add(__genlist, "language,changed", __languageChangedCb, this);
+ evas_object_smart_callback_add(__genlist, "longpressed", __longPressedCb, this);
+ evas_object_smart_callback_add(__genlist, "scroll", __scrollCb, this);
+ evas_object_event_callback_add(__genlist, EVAS_CALLBACK_MOUSE_UP, __mouseUpCb, this);
+
+ return __genlist;
+}
+
+void PhLogGenlistHelper::appendFinish()
+{
+ WHIT();
+ WPRET_M( NULL == __genlist, " __genlist is NULL");
+ WPRET_M( 0 > __smartAppendIndex, "__smartAppendIndex is Invalid");
+
+ Elm_Object_Item * item = NULL;
+ while( NULL != (item = elm_genlist_nth_item_get(__genlist, __smartAppendIndex)) ){
+ elm_object_item_del(item);
+ }
+ elm_genlist_item_bring_in(elm_genlist_first_item_get(__genlist),ELM_GENLIST_ITEM_SCROLLTO_TOP);
+
+ __smartAppendIndex = 0;
+
+ return;
+}
+
+Elm_Object_Item* PhLogGenlistHelper::appendItem(
+ const Elm_Genlist_Item_Class *itc,
+ const void *data,
+ Elm_Object_Item *parent,
+ Elm_Genlist_Item_Type type,
+ Evas_Smart_Cb func,
+ const void *funcData)
+{
+ WASSERT_EX(__genlist != NULL, "genlist is not created.");
+
+ ItemData* itemData = new ItemData;
+ itemData->p = funcData;
+ itemData->data = data;
+ itemData->contents = NULL;
+ itemData->thumbnailUpdateTimer = NULL;
+
+ Elm_Genlist_Item_Class *curItemClass;
+ Elm_Object_Item *curItem = elm_genlist_nth_item_get(__genlist, __smartAppendIndex);
+// WDEBUG("HERE : curItem : %p",curItem);
+ if(NULL == curItem)
+ {
+// WDEBUG("insert");
+ itemData->it = elm_genlist_item_append(__genlist, itc, itemData, parent, type, func, funcData);
+ }
+ else
+ {
+ curItemClass = (Elm_Genlist_Item_Class *)elm_genlist_item_item_class_get((const Elm_Object_Item *)curItem);
+ if(itc == curItemClass)
+ {
+// WDEBUG("update");
+ ItemData* curItemData = (ItemData*)elm_object_item_data_get(curItem);
+ if (curItemData) {
+ itemData->contents = curItemData->contents;
+ delete curItemData;
+ }
+ elm_object_item_data_set(curItem, itemData);
+ elm_genlist_item_update(curItem);
+ itemData->it = curItem;
+ }
+ else
+ {
+// WDEBUG("replace");
+ itemData->it = elm_genlist_item_insert_after(__genlist, itc, itemData, parent, curItem, type, func, funcData);
+ elm_object_item_del(curItem);
+ }
+ }
+
+ if (!itemData->it) {
+ WERROR("elm_genlist_nth_item_get() is failed");
+ free(itemData);
+ return NULL;
+ }
+
+ __smartAppendIndex++;
+
+// WDEBUG("HERE : itemData: %p, genlist count : %d, append count : %d", itemData, elm_genlist_items_count (__genlist), __smartAppendIndex);
+ return itemData->it;
+}
+
+Elm_Object_Item* PhLogGenlistHelper::appendCheckItem(
+ const Elm_Genlist_Item_Class *itc,
+ const void *data,
+ Elm_Object_Item *parent,
+ Elm_Genlist_Item_Type type,
+ Evas_Smart_Cb func,
+ const void *funcData,
+ Eina_Bool isChecked)
+{
+ WASSERT_EX(__genlist != NULL, "genlist is not created.");
+
+ CheckedItemData* itemData = new CheckedItemData;
+ itemData->p = funcData;
+ itemData->data = data;
+ itemData->isChecked = isChecked;
+ itemData->checkButton = NULL;
+
+ Elm_Genlist_Item_Class *curItemClass;
+ Elm_Object_Item *curItem = elm_genlist_nth_item_get(__genlist, __smartAppendIndex);
+// WDEBUG("HERE : curItem : %p",curItem);
+ if(NULL == curItem)
+ itemData->it = elm_genlist_item_append(__genlist, itc, itemData, parent, type, func, funcData);
+ else
+ {
+ curItemClass = (Elm_Genlist_Item_Class *)elm_genlist_item_item_class_get((const Elm_Object_Item *)curItem);
+ if(itc == curItemClass)
+ {
+ CheckedItemData* curItemData = (CheckedItemData*)elm_object_item_data_get(curItem);
+ WDEBUG("update from : %p, to : %p", curItemData, itemData);
+ if (curItemData) {
+ delete curItemData;
+ }
+ elm_object_item_data_set(curItem, (void *)itemData);
+ elm_genlist_item_item_class_update(curItem,itc);
+ elm_genlist_item_update(curItem);
+ itemData->it = curItem;
+ }
+ else
+ {
+ WDEBUG("replace");
+ itemData->it = elm_genlist_item_insert_after(__genlist, itc, itemData, parent, curItem, type, func, funcData);
+ elm_object_item_del(curItem);
+ }
+ }
+
+ if (!itemData->it) {
+ WERROR("elm_genlist_nth_item_get() is failed");
+ free(itemData);
+ return NULL;
+ }
+
+ __smartAppendIndex++;
+// WDEBUG("HERE : itemData: %p, genlist count : %d, append count : %d", itemData, elm_genlist_items_count (__genlist), __smartAppendIndex);
+ return itemData->it;
+}
+
+void PhLogGenlistHelper::updateItems(void)
+{
+ WENTER();
+
+ elm_genlist_realized_items_update(__genlist);
+
+ WLEAVE();
+ return;
+}
diff --git a/lib-phone/ph-loglist/src/PhLogListView.cpp b/lib-phone/ph-loglist/src/PhLogListView.cpp
new file mode 100755
index 0000000..eed5036
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogListView.cpp
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <string>
+
+#include "ContactsDebug.h"
+
+#include "PhLogIcu.h"
+#include "PhLogGenlistHelper.h"
+
+#include "PhLogListView.h"
+#include "PhStrings.h"
+#include "PhCommon.h"
+#include "SystemSettingsMgr.h"
+#include "PhLogDbMgr.h"
+
+#define PH_TEXT_MAX_LEN (1024)
+
+PhLogListView::PhLogListView():
+__glHelper(NULL)
+{
+ WHIT();
+
+ PhLogIcu::setLocale();
+ PhLogIcu::setTimeFormat();
+ PhLogIcu::setDateFormat();
+ PhLogIcu::setDefaultTimezoneId();
+}
+
+PhLogListView::~PhLogListView()
+{
+ WHIT();
+}
+
+PhLogGenlistHelper* PhLogListView::getGlHelper()
+{
+ if (!__glHelper)
+ {
+ WASSERT_EX(getEvasObj() != NULL, "getGlHelper failed. (parent layout is null).");
+ __glHelper = new PhLogGenlistHelper(getEvasObj());
+ __glHelper->create(getEvasObj(), NULL);
+ __glHelper->setName("__genlistHelper");
+ WDEBUG("Created PhLogGenlistHelper");
+ }
+ return __glHelper;
+}
+
+void PhLogListView::setGenlistLayout()
+{
+ WPRET_M( !getGlHelper(), "getGlHelper() is failed");
+
+ Evas_Object * obj = elm_object_part_content_get(getEvasObj(), "elm.swallow.content");
+ if( __glHelper->getEvasObj() != obj)
+ {
+ obj = elm_object_part_content_unset(getEvasObj(), "elm.swallow.content");
+ if(obj)
+ evas_object_del(obj);
+ elm_object_part_content_set(getEvasObj(), "elm.swallow.content", __glHelper->getEvasObj());
+ }
+}
+
+void PhLogListView::setNoContentLayout()
+{
+ WENTER();
+
+ Evas_Object * obj = elm_object_part_content_unset(getEvasObj(), "elm.swallow.content");
+ if (obj)
+ {
+ evas_object_del(obj);
+ __glHelper = NULL;
+ }
+
+ Evas_Object *noContentsLayout = elm_layout_add(getEvasObj());
+ elm_layout_theme_set(noContentsLayout, "layout", "nocontents", "default");
+ evas_object_size_hint_weight_set(noContentsLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(noContentsLayout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ elm_object_domain_translatable_part_text_set(noContentsLayout, "elm.text", STRING_PACKAGE, PXT_(PH_CLOG_BODY_NO_LOGS));
+ elm_object_domain_translatable_part_text_set(noContentsLayout, "elm.help.text", STRING_PACKAGE, PXT_(PH_LOGS_BODY_AFTER_YOU_MAKE_OR_RECEIVE_CALLS_THEY_WILL_BE_LOGGED_HERE));
+ elm_layout_signal_emit(noContentsLayout, "text,disabled", "");
+ elm_layout_signal_emit(noContentsLayout, "align.center", "elm");
+
+ elm_object_part_content_set(getEvasObj(), "elm.swallow.content", noContentsLayout);
+
+}
+
+void PhLogListView::onTabSelect(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ elm_object_focus_set(getEvasObj(), EINA_TRUE);
+}
+
+void PhLogListView::onTabUnselect(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ destroyPopup();
+}
+
+void PhLogListView::formatTimeDateChangedCb(system_settings_key_e key, void *data)
+{
+ WENTER();
+ WPRET_M(NULL == data, "data is NULL");
+ PhLogListView* p = (PhLogListView*)data;
+
+ PhLogIcu::setLocale();
+ PhLogIcu::setTimeFormat();
+ PhLogIcu::setDateFormat();
+ PhLogIcu::setDefaultTimezoneId();
+ p->updateList();
+}
+
+void PhLogListView::onCreated()
+{
+ WHIT();
+ int ret = SystemSettingsMgr::getInstance().registerChangedCallback(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, formatTimeDateChangedCb, this);
+ WPWARN(-1 == ret, "system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR) Failed");
+
+ ret = SystemSettingsMgr::getInstance().registerChangedCallback(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, formatTimeDateChangedCb, this);
+ WPWARN(-1 == ret, "system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY) Failed");
+
+ ret = SystemSettingsMgr::getInstance().registerChangedCallback(SYSTEM_SETTINGS_KEY_TIME_CHANGED, formatTimeDateChangedCb, this);
+ WPWARN(-1 == ret, "system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_TIME_CHANGED) Failed");
+
+ PhLogDbMgr::getInstance()->attach(this);
+}
+
+void PhLogListView::onDestroy()
+{
+ WHIT();
+
+ int ret = SystemSettingsMgr::getInstance().unregisterChangedCallback(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, formatTimeDateChangedCb);
+ WPWARN(-1 == ret, "system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR) Failed");
+
+ ret = SystemSettingsMgr::getInstance().unregisterChangedCallback(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, formatTimeDateChangedCb);
+ WPWARN(-1 == ret, "system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY) Failed");
+
+ ret = SystemSettingsMgr::getInstance().unregisterChangedCallback(SYSTEM_SETTINGS_KEY_TIME_CHANGED, formatTimeDateChangedCb);
+ WPWARN(-1 == ret, "system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_TIME_CHANGED) Failed");
+
+ PhLogDbMgr::getInstance()->detach(this);
+}
diff --git a/lib-phone/ph-loglist/src/PhLogMainListCheckView.cpp b/lib-phone/ph-loglist/src/PhLogMainListCheckView.cpp
new file mode 100755
index 0000000..8444a56
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogMainListCheckView.cpp
@@ -0,0 +1,745 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <system_settings.h>
+#include <unordered_set>
+
+#include "WPopup.h"
+
+#include "ContactsDebug.h"
+#include "ContactsThumbnail.h"
+
+#include "PhPath.h"
+#include "PhCommon.h"
+#include "PhStrings.h"
+
+#include "PhLogDefines.h"
+#include "PhLogIcu.h"
+#include "PhLogUtil.h"
+
+#include "PhLogMainListCheckView.h"
+#include "SystemSettingsMgr.h"
+
+PhLogMainListCheckView::PhLogMainListCheckView(ContactsData *contactsData):
+__logList(NULL),
+__checkAllButton(NULL),
+__deleteButton(NULL),
+__checkedList(NULL),
+__currentListType(PhLogDbMgr::LIST_TYPE_ALL_CALL_MESSAGE),
+__listInitialPosition(0)
+{
+ // TODO Auto-generated constructor stub
+ WHIT();
+ __contactsData = contactsData;
+ __launchMode = __decideLaunchMode(contactsData);
+
+ switch(__launchMode)
+ {
+ case LAUNCH_MODE_EMAIL_COMPOSER:
+ case LAUNCH_MODE_MESSAGE_COMPOSER:
+ __enableTitleButton = true;
+ __enableCheckAllButton = false;
+ break;
+ case LAUNCH_MODE_NORMAL:
+ default:
+ __enableTitleButton = true;
+ __enableCheckAllButton = true;
+ break;
+ }
+
+ __checkedCount = 0;
+ __totalCount = 0;
+}
+
+PhLogMainListCheckView::PhLogMainListCheckView(PhLogDbMgr::ListType currentListType, int listPosition):
+__itcGroupIndex(NULL),
+__itcDeleteList(NULL),
+__itcSelectAll(NULL),
+__logList(NULL),
+__checkAllButton(NULL),
+__deleteButton(NULL),
+__checkedList(NULL),
+__contactsData(NULL),
+__launchMode(LAUNCH_MODE_NORMAL),
+__listInitialPosition(listPosition)
+{
+ WHIT();
+ __currentListType = currentListType;
+
+ __enableTitleButton = true;
+ __enableCheckAllButton = true;
+
+ __checkedCount = 0;
+ __totalCount = 0;
+}
+
+
+PhLogMainListCheckView::~PhLogMainListCheckView()
+{
+ WHIT();
+
+ STD_LIST_FREE(__logList)
+
+ delete __checkedList;
+
+ elm_genlist_item_class_free(__itcGroupIndex);
+ elm_genlist_item_class_free(__itcDeleteList);
+ elm_genlist_item_class_free(__itcSelectAll);
+}
+
+void PhLogMainListCheckView::onPushed(Elm_Object_Item* naviItem)
+{
+ WHIT();
+ WPRET_M( NULL == naviItem, "Invalid param : naviItem");
+
+ __enableTitleBtn();
+ __updateTitleInfo();
+
+ Elm_Object_Item *topItem = elm_genlist_nth_item_get(getGlHelper()->getEvasObj(), __listInitialPosition);
+ //WDEBUG("postion %d", __listInitialPosition);
+ if(__listInitialPosition != 1 && topItem)
+ elm_genlist_item_show(topItem, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+}
+
+void PhLogMainListCheckView::onSetAsPageContent(Elm_Object_Item* parentNaviItem)
+{
+ WHIT();
+}
+
+void PhLogMainListCheckView::__initializeTitleInfo()
+{
+ WHIT();
+
+ if(!__newRecord)
+ {
+ __checkedCount = 0;
+ __totalCount = 0;
+ }
+
+
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ snprintf(buf, sizeof(buf), PAT_(PH_LOGS_HEADER_PD_SELECTED_ABB3), __checkedCount);
+ elm_object_item_part_text_set(getNaviItem(), "elm.text.title", buf );
+
+ if (__enableTitleButton && __deleteButton)
+ elm_object_disabled_set(__deleteButton, EINA_FALSE);
+
+ if (NULL == __checkedList)
+ __checkedList = new std::list<PhLogDbMgr::RecordInfo*>;
+ else
+ {
+ __checkedList->clear();
+ }
+}
+
+
+void PhLogMainListCheckView::__updateTitleInfo()
+{
+ WHIT();
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ snprintf(buf, sizeof(buf), PAT_(PH_LOGS_HEADER_PD_SELECTED_ABB3), __checkedCount);
+ elm_object_item_part_text_set(getNaviItem(), "elm.text.title", buf );
+
+ if (__deleteButton)
+ {
+ if(__checkedCount == 0)
+ elm_object_disabled_set(__deleteButton, EINA_TRUE);
+ else if (__checkedCount >0)
+ elm_object_disabled_set(__deleteButton, EINA_FALSE);
+ else
+ WERROR("invalid __checkedCount : %d", __checkedCount);
+ }
+
+ if (__checkAllButton)
+ {
+ Elm_Object_Item *item = elm_genlist_first_item_get(getGlHelper()->getEvasObj());
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData*)elm_object_item_data_get(item);
+ WPRET_M(!itemData, "itemData is NULL");
+
+ if ( (unsigned int)__totalCount == __logList->size() && !__logList->empty()) {
+ itemData->isChecked = EINA_TRUE;
+ elm_check_state_set(__checkAllButton, EINA_TRUE);
+ }
+ else {
+ itemData->isChecked = EINA_FALSE;
+ elm_check_state_set(__checkAllButton, EINA_FALSE);
+ }
+ }
+}
+
+void PhLogMainListCheckView::__enableTitleBtn()
+{
+ WHIT();
+ WPRET_M( !__enableTitleButton , "__enableTitleButton is disabled");
+
+ Evas_Object * cancelButton = elm_object_item_part_content_unset(getNaviItem(), "title_cancel");
+ if(cancelButton)
+ evas_object_del(cancelButton);
+ cancelButton = PhCommon::createButton(getNaviframe()->getEvasObj(), "naviframe/title_left", PAT_(PH_TPLATFORM_ACBUTTON_CANCEL_ABB), [](void *data, Evas_Object *obj, void *event_info)->void {
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogMainListCheckView* p = (PhLogMainListCheckView *) data;
+
+ WDEBUG("Close Delete View");
+ p->popOut();
+ }, this);
+ WPRET_M( NULL == cancelButton, "PhCommon::createButton() is failed" );
+ elm_object_item_part_content_set(getNaviItem(), "title_left_btn", cancelButton);
+
+ __deleteButton = elm_object_item_part_content_unset(getNaviItem(), "title_right_btn");
+ if(__deleteButton)
+ evas_object_del(__deleteButton);
+
+ __deleteButton = PhCommon::createButton(getNaviframe()->getEvasObj(), "naviframe/title_right", PAT_(PH_TPLATFORM_ACBUTTON_DELETE_ABB), [](void *data, Evas_Object *obj, void *event_info)->void {
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogMainListCheckView* p = (PhLogMainListCheckView *) data;
+
+ elm_object_disabled_set(obj, EINA_TRUE);
+
+ switch(p->__launchMode)
+ {
+ case LAUNCH_MODE_EMAIL_COMPOSER:
+ case LAUNCH_MODE_MESSAGE_COMPOSER:
+ p->__replyToUgRequest();
+ break;
+ case LAUNCH_MODE_NORMAL:
+ default:
+ {
+ PhLogDbMgr::getInstance()->deleteLogList(p->__checkedList, p->__totalCount);
+ p->popOut();
+ break;
+ }
+ }
+
+ }, this);
+ WPRET_M( NULL == __deleteButton, "PhCommon::createButton() is failed" );
+ elm_object_item_part_content_set(getNaviItem(), "title_right_btn", __deleteButton);
+}
+
+void PhLogMainListCheckView::__replyToUgRequest()
+{
+ WHIT();
+ WPRET_M( !__checkedList || __checkedList->empty(), "__checkedList is Invalid");
+
+ int *resultArray = new int[__checkedList->size()];
+ WPRET_M( NULL ==resultArray, " new int[] is failed");
+ int index = 0;
+ for (auto it=__checkedList->begin(); it != __checkedList->end(); it++)
+ {
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)(*it);
+
+ if(!recordInfo->number) continue;
+ resultArray[index] = recordInfo->logId;
+ index++;
+ WDEBUG("UG resuult address : %s ", recordInfo->number);
+ }
+
+ app_control_h service;
+ app_control_create(&service);
+
+ gchar *encoded_str = g_base64_encode((guchar *)resultArray, (index+1)*sizeof(int));
+ app_control_add_extra_data(service, PH_UG_BUNDLE_RESULT_PLOG_ID_LIST, encoded_str);
+ g_free(encoded_str);
+ delete [] resultArray;
+
+ app_control_reply_to_launch_request(service, __contactsData->appControl, APP_CONTROL_RESULT_SUCCEEDED);
+ app_control_destroy(service);
+
+ popOut();
+}
+
+void PhLogMainListCheckView::updateList(void)
+{
+ WHIT();
+ std::list<PhLogDbMgr::RecordInfo*> *__oldLogList = __logList;
+
+ switch(__launchMode)
+ {
+ case LAUNCH_MODE_MESSAGE_COMPOSER:
+ __logList = PhLogDbMgr::getInstance()->loadLogList(PhLogDbMgr::LIST_TYPE_ALL_CALL, false);
+ break;
+ case LAUNCH_MODE_EMAIL_COMPOSER:
+ __logList = PhLogDbMgr::getInstance()->loadLogList(PhLogDbMgr::LIST_TYPE_EMAIL, false);
+ break;
+ case LAUNCH_MODE_NORMAL:
+ default:
+ __logList = PhLogDbMgr::getInstance()->loadLogList(__currentListType, true);
+ break;
+ }
+
+ if(!__logList || __logList->empty())
+ setNoContentLayout();
+ else
+ {
+ __newRecord = NULL;
+ if(__oldLogList)
+ {
+ std::unordered_set<int> logIds;
+ for(auto oldRec: *__oldLogList)
+ {
+ logIds.insert(oldRec->logId);
+ }
+ for(auto newRec: *__logList)
+ {
+ if( !logIds.count(newRec->logId) )
+ {
+ __newRecord = newRec;
+ }
+ }
+ }
+
+ setGenlistLayout();
+ __setList();
+ }
+
+ STD_LIST_FREE(__oldLogList)
+// WDEBUG("exit :__logList : %p", __logList);
+
+}
+
+void PhLogMainListCheckView::__setList()
+{
+ WHIT();
+ WPRET_M( NULL == __logList, "__logList is NULL");
+
+ std::unordered_set<int> checkedHashSet;
+ if(__newRecord && __checkedList)
+ {
+ for(auto i: *__checkedList)
+ {
+ checkedHashSet.insert(i->logId);
+ if( PhLogUtil::isGrouped(__newRecord, i))
+ {
+ --__checkedCount;
+ __totalCount -= i->groupedList ? (i->groupedList->size() + 1) : 1;
+ }
+ }
+ }
+
+ __initializeTitleInfo();
+
+ if (__enableCheckAllButton) {
+ getGlHelper()->appendCheckItem(__itcSelectAll, this, NULL, ELM_GENLIST_ITEM_NONE, PhLogMainListCheckView::__checkAllClickedCb, this);
+ }
+
+
+ PhLogDbMgr::RecordInfo *prevRecordInfo = NULL;
+ for (auto it=__logList->begin(); it != __logList->end(); it++)
+ {
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)(*it);
+
+ if( PhLogUtil::isGrouped(prevRecordInfo,recordInfo))
+ {
+ if( NULL == prevRecordInfo->groupedList )
+ prevRecordInfo->groupedList = new std::list<PhLogDbMgr::RecordInfo*>;
+
+ prevRecordInfo->groupedList->push_back(recordInfo);
+ }
+ else
+ {
+ if( !prevRecordInfo || !PhLogUtil::isGroupedbyDate(prevRecordInfo->logTime,recordInfo->logTime) ) {
+ Elm_Object_Item *item = getGlHelper()->appendCheckItem(__itcGroupIndex, recordInfo, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+ Eina_Bool isChecked = EINA_FALSE;
+
+ if(checkedHashSet.count(recordInfo->logId))
+ {
+ __checkedList->push_back(recordInfo);
+ isChecked = EINA_TRUE;
+ }
+ getGlHelper()->appendCheckItem(__itcDeleteList, recordInfo, NULL, ELM_GENLIST_ITEM_NONE, PhLogMainListCheckView::__selectItemCb, this, isChecked);
+ prevRecordInfo = recordInfo;
+ }
+ }
+
+ getGlHelper()->appendFinish();
+
+ __updateTitleInfo();
+
+ return;
+}
+
+Evas_Object* PhLogMainListCheckView::onCreate( Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+
+ Evas_Object* layout = PhCommon::createLayout(parent, LOG_LIST_EDJ, "log/list/check/main");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(layout);
+
+ __setGenlistItcs();
+ return layout;
+}
+
+void PhLogMainListCheckView::onCreated()
+{
+ WHIT();
+ PhLogListView::onCreated();
+ updateList();
+}
+
+void PhLogMainListCheckView::onDbChanged()
+{
+ updateList();
+}
+
+void PhLogMainListCheckView::__setGenlistItcs()
+{
+ WHIT();
+
+ __itcGroupIndex = elm_genlist_item_class_new();
+ WPRET_M(!__itcGroupIndex, "elm_genlist_item_class_new() failed");
+ __itcGroupIndex->item_style = "group_index";
+ __itcGroupIndex->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+// WDEBUG("part :%s", part);
+ if (!strcmp(part, "elm.text")) {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ time_t itemTime = recordInfo->logTime;
+ time_t nowTime = time(NULL);
+
+ struct tm itemDate;
+ struct tm nowDate;
+
+ localtime_r(&itemTime, &itemDate);
+ localtime_r(&nowTime, &nowDate);
+
+ if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ itemDate.tm_mday == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_TODAY));
+ else if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ ((itemDate.tm_mday)+1) == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_YESTERDAY));
+ else
+ return PhLogIcu::getGroupIndexDateString(recordInfo->logTime);
+ }
+ else
+ return NULL;
+ };
+ __itcGroupIndex->func.content_get = NULL;
+ __itcGroupIndex->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ delete itemData;
+ };
+
+ __itcDeleteList = elm_genlist_item_class_new();
+ WPRET_M(!__itcDeleteList, "elm_genlist_item_class_new() failed");
+ __itcDeleteList->item_style = "type1";
+ __itcDeleteList->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+// WDEBUG("part :%s", part);
+ if (0 == strcmp(part, "elm.text"))
+ return elm_entry_utf8_to_markup(PhLogUtil::getDisplayText(recordInfo->personId, recordInfo->displayName, recordInfo->number,recordInfo->callDesc));
+ else if ((strcmp(part, "elm.text.sub") == 0))
+ {
+ if(recordInfo->personId)
+ return elm_entry_utf8_to_markup(recordInfo->number);
+ else
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_SBODY_UNSAVED_M_STATUS));
+ }
+ else if ((strcmp(part, "elm.text.sub.end") == 0))
+ {
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ char *logTime = PhLogIcu::getTimeString(recordInfo->logTime);
+ snprintf(buf, sizeof(buf), "<font_size=%d>%s</font_size>", LOGLIST_SUB_TEXT_SIZE, logTime);
+ free(logTime);
+ return strdup(buf);
+ }
+ else if ((strcmp(part, "elm.text.end") == 0))
+ {
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ if(recordInfo->groupedList == NULL)
+ return NULL;
+ else
+ {
+ snprintf(buf, sizeof(buf), "(%d)", recordInfo->groupedList->size()+1);
+ return elm_entry_utf8_to_markup(buf);
+ }
+
+ }
+ else
+ return NULL;
+ };
+ __itcDeleteList->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object*{
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+// WDEBUG("part :%s", part);
+ if (0 == strcmp(part, "elm.swallow.icon"))
+ {
+ Evas_Object *thumbnail = createThumbnail(obj, THUMBNAIL_98, recordInfo->imgPath, true);
+ WPRET_VM( NULL == thumbnail, NULL, "elm_image_add() is failed");
+
+ Evas_Object *icon = PhLogUtil::getLogTypeIcon(obj, recordInfo->logType);
+ WPRET_VM( NULL == icon, NULL, "PhLogUtil::GetLogTypeIcon() is failed");
+ evas_object_size_hint_min_set(icon, ContactsCommon::getScaledWidth(LOG_LIST_CALL_TYPE_SIZE), ContactsCommon::getScaledHeight(LOG_LIST_CALL_TYPE_SIZE));
+
+ Evas_Object *layout = PhCommon::createLayout(obj, LOG_LIST_EDJ, "list/B/log/thumbnail");
+ WPRET_VM( NULL == layout, NULL, "PhLogUtil::createLayout() is failed");
+
+ elm_layout_content_set(layout, "elm.swallow.content", thumbnail);
+ elm_layout_content_set(layout, "elm.swallow.call.type", icon);
+
+ return layout;
+ }
+ else if (0 == strcmp(part, "elm.swallow.end"))
+ {
+ itemData->checkButton = elm_check_add(obj);
+ WPRET_VM(NULL == itemData->checkButton, NULL, "elm_check_add() return NULL");
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+ evas_object_repeat_events_set(itemData->checkButton, EINA_TRUE);
+ evas_object_propagate_events_set(itemData->checkButton, EINA_FALSE);
+ evas_object_freeze_events_set (itemData->checkButton, EINA_TRUE);
+
+ return itemData->checkButton;
+ } else {
+ return NULL;
+ }
+ };
+ __itcDeleteList->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ delete itemData;
+ };
+
+ __itcSelectAll = elm_genlist_item_class_new();
+ WPRET_M(!__itcSelectAll, "elm_genlist_item_class_new() failed");
+ __itcSelectAll->item_style = "type1";
+ __itcSelectAll->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ if (!strcmp(part, "elm.text")) {
+ return strdup(PAT_(PH_LOGS_MBODY_SELECT_ALL));
+ }
+ else
+ return NULL;
+ };
+ __itcSelectAll->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object*{
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ PhLogMainListCheckView *view = (PhLogMainListCheckView*)itemData->data;
+ if (0 == strcmp(part, "elm.swallow.end"))
+ {
+ Evas_Object* check = elm_check_add(obj);
+ elm_check_state_set(check, itemData->isChecked);
+ evas_object_repeat_events_set(check, EINA_TRUE);
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ evas_object_freeze_events_set (check, EINA_TRUE);
+ view->__checkAllButton = check;
+ return check;
+ }
+ else
+ return NULL;
+ };
+ __itcSelectAll->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::CheckedItemData* itemData = (PhLogGenlistHelper::CheckedItemData *)data;
+ delete itemData;
+ };
+}
+
+void PhLogMainListCheckView::__checkAllClickedCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M( NULL == event_info,"event_info is NULL");
+ WPRET_M( NULL == data,"data is NULL");
+
+ Elm_Object_Item* item = (Elm_Object_Item*)event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ PhLogMainListCheckView * p = (PhLogMainListCheckView *)data;
+ Eina_Bool checkAllBtnState = elm_check_state_get(p->__checkAllButton);
+
+ elm_check_state_set(p->__checkAllButton, !checkAllBtnState);
+
+ if ( !checkAllBtnState)
+ __checkAllItems(p->getGlHelper());
+ else
+ __uncheckAllItems(p->getGlHelper());
+}
+
+void PhLogMainListCheckView::__checkAllItems(PhLogGenlistHelper* glHelper)
+{
+ WHIT();
+ WPRET_M( NULL == glHelper , "glHelper is NULL");
+
+ Evas_Object *genlist = glHelper->getEvasObj();
+ WPRET_M( NULL == genlist , "genlist is NULL");
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
+ while(item)
+ {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData *)elm_object_item_data_get(item);
+
+ PhLogMainListCheckView* p = (PhLogMainListCheckView *)itemData->p;
+ if (p) {
+ if (p->__itcSelectAll == (Elm_Genlist_Item_Class*)elm_genlist_item_item_class_get(item)) {
+ item = elm_genlist_item_next_get(item);
+ continue;
+ }
+ }
+
+ if (!itemData->isChecked)
+ __checkItem(itemData);
+
+ item = elm_genlist_item_next_get(item);
+ }
+}
+
+void PhLogMainListCheckView::__uncheckAllItems(PhLogGenlistHelper* glHelper)
+{
+ WHIT();
+ WPRET_M( NULL == glHelper , "glHelper is NULL");
+
+ Evas_Object *genlist = glHelper->getEvasObj();
+ WPRET_M( NULL == genlist , "genlist is NULL");
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
+ while(item)
+ {
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData *)elm_object_item_data_get(item);
+
+ PhLogMainListCheckView* p = (PhLogMainListCheckView *)itemData->p;
+ if (p) {
+ if (p->__itcSelectAll == (Elm_Genlist_Item_Class*)elm_genlist_item_item_class_get(item)) {
+ item = elm_genlist_item_next_get(item);
+ continue;
+ }
+ }
+
+ if (itemData->isChecked)
+ __uncheckItem(itemData);
+
+ item = elm_genlist_item_next_get(item);
+ }
+}
+
+void PhLogMainListCheckView::__checkItem(PhLogGenlistHelper::CheckedItemData * itemData)
+{
+ WHIT();
+ WPRET_M( NULL == itemData , "Invalid Param : itemData");
+
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ WPRET_M( NULL == recordInfo , "recordInfo is NULL");
+
+ PhLogMainListCheckView *p = (PhLogMainListCheckView *)itemData->p;
+ WPRET_M( NULL == p , "p is NULL : is Group index");
+
+// WDEBUG("number : %s", recordInfo->number);
+ p->__checkedList->push_back(recordInfo);
+ p->__checkedCount++;
+ if(recordInfo->groupedList)
+ p->__totalCount += (recordInfo->groupedList->size()+1);
+ else
+ p->__totalCount++;
+
+ //check button state set
+ itemData->isChecked = EINA_TRUE;
+ if(itemData->checkButton)
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+
+ p->__updateTitleInfo();
+}
+
+void PhLogMainListCheckView::__uncheckItem(PhLogGenlistHelper::CheckedItemData * itemData)
+{
+ WHIT();
+ WPRET_M( NULL == itemData , "Invalid Param : itemData");
+
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ WPRET_M( NULL == recordInfo , "recordInfo is NULL");
+
+ PhLogMainListCheckView *p = (PhLogMainListCheckView *)itemData->p;
+ WPRET_M( NULL == p , "p is NULL");
+
+ p->__checkedList->remove(recordInfo);
+ p->__checkedCount--;
+
+ if(recordInfo->groupedList)
+ p->__totalCount -= (recordInfo->groupedList->size()+1);
+ else
+ p->__totalCount--;
+
+ //check button state set
+ itemData->isChecked = EINA_FALSE;
+ if(itemData->checkButton)
+ elm_check_state_set(itemData->checkButton, itemData->isChecked);
+
+ p->__updateTitleInfo();
+}
+
+
+void PhLogMainListCheckView::__selectItemCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M( NULL == event_info,"event_info is NULL");
+ WPRET_M( NULL == data,"data is NULL");
+
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ PhLogGenlistHelper::CheckedItemData *itemData = (PhLogGenlistHelper::CheckedItemData *)elm_object_item_data_get(item);
+
+ if(itemData->isChecked)
+ __uncheckItem(itemData);
+ else
+ __checkItem(itemData);
+}
+
+PhLogMainListCheckView::__LaunchMode PhLogMainListCheckView::__decideLaunchMode(ContactsData* contactsData)
+{
+ WHIT();
+ WPRET_VM(contactsData == NULL, LAUNCH_MODE_NORMAL, "no contactsData. set to normal mode.");
+
+ std::string type;
+ std::string appId;
+
+ appId = ContactsCommon::getAppControlData(contactsData->appControl, CONTACTS_APPCONTROL_KEY_APPID);
+ type = ContactsCommon::getAppControlData(contactsData->appControl, "type");
+ WDEBUG("appid: %s, launchMode: %s", appId.c_str(), type.c_str());
+
+ if(type.compare("34") == 0)
+ return LAUNCH_MODE_MESSAGE_COMPOSER;
+ else if(type.compare("33") == 0)
+ return LAUNCH_MODE_EMAIL_COMPOSER;
+ else
+ return LAUNCH_MODE_NORMAL;
+}
+
+void PhLogMainListCheckView::onTabSelect(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ elm_object_focus_set(getEvasObj(), EINA_TRUE);
+
+ __enableTitleBtn();
+
+ __updateTitleInfo();
+
+}
+
+void PhLogMainListCheckView::onTabUnselect(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ destroyPopup();
+ __uncheckAllItems(getGlHelper());
+}
+
+bool PhLogMainListCheckView::onTabPop()
+{
+ WHIT();
+ return TRUE;
+}
+
diff --git a/lib-phone/ph-loglist/src/PhLogMainListView.cpp b/lib-phone/ph-loglist/src/PhLogMainListView.cpp
new file mode 100755
index 0000000..e5903e2
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogMainListView.cpp
@@ -0,0 +1,834 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+//#include <ui_extension.h>
+#include <notification.h>
+
+#ifndef _SDK_BUILD
+ #include <notification_internal.h>
+#endif
+
+#include <sstream>
+#include <system_settings.h>
+#include "badge.h"
+
+#include "WMenuPopup.h"
+
+#include "ContactsAppControl.h"
+#include "ContactsDebug.h"
+#include "ContactsThumbnail.h"
+#include "WPopup.h"
+#include "PhPath.h"
+#include "PhStrings.h"
+#include "PhCommon.h"
+
+#include "PhLogIcu.h"
+#include "PhLogUtil.h"
+#include "PhLogDbMgr.h"
+
+#include "PhLogDropDownCtxPopup.h"
+#include "PhLogDetailView.h"
+#include "PhLogMainListCheckView.h"
+#include "PhLogMainListView.h"
+#include "PhLogDefines.h"
+#include "SystemSettingsMgr.h"
+
+PhLogMainListView::PhLogMainListView(ContactsData *contactsData):
+__logList(NULL),
+__viewByButton(NULL),
+__dbUpdateTimer(NULL),
+__isActive(false),
+__isScrollStopped(true),
+__isUpdateImmediate(true)
+{
+ WHIT();
+ __contactsData = contactsData;
+ __launchMode = __decideLaunchMode(contactsData);
+ WDEBUG("__launchMode : %d", __launchMode);
+ switch(__launchMode)
+ {
+ case LAUNCH_MODE_EMAIL_ADD_PRIORITY_SENDER_UG:
+ __currentListType = PhLogDbMgr::LIST_TYPE_EMAIL;
+ __enableViewByButton = false;
+ break;
+ case LAUNCH_MODE_NORMAL:
+ case LAUNCH_MODE_SINGLE_SELECT_UG:
+ case LAUNCH_MODE_DURING_CALL_TABUG:
+ default:
+ __currentListType = PhLogDbMgr::LIST_TYPE_ALL_CALL;
+ __enableViewByButton = true;
+ break;
+ }
+
+ WDEBUG("contactsData : %p, __launchMode : %d, __currentListType : %d", contactsData, __launchMode, __currentListType);
+
+ elm_theme_extension_add(NULL, ContactsCommon::getAppEdjePath(LOG_LIST_EDJ).c_str());
+ __initIcuPattern();
+}
+
+PhLogMainListView::~PhLogMainListView()
+{
+ STD_LIST_FREE(__logList)
+
+ elm_genlist_item_class_free(__itcGroupIndex);
+ elm_genlist_item_class_free(__itcMainList);
+}
+
+void PhLogMainListView::updateList()
+{
+ #define LOGS_FIRST_PAGE_PRELOAD_COUNT 8
+ WDEBUG("enter :__logList : %p", __logList);
+
+ std::list<PhLogDbMgr::RecordInfo*> *__oldLogList = __logList;
+ int limit = (__logList)? 0 : LOGS_FIRST_PAGE_PRELOAD_COUNT;
+ __logList = PhLogDbMgr::getInstance()->loadLogList(__currentListType, true, limit);
+
+ if(!__logList || __logList->empty())
+ {
+ Evas_Object * obj = elm_object_part_content_get(getEvasObj(), "elm.swallow.content");
+ if (obj && getGlHelper()->getEvasObj() == obj)
+ {
+ elm_object_part_content_unset(getEvasObj(), "elm.swallow.content");
+ elm_genlist_clear(obj);
+ evas_object_hide(obj);
+ }
+ setNoContentLayout();
+ }
+ else
+ {
+ setGenlistLayout();
+ __setList();
+ }
+
+ if(__oldLogList == NULL)
+ {
+ WUiTimer::addIdler([](void* data)->Eina_Bool {
+ PhLogMainListView* p = (PhLogMainListView*)data;
+ WINFO("First Full db loading..");
+ p->updateList();
+ return ECORE_CALLBACK_CANCEL;
+ }, this, getWeakPtr());
+ }
+
+ STD_LIST_FREE(__oldLogList)
+// WDEBUG("exit :__logList : %p", __logList);
+}
+
+void PhLogMainListView::__genlistUnswallowCb(void *data, Evas_Object* obj, void *event_info)
+{
+ //WHIT();
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ PhLogMainListView *p = (PhLogMainListView *)data;
+ WPRET_M(NULL == item, "parameter(item) is NULL");
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)elm_object_item_data_get(item);
+ std::vector<Evas_Object *>* cList = (std::vector<Evas_Object *>*)itemData->contents;
+ WPRET_M(NULL == cList, "parameter(cList) is NULL");
+
+ if(0 == p->__logCacheList.size()) return; // genlist already destroyed case
+
+ for (unsigned i=0; i<cList->size(); i++)
+ {
+ Evas_Object* content = cList->at(i);
+ std::map<Evas_Object*,std::string>::iterator it = p->__logCacheList.find(content);
+ if(it != p->__logCacheList.end())
+ {
+ if((it->second).back() != '*')
+ WWARNING("invalid delete try!!!!!");
+ else
+ (it->second).erase((it->second).end() -1);
+ evas_object_hide(content);
+ }
+ else
+ evas_object_del(content);
+ }
+ cList->clear();
+}
+
+Evas_Object* PhLogMainListView::__createListContents(std::string contentsType)
+{
+ Evas_Object *genlist = getGlHelper()->getEvasObj();
+ Evas_Object *icon = NULL;
+ Evas_Object *layout = NULL;
+ WPRET_VM( NULL == genlist, NULL, "genlist is NULL");
+
+ if(contentsType.find("list/B/log/thumbnail/") != std::string::npos)
+ {
+ for(int j=CONTACTS_PLOG_TYPE_VOICE_INCOMMING ; j<CONTACTS_PLOG_TYPE_VIDEO_BLOCKED ;j++)
+ {
+ std::stringstream keyString;
+ keyString << "list/B/log/thumbnail/" << PhLogUtil::getLogTypeImageName(j);
+
+ if(keyString.str() != contentsType)
+ continue;
+
+
+ Evas_Object *thumbnail = createThumbnail(genlist, THUMBNAIL_98, NULL, true);
+ WPRET_VM( NULL == thumbnail,NULL, "elm_image_add() is failed");
+ icon = PhLogUtil::getLogTypeIcon(genlist, j);
+ WPRET_VM( NULL == icon, NULL,"PhLogUtil::GetLogTypeIcon() is failed");
+ evas_object_size_hint_min_set(icon, ContactsCommon::getScaledWidth(LOG_LIST_CALL_TYPE_SIZE), ContactsCommon::getScaledHeight(LOG_LIST_CALL_TYPE_SIZE));
+ layout = PhCommon::createLayout(genlist, LOG_LIST_EDJ, "list/B/log/thumbnail");
+ WPRET_VM( NULL == layout,NULL, "PhLogUtil::createLayout() is failed");
+ elm_layout_content_set(layout, "elm.swallow.content", thumbnail);
+ elm_layout_content_set(layout, "elm.swallow.call.type", icon);
+ //WDEBUG("%s : %x", keyString.str().c_str(), layout);
+ break;
+ }
+ }
+ else if(contentsType == "list/C/log/log_info")
+ {
+ // create info button
+ layout = PhCommon::createImage(genlist, LOG_LIST_EDJ, "list/C/log/log_info", NULL);
+ evas_object_size_hint_min_set(layout, ContactsCommon::getScaledWidth(LOG_LIST_INFO_BTN_SIZE), ContactsCommon::getScaledHeight(LOG_LIST_INFO_BTN_SIZE));
+ WPRET_VM( NULL == layout,NULL, "PhCommon::createLayout() is failed");
+ evas_object_repeat_events_set(layout, EINA_FALSE);
+ evas_object_propagate_events_set(layout, EINA_FALSE);
+ }
+ else
+ WWARNING("Type error %s", contentsType.c_str());
+
+ evas_object_hide(layout);
+ return layout;
+}
+
+Evas_Object* PhLogMainListView::__getCachedContents(std::string keyString)
+{
+ std::map<Evas_Object*,std::string>::iterator iTer;
+ for (iTer = __logCacheList.begin(); iTer != __logCacheList.end(); iTer ++)
+ {
+ if (iTer->second == keyString)
+ {
+ Evas_Object* contents = iTer->first;
+ (iTer->second).push_back('*');
+ return contents;
+ }
+ }
+ Evas_Object* newContents = __createListContents(keyString);
+ __logCacheList[newContents] = keyString+"*";
+ WDEBUG("Cache Added : %s (total count : %d)", keyString.c_str(), __logCacheList.size());
+ return newContents;
+}
+
+void PhLogMainListView::__setList(void)
+{
+ WHIT();
+ WPRET_M( NULL == __logList, "__logList is NULL");
+ elm_genlist_clear(getGlHelper()->getEvasObj());
+ static bool initGenlistCallback = false;
+
+ if(initGenlistCallback == false)
+ {
+ Evas_Object *genlist = getGlHelper()->getEvasObj();
+ evas_object_smart_callback_add(genlist, "content,unswallowed", __genlistUnswallowCb, this);
+
+ evas_object_smart_callback_add(genlist, "scroll,anim,start", [](void *data, Evas_Object *obj, void *event_info){
+ //WDEBUG("scroll,anim,start");
+ bool* __isScrollStopped = (bool*)data;
+ *__isScrollStopped = false;
+ }, &__isScrollStopped);
+ evas_object_smart_callback_add(genlist, "scroll,anim,stop", [](void *data, Evas_Object *obj, void *event_info){
+ //WDEBUG("scroll,anim,stop");
+ PhLogMainListView* p = (PhLogMainListView*)data;
+ p->__isScrollStopped = true;
+ Eina_List *l = NULL;
+ void *itm = NULL;
+ Eina_List* realized_list = elm_genlist_realized_items_get(obj);
+ EINA_LIST_FOREACH(realized_list, l, itm) {
+ //WDEBUG("elm_genlist_realized_items_get %x", itm);
+ Elm_Object_Item *it = (Elm_Object_Item*)itm;
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)elm_object_item_data_get(it);
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ if(itemData->thumbnailUpdateTimer)
+ {
+ ecore_timer_del(itemData->thumbnailUpdateTimer);
+ itemData->thumbnailUpdateTimer = NULL;
+ }
+
+ if(!recordInfo->imgPath || strlen(recordInfo->imgPath) == 0)
+ continue;
+
+ itemData->thumbnailUpdateTimer = ecore_timer_add(0.3, [](void* data)->Eina_Bool {
+ //WDEBUG("realize timer");
+ Elm_Object_Item *item = (Elm_Object_Item *)data;
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)elm_object_item_data_get(item);
+ itemData->thumbnailUpdateTimer = NULL;
+ elm_genlist_item_update(item);
+ return ECORE_CALLBACK_CANCEL;
+ }, it);
+ }
+ }, this);
+ evas_object_smart_callback_add(genlist, "unrealized", [](void *data, Evas_Object *obj, void *event_info){
+ //WDEBUG("unrealized");
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)elm_object_item_data_get(item);
+
+ if(itemData->thumbnailUpdateTimer)
+ ecore_timer_del(itemData->thumbnailUpdateTimer);
+ itemData->thumbnailUpdateTimer = NULL;
+ }, NULL);
+ initGenlistCallback = true;
+ }
+
+ PhLogDbMgr::RecordInfo *prevRecordInfo = NULL;
+ for (auto it=__logList->begin(); it != __logList->end(); it++)
+ {
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)(*it);
+
+ if( PhLogUtil::isGrouped(prevRecordInfo,recordInfo))
+ {
+ if( NULL == prevRecordInfo->groupedList )
+ prevRecordInfo->groupedList = new std::list<PhLogDbMgr::RecordInfo*>;
+
+ prevRecordInfo->groupedList->push_back(recordInfo);
+ }
+ else
+ {
+ if( !prevRecordInfo || !PhLogUtil::isGroupedbyDate(prevRecordInfo->logTime, recordInfo->logTime) ) {
+ Elm_Object_Item *item = getGlHelper()->appendItem(__itcGroupIndex, recordInfo, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+
+ Elm_Object_Item* item = getGlHelper()->appendItem(
+ __itcMainList,
+ recordInfo,
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ PhLogMainListView::__selectItemCb,
+ this);
+
+ if (!recordInfo->number) {
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+ else {
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ prevRecordInfo = recordInfo;
+ }
+ }
+
+ getGlHelper()->appendFinish();
+
+ return;
+}
+
+void PhLogMainListView::__initIcuPattern()
+{
+ WUiTimer::addTimer(1.5,[](void* data)->Eina_Bool {
+ WDEBUG("__initIcuPattern");
+
+ return ECORE_CALLBACK_CANCEL;
+ }, NULL, getWeakPtr());
+}
+
+Evas_Object* PhLogMainListView::onCreate( Evas_Object* parent, void* viewParam)
+{
+ WHIT();
+ Evas_Object* layout = PhCommon::createLayout(parent, LOG_LIST_EDJ, "log/list/check/main");
+ WPRET_VM( NULL == layout, NULL, "PhCommon::createLayout() is failed");
+
+ __setGenlistItcs();
+
+ if(__launchMode)
+ setTitle(V_("IDS_CLOG_HEADER_SELECT_LOGS"));
+ return layout;
+}
+
+void PhLogMainListView::onCreated(void)
+{
+ WHIT();
+ PhLogListView::onCreated();
+ updateList();
+}
+
+void PhLogMainListView::onDestroy()
+{
+ WHIT();
+
+ if (getWindow()) {
+ evas_object_smart_callback_del_full(getWindow()->getEvasObj(), "focus,in", __windowFocusInCb, this);
+ }
+
+ if(getGlHelper()->getEvasObj())
+ evas_object_smart_callback_del(getGlHelper()->getEvasObj(), "content,unswallowed", __genlistUnswallowCb);
+
+ for (std::map<Evas_Object* ,std::string>::iterator iTer = __logCacheList.begin(); iTer != __logCacheList.end(); iTer ++)
+ evas_object_del(iTer->first);
+ __logCacheList.clear();
+ PhLogListView::onDestroy();
+
+}
+
+void PhLogMainListView::onSetAsPageContent(Elm_Object_Item* parentNaviItem)
+{
+ WHIT();
+
+ if (getWindow()) {
+ evas_object_smart_callback_add(getWindow()->getEvasObj(), "focus,in", __windowFocusInCb, this);
+ }
+}
+
+void PhLogMainListView::onDbChanged()
+{
+ WENTER();
+ if(__dbUpdateTimer)
+ {
+ __dbUpdateTimer->destroy();
+ __dbUpdateTimer = NULL;
+ }
+ if(__isUpdateImmediate == true)
+ {
+ updateList();
+ __isUpdateImmediate = false;
+ WUiTimer::addTimer(3.0, [](void* data)->Eina_Bool {
+ PhLogMainListView* p = (PhLogMainListView*)data;
+ WINFO("dbchange-fist timer");
+ p->__isUpdateImmediate = true;
+ return ECORE_CALLBACK_CANCEL;
+ }, this, getWeakPtr());
+ }
+ else
+ {
+ __dbUpdateTimer = WUiTimer::addTimer(1.0, [](void* data)->Eina_Bool {
+ PhLogMainListView* p = (PhLogMainListView*)data;
+ WINFO("dbchange update timer");
+ p->updateList();
+ p->__dbUpdateTimer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }, this, getWeakPtr());
+ }
+}
+
+void PhLogMainListView::onTabSelect(Elm_Object_Item *naviItem)
+{
+ WDEBUG("onTabSelect");
+
+ __isActive = true;
+ PhCommon::terminateChildAppControl();
+ destroyPopup();
+ elm_object_focus_set(getEvasObj(), EINA_TRUE);
+ __setMoreBtn(naviItem);
+ __resetMissedCallCount();
+}
+
+void PhLogMainListView::onTabUnselect(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ __isActive = false;
+
+ // NOTE: jaehwa
+ // Moved terminating app control to CtTabView
+ // destroy app control only if tab changed
+ // PhCommon::terminateChildAppControl();
+
+ destroyPopup();
+}
+
+bool PhLogMainListView::onTabPop()
+{
+ WHIT();
+ destroyPopup();
+ return TRUE;
+}
+
+int PhLogMainListView::__getListPosition()
+{
+ WHIT();
+ Evas_Coord_Rectangle rect = {0};
+ evas_object_geometry_get(getGlHelper()->getEvasObj(), &rect.x, &rect.y, &rect.w, &rect.h);
+
+ int posret;
+ Elm_Object_Item* it = elm_genlist_at_xy_item_get(getGlHelper()->getEvasObj(), rect.x, rect.y + 30, &posret);
+ return (it)? elm_genlist_item_index_get(it) : 0;
+}
+
+void PhLogMainListView::__resetMissedCallCount()
+{
+ WHIT();
+ unsigned count = 0;
+ if(badge_get_count(PHONE_PKG, &count) == BADGE_ERROR_NONE && count > 0) {
+ badge_set_count(PHONE_PKG, 0);
+ }
+
+ notification_delete_all(NOTIFICATION_TYPE_NOTI);
+ PhLogDbMgr::getInstance()->updateMissedLogDbAsSeen(0, CONTACTS_PLOG_TYPE_NONE);
+}
+
+void PhLogMainListView::__selectDetailButtonCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WPRET_M( NULL == data, "Invalid Param : data");
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ PhLogMainListView* p = (PhLogMainListView *)itemData->p;
+
+ WNaviframe* frame = (WNaviframe*)p->getNaviframe();
+ frame->push(new PhLogDetailView(recordInfo));
+ ////CONTACTS_LOGGING_LOG(LOGGING_LOG_DETAIL_LOG);
+}
+
+void PhLogMainListView::__setGenlistItcs()
+{
+ WHIT();
+ __itcGroupIndex = elm_genlist_item_class_new();
+ WPRET_M(!__itcGroupIndex, "elm_genlist_item_class_new() failed");
+ __itcGroupIndex->item_style = "group_index";
+ __itcGroupIndex->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ if (!strcmp(part, "elm.text")) {
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+
+ time_t itemTime = recordInfo->logTime;
+ time_t nowTime = time(NULL);
+
+ struct tm itemDate;
+ struct tm nowDate;
+
+ localtime_r(&itemTime, &itemDate);
+ localtime_r(&nowTime, &nowDate);
+
+ if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ itemDate.tm_mday == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_TODAY));
+ else if( itemDate.tm_year == nowDate.tm_year &&
+ itemDate.tm_mon == nowDate.tm_mon &&
+ ((itemDate.tm_mday)+1) == nowDate.tm_mday )
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_HEADER_YESTERDAY));
+ else
+ return PhLogIcu::getGroupIndexDateString(recordInfo->logTime);
+ }
+ else
+ return NULL;
+ };
+ __itcGroupIndex->func.content_get = NULL;
+ __itcGroupIndex->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::ItemData* itemData = (PhLogGenlistHelper::ItemData *)data;
+ delete itemData;
+ };
+
+ __itcMainList = elm_genlist_item_class_new();
+ WPRET_M(!__itcMainList, "elm_genlist_item_class_new() failed");
+ __itcMainList->item_style = "type1";
+ __itcMainList->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char* {
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ if (0 == strcmp(part, "elm.text"))
+ return elm_entry_utf8_to_markup(PhLogUtil::getDisplayText(recordInfo->personId, recordInfo->displayName, recordInfo->number,recordInfo->callDesc));
+ else if ((strcmp(part, "elm.text.sub") == 0))
+ {
+ if(recordInfo->personId)
+ return elm_entry_utf8_to_markup(recordInfo->number);
+ else
+ return elm_entry_utf8_to_markup(PAT_(PH_LOGS_SBODY_UNSAVED_M_STATUS));
+ }
+ else if ((strcmp(part, "elm.text.sub.end") == 0))
+ {
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ snprintf(buf, sizeof(buf), "<font_size=%d>%s</font_size>", LOGLIST_SUB_TEXT_SIZE, recordInfo->displayLogTime);
+ return strdup(buf);
+ }
+ else if ((strcmp(part, "elm.text.end") == 0))
+ {
+ char buf[PH_TEXT_SHORT_LEN] = {0,};
+ if(recordInfo->groupedList == NULL)
+ return NULL;
+ else
+ {
+ snprintf(buf, sizeof(buf), "(%d)", recordInfo->groupedList->size()+1);
+ return elm_entry_utf8_to_markup(buf);
+ }
+ }
+ else
+ return NULL;
+ };
+ __itcMainList->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object* {
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData*)data;
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ PhLogMainListView* p = (PhLogMainListView *)itemData->p;
+ std::vector<Evas_Object*>* cList = (std::vector<Evas_Object*>*)itemData->contents;
+ if(cList == NULL)
+ itemData->contents = cList = new std::vector<Evas_Object*>;
+
+ if (0 == strcmp(part, "elm.swallow.icon"))
+ {
+ //WDEBUG("itemData %x", itemData);
+ //WDEBUG("elm.icon.1");
+ char* imagePath = NULL;
+ if((recordInfo->imgPath && (strlen(recordInfo->imgPath) != 0)) && p->__isScrollStopped == true)
+ imagePath = recordInfo->imgPath;
+
+ if(!imagePath || strlen(imagePath) == 0)
+ {
+ std::stringstream keyString;
+ Evas_Object* contents;
+ keyString << "list/B/log/thumbnail/" << PhLogUtil::getLogTypeImageName(recordInfo->logType);
+ if((contents = p->__getCachedContents(keyString.str())) != NULL)
+ {
+ cList->push_back(contents);
+ return contents;
+ }
+ }
+
+ Evas_Object *thumbnail = createThumbnail(obj, THUMBNAIL_98, recordInfo->imgPath, true);
+ Evas_Object *icon = PhLogUtil::getLogTypeIcon(obj, recordInfo->logType);
+ WPRET_VM( NULL == icon, NULL, "PhLogUtil::GetLogTypeIcon() is failed");
+ evas_object_size_hint_min_set(icon, ContactsCommon::getScaledWidth(LOG_LIST_CALL_TYPE_SIZE), ContactsCommon::getScaledHeight(LOG_LIST_CALL_TYPE_SIZE));
+
+ Evas_Object *layout = PhCommon::createLayout(obj, LOG_LIST_EDJ, "list/B/log/thumbnail");
+ WPRET_VM( NULL == layout, NULL, "PhLogUtil::createLayout() is failed");
+
+ elm_layout_content_set(layout, "elm.swallow.content", thumbnail);
+ elm_layout_content_set(layout, "elm.swallow.call.type", icon);
+
+ cList->push_back(layout);
+ return layout;
+ }
+ else if (0 == strcmp(part, "elm.swallow.end"))
+ {
+ //WDEBUG("elm.icon.2");
+ if (p->__launchMode != LAUNCH_MODE_NORMAL)
+ return NULL;
+
+ Evas_Object* contents = p->__getCachedContents("list/C/log/log_info");
+ WPRET_VM( NULL == contents, NULL, "__getCachedContents() is failed");
+ evas_object_smart_callback_del(contents, "clicked", __selectDetailButtonCb);
+ evas_object_smart_callback_add(contents, "clicked", __selectDetailButtonCb, itemData);
+ cList->push_back(contents);
+
+ return contents;
+ } else {
+ return NULL;
+ }
+
+ };
+ __itcMainList->func.state_get = NULL;
+ __itcMainList->func.del = [](void* data, Evas_Object* obj){
+ PhLogGenlistHelper::ItemData* itemData = (PhLogGenlistHelper::ItemData *)data;
+ if(itemData->contents)
+ delete (std::vector<Evas_Object*>*)itemData->contents;
+ //WDEBUG("delcallback item %x", itemData);
+ delete itemData;
+ };
+ //uxt_genlist_set_content_reuse_enabled(__itcMainList, EINA_TRUE);
+
+}
+
+void PhLogMainListView::__selectItemCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M( NULL == event_info,"event_info is NULL");
+ WPRET_M( NULL == data,"data is NULL");
+
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ PhLogGenlistHelper::ItemData *itemData = (PhLogGenlistHelper::ItemData *)elm_object_item_data_get(item);
+ PhLogDbMgr::RecordInfo *recordInfo = (PhLogDbMgr::RecordInfo*)itemData->data;
+ WDEBUG("address prt itemData : %p recordInfo : %p",itemData, recordInfo );
+ PhLogMainListView *p = (PhLogMainListView *)itemData->p;
+
+ if (p->__launchMode == LAUNCH_MODE_SINGLE_SELECT_UG ||
+ p->__launchMode == LAUNCH_MODE_EMAIL_ADD_PRIORITY_SENDER_UG)
+ {
+ app_control_h service;
+ app_control_create(&service);
+ std::string value = std::to_string(recordInfo->logId);
+ app_control_add_extra_data(service, PH_UG_BUNDLE_RESULT_PLOG_ID, value.c_str());
+ WDEBUG("appControl Reply - logId:%s", value.c_str());
+ app_control_reply_to_launch_request(service, p->__contactsData->appControl, APP_CONTROL_RESULT_SUCCEEDED);
+ app_control_destroy(service);
+ p->popOut();
+ }
+ else
+ {
+ int err = launchCall(recordInfo->number);
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "launchCall() failed(0x%x)", err);
+ }
+}
+
+void PhLogMainListView::__setMoreBtn(Elm_Object_Item *naviItem)
+{
+ WHIT();
+ WPRET_M(!naviItem, "Invalid Param : naviItem");
+ switch(__launchMode)
+ {
+ case LAUNCH_MODE_DURING_CALL_TABUG:
+ case LAUNCH_MODE_SINGLE_SELECT_UG:
+ case LAUNCH_MODE_EMAIL_ADD_PRIORITY_SENDER_UG:
+ break;
+ case LAUNCH_MODE_NORMAL:
+ default:
+ enableMoreButton(naviItem, [](void *data, Evas_Object *obj, void *event_info){
+ PhLogMainListView* p = static_cast<PhLogMainListView*>(data);
+
+ Evas_Object* win = NULL;
+ if (p->getWindow())
+ win = p->getWindow()->getEvasObj();
+
+ WPRET_M(NULL == win, "win is NULL");
+
+ WMenuPopup* popup = new WMenuPopup();
+ popup->prepare( win, p->getNaviframe()->getEvasObj() );
+
+ if( p->__logList && !p->__logList->empty())
+ {
+ popup->appendItem(PAT_(PH_CLOG_OPT_VIEW_BY), [p](){
+ p->__createViewBy();
+ });
+
+ popup->appendItem(PAT_(PH_LOGS_HEADER_DELETE), [p](){
+ WNaviframe* frame = (WNaviframe*)p->getNaviframe();
+ frame->push(new PhLogMainListCheckView(p->__currentListType, p->__getListPosition()));
+ });
+ } else if (p->__currentListType == PhLogDbMgr::ListType::LIST_TYPE_MISSED_CALL) {
+ popup->appendItem(PAT_(PH_CLOG_OPT_VIEW_BY), [p](){
+ p->__createViewBy();
+ });
+ }
+
+ popup->appendItem(PAT_(PH_KPD_OPT_CALL_SETTINGS_ABB), [p](){
+ PhCommon::launchCallSetting(p->getWindow()->getEvasObj(), p->getNaviframe()->getEvasObj());
+ ////CONTACTS_LOGGING_LOG(LOGGING_LOG_CALL_SETTINGS);
+ });
+ p->attachPopup(popup);
+ }, this);
+ break;
+ }
+}
+
+void PhLogMainListView::__createViewBy()
+{
+ WENTER();
+ Elm_Genlist_Item_Class* itc = elm_genlist_item_class_new();
+ WPRET_M(!itc, "elm_genlist_item_class_new() failed");
+ itc->item_style = "type1";
+ itc->func.text_get = [](void* data, Evas_Object* obj, const char* part)->char*
+ {
+ if(!strcmp(part, "elm.text")) {
+ if (PhLogDbMgr::LIST_TYPE_ALL_CALL == (int)data)
+ return SAFE_STRDUP(PAT_(PH_LOGS_BODY_ALL_CALLS));
+ else if (PhLogDbMgr::LIST_TYPE_MISSED_CALL == (int)data)
+ return SAFE_STRDUP(PAT_(PH_LOGS_NPBODY_MISSED_CALLS_ABB));
+ }
+ return NULL;
+ };
+
+ itc->func.content_get = [](void* data, Evas_Object* obj, const char* part)->Evas_Object*
+ {
+ PhLogMainListView* p = static_cast<PhLogMainListView*>(evas_object_data_get(obj, "LogMainList"));
+ WPRET_VM(!p, NULL, "LogMainList is NULL");
+
+ if(!strcmp(part, "elm.swallow.end")) {
+
+ Evas_Object* radio = elm_radio_add(obj);
+ Evas_Object *radioGroup = (Evas_Object*)evas_object_data_get(obj, "radioGroup");
+ elm_object_style_set(radio, "list");
+ elm_radio_group_add(radio, radioGroup);
+ elm_radio_state_value_set(radio, (int)data);
+ evas_object_propagate_events_set(radio, EINA_TRUE);
+
+ if(p->__currentListType == (int)data) {
+ elm_radio_value_set(radio, (int)data);
+ }
+ return radio;
+ }
+ return NULL;
+ };
+
+ WPopup* popup = new WPopup();
+ popup->setTitle(PAT_(PH_CLOG_OPT_VIEW_BY));
+ popup->setContent([itc, this](Evas_Object* parent)->Evas_Object*
+ {
+ Evas_Object* genlist = elm_genlist_add(parent);
+ evas_object_data_set(genlist, "LogMainList", this);
+ elm_object_style_set( genlist, "popup");
+ elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+ elm_genlist_mode_set( genlist, ELM_LIST_COMPRESS );
+ elm_scroller_content_min_limit( genlist, EINA_FALSE, EINA_TRUE );
+
+ Evas_Object* radioGroup = elm_radio_add(genlist);
+ elm_object_style_set(radioGroup, "list");
+ elm_radio_state_value_set(radioGroup, -1);
+ elm_radio_value_set(radioGroup, -1);
+ evas_object_data_set(genlist, "radioGroup", radioGroup);
+
+ elm_genlist_item_append(genlist, itc, (void *)PhLogDbMgr::ListType::LIST_TYPE_ALL_CALL, NULL,
+ ELM_GENLIST_ITEM_NONE,this->__onViewByCallsCb, this);
+ elm_genlist_item_append(genlist, itc, (void *)PhLogDbMgr::ListType::LIST_TYPE_MISSED_CALL,
+ NULL, ELM_GENLIST_ITEM_NONE,this->__onViewByCallsCb, this);
+ elm_object_content_set(parent, genlist);
+ evas_object_show(genlist);
+ return genlist;
+ });
+
+ this->attachPopup(popup);
+ elm_genlist_item_class_free(itc);
+}
+
+void PhLogMainListView::__onViewByCallsCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WENTER();
+ PhLogMainListView* p = static_cast<PhLogMainListView*>(data);
+ Evas_Object *radioGroup = (Evas_Object*)evas_object_data_get(obj, "radioGroup");
+ PhLogDbMgr::ListType index = (PhLogDbMgr::ListType)((int)elm_object_item_data_get((Elm_Object_Item *) event_info));
+ p->__currentListType = index;
+ elm_radio_value_set(radioGroup, p->__currentListType);
+ p->updateList();
+ p->destroyPopup();
+}
+
+PhLogMainListView::__LaunchMode PhLogMainListView::__decideLaunchMode(ContactsData* contactsData)
+{
+ WHIT();
+ WPRET_VM(contactsData == NULL, LAUNCH_MODE_NORMAL, "no contactsData. set to normal mode.");
+
+ std::string type;
+ std::string appId;
+
+ appId = ContactsCommon::getAppControlData(contactsData->appControl, CONTACTS_APPCONTROL_KEY_APPID);
+ if (appId.compare("phone-tabui-efl") == 0)
+ {
+ type = ContactsCommon::getAppControlData(contactsData->appControl, "type");
+
+ if(type.compare("51") == 0)
+ return LAUNCH_MODE_DURING_CALL_TABUG;
+ }
+ else if (appId.compare("phonelog-efl") == 0)
+ {
+ type = ContactsCommon::getAppControlData(contactsData->appControl, "type");
+
+ if(type.compare("12") == 0)
+ return LAUNCH_MODE_SINGLE_SELECT_UG;
+ else if(type.compare("13") == 0)
+ return LAUNCH_MODE_EMAIL_ADD_PRIORITY_SENDER_UG;
+ }
+ else
+ return LAUNCH_MODE_NORMAL;
+
+// WDEBUG("launchMode: %d", __launchMode);
+ return LAUNCH_MODE_NORMAL;
+}
+
+void PhLogMainListView::__windowFocusInCb(void *data, Evas_Object *obj, void *event_info)
+{
+ WHIT();
+ WPRET_M(NULL == data, "data is NULL");
+ PhLogMainListView* p = (PhLogMainListView*)data;
+ WPRET_M(!p->__isActive, "PhLogMainListView is not active");
+
+ p->__resetMissedCallCount();
+}
diff --git a/lib-phone/ph-loglist/src/PhLogUtil.cpp b/lib-phone/ph-loglist/src/PhLogUtil.cpp
new file mode 100755
index 0000000..2c5b3f7
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogUtil.cpp
@@ -0,0 +1,607 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <contacts.h>
+
+#include "ContactsDebug.h"
+
+#include "PhCommon.h"
+#include "PhPath.h"
+#include "PhStrings.h"
+
+#include "PhLogUtil.h"
+
+enum{
+ CALL_VC_SERVICE_TYPE_NONE,
+ CALL_VC_SERVICE_TYPE_EMERGENCY=01,
+ CALL_VC_SERVICE_TYPE_VOICE_MAIL,
+ CALL_VC_SERVICE_TYPE_UNAVAILABLE,
+ CALL_VC_SERVICE_TYPE_REJECT_BY_USER,
+ CALL_VC_SERVICE_TYPE_OTHER_SERVICE,
+ CALL_VC_SERVICE_TYPE_PAYPHONE,
+ CALL_VC_SERVICE_TYPE_DCM_REMOTE_OPERATE,
+ CALL_VC_SERVICE_TYPE_DCM_CALL_FORWARD,
+ CALL_VC_SERVICE_TYPE_DCM_CALLER_ID,
+ CALL_VC_SERVICE_TYPE_DCM_ROAMING_GUIDE,
+ CALL_VC_SERVICE_TYPE_DCM_ROAMING_CALL_NOTI,
+ CALL_VC_SERVICE_TYPE_MAX
+};
+
+PhLogUtil::PhLogUtil()
+{
+ // TODO Auto-generated constructor stub
+
+}
+
+PhLogUtil::~PhLogUtil()
+{
+ // TODO Auto-generated destructor stub
+}
+
+bool PhLogUtil::isEmergencyNumber(const char *callDesc)
+{
+ if (!callDesc) return false;
+
+ int desc = atoi(callDesc+1);
+ WDEBUG("callDesc[0]:%c, desc : %d",callDesc[0], desc);
+
+ switch(desc)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ return true;
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ default:
+ return false;
+ }
+
+ return false;
+}
+
+bool PhLogUtil::isUnknownNumber(const char *callDesc)
+{
+ if (!callDesc) return true;
+
+ int desc = atoi(callDesc+1);
+ WDEBUG("callDesc[0]:%c, desc : %d",callDesc[0], desc);
+
+ switch(desc)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ return false;
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ default:
+ return true;
+ }
+
+ return false;
+}
+
+const char* PhLogUtil::getDisplayText(int personId, const char* displayName, const char* number, const char *descInfo)
+{
+ if(number)
+ {
+ if( personId > 0 )
+ return displayName;
+
+ if (!descInfo)
+ return number;
+
+ int desc = atoi(descInfo+1);
+ WDEBUG("descInfo[0]:%c, desc : %d",descInfo[0], desc);
+
+ switch(desc)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ return PAT_(PH_KPD_HEADER_EMERGENCY_CALL_ABB2);
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ return PAT_(PH_KPD_OPT_VOICEMAIL_ABB);
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ return PAT_(PH_LOGS_MBODY_UNKNOWN);
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ return PAT_(PH_COM_BODY_PRIVATE_NUMBER);
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ return PAT_(PH_LOGS_MBODY_UNKNOWN);
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ return PAT_(PH_CALL_BODY_PAYPHONE);
+ default:
+ return number;
+ }
+
+ return number;
+ }
+ else
+ {
+ if (!descInfo)
+ return PAT_(PH_COM_BODY_PRIVATE_NUMBER);
+
+ int desc = atoi(descInfo+1);
+ WDEBUG("descInfo[0]:%c, desc : %d",descInfo[0], desc);
+
+ switch(desc)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ return PAT_(PH_KPD_HEADER_EMERGENCY_CALL_ABB2);
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ return PAT_(PH_KPD_OPT_VOICEMAIL_ABB);
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ return PAT_(PH_LOGS_MBODY_UNKNOWN);
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ return PAT_(PH_COM_BODY_PRIVATE_NUMBER);
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ return PAT_(PH_LOGS_MBODY_UNKNOWN);
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ return PAT_(PH_CALL_BODY_PAYPHONE);
+ default:
+ return PAT_(PH_LOGS_MBODY_UNKNOWN);
+ }
+
+ return NULL;
+ }
+}
+
+const char *PhLogUtil::getTextOfNumberType(int numberType)
+{
+ WDEBUG("numberType : %d", numberType);
+
+ if (numberType & CONTACTS_NUMBER_TYPE_CUSTOM) {
+ return PAT_(PH_PB_OPT_CUSTOM);
+ }
+ else if (numberType & CONTACTS_NUMBER_TYPE_CELL) {
+ if (numberType & CONTACTS_NUMBER_TYPE_HOME)
+ return PAT_(PH_PB_OPT_HOME_ABB);
+ else if (numberType & CONTACTS_NUMBER_TYPE_WORK)
+ return PAT_(PH_PB_OPT_WORK);
+ else
+ return PAT_(PH_PB_OPT_MOBILE);
+ }
+ else if (numberType & CONTACTS_NUMBER_TYPE_VOICE) {
+ if (numberType & CONTACTS_NUMBER_TYPE_HOME)
+ return PAT_(PH_PB_OPT_HOME_ABB);
+ else if (numberType & CONTACTS_NUMBER_TYPE_WORK)
+ return PAT_(PH_PB_OPT_WORK);
+ else
+ return PAT_("IDS_PB_BODY_TELEPHONE");
+ }
+ else if (numberType & CONTACTS_NUMBER_TYPE_FAX) {
+ if (numberType & CONTACTS_NUMBER_TYPE_HOME)
+ return PAT_(PH_PB_OPT_FAX_HHOME_ABB);
+ else if (numberType & CONTACTS_NUMBER_TYPE_WORK)
+ return PAT_(PH_PB_OPT_FAX_HWORK_ABB);
+ else
+ return PAT_("IDS_PB_BODY_FAX");
+ }
+ else if (numberType & CONTACTS_NUMBER_TYPE_PAGER)
+ return PAT_(PH_PB_OPT_PAGER);
+ else if (numberType & CONTACTS_NUMBER_TYPE_ASSISTANT)
+ return PAT_("IDS_PB_OPT_ASSISTANT_M_CONTACTS");
+ else {
+ if (numberType == CONTACTS_NUMBER_TYPE_HOME)
+ return PAT_(PH_PB_OPT_HOME_ABB);
+ else if (numberType == CONTACTS_NUMBER_TYPE_WORK)
+ return PAT_(PH_PB_OPT_WORK);
+ else
+ return PAT_(PH_PB_OPT_OTHER);
+ }
+}
+
+Evas_Object* PhLogUtil::getLogTypeIcon(Evas_Object *parent, int log_type)
+{
+ if ( PhLogUtil::isOutgoingCallType(log_type) || PhLogUtil::isOutgoingMsgType(log_type))
+ return PhCommon::createImage(parent, LOG_LIST_EDJ, PH_LOG_ICON_OUTGOING, NULL);
+ else if (PhLogUtil::isIncomingCallType(log_type) || PhLogUtil::isIncomingMsgType(log_type))
+ return PhCommon::createImage(parent, LOG_LIST_EDJ, PH_LOG_ICON_INCOMING, NULL);
+ else if ( PhLogUtil::isMissedCallType(log_type))
+ return PhCommon::createImage(parent, LOG_LIST_EDJ, PH_LOG_ICON_MISSED, NULL);
+ else if (PhLogUtil::isRejectCallType(log_type))
+ return PhCommon::createImage(parent, LOG_LIST_EDJ, PH_LOG_ICON_REJECTED, NULL);
+ else if (PhLogUtil::isBlockedType(log_type))
+ return PhCommon::createImage(parent, LOG_LIST_EDJ, PH_LOG_ICON_AUTO_REJECTED, NULL);
+ else
+ {
+ WDEBUG("error invalid type %d", log_type);
+ return NULL;
+ }
+}
+
+std::string PhLogUtil::getLogTypeImageName(int log_type)
+{
+ if ( PhLogUtil::isOutgoingCallType(log_type) || PhLogUtil::isOutgoingMsgType(log_type))
+ return PH_LOG_ICON_OUTGOING;
+ else if (PhLogUtil::isIncomingCallType(log_type) || PhLogUtil::isIncomingMsgType(log_type))
+ return PH_LOG_ICON_INCOMING;
+ else if ( PhLogUtil::isMissedCallType(log_type))
+ return PH_LOG_ICON_MISSED;
+ else if (PhLogUtil::isRejectCallType(log_type))
+ return PH_LOG_ICON_REJECTED;
+ else if (PhLogUtil::isBlockedType(log_type))
+ return PH_LOG_ICON_AUTO_REJECTED;
+ else
+ {
+ WDEBUG("error invalid type %d", log_type);
+ return "";
+ }
+}
+
+bool PhLogUtil::isOutgoingCallType(int type)
+{
+ if (type == CONTACTS_PLOG_TYPE_VOICE_OUTGOING
+ || type == CONTACTS_PLOG_TYPE_VIDEO_OUTGOING)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool PhLogUtil::isMsgType(int type)
+{
+ if (isOutgoingMsgType(type) || isIncomingMsgType(type))
+ return true;
+ else
+ return false;
+}
+
+bool PhLogUtil::isOutgoingMsgType(int type)
+{
+ if (type == CONTACTS_PLOG_TYPE_MMS_OUTGOING
+ || type == CONTACTS_PLOG_TYPE_SMS_OUTGOING
+ || type == CONTACTS_PLOG_TYPE_EMAIL_SENT)
+ return TRUE;
+ else
+ return FALSE;
+
+}
+
+bool PhLogUtil::isIncomingCallType(int type)
+{
+ if (type == CONTACTS_PLOG_TYPE_VOICE_INCOMMING
+ || type == CONTACTS_PLOG_TYPE_VIDEO_INCOMMING)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool PhLogUtil::isIncomingMsgType(int type)
+{
+ if (type == CONTACTS_PLOG_TYPE_MMS_INCOMMING
+ || type == CONTACTS_PLOG_TYPE_SMS_INCOMMING
+ || type == CONTACTS_PLOG_TYPE_EMAIL_RECEIVED)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool PhLogUtil::isMissedCallType(int type)
+{
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool PhLogUtil::isRejectCallType(int type)
+{
+ if (type == CONTACTS_PLOG_TYPE_VOICE_REJECT
+ || type == CONTACTS_PLOG_TYPE_VIDEO_REJECT)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool PhLogUtil::isBlockedType(int type)
+{
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_BLOCKED:
+ case CONTACTS_PLOG_TYPE_VIDEO_BLOCKED:
+ case CONTACTS_PLOG_TYPE_SMS_BLOCKED:
+ case CONTACTS_PLOG_TYPE_MMS_BLOCKED:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool PhLogUtil::isGroupedByDesc(const char *prevDesc, const char *curDesc)
+{
+// WDEBUG("%s:%s", prevDesc, curDesc);
+ if (!prevDesc)
+ {
+ if(!curDesc)
+ return true;
+ else
+ {
+// WDEBUG("curDesc[%s]",curDesc);
+ int curDescNum = atoi(curDesc+1);
+
+ switch(curDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ return true;
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ default:
+ return false;
+ }
+ }
+ }
+ else
+ {
+ if(!curDesc)
+ {
+// WDEBUG("prevDesc[%s]",prevDesc);
+ int prevDescNum = atoi(prevDesc+1);
+
+ switch(prevDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ return true;
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ default:
+ return false;
+ }
+ }
+
+ int prevDescNum = atoi(prevDesc+1);
+ int curDescNum = atoi(curDesc+1);
+// WDEBUG("descInfo[0]:%c, desc : %d",prevDesc[0], prevDescNum);
+// WDEBUG("descInfo[0]:%c, desc : %d",curDesc[0], curDescNum);
+
+ switch(prevDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ switch(curDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ return true;
+ default:
+ return false;
+ }
+ break;
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ switch(curDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ return true;
+ default:
+ return false;
+ }
+ break;
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ switch(curDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ return true;
+ default:
+ return false;
+ }
+ break;
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ switch(curDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ return true;
+ default:
+ return false;
+ }
+ break;
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ default:
+ switch(curDescNum)
+ {
+ case CALL_VC_SERVICE_TYPE_EMERGENCY:
+ case CALL_VC_SERVICE_TYPE_VOICE_MAIL:
+ case CALL_VC_SERVICE_TYPE_REJECT_BY_USER:
+ case CALL_VC_SERVICE_TYPE_PAYPHONE:
+ return false;
+ case CALL_VC_SERVICE_TYPE_UNAVAILABLE:
+ case CALL_VC_SERVICE_TYPE_OTHER_SERVICE:
+ default:
+ return true;
+ }
+ break;
+ }
+ }
+}
+
+bool PhLogUtil::isGroupedbyDate(const int time1, const int time2)
+{
+ time_t date1 = time1;
+ time_t date2 = time2;
+
+ struct tm* ptr;
+
+ ptr = localtime(&date1);
+ WPRET_VM(!ptr, false, "localtime returned NULL" );
+ struct tm prev = *ptr;
+
+ ptr = localtime(&date2);
+ WPRET_VM(!ptr, false, "localtime returned NULL" );
+ struct tm cur = *ptr;
+
+ return prev.tm_year == cur.tm_year &&
+ prev.tm_mon == cur.tm_mon &&
+ prev.tm_mday == cur.tm_mday;
+
+}
+
+bool PhLogUtil::isGroupedbyType(int pre_type, int type)
+{
+ switch (pre_type) {
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VOICE_OUTGOING:
+ case CONTACTS_PLOG_TYPE_VIDEO_OUTGOING:
+ {
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VOICE_OUTGOING:
+ case CONTACTS_PLOG_TYPE_VIDEO_OUTGOING:
+ return true;
+ default :
+ return false;
+ }
+ break;
+ }
+ case CONTACTS_PLOG_TYPE_MMS_INCOMMING:
+ case CONTACTS_PLOG_TYPE_SMS_INCOMMING:
+ case CONTACTS_PLOG_TYPE_MMS_OUTGOING:
+ case CONTACTS_PLOG_TYPE_SMS_OUTGOING:
+ {
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_MMS_INCOMMING:
+ case CONTACTS_PLOG_TYPE_SMS_INCOMMING:
+ case CONTACTS_PLOG_TYPE_MMS_OUTGOING:
+ case CONTACTS_PLOG_TYPE_SMS_OUTGOING:
+ return true;
+ default :
+ return false;
+ }
+ break;
+ }
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ {
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ return true;
+ default :
+ return false;
+ }
+ break;
+ }
+ case CONTACTS_PLOG_TYPE_VOICE_REJECT:
+ case CONTACTS_PLOG_TYPE_VIDEO_REJECT:
+ {
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_REJECT:
+ case CONTACTS_PLOG_TYPE_VIDEO_REJECT:
+ return true;
+ default :
+ return false;
+ }
+ break;
+ }
+ case CONTACTS_PLOG_TYPE_VOICE_BLOCKED:
+ case CONTACTS_PLOG_TYPE_VIDEO_BLOCKED:
+ {
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_BLOCKED:
+ case CONTACTS_PLOG_TYPE_VIDEO_BLOCKED:
+ return true;
+ default :
+ return false;
+ }
+ break;
+ }
+ case CONTACTS_PLOG_TYPE_SMS_BLOCKED:
+ {
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_SMS_BLOCKED:
+ return true;
+ default :
+ return false;
+ }
+ break;
+ }
+ default:
+ return false;
+ }
+}
+
+bool PhLogUtil::isGroupedbyNumber(const char * preNumber, const char *curNumber)
+{
+ if (!preNumber && curNumber)
+ return false;
+
+ if (preNumber && !curNumber)
+ return false;
+
+ if ( preNumber && curNumber && ( strcmp( preNumber, curNumber) ) )
+ return false;
+
+ return true;
+}
+
+bool PhLogUtil::isGrouped(const PhLogDbMgr::RecordInfo *prevRecordInfo, const PhLogDbMgr::RecordInfo *curRecordInfo)
+{
+ WPRET_VM( NULL == prevRecordInfo, false, "Invalid parameter: prevRecordInfo is NULL" );
+ WPRET_VM( NULL == curRecordInfo, false, "Invalid parameter: curRecordInfo is NULL" );
+
+ if ( !isGroupedbyType( prevRecordInfo->logType, curRecordInfo->logType ))
+ return false;
+ if ( !isGroupedbyNumber(prevRecordInfo->number, curRecordInfo->number))
+ return false;
+ if( !isGroupedbyDate( prevRecordInfo->logTime, curRecordInfo->logTime ))
+ return false;
+
+ return true;
+}
+
+bool PhLogUtil::isVideoCallType(int type)
+{
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VIDEO_OUTGOING:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_REJECT:
+ case CONTACTS_PLOG_TYPE_VIDEO_BLOCKED:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool PhLogUtil::isVoiceCallType(int type)
+{
+ switch (type) {
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VOICE_OUTGOING:
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CONTACTS_PLOG_TYPE_VOICE_REJECT:
+ case CONTACTS_PLOG_TYPE_VOICE_BLOCKED:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
diff --git a/lib-phone/ph-loglist/src/PhLogUtil.h b/lib-phone/ph-loglist/src/PhLogUtil.h
new file mode 100755
index 0000000..b20cdba
--- /dev/null
+++ b/lib-phone/ph-loglist/src/PhLogUtil.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_LOG_UTIL_H_
+#define _PH_LOG_UTIL_H_
+
+#include <string>
+#include "PhLogDbMgr.h"
+
+#define V_(str) dgettext("contacts", str)
+
+class PhLogUtil
+{
+public:
+ PhLogUtil();
+ virtual ~PhLogUtil();
+
+ static Evas_Object* getLogTypeIcon(Evas_Object *parent, int log_type);
+ static std::string getLogTypeImageName(int log_type);
+
+ static const char *getTextOfNumberType(int number_type);
+ static const char* getDisplayText(int personId, const char* displayName, const char* number, const char *descInfo);
+
+ static bool isGrouped(const PhLogDbMgr::RecordInfo *prevRecordInfo, const PhLogDbMgr::RecordInfo *curRecordInfo);
+ static bool isGroupedbyDate(const int time1, const int time2);
+ static bool isGroupedByDesc(const char *prevDesc, const char *curDesc);
+
+ static bool isUnknownNumber(const char *callDesc);
+ static bool isEmergencyNumber(const char *callDesc);
+
+ static bool isMsgType(int type);
+ static bool isVideoCallType(int type);
+ static bool isVoiceCallType(int type);
+ static bool isMissedCallType(int type);
+ static bool isRejectCallType(int type);
+ static bool isOutgoingCallType(int type);
+ static bool isIncomingCallType(int type);
+private:
+ static bool isOutgoingMsgType(int type);
+ static bool isIncomingMsgType(int type);
+ static bool isBlockedType(int type);
+
+ static bool isGroupedbyType(int pre_type, int type);
+ static bool isGroupedbyNumber(const char * preNumber, const char *curNumber);
+};
+
+#endif /* _PH_LOG_UTIL_H_ */
diff --git a/lib-phone/ph-speeddial/.cproject b/lib-phone/ph-speeddial/.cproject
new file mode 100644
index 0000000..a1d7915
--- /dev/null
+++ b/lib-phone/ph-speeddial/.cproject
@@ -0,0 +1,594 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-speeddial" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.so.debug">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug.1901856276" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.109029664" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder autoBuildTarget="all" buildPath="${workspace_loc:/ph-speeddial}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.33649487" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1405004172" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1950179025" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.315623720" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.1861914823" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1074302357" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.1760981851" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1951899281" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1138204775" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1198911347" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc/app-assist}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/dbus}&quot;"/>
+ <listOptionValue builtIn="false" value="../../../app-assist-efl/inc"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1703854218" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.preprocessor.def.1422240551" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ <listOptionValue builtIn="false" value="TIZEN_DEBUG_ENABLE"/>
+ <listOptionValue builtIn="false" value="_SDK_BUILD"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.other.other.1518675757" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++0x" valueType="string"/>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.2136307221"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.560868363" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1466654101" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.1448906718" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.790106586" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.2088959274" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.305788398" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1437660569" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1449885404" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.1143175968" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <option id="gnu.c.compiler.option.preprocessor.def.symbols.556123847" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.1271839318"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.187306255" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1746596689" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1561214539" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.1602429789" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.487061050" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1725268383" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/Debug}&quot;"/>
+ <listOptionValue builtIn="false" value="../../../app-assist-efl/Debug"/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.1672653320" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="common"/>
+ <listOptionValue builtIn="false" value="ph-common"/>
+ <listOptionValue builtIn="false" value="carriermatch"/>
+ <listOptionValue builtIn="false" srcPrefixMapping="" srcRootPath="" value="app-assist-efl"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2001966770" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1663226854" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1653697587" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.854294349" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.914715388" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.730258204" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1802661538" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.2114540036" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.945547352" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067.1970268669" name="/" resourcePath="dbus">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug.1698842383" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.debug" unusedChildren="">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1862062100" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.1405004172"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1950179025">
+ <option id="gnu.cpp.compiler.option.include.paths.1862024141" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/carriermatch/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/ph-common/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/dbus}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.801747878" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.2055251519"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.1212492831"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.1127111318"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.536892725"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.983250407"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.328190824"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.677325310"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.864011291"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1322073362.700307932"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288">
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1235218917" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1563160697"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1071647721"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.769788277"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1030493901"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1783671564"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.997359349"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.705477442"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.65243218"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1075796817.1155268849"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.578327765" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1746596689"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1274254929" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1561214539"/>
+ <tool id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1226503116" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1663226854">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1421785689" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.1714536879" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.730258204"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.226210515" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp.1802661538"/>
+ <tool id="org.tizen.nativecore.tool.ast.1435515500" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast.2114540036"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.981231587" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp.945547352"/>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1245617004" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler.854294349"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.668555117" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler.914715388"/>
+ </toolChain>
+ </folderInfo>
+ <fileInfo id="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067.1505275290" name="dbus_async_base.c" rcbsApplicability="disable" resourcePath="dbus/dbus_async_base.c" toolsToInvoke="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227">
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288">
+ <option id="gnu.c.compiler.option.include.paths.699057084" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/app-assist-efl/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/common/inc}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.726109033" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.261590111"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1451193473"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1132199515"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1591402278"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.62950640"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1833409931"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.2031417097"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.2039087771"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1097643191"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.569597624"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1348198631"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.1341746581"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.317438633"/>
+ <inputType id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.749891288.2082759227.377523416"/>
+ </tool>
+ </fileInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="dbus"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="ph-speeddial" buildArtefactType="org.tizen.nativecore.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.sharedLib" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.so.release">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.so.release.2103970634" name="Tizen Core Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.so.release">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.482636569" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder buildPath="${workspace_loc:/ph-speeddial}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1168087568" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.582015912" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.2112780933" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.1070303096" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="sbi.gnu.cpp.compiler.option.debugging.level.core.1116646323" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.cpp.compiler.option.misc.pic.core.983700984" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.583665033" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1528573108" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.527401068" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1695246603" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.269168654" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.387448962"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1176017145" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.631239000" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1093071292" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option id="sbi.gnu.c.compiler.option.debugging.level.core.577917793" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core"/>
+ <option defaultValue="true" id="sbi.gnu.c.compiler.option.misc.pic.core.1659273903" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.1632820987" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="mobile-2.3-emulator.core_llvm34.i386.core.sharedLib"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1999072555" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SDK_INSTALL_PATH}/library&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/AL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/curl&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0/json-glib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libexif&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-manager&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1884899962" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-fvisibility=hidden"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1481984696" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.947209727" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ </option>
+ <inputType id="sbi.gnu.c.compiler.tizen.inputType.443814160"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1326071906" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1440071815" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.759705633" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.linker.option.shared_flag.core.419497209" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1194318619" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="-target i386-tizen-linux-gnueabi -gcc-toolchain ${SDK_INSTALL_PATH}/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Xlinker --as-needed"/>
+ <listOptionValue builtIn="false" value=""/>
+ <listOptionValue builtIn="false" value="-lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+ <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1675585394" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1090659610" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1451815898" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.967540411" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.555891162" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1519348535" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.881350209" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1758335872" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.139286310" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.295723611" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="ph-speeddial.org.tizen.nativecore.target.sbi.gcc45.so.738986982" name="Tizen Core Shared Library" projectType="org.tizen.nativecore.target.sbi.gcc45.so"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.release.1383355163">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.so.debug.215597067">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.tizen.nativecommon.TizenGCCManagedMakePerProjectProfileCPP"/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="org.tizen.tizen.nativeapp.projectInfo" version="1.0.0"/>
+ <storageModule moduleId="refreshScope" versionNumber="2">
+ <configuration configurationName="Release">
+ <resource resourceType="PROJECT" workspacePath="/ph-speeddial"/>
+ </configuration>
+ <configuration configurationName="Debug">
+ <resource resourceType="PROJECT" workspacePath="/ph-speeddial"/>
+ </configuration>
+ </storageModule>
+</cproject>
diff --git a/lib-phone/ph-speeddial/.project b/lib-phone/ph-speeddial/.project
new file mode 100644
index 0000000..b926413
--- /dev/null
+++ b/lib-phone/ph-speeddial/.project
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ph-speeddial</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.nativecore.apichecker.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ <nature>org.tizen.nativecore.apichecker.core.tizenCppNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1413282659403</id>
+ <name></name>
+ <type>26</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/lib-phone/ph-speeddial/.tproject b/lib-phone/ph-speeddial/.tproject
new file mode 100644
index 0000000..f1cc1fd
--- /dev/null
+++ b/lib-phone/ph-speeddial/.tproject
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+ <platforms>
+ <platform>
+ <name>mobile-2.3</name>
+ </platform>
+ </platforms>
+ <package>
+ <blacklist/>
+ </package>
+</tproject>
diff --git a/lib-phone/ph-speeddial/CMakeLists.txt b/lib-phone/ph-speeddial/CMakeLists.txt
new file mode 100755
index 0000000..c8f4fbd
--- /dev/null
+++ b/lib-phone/ph-speeddial/CMakeLists.txt
@@ -0,0 +1,23 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ph-speeddial C CXX)
+
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/lib-common/inc
+ ${CMAKE_SOURCE_DIR}/app-assist-efl/inc
+ ${CMAKE_SOURCE_DIR}/lib-phone/ph-common/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/res/edje
+)
+
+FILE(GLOB SRCS "src/*.cpp")
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${TIZEN_PKGS_LDFLAGS}
+ "app-assist-efl"
+ "contacts-common"
+ "ph-common"
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} ph-speeddial.edj)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_APP_LIB_DIR})
+
+ADD_SUBDIRECTORY(res/edje)
diff --git a/lib-phone/ph-speeddial/inc/PhSpeedDialItem.h b/lib-phone/ph-speeddial/inc/PhSpeedDialItem.h
new file mode 100644
index 0000000..b1bb217
--- /dev/null
+++ b/lib-phone/ph-speeddial/inc/PhSpeedDialItem.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_SPEED_DIAL_ITEM_H_
+#define _PH_SPEED_DIAL_ITEM_H_
+
+#include <app_control.h>
+#include <contacts.h>
+#include "WControl.h"
+
+class PhSpeedDialItem : public WControl
+{
+public:
+ /**
+ * @brief Create speed dial settings item.
+ * @param[in] number Speed dial dialer number (1-9)
+ */
+ PhSpeedDialItem(int number);
+ ~PhSpeedDialItem();
+
+ /**
+ * @brief Set speed dial item data.
+ * @param[in] record Speed dial record to fetch the data from
+ */
+ void setData(contacts_record_h record);
+
+private:
+ Evas_Object *onCreate(Evas_Object *parent, void *param);
+ Evas_Object *createAddButton(Evas_Object *parent);
+ Evas_Object *createDeleteButton(Evas_Object *parent);
+
+ void setEmptyLayout(Evas_Object *layout);
+ void setLayoutData(Evas_Object *layout, contacts_record_h record);
+ void fetchData();
+ void closeChooser();
+
+ static void onPickResult(app_control_h request, app_control_h reply,
+ app_control_result_e result, void *data);
+ static void onItemPressed(void *data, Evas_Object *obj, void *event_info);
+ static void onDeletePressed(void *data, Evas_Object *obj, void *event_info);
+
+ int m_Number;
+ app_control_h m_Chooser;
+};
+
+#endif /* _PH_SPEED_DIAL_ITEM_H_ */
diff --git a/lib-phone/ph-speeddial/inc/PhSpeedDialView.h b/lib-phone/ph-speeddial/inc/PhSpeedDialView.h
new file mode 100644
index 0000000..242dc42
--- /dev/null
+++ b/lib-phone/ph-speeddial/inc/PhSpeedDialView.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_SPEED_DIAL_VIEW_H_
+#define _PH_SPEED_DIAL_VIEW_H_
+
+#include "WView.h"
+
+#define SPEED_DIAL_ITEM_COUNT 9
+
+class PhSpeedDialItem;
+
+class WAPP_ASSIST_EXPORT PhSpeedDialView : public WView
+{
+public:
+ PhSpeedDialView();
+ ~PhSpeedDialView();
+
+private:
+ Evas_Object *onCreate(Evas_Object *parent, void *param);
+ void onPushed(Elm_Object_Item *item);
+
+ void fillItems();
+ static void onDbChanged(const char *uri, void *data);
+
+ PhSpeedDialItem *m_Items[SPEED_DIAL_ITEM_COUNT];
+};
+
+#endif /* _PH_SPEED_DIAL_VIEW_H_ */
diff --git a/lib-phone/ph-speeddial/res/edje/CMakeLists.txt b/lib-phone/ph-speeddial/res/edje/CMakeLists.txt
new file mode 100644
index 0000000..0e9e422
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/edje/CMakeLists.txt
@@ -0,0 +1,12 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(PH_EDJ_PATH "${CMAKE_APP_RES_DIR}/edje/phone")
+
+ADD_CUSTOM_TARGET(ph-speeddial-layout.edj
+ COMMAND edje_cc ${EDJE_CFLAGS}
+ -id ${CMAKE_CURRENT_SOURCE_DIR}/../images
+ ${CMAKE_CURRENT_SOURCE_DIR}/ph-speeddial-layout.edc ph-speeddial-layout.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ph-speeddial-layout.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} ph-speeddial-layout.edj)
+INSTALL(FILES ph-speeddial-layout.edj DESTINATION ${PH_EDJ_PATH})
diff --git a/lib-phone/ph-speeddial/res/edje/PhSpeedDialLayout.h b/lib-phone/ph-speeddial/res/edje/PhSpeedDialLayout.h
new file mode 100644
index 0000000..60cea7a
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/edje/PhSpeedDialLayout.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_SPEED_DIAL_LAYOUT_H_
+#define _PH_SPEED_DIAL_LAYOUT_H_
+
+#define SPEED_DIAL_LAYOUT_EDJ "ph-speeddial-layout.edj"
+#define GROUP_MAIN_LAYOUT "main_layout"
+#define GROUP_DELETE_BUTTON "delete_button"
+#define GROUP_ITEM_ICON "icon"
+#define GROUP_ITEM_LAYOUT "item"
+
+#define PART_CONTENT "swallow.content"
+#define PART_ICON "swallow.icon"
+#define PART_DELETE_BUTTON "swallow.delete_button"
+#define PART_NAME "text.name"
+
+#define ICON_BG "keypad_speed_dial_bg.png"
+#define ICON_ADD "keypad_speed_dial_add.png"
+#define ICON_DELETE "keypad_speed_dial_del.png"
+
+#endif /* _PH_SPEED_DIAL_LAYOUT_H_ */
diff --git a/lib-phone/ph-speeddial/res/edje/PhSpeedDialLayoutMetrics.h b/lib-phone/ph-speeddial/res/edje/PhSpeedDialLayoutMetrics.h
new file mode 100644
index 0000000..775e9c6
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/edje/PhSpeedDialLayoutMetrics.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _PH_SPEED_DIAL_LAYOUT_METRICS_H_
+#define _PH_SPEED_DIAL_LAYOUT_METRICS_H_
+
+#define VIEW_W 720
+#define VIEW_H 1130
+
+#define LAYOUT_X 32
+#define LAYOUT_Y 70
+
+#define ITEM_W 192
+#define ITEM_H 308
+
+#define ITEM_PAD_X 40
+#define ITEM_PAD_Y 54
+
+#define ICON_SIZE 192
+#define ICON_DELETE_SIZE 60
+
+#define ICON_ADD_SIZE 80
+#define ICON_ADD_POS (ICON_SIZE-ICON_ADD_SIZE)/2
+
+#define TEXT_H 104
+#define TEXT_Y (ICON_SIZE+12)
+#define TEXT_FONT_SIZE 37
+
+#endif /* _PH_SPEED_DIAL_LAYOUT_METRICS_H_ */
diff --git a/lib-phone/ph-speeddial/res/edje/ph-speeddial-layout.edc b/lib-phone/ph-speeddial/res/edje/ph-speeddial-layout.edc
new file mode 100644
index 0000000..4faa017
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/edje/ph-speeddial-layout.edc
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhSpeedDialLayout.h"
+#include "PhSpeedDialLayoutMetrics.h"
+
+styles {
+ style {
+ name: "text_style";
+ base: "font=Tizen:style=Regular font_size="TEXT_FONT_SIZE" color=#000000 align=center wrap=word ellipsis=1.0";
+ }
+}
+
+images {
+ image: ICON_BG COMP;
+}
+
+collections {
+ base_scale: 2.6;
+
+ group {
+ name: GROUP_MAIN_LAYOUT;
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part {
+ name: PART_CONTENT;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ rel1 {
+ relative: LAYOUT_X/VIEW_W LAYOUT_Y/VIEW_H;
+ }
+ rel2 {
+ relative: 1.0-LAYOUT_X/VIEW_W 1.0-LAYOUT_Y/VIEW_H;
+ }
+ }
+ }
+ }
+ }
+
+ group {
+ name: GROUP_ITEM_ICON;
+ images.image: ICON_ADD COMP;
+
+ parts {
+ part {
+ name: "bg";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ color: 61 185 204 127;
+ aspect: 1 1;
+ aspect_preference: SOURCE;
+ image.normal: ICON_BG;
+ }
+ }
+ part {
+ name: "icon";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ aspect: 1 1;
+ aspect_preference: SOURCE;
+ image.normal: ICON_ADD;
+ rel1 {
+ relative: ICON_ADD_POS/ICON_SIZE ICON_ADD_POS/ICON_SIZE;
+ }
+ rel2 {
+ relative: (ICON_ADD_SIZE+ICON_ADD_POS)/ICON_SIZE (ICON_ADD_SIZE+ICON_ADD_POS)/ICON_SIZE;
+ }
+ }
+ }
+ part {
+ name: "mask";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 50;
+ aspect: 1 1;
+ aspect_preference: SOURCE;
+ image.normal: ICON_BG;
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "pressed";
+ signal: "mouse,down,*";
+ source: "*";
+ action: STATE_SET "pressed" 0.0;
+ target: "mask";
+ }
+ program {
+ name: "unpressed";
+ signal: "mouse,up,*";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "mask";
+ }
+ }
+ }
+
+ group {
+ name: GROUP_DELETE_BUTTON;
+ images.image: ICON_DELETE COMP;
+
+ parts {
+ part {
+ name: "icon";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ aspect: 1 1;
+ aspect_preference: SOURCE;
+ image.normal: ICON_DELETE;
+ }
+ }
+ part {
+ name: "mask";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 50;
+ aspect: 1 1;
+ aspect_preference: SOURCE;
+ image.normal: ICON_BG;
+ rel1.to: "icon";
+ rel2.to: "icon";
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "pressed";
+ signal: "mouse,down,*";
+ source: "*";
+ action: STATE_SET "pressed" 0.0;
+ target: "mask";
+ }
+ program {
+ name: "unpressed";
+ signal: "mouse,up,*";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "mask";
+ }
+ }
+ }
+
+ group {
+ name: GROUP_ITEM_LAYOUT;
+
+ parts {
+ part {
+ name: PART_ICON;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: ICON_SIZE/ITEM_W ICON_SIZE/ITEM_H;
+ }
+ }
+ }
+ part {
+ name: PART_DELETE_BUTTON;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: ICON_DELETE_SIZE/ITEM_W ICON_DELETE_SIZE/ITEM_H;
+ }
+ }
+ }
+ part {
+ name: PART_NAME;
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 0.0 TEXT_Y/ITEM_H;
+ }
+ rel2 {
+ relative: 1.0 (TEXT_H+TEXT_Y)/ITEM_H;
+ }
+ text {
+ align: 0.5 0.0;
+ style: "text_style";
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/lib-phone/ph-speeddial/res/images/keypad_speed_dial_add.png b/lib-phone/ph-speeddial/res/images/keypad_speed_dial_add.png
new file mode 100644
index 0000000..39c6a86
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/images/keypad_speed_dial_add.png
Binary files differ
diff --git a/lib-phone/ph-speeddial/res/images/keypad_speed_dial_bg.png b/lib-phone/ph-speeddial/res/images/keypad_speed_dial_bg.png
new file mode 100644
index 0000000..2218a17
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/images/keypad_speed_dial_bg.png
Binary files differ
diff --git a/lib-phone/ph-speeddial/res/images/keypad_speed_dial_del.png b/lib-phone/ph-speeddial/res/images/keypad_speed_dial_del.png
new file mode 100644
index 0000000..38c1786
--- /dev/null
+++ b/lib-phone/ph-speeddial/res/images/keypad_speed_dial_del.png
Binary files differ
diff --git a/lib-phone/ph-speeddial/src/PhSpeedDialItem.cpp b/lib-phone/ph-speeddial/src/PhSpeedDialItem.cpp
new file mode 100644
index 0000000..f8e6f93
--- /dev/null
+++ b/lib-phone/ph-speeddial/src/PhSpeedDialItem.cpp
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhSpeedDialItem.h"
+#include "PhSpeedDialLayout.h"
+#include "PhCommon.h"
+#include "PhStrings.h"
+
+#include "ContactsAppControl.h"
+#include "ContactsCommon.h"
+#include "ContactsDebug.h"
+#include "ContactsThumbnail.h"
+
+#include <notification.h>
+
+#define TEXT_BUFFER_SIZE 256
+
+namespace
+{
+ const std::string layoutPath = ContactsCommon::getAppEdjePath("phone/" SPEED_DIAL_LAYOUT_EDJ);
+}
+
+PhSpeedDialItem::PhSpeedDialItem(int number)
+ : m_Number(number), m_Chooser(nullptr)
+{
+}
+
+PhSpeedDialItem::~PhSpeedDialItem()
+{
+ closeChooser();
+}
+
+void PhSpeedDialItem::setData(contacts_record_h record)
+{
+ if (record) {
+ setLayoutData(getEvasObj(), record);
+ } else {
+ setEmptyLayout(getEvasObj());
+ }
+}
+
+Evas_Object *PhSpeedDialItem::onCreate(Evas_Object *parent, void *param)
+{
+ Evas_Object *layout = elm_layout_add(parent);
+ elm_layout_file_set(layout, layoutPath.c_str(), GROUP_ITEM_LAYOUT);
+ return layout;
+}
+
+Evas_Object *PhSpeedDialItem::createAddButton(Evas_Object *parent)
+{
+ Evas_Object *button = elm_image_add(parent);
+ elm_image_file_set(button, layoutPath.c_str(), GROUP_ITEM_ICON);
+ evas_object_smart_callback_add(button, "clicked",
+ &PhSpeedDialItem::onItemPressed, this);
+
+ return button;
+}
+
+Evas_Object *PhSpeedDialItem::createDeleteButton(Evas_Object *parent)
+{
+ Evas_Object *button = elm_image_add(parent);
+ elm_image_file_set(button, layoutPath.c_str(), GROUP_DELETE_BUTTON);
+ evas_object_smart_callback_add(button, "clicked",
+ &PhSpeedDialItem::onDeletePressed, this);
+
+ return button;
+}
+
+void PhSpeedDialItem::setEmptyLayout(Evas_Object *layout)
+{
+ elm_object_part_content_set(layout, PART_ICON, createAddButton(layout));
+ elm_object_part_content_set(layout, PART_DELETE_BUTTON, nullptr);
+
+ char buffer[TEXT_BUFFER_SIZE];
+ snprintf(buffer, sizeof(buffer), "%d", m_Number);
+ elm_object_part_text_set(layout, PART_NAME, buffer);
+}
+
+void PhSpeedDialItem::setLayoutData(Evas_Object *layout, contacts_record_h record)
+{
+ char *name = nullptr;
+ char *imagePath = nullptr;
+
+ contacts_record_get_str_p(record, _contacts_speeddial.display_name, &name);
+ contacts_record_get_str_p(record, _contacts_speeddial.image_thumbnail_path, &imagePath);
+
+ elm_object_part_content_set(layout, PART_ICON, createThumbnail(layout, THUMBNAIL_240, imagePath));
+ elm_object_part_content_set(layout, PART_DELETE_BUTTON, createDeleteButton(layout));
+
+ char buffer[TEXT_BUFFER_SIZE];
+ snprintf(buffer, sizeof(buffer), "%d. %s", m_Number, name);
+ elm_object_part_text_set(layout, PART_NAME, buffer);
+}
+
+void PhSpeedDialItem::fetchData()
+{
+ contacts_record_h record = nullptr;
+ contacts_db_get_record(_contacts_speeddial._uri, m_Number, &record);
+
+ setData(record);
+ contacts_record_destroy(record, true);
+}
+
+void PhSpeedDialItem::closeChooser()
+{
+ if (m_Chooser) {
+ app_control_send_terminate_request(m_Chooser);
+ app_control_destroy(m_Chooser);
+ m_Chooser = nullptr;
+ }
+}
+
+void PhSpeedDialItem::onPickResult(app_control_h request, app_control_h reply,
+ app_control_result_e result, void *data)
+{
+ PhSpeedDialItem *item = (PhSpeedDialItem*) data;
+
+ char **numberIds = nullptr;
+ int count = 0;
+ int err = app_control_get_extra_data_array(reply, APP_CONTROL_DATA_SELECTED, &numberIds, &count);
+ WPRET_M(err != APP_CONTROL_ERROR_NONE, "app_control_get_extra_data() failed(%d)", err);
+
+ if (numberIds && numberIds[0]) {
+ int numberId = atoi(numberIds[0]);
+
+ if (PhCommon::addSpeedDialNumber(item->m_Number, numberId)) {
+ item->fetchData();
+ } else {
+ notification_status_message_post(PAT_("IDS_PB_POP_ALREADY_EXISTS_LC"));
+ }
+ }
+
+ for (int i = 0; i < count; ++i) {
+ free(numberIds[i]);
+ }
+ free(numberIds);
+}
+
+void PhSpeedDialItem::onItemPressed(void *data, Evas_Object *obj, void *event_info)
+{
+ PhSpeedDialItem *item = (PhSpeedDialItem*) data;
+ item->closeChooser();
+
+ int err = launchContactPick(APP_CONTROL_DATA_SELECTION_MODE_SINGLE, APP_CONTROL_DATA_TYPE_PHONE,
+ &PhSpeedDialItem::onPickResult, data, true, &item->m_Chooser);
+ WPWARN(err != APP_CONTROL_ERROR_NONE, "launchContactPick() failed(%d)", err);
+}
+
+void PhSpeedDialItem::onDeletePressed(void *data, Evas_Object *obj, void *event_info)
+{
+ PhSpeedDialItem *item = (PhSpeedDialItem*) data;
+
+ int err = contacts_db_delete_record(_contacts_speeddial._uri, item->m_Number);
+ WPRET_M(err != CONTACTS_ERROR_NONE, "contacts_db_delete_record() failed(%d)", err);
+ item->setEmptyLayout(item->getEvasObj());
+
+ char buffer[TEXT_BUFFER_SIZE];
+ snprintf(buffer, sizeof(buffer), PAT_(PH_KPD_TPOP_SPEED_DIAL_NUMBER_PD_REMOVED), item->m_Number);
+ notification_status_message_post(buffer);
+}
diff --git a/lib-phone/ph-speeddial/src/PhSpeedDialView.cpp b/lib-phone/ph-speeddial/src/PhSpeedDialView.cpp
new file mode 100644
index 0000000..0bad8cc
--- /dev/null
+++ b/lib-phone/ph-speeddial/src/PhSpeedDialView.cpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "PhSpeedDialView.h"
+#include "PhSpeedDialItem.h"
+#include "PhSpeedDialLayout.h"
+#include "PhSpeedDialLayoutMetrics.h"
+
+#include "ContactsCommon.h"
+#include "ContactsDebug.h"
+#include "ContactsUtils.h"
+
+#define ITEM_ROWS 3
+#define ITEM_COLS SPEED_DIAL_ITEM_COUNT / ITEM_ROWS
+
+PhSpeedDialView::PhSpeedDialView()
+ : m_Items{nullptr}
+{
+ contacts_db_add_changed_cb(_contacts_speeddial._uri,
+ &PhSpeedDialView::onDbChanged, this);
+ contacts_db_add_changed_cb(_contacts_contact._uri,
+ &PhSpeedDialView::onDbChanged, this);
+}
+
+PhSpeedDialView::~PhSpeedDialView()
+{
+ contacts_db_remove_changed_cb(_contacts_speeddial._uri,
+ &PhSpeedDialView::onDbChanged, this);
+ contacts_db_remove_changed_cb(_contacts_contact._uri,
+ &PhSpeedDialView::onDbChanged, this);
+}
+
+Evas_Object *PhSpeedDialView::onCreate(Evas_Object *parent, void *param)
+{
+ Evas_Object *layout = elm_layout_add(parent);
+ elm_layout_file_set(layout, ContactsCommon::getAppEdjePath("phone/" SPEED_DIAL_LAYOUT_EDJ).c_str(), GROUP_MAIN_LAYOUT);
+
+ Evas_Object *table = elm_table_add(layout);
+ elm_object_part_content_set(layout, PART_CONTENT, table);
+ elm_table_homogeneous_set(table, EINA_TRUE);
+ elm_table_padding_set(table,
+ ContactsCommon::getScaledWidth(ITEM_PAD_X),
+ ContactsCommon::getScaledHeight(ITEM_PAD_Y));
+
+ for (int i = 0, k = 0; i < ITEM_ROWS; ++i) {
+ for (int j = 0; j < ITEM_COLS; ++j, ++k) {
+ m_Items[k] = new PhSpeedDialItem(k + 1);
+ m_Items[k]->create(table, nullptr);
+ Evas_Object *item = m_Items[k]->getEvasObj();
+
+ evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_table_pack(table, item, j, i, 1, 1);
+ evas_object_show(item);
+ }
+ }
+ fillItems();
+
+ return layout;
+}
+
+void PhSpeedDialView::onPushed(Elm_Object_Item *item)
+{
+ elm_object_item_domain_translatable_part_text_set(item, "elm.text.title",
+ PACKAGE, "IDS_KPD_OPT_SPEED_DIAL_SETTINGS_ABB2");
+}
+
+void PhSpeedDialView::fillItems()
+{
+ contacts_list_h list = nullptr;
+ contacts_db_get_all_records(_contacts_speeddial._uri, 0, 0, &list);
+
+ contacts_record_h records[SPEED_DIAL_ITEM_COUNT] = { nullptr };
+ contacts_record_h record = nullptr;
+ CONTACTS_LIST_FOREACH(list, record) {
+ int number = 0;
+ contacts_record_get_int(record, _contacts_speeddial.speeddial_number, &number);
+ if (number > 0 && number <= SPEED_DIAL_ITEM_COUNT) {
+ records[number - 1] = record;
+ }
+ }
+
+ for (int i = 0; i < SPEED_DIAL_ITEM_COUNT; ++i) {
+ m_Items[i]->setData(records[i]);
+ }
+
+ contacts_list_destroy(list, false);
+}
+
+void PhSpeedDialView::onDbChanged(const char *uri, void *data)
+{
+ PhSpeedDialView *view = (PhSpeedDialView*) data;
+ view->fillItems();
+}