Remove build dependencies on profile 43/116443/3 accepted/tizen_common accepted/tizen_ivi accepted/tizen_mobile accepted/tizen_tv accepted/tizen_wearable accepted/tizen/common/20170302.151618 accepted/tizen/ivi/20170302.121745 accepted/tizen/mobile/20170302.121538 accepted/tizen/tv/20170302.121646 accepted/tizen/unified/20170309.033642 accepted/tizen/wearable/20170302.121736 submit/tizen/20170302.070636 submit/tizen_unified/20170308.100409
authorpr.jung <pr.jung@samsung.com>
Fri, 24 Feb 2017 09:07:14 +0000 (18:07 +0900)
committerpr.jung <pr.jung@samsung.com>
Fri, 24 Feb 2017 11:02:48 +0000 (20:02 +0900)
- Remove build dependencies of check.c
- Check the profile on runtime

Change-Id: I256fffa813091a49877d18e936e77c62854e0fef
Signed-off-by: pr.jung <pr.jung@samsung.com>
common/src/check.c [deleted file]
mobile/src/check.c [deleted file]
src/check.c [new file with mode: 0644]
src/feedback.c
src/parser.c
src/profiles.h
src/sound.c
src/vibrator.c
wearable/src/check.c [deleted file]

diff --git a/common/src/check.c b/common/src/check.c
deleted file mode 100644 (file)
index f17e825..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * libfeedback
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * 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 <stdio.h>
-
-#include "feedback.h"
-#include "profiles.h"
-#include "log.h"
-
-
-static const char *common_str_type[] = {
-       "FEEDBACK_TYPE_NONE",
-       "FEEDBACK_TYPE_SOUND",
-       "FEEDBACK_TYPE_VIBRATION",
-};
-
-static const char *common_str_pattern[] = {
-       "FEEDBACK_PATTERN_TAP",
-       "FEEDBACK_PATTERN_SIP",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_KEY0",
-       "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_KEY_SHARP",
-       "FEEDBACK_PATTERN_KEY_BACK",
-       "FEEDBACK_PATTERN_HOLD",
-       "",
-       "FEEDBACK_PATTERN_HW_TAP",
-       "FEEDBACK_PATTERN_HW_HOLD",
-
-       "FEEDBACK_PATTERN_MESSAGE",
-       "",
-       "FEEDBACK_PATTERN_EMAIL",
-       "",
-       "FEEDBACK_PATTERN_WAKEUP",
-       "",
-       "FEEDBACK_PATTERN_SCHEDULE",
-       "",
-       "FEEDBACK_PATTERN_TIMER",
-       "",
-       "FEEDBACK_PATTERN_GENERAL",
-       "",
-       "",
-
-       "FEEDBACK_PATTERN_POWERON",
-       "FEEDBACK_PATTERN_POWEROFF",
-       "FEEDBACK_PATTERN_CHARGERCONN",
-       "",
-       "FEEDBACK_PATTERN_CHARGING_ERROR",
-       "",
-       "FEEDBACK_PATTERN_FULLCHARGED",
-       "",
-       "FEEDBACK_PATTERN_LOWBATT",
-       "",
-       "FEEDBACK_PATTERN_LOCK",
-       "FEEDBACK_PATTERN_UNLOCK",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_VIBRATION_ON",
-       "FEEDBACK_PATTERN_SILENT_OFF",
-       "FEEDBACK_PATTERN_BT_CONNECTED",
-       "FEEDBACK_PATTERN_BT_DISCONNECTED",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_LIST_REORDER",
-       "FEEDBACK_PATTERN_LIST_SLIDER",
-       "FEEDBACK_PATTERN_VOLUME_KEY",
-
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-};
-
-static bool common_get_always_alert_case(int type, int pattern)
-{
-       switch (pattern) {
-       case FEEDBACK_PATTERN_SIP:
-       case FEEDBACK_PATTERN_TIMER:
-               if (CHECK_VIBRATION(type))
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_WAKEUP:
-               return true;
-       default:
-               break;
-       }
-       return false;
-}
-
-static bool common_get_always_off_case(int type, int pattern)
-{
-       switch (pattern) {
-       case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_SIP:
-       case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
-               if (CHECK_SOUND(type) && !is_touch_sndstatus())
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
-               if (CHECK_SOUND(type) && !is_keytone_sndstatus())
-                       return true;
-               break;
-       default:
-               break;
-       }
-       return false;
-}
-
-static int common_get_strength_type(int type, int pattern)
-{
-       if (CHECK_SOUND(type)) {
-               if (pattern == FEEDBACK_PATTERN_TAP)
-                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
-               else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
-                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
-               else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
-                       return VOLUME_TYPE_RINGTONE;
-               else
-                       return VOLUME_TYPE_SYSTEM;
-       } else if (CHECK_VIBRATION(type)) {
-               return DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
-       }
-
-       return -EINVAL;
-}
-
-static const struct profile_ops common_profile_ops = {
-       .profile               = "common",
-       .get_always_alert_case = common_get_always_alert_case,
-       .get_always_off_case   = common_get_always_off_case,
-       .get_strength_type     = common_get_strength_type,
-       .max_type              = FEEDBACK_TYPE_END,
-       .max_pattern           = FEEDBACK_PATTERN_END,
-       .str_type              = common_str_type,
-       .str_pattern           = common_str_pattern,
-};
-
-PROFILE_OPS_REGISTER(&common_profile_ops);
diff --git a/mobile/src/check.c b/mobile/src/check.c
deleted file mode 100644 (file)
index 36f6a42..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * libfeedback
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * 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 <stdio.h>
-#include <vconf.h>
-
-#include "feedback.h"
-#include "feedback-ids-internal.h"
-#include "profiles.h"
-#include "log.h"
-
-/* Temporary keys */
-#ifndef VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL
-#define VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL "db/setting/sound/vibrate_when_notification"
-#endif
-#ifndef VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL
-#define VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL "db/setting/sound/haptic_feedback_on"
-#endif
-
-
-static const char *mobile_str_type[] = {
-       "FEEDBACK_TYPE_NONE",
-       "FEEDBACK_TYPE_SOUND",
-       "FEEDBACK_TYPE_VIBRATION",
-};
-
-static const char *mobile_str_pattern[] = {
-       "FEEDBACK_PATTERN_TAP",
-       "FEEDBACK_PATTERN_SIP",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_KEY0",
-       "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_KEY_SHARP",
-       "FEEDBACK_PATTERN_KEY_BACK",
-       "FEEDBACK_PATTERN_HOLD",
-       "",
-       "FEEDBACK_PATTERN_HW_TAP",
-       "FEEDBACK_PATTERN_HW_HOLD",
-
-       "FEEDBACK_PATTERN_MESSAGE",
-       "FEEDBACK_PATTERN_MESSAGE_ON_CALL",
-       "FEEDBACK_PATTERN_EMAIL",
-       "FEEDBACK_PATTERN_EMAIL_ON_CALL",
-       "FEEDBACK_PATTERN_WAKEUP",
-       "FEEDBACK_PATTERN_WAKEUP_ON_CALL",
-       "FEEDBACK_PATTERN_SCHEDULE",
-       "FEEDBACK_PATTERN_SCHEDULE_ON_CALL",
-       "FEEDBACK_PATTERN_TIMER",
-       "FEEDBACK_PATTERN_TIMER_ON_CALL",
-       "FEEDBACK_PATTERN_GENERAL",
-       "FEEDBACK_PATTERN_GENERAL_ON_CALL",
-       "",
-
-       "FEEDBACK_PATTERN_POWERON",
-       "FEEDBACK_PATTERN_POWEROFF",
-       "FEEDBACK_PATTERN_CHARGERCONN",
-       "FEEDBACK_PATTERN_CHARGERCONN_ON_CALL",
-       "FEEDBACK_PATTERN_CHARGING_ERROR",
-       "FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL",
-       "FEEDBACK_PATTERN_FULLCHARGED",
-       "FEEDBACK_PATTERN_FULLCHARGED_ON_CALL",
-       "FEEDBACK_PATTERN_LOWBATT",
-       "FEEDBACK_PATTERN_LOWBATT_ON_CALL",
-       "FEEDBACK_PATTERN_LOCK",
-       "FEEDBACK_PATTERN_UNLOCK",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_OUTGOING_CALL",
-       "",
-       "FEEDBACK_PATTERN_VIBRATION_ON",
-       "FEEDBACK_PATTERN_SILENT_OFF",
-       "FEEDBACK_PATTERN_BT_CONNECTED",
-       "FEEDBACK_PATTERN_BT_DISCONNECTED",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SCREEN_CAPTURE",
-       "FEEDBACK_PATTERN_LIST_REORDER",
-       "FEEDBACK_PATTERN_LIST_SLIDER",
-       "FEEDBACK_PATTERN_VOLUME_KEY",
-       "",
-       "",
-
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SEND_SOS_MESSAGE",
-       "FEEDBACK_PATTERN_RINGER",
-       "FEEDBACK_PATTERN_NOTIFICATION",
-       "FEEDBACK_PATTERN_INFO",
-       "FEEDBACK_PATTERN_WARNING",
-       "FEEDBACK_PATTERN_ERROR",
-       "FEEDBACK_PATTERN_EMERGENCY",
-};
-
-static int callstatus;
-static int lock_sndstatus;
-static int camerastatus;
-static int shutter_sndstatus;
-static int noti_vibstatus;
-static int vib_level;
-static int noti_level;
-static int feedbackstatus;
-
-//LCOV_EXCL_START Not called Callback
-static void feedback_callstatus_cb(keynode_t *key, void* data)
-{
-       callstatus = vconf_keynode_get_int(key);
-}
-
-static void feedback_lock_sndstatus_cb(keynode_t *key, void* data)
-{
-       lock_sndstatus = vconf_keynode_get_bool(key);
-}
-
-static void feedback_camerastatus_cb(keynode_t *key, void* data)
-{
-       camerastatus = vconf_keynode_get_int(key);
-}
-
-static void feedback_noti_vibstatus_cb(keynode_t *key, void* data)
-{
-       noti_vibstatus = vconf_keynode_get_bool(key);
-}
-
-static void feedback_vib_cb(keynode_t *key, void* data)
-{
-       vib_level = vconf_keynode_get_int(key);
-}
-
-static void feedback_noti_cb(keynode_t *key, void* data)
-{
-       noti_level = vconf_keynode_get_int(key);
-}
-
-static void feedback_feedbackstatus_cb(keynode_t *key, void* data)
-{
-       feedbackstatus = vconf_keynode_get_bool(key);
-}
-//LCOV_EXCL_STOP
-
-static void mobile_init(void)
-{
-       /* check call status */
-       if (vconf_get_int(VCONFKEY_CALL_STATE, &callstatus) < 0)
-               _W("VCONFKEY_CALL_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &lock_sndstatus) < 0)
-               _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* check camera status */
-       if (vconf_get_int(VCONFKEY_CAMERA_STATE, &camerastatus) < 0)
-               _W("VCONFKEY_CAMERA_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* shutter sound policy */
-       /* This vconf is read just once, because this value is not changed in running time. */
-       if (vconf_get_int(VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY, &shutter_sndstatus) < 0)
-               _W("VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* check vibration status */
-       if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, &noti_vibstatus) < 0)
-               _W("VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* check vib_level */
-       if (vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vib_level) < 0)
-               _W("VCONFKEY_FEEDBACK_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* check noti_level */
-       if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &noti_level) < 0)
-               _W("VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* feedback Init */
-       if (vconf_get_bool(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, &feedbackstatus) < 0)
-               _W("VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
-
-       /* add watch for status value */
-       vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb, NULL);
-}
-
-static void mobile_exit(void)
-{
-       /* remove watch */
-       vconf_ignore_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb);
-}
-
-static bool mobile_get_switched_pattern(int pattern, int *switched)
-{
-       if (!switched)
-               return false;
-
-       if (callstatus == VCONFKEY_CALL_OFF)
-               return false;
-
-       /* in case of call connected or connecting */
-       _D("Call status is connected or connecting."); //LCOV_EXCL_LINE
-       if (pattern == FEEDBACK_PATTERN_MESSAGE)
-               *switched = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_EMAIL)
-               *switched = FEEDBACK_PATTERN_EMAIL_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_WAKEUP)
-               *switched = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_SCHEDULE)
-               *switched = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_TIMER)
-               *switched = FEEDBACK_PATTERN_TIMER_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_GENERAL)
-               *switched = FEEDBACK_PATTERN_GENERAL_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_CHARGERCONN)
-               *switched = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
-               *switched = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_FULLCHARGED)
-               *switched = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_LOWBATT)
-               *switched = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
-       else
-               return false;
-
-       return true;
-}
-
-static bool mobile_is_notification_type(int pattern)
-{
-       switch (pattern) {
-       case FEEDBACK_PATTERN_WAKEUP:
-       case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
-       case FEEDBACK_PATTERN_TIMER:
-       case FEEDBACK_PATTERN_TIMER_ON_CALL:
-       case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
-       case FEEDBACK_PATTERN_SCHEDULE:
-       case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
-       case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
-               return true;
-       }
-       return false;
-}
-
-static int mobile_get_priority(int pattern)
-{
-       return PRIORITY_MIDDLE;
-}
-
-static bool mobile_get_always_alert_case(int type, int pattern)
-{
-       switch (pattern) {
-       case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
-       case FEEDBACK_PATTERN_HOLD:
-               if (CHECK_VIBRATION(type) && feedbackstatus)
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_SIP:
-               if (CHECK_VIBRATION(type))
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_MESSAGE:
-       case FEEDBACK_PATTERN_EMAIL:
-               if (CHECK_VIBRATION(type) && noti_vibstatus)
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_TIMER:
-       case FEEDBACK_PATTERN_TIMER_ON_CALL:
-               if (CHECK_VIBRATION(type))
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_WAKEUP:
-       case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
-               return true;
-       case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
-       case FEEDBACK_PATTERN_EMAIL_ON_CALL:
-       case FEEDBACK_PATTERN_GENERAL_ON_CALL:
-               break;
-       case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
-       case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
-       case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
-               /* no matter sound profile */
-               if (CHECK_VIBRATION(type))
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
-       case FEEDBACK_PATTERN_OUTGOING_CALL:
-               return true;
-       case FEEDBACK_PATTERN_SCREEN_CAPTURE:
-               if (CHECK_SOUND(type) && camerastatus && shutter_sndstatus)
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_RINGER:
-               return true;
-       default:
-               break;
-       }
-       return false;
-}
-
-static bool mobile_get_always_off_case(int type, int pattern)
-{
-       int ret;
-
-       /* check if the state of voice recorder is recording */
-       if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) < 0) {
-               _W("fail to get media sound status, status will be zero"); //LCOV_EXCL_LINE
-               ret = 0;
-       }
-
-       if (CHECK_SOUND(type) && ret == VCONFKEY_RECORDER_STATE_RECORDING) {
-               _D("voice recording status is RECORDING"); //LCOV_EXCL_LINE
-               return true;
-       }
-
-       switch (pattern) {
-       case FEEDBACK_PATTERN_TAP:
-       case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
-               if (CHECK_SOUND(type) && !is_touch_sndstatus())
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
-               if (CHECK_SOUND(type) && !is_keytone_sndstatus())
-                       return true;
-               else if (CHECK_VIBRATION(type) && !feedbackstatus)
-                       return true;
-               break;
-       case FEEDBACK_PATTERN_LOCK:
-       case FEEDBACK_PATTERN_UNLOCK:
-               if (CHECK_SOUND(type) && !lock_sndstatus)
-                       return true;
-               break;
-       default:
-               break;
-       }
-       return false;
-}
-
-static int mobile_get_strength_type(int type, int pattern)
-{
-       if (CHECK_SOUND(type)) {
-               if (pattern == FEEDBACK_PATTERN_TAP)
-                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
-               else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
-                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
-               else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
-                       return VOLUME_TYPE_RINGTONE;
-               else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
-                       return VOLUME_TYPE_FIXED;
-               else
-                       return VOLUME_TYPE_SYSTEM;
-       } else if (CHECK_VIBRATION(type)) {
-               if (pattern >= FEEDBACK_PATTERN_MESSAGE &&
-                   pattern <= FEEDBACK_PATTERN_GENERAL)
-                       return noti_level * HAPTIC_FEEDBACK_STEP;
-               else
-                       return vib_level * HAPTIC_FEEDBACK_STEP;
-       }
-
-       return -EINVAL;
-}
-
-static const struct profile_ops mobile_profile_ops = {
-       .profile               = "mobile",
-       .init                  = mobile_init,
-       .exit                  = mobile_exit,
-       .get_switched_pattern  = mobile_get_switched_pattern,
-       .get_always_alert_case = mobile_get_always_alert_case,
-       .get_always_off_case   = mobile_get_always_off_case,
-       .get_strength_type     = mobile_get_strength_type,
-       .get_priority          = mobile_get_priority,
-       .is_notification_type  = mobile_is_notification_type,
-       .max_type              = FEEDBACK_TYPE_END,
-       .max_pattern           = FEEDBACK_PATTERN_INTERNAL_END,
-       .str_type              = mobile_str_type,
-       .str_pattern           = mobile_str_pattern,
-};
-
-PROFILE_OPS_REGISTER(&mobile_profile_ops);
diff --git a/src/check.c b/src/check.c
new file mode 100644 (file)
index 0000000..bd813f4
--- /dev/null
@@ -0,0 +1,951 @@
+/*
+ * libfeedback
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <vconf.h>
+#include <system_info.h>
+
+#include "feedback.h"
+#include "feedback-ids-internal.h"
+#include "profiles.h"
+#include "log.h"
+
+/* Temporary keys */
+#ifndef VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL
+#define VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL "db/setting/sound/vibrate_when_notification"
+#endif
+#ifndef VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL
+#define VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL "db/setting/sound/haptic_feedback_on"
+#endif
+
+
+static const char *profile_str_type[] = {
+       "FEEDBACK_TYPE_NONE",
+       "FEEDBACK_TYPE_SOUND",
+       "FEEDBACK_TYPE_VIBRATION",
+};
+
+static const char *mobile_str_pattern[] = {
+       "FEEDBACK_PATTERN_TAP",
+       "FEEDBACK_PATTERN_SIP",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_KEY0",
+       "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_KEY_SHARP",
+       "FEEDBACK_PATTERN_KEY_BACK",
+       "FEEDBACK_PATTERN_HOLD",
+       "",
+       "FEEDBACK_PATTERN_HW_TAP",
+       "FEEDBACK_PATTERN_HW_HOLD",
+
+       "FEEDBACK_PATTERN_MESSAGE",
+       "FEEDBACK_PATTERN_MESSAGE_ON_CALL",
+       "FEEDBACK_PATTERN_EMAIL",
+       "FEEDBACK_PATTERN_EMAIL_ON_CALL",
+       "FEEDBACK_PATTERN_WAKEUP",
+       "FEEDBACK_PATTERN_WAKEUP_ON_CALL",
+       "FEEDBACK_PATTERN_SCHEDULE",
+       "FEEDBACK_PATTERN_SCHEDULE_ON_CALL",
+       "FEEDBACK_PATTERN_TIMER",
+       "FEEDBACK_PATTERN_TIMER_ON_CALL",
+       "FEEDBACK_PATTERN_GENERAL",
+       "FEEDBACK_PATTERN_GENERAL_ON_CALL",
+       "",
+
+       "FEEDBACK_PATTERN_POWERON",
+       "FEEDBACK_PATTERN_POWEROFF",
+       "FEEDBACK_PATTERN_CHARGERCONN",
+       "FEEDBACK_PATTERN_CHARGERCONN_ON_CALL",
+       "FEEDBACK_PATTERN_CHARGING_ERROR",
+       "FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL",
+       "FEEDBACK_PATTERN_FULLCHARGED",
+       "FEEDBACK_PATTERN_FULLCHARGED_ON_CALL",
+       "FEEDBACK_PATTERN_LOWBATT",
+       "FEEDBACK_PATTERN_LOWBATT_ON_CALL",
+       "FEEDBACK_PATTERN_LOCK",
+       "FEEDBACK_PATTERN_UNLOCK",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_OUTGOING_CALL",
+       "",
+       "FEEDBACK_PATTERN_VIBRATION_ON",
+       "FEEDBACK_PATTERN_SILENT_OFF",
+       "FEEDBACK_PATTERN_BT_CONNECTED",
+       "FEEDBACK_PATTERN_BT_DISCONNECTED",
+       "",
+       "",
+       "FEEDBACK_PATTERN_SCREEN_CAPTURE",
+       "FEEDBACK_PATTERN_LIST_REORDER",
+       "FEEDBACK_PATTERN_LIST_SLIDER",
+       "FEEDBACK_PATTERN_VOLUME_KEY",
+       "",
+       "",
+
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_SEND_SOS_MESSAGE",
+       "FEEDBACK_PATTERN_RINGER",
+       "FEEDBACK_PATTERN_NOTIFICATION",
+       "FEEDBACK_PATTERN_INFO",
+       "FEEDBACK_PATTERN_WARNING",
+       "FEEDBACK_PATTERN_ERROR",
+       "FEEDBACK_PATTERN_EMERGENCY",
+};
+
+static const char *wearable_str_pattern[] = {
+       "FEEDBACK_PATTERN_TAP",
+       "FEEDBACK_PATTERN_SIP",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_KEY0",
+       "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_KEY_SHARP",
+       "FEEDBACK_PATTERN_KEY_BACK",
+       "FEEDBACK_PATTERN_HOLD",
+       "",
+       "FEEDBACK_PATTERN_HW_TAP",
+       "FEEDBACK_PATTERN_HW_HOLD",
+
+       "FEEDBACK_PATTERN_MESSAGE",
+       "FEEDBACK_PATTERN_MESSAGE_ON_CALL",
+       "FEEDBACK_PATTERN_EMAIL",
+       "FEEDBACK_PATTERN_EMAIL_ON_CALL",
+       "FEEDBACK_PATTERN_WAKEUP",
+       "FEEDBACK_PATTERN_WAKEUP_ON_CALL",
+       "FEEDBACK_PATTERN_SCHEDULE",
+       "FEEDBACK_PATTERN_SCHEDULE_ON_CALL",
+       "FEEDBACK_PATTERN_TIMER",
+       "FEEDBACK_PATTERN_TIMER_ON_CALL",
+       "FEEDBACK_PATTERN_GENERAL",
+       "FEEDBACK_PATTERN_GENERAL_ON_CALL",
+       "",
+
+       "FEEDBACK_PATTERN_POWERON",
+       "FEEDBACK_PATTERN_POWEROFF",
+       "FEEDBACK_PATTERN_CHARGERCONN",
+       "FEEDBACK_PATTERN_CHARGERCONN_ON_CALL",
+       "FEEDBACK_PATTERN_CHARGING_ERROR",
+       "FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL",
+       "FEEDBACK_PATTERN_FULLCHARGED",
+       "FEEDBACK_PATTERN_FULLCHARGED_ON_CALL",
+       "FEEDBACK_PATTERN_LOWBATT",
+       "FEEDBACK_PATTERN_LOWBATT_ON_CALL",
+       "FEEDBACK_PATTERN_LOCK",
+       "FEEDBACK_PATTERN_UNLOCK",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_VIBRATION_ON",
+       "FEEDBACK_PATTERN_SILENT_OFF",
+       "FEEDBACK_PATTERN_BT_CONNECTED",
+       "FEEDBACK_PATTERN_BT_DISCONNECTED",
+       "",
+       "",
+       "FEEDBACK_PATTERN_SCREEN_CAPTURE",
+       "FEEDBACK_PATTERN_LIST_REORDER",
+       "FEEDBACK_PATTERN_LIST_SLIDER",
+       "FEEDBACK_PATTERN_VOLUME_KEY",
+
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_SEND_SOS_MESSAGE",
+       "FEEDBACK_PATTERN_RINGER",
+       "FEEDBACK_PATTERN_NOTIFICATION",
+       "FEEDBACK_PATTERN_INFO",
+       "FEEDBACK_PATTERN_WARNING",
+       "FEEDBACK_PATTERN_ERROR",
+       "FEEDBACK_PATTERN_EMERGENCY",
+};
+
+static const char *common_str_pattern[] = {
+       "FEEDBACK_PATTERN_TAP",
+       "FEEDBACK_PATTERN_SIP",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_KEY0",
+       "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_KEY_SHARP",
+       "FEEDBACK_PATTERN_KEY_BACK",
+       "FEEDBACK_PATTERN_HOLD",
+       "",
+       "FEEDBACK_PATTERN_HW_TAP",
+       "FEEDBACK_PATTERN_HW_HOLD",
+
+       "FEEDBACK_PATTERN_MESSAGE",
+       "",
+       "FEEDBACK_PATTERN_EMAIL",
+       "",
+       "FEEDBACK_PATTERN_WAKEUP",
+       "",
+       "FEEDBACK_PATTERN_SCHEDULE",
+       "",
+       "FEEDBACK_PATTERN_TIMER",
+       "",
+       "FEEDBACK_PATTERN_GENERAL",
+       "",
+       "",
+
+       "FEEDBACK_PATTERN_POWERON",
+       "FEEDBACK_PATTERN_POWEROFF",
+       "FEEDBACK_PATTERN_CHARGERCONN",
+       "",
+       "FEEDBACK_PATTERN_CHARGING_ERROR",
+       "",
+       "FEEDBACK_PATTERN_FULLCHARGED",
+       "",
+       "FEEDBACK_PATTERN_LOWBATT",
+       "",
+       "FEEDBACK_PATTERN_LOCK",
+       "FEEDBACK_PATTERN_UNLOCK",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_VIBRATION_ON",
+       "FEEDBACK_PATTERN_SILENT_OFF",
+       "FEEDBACK_PATTERN_BT_CONNECTED",
+       "FEEDBACK_PATTERN_BT_DISCONNECTED",
+       "",
+       "",
+       "",
+       "FEEDBACK_PATTERN_LIST_REORDER",
+       "FEEDBACK_PATTERN_LIST_SLIDER",
+       "FEEDBACK_PATTERN_VOLUME_KEY",
+
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+};
+
+typedef enum {
+       PROFILE_NONE = -1,
+       PROFILE_MOBILE = 1,
+       PROFILE_WEARABLE = 2,
+       PROFILE_COMMON = 3,
+} profile_e;
+
+static int callstatus;
+static int lock_sndstatus;
+static int camerastatus;
+static int shutter_sndstatus;
+static int noti_vibstatus;
+static int vib_level;
+static int noti_level;
+static int feedbackstatus;
+
+static char *profile_name = NULL;
+
+#define PROFILE                        "tizen.org/feature/profile"
+#define PROFILE_MOBILE_STRING  "mobile"
+#define PROFILE_WEARABLE_STRING        "wearable"
+#define PROFILE_COMMON_STRING  "common"
+
+static profile_e get_profile(void)
+{
+       int ret;
+       int len;
+       char *profile = NULL;
+       static int set = 0;
+
+       if (set != 0)
+               return set;
+
+       ret = system_info_get_platform_string(PROFILE, &profile);
+       if (ret < 0) {
+               _E("Cannot get profile(%d)", ret);
+               return PROFILE_NONE;
+       }
+
+       len = strlen(profile) + 1;
+       if (!strncmp(PROFILE_MOBILE_STRING, profile, len))
+               set = PROFILE_MOBILE;
+       else if (!strncmp(PROFILE_WEARABLE_STRING, profile, len))
+               set = PROFILE_WEARABLE;
+       else
+               set = PROFILE_COMMON;
+
+       free(profile);
+       return set;
+}
+
+static char *profile_get_name()
+{
+       int prof;
+
+       if (profile_name)
+               return profile_name;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE)
+               profile_name = PROFILE_MOBILE_STRING;
+       else if (prof == PROFILE_WEARABLE)
+               profile_name = PROFILE_WEARABLE_STRING;
+       else
+               profile_name = PROFILE_COMMON_STRING;
+
+       return profile_name;
+}
+
+static const char *profile_str_pattern(int pattern)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE)
+               return mobile_str_pattern[pattern];
+       else if (prof == PROFILE_WEARABLE)
+               return wearable_str_pattern[pattern];
+       else
+               return common_str_pattern[pattern];
+
+}
+
+//LCOV_EXCL_START Not called Callback
+static void feedback_callstatus_cb(keynode_t *key, void* data)
+{
+       callstatus = vconf_keynode_get_int(key);
+}
+
+static void feedback_lock_sndstatus_cb(keynode_t *key, void* data)
+{
+       lock_sndstatus = vconf_keynode_get_bool(key);
+}
+
+static void feedback_camerastatus_cb(keynode_t *key, void* data)
+{
+       camerastatus = vconf_keynode_get_int(key);
+}
+
+static void feedback_noti_vibstatus_cb(keynode_t *key, void* data)
+{
+       noti_vibstatus = vconf_keynode_get_bool(key);
+}
+
+static void feedback_vib_cb(keynode_t *key, void* data)
+{
+       vib_level = vconf_keynode_get_int(key);
+}
+
+static void feedback_noti_cb(keynode_t *key, void* data)
+{
+       noti_level = vconf_keynode_get_int(key);
+}
+
+static void feedback_feedbackstatus_cb(keynode_t *key, void* data)
+{
+       feedbackstatus = vconf_keynode_get_bool(key);
+}
+//LCOV_EXCL_STOP
+
+static void profile_init(void)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_COMMON)
+               return;
+       else if (prof == PROFILE_MOBILE) {
+               if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &lock_sndstatus) < 0)
+                       _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
+               vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb, NULL);
+       }
+
+       /* check call status */
+       if (vconf_get_int(VCONFKEY_CALL_STATE, &callstatus) < 0)
+               _W("VCONFKEY_CALL_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* check camera status */
+       if (vconf_get_int(VCONFKEY_CAMERA_STATE, &camerastatus) < 0)
+               _W("VCONFKEY_CAMERA_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* shutter sound policy */
+       /* This vconf is read just once, because this value is not changed in running time. */
+       if (vconf_get_int(VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY, &shutter_sndstatus) < 0)
+               _W("VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* check vibration status */
+       if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, &noti_vibstatus) < 0)
+               _W("VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* check vib_level */
+       if (vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vib_level) < 0)
+               _W("VCONFKEY_FEEDBACK_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* check noti_level */
+       if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &noti_level) < 0)
+               _W("VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* feedback Init */
+       if (vconf_get_bool(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, &feedbackstatus) < 0)
+               _W("VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
+
+       /* add watch for status value */
+       vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb, NULL);
+}
+
+static void profile_exit(void)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_COMMON)
+               return;
+       else if (prof == PROFILE_MOBILE)
+               vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb);
+
+       /* remove watch */
+       vconf_ignore_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb);
+       vconf_ignore_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb);
+}
+
+static bool profile_get_switched_pattern(int pattern, int *switched)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_COMMON)
+               return false;
+
+       if (!switched)
+               return false;
+
+       if (callstatus == VCONFKEY_CALL_OFF)
+               return false;
+
+       /* in case of call connected or connecting */
+       _D("Call status is connected or connecting."); //LCOV_EXCL_LINE
+       if (pattern == FEEDBACK_PATTERN_MESSAGE)
+               *switched = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_EMAIL)
+               *switched = FEEDBACK_PATTERN_EMAIL_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_WAKEUP)
+               *switched = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_SCHEDULE)
+               *switched = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_TIMER)
+               *switched = FEEDBACK_PATTERN_TIMER_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_GENERAL)
+               *switched = FEEDBACK_PATTERN_GENERAL_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_CHARGERCONN)
+               *switched = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
+               *switched = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_FULLCHARGED)
+               *switched = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
+       else if (pattern == FEEDBACK_PATTERN_LOWBATT)
+               *switched = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
+       else
+               return false;
+
+       return true;
+}
+
+static bool mobile_is_notification_type(int pattern)
+{
+       switch (pattern) {
+       case FEEDBACK_PATTERN_WAKEUP:
+       case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
+       case FEEDBACK_PATTERN_TIMER:
+       case FEEDBACK_PATTERN_TIMER_ON_CALL:
+       case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
+       case FEEDBACK_PATTERN_SCHEDULE:
+       case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
+       case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+               return true;
+       }
+       return false;
+}
+
+static bool wearable_is_notification_type(int pattern)
+{
+       switch (pattern) {
+       case FEEDBACK_PATTERN_WAKEUP:
+       case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
+       case FEEDBACK_PATTERN_TIMER:
+       case FEEDBACK_PATTERN_TIMER_ON_CALL:
+               return false;
+       case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
+       case FEEDBACK_PATTERN_SCHEDULE:
+       case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
+       case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+               return true;
+       }
+       return false;
+}
+
+static bool profile_is_notification_type(int pattern)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE)
+               return mobile_is_notification_type(pattern);
+       else if (prof == PROFILE_WEARABLE)
+               return wearable_is_notification_type(pattern);
+       else
+               return false;
+}
+
+static int profile_get_priority(int pattern)
+{
+       return PRIORITY_MIDDLE;
+}
+
+static bool mobile_get_always_alert_case(int type, int pattern)
+{
+       switch (pattern) {
+       case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
+       case FEEDBACK_PATTERN_HOLD:
+               if (CHECK_VIBRATION(type) && feedbackstatus)
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_SIP:
+               if (CHECK_VIBRATION(type))
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_MESSAGE:
+       case FEEDBACK_PATTERN_EMAIL:
+               if (CHECK_VIBRATION(type) && noti_vibstatus)
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_TIMER:
+       case FEEDBACK_PATTERN_TIMER_ON_CALL:
+               if (CHECK_VIBRATION(type))
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_WAKEUP:
+       case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
+               return true;
+       case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
+       case FEEDBACK_PATTERN_EMAIL_ON_CALL:
+       case FEEDBACK_PATTERN_GENERAL_ON_CALL:
+               break;
+       case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
+       case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
+       case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+               /* no matter sound profile */
+               if (CHECK_VIBRATION(type))
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+       case FEEDBACK_PATTERN_OUTGOING_CALL:
+               return true;
+       case FEEDBACK_PATTERN_SCREEN_CAPTURE:
+               if (CHECK_SOUND(type) && camerastatus && shutter_sndstatus)
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_RINGER:
+               return true;
+       default:
+               break;
+       }
+       return false;
+}
+
+static bool wearable_get_always_alert_case(int type, int pattern)
+{
+       if (CHECK_SOUND(type)) {
+               switch (pattern) {
+               case FEEDBACK_PATTERN_WAKEUP:
+               case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
+                       return true;
+               case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
+               case FEEDBACK_PATTERN_EMAIL_ON_CALL:
+               case FEEDBACK_PATTERN_GENERAL_ON_CALL:
+                       break;
+               case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+                       return true;
+               case FEEDBACK_PATTERN_SCREEN_CAPTURE:
+                       if (camerastatus && shutter_sndstatus)
+                               return true;
+                       break;
+               case FEEDBACK_PATTERN_OUTGOING_CALL:
+                       return true;
+               default:
+                       break;
+               }
+       } else if (CHECK_VIBRATION(type)) {
+               switch (pattern) {
+               case FEEDBACK_PATTERN_TAP:
+               case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
+               case FEEDBACK_PATTERN_HOLD:
+                       if (feedbackstatus)
+                               return true;
+                       break;
+               case FEEDBACK_PATTERN_MESSAGE:
+               case FEEDBACK_PATTERN_EMAIL:
+               case FEEDBACK_PATTERN_GENERAL:
+               case FEEDBACK_PATTERN_SCHEDULE:
+                       if (noti_vibstatus)
+                               return true;
+                       break;
+               case FEEDBACK_PATTERN_SIP:
+               case FEEDBACK_PATTERN_TIMER:
+               case FEEDBACK_PATTERN_TIMER_ON_CALL:
+               case FEEDBACK_PATTERN_WAKEUP:
+               case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
+               case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
+               case FEEDBACK_PATTERN_EMAIL_ON_CALL:
+               case FEEDBACK_PATTERN_GENERAL_ON_CALL:
+               case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
+               case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
+               case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+               case FEEDBACK_PATTERN_BT_DISCONNECTED:
+               case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+               case FEEDBACK_PATTERN_OUTGOING_CALL:
+                       return true;
+               default:
+                       break;
+               }
+       }
+       return false;
+}
+
+static bool common_get_always_alert_case(int type, int pattern)
+{
+       switch (pattern) {
+       case FEEDBACK_PATTERN_SIP:
+       case FEEDBACK_PATTERN_TIMER:
+               if (CHECK_VIBRATION(type))
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_WAKEUP:
+               return true;
+       default:
+               break;
+       }
+       return false;
+}
+
+static bool profile_get_always_alert_case(int type, int pattern)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE)
+               return mobile_get_always_alert_case(type, pattern);
+       else if (prof == PROFILE_WEARABLE)
+               return wearable_get_always_alert_case(type, pattern);
+       else
+               return common_get_always_alert_case(type, pattern);
+}
+
+static bool mobile_get_always_off_case(int type, int pattern)
+{
+       int ret;
+
+       /* check if the state of voice recorder is recording */
+       if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) < 0) {
+               _W("fail to get media sound status, status will be zero"); //LCOV_EXCL_LINE
+               ret = 0;
+       }
+
+       if (CHECK_SOUND(type) && ret == VCONFKEY_RECORDER_STATE_RECORDING) {
+               _D("voice recording status is RECORDING"); //LCOV_EXCL_LINE
+               return true;
+       }
+
+       switch (pattern) {
+       case FEEDBACK_PATTERN_TAP:
+       case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
+               if (CHECK_SOUND(type) && !is_touch_sndstatus())
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
+               if (CHECK_SOUND(type) && !is_keytone_sndstatus())
+                       return true;
+               else if (CHECK_VIBRATION(type) && !feedbackstatus)
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_LOCK:
+       case FEEDBACK_PATTERN_UNLOCK:
+               if (CHECK_SOUND(type) && !lock_sndstatus)
+                       return true;
+               break;
+       default:
+               break;
+       }
+       return false;
+}
+
+static bool wearable_is_system_type(int pattern)
+{
+       switch (pattern) {
+       case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_VOLUME_KEY:
+               return true;
+       }
+       return false;
+}
+
+static bool wearable_get_always_off_case(int type, int pattern)
+{
+       int ret;
+
+       if (CHECK_SOUND(type)) {
+               if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
+                   callstatus) {
+                       _W("skip %s sound during call", profile_str_pattern(pattern));
+                       return true;
+               }
+               /* check if the state of voice recorder is recording */
+               if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) == 0 &&
+                   ret == VCONFKEY_RECORDER_STATE_RECORDING) {
+                       _D("voice recording status is RECORDING");
+                       return true;
+               }
+
+               switch (pattern) {
+               case FEEDBACK_PATTERN_TAP:
+               case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
+                       if (!is_touch_sndstatus())
+                               return true;
+                       break;
+               case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
+                       if (!is_keytone_sndstatus())
+                               return true;
+                       break;
+               default:
+                       break;
+               }
+       } else if (CHECK_VIBRATION(type)) {
+               switch (pattern) {
+               case FEEDBACK_PATTERN_TAP:
+               case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
+               case FEEDBACK_PATTERN_HOLD:
+                       if (!feedbackstatus)
+                               return true;
+                       break;
+               default:
+                       break;
+               }
+       }
+       return false;
+}
+
+static bool common_get_always_off_case(int type, int pattern)
+{
+       switch (pattern) {
+       case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_SIP:
+       case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
+               if (CHECK_SOUND(type) && !is_touch_sndstatus())
+                       return true;
+               break;
+       case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
+               if (CHECK_SOUND(type) && !is_keytone_sndstatus())
+                       return true;
+               break;
+       default:
+               break;
+       }
+       return false;
+}
+
+static bool profile_get_always_off_case(int type, int pattern)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE)
+               return mobile_get_always_off_case(type, pattern);
+       else if (prof == PROFILE_WEARABLE)
+               return wearable_get_always_off_case(type, pattern);
+       else
+               return common_get_always_off_case(type, pattern);
+}
+
+static int mobile_get_strength_type(int type, int pattern)
+{
+       if (CHECK_SOUND(type)) {
+               if (pattern == FEEDBACK_PATTERN_TAP)
+                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
+               else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
+                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
+               else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
+                       return VOLUME_TYPE_RINGTONE;
+               else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
+                       return VOLUME_TYPE_FIXED;
+               else
+                       return VOLUME_TYPE_SYSTEM;
+       } else if (CHECK_VIBRATION(type)) {
+               if (pattern >= FEEDBACK_PATTERN_MESSAGE &&
+                   pattern <= FEEDBACK_PATTERN_GENERAL)
+                       return noti_level * HAPTIC_FEEDBACK_STEP;
+               else
+                       return vib_level * HAPTIC_FEEDBACK_STEP;
+       }
+
+       return -EINVAL;
+}
+
+static int wearable_get_strength_type(int type, int pattern)
+{
+       if (CHECK_SOUND(type)) {
+               if (pattern == FEEDBACK_PATTERN_TAP)
+                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
+               else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
+                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
+               else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY || pattern == FEEDBACK_PATTERN_SILENT_OFF)
+                       return VOLUME_TYPE_RINGTONE;
+               else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
+                       return VOLUME_TYPE_FIXED;
+               return VOLUME_TYPE_SYSTEM;
+       } else if (CHECK_VIBRATION(type)) {
+               if (pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) {
+                       _D("use default level");
+                       return DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
+               }
+               /* if call status is ON, vibration magnitude is 20% */
+               if (pattern != FEEDBACK_PATTERN_RINGER &&
+                   (callstatus == VCONFKEY_CALL_VOICE_ACTIVE || callstatus == VCONFKEY_CALL_VIDEO_ACTIVE)) {
+                       _W("force change weak level");
+                       return HAPTIC_FEEDBACK_STEP;
+               }
+               return noti_level * HAPTIC_FEEDBACK_STEP;
+       }
+       return -EINVAL;
+}
+
+static int common_get_strength_type(int type, int pattern)
+{
+       if (CHECK_SOUND(type)) {
+               if (pattern == FEEDBACK_PATTERN_TAP)
+                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
+               else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
+                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
+               else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
+                       return VOLUME_TYPE_RINGTONE;
+               else
+                       return VOLUME_TYPE_SYSTEM;
+       } else if (CHECK_VIBRATION(type)) {
+               return DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
+       }
+
+       return -EINVAL;
+}
+
+static int profile_get_strength_type(int type, int pattern)
+{
+       int prof;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE)
+               return mobile_get_strength_type(type, pattern);
+       else if (prof == PROFILE_WEARABLE)
+               return wearable_get_strength_type(type, pattern);
+       else
+               return common_get_strength_type(type, pattern);
+}
+
+static const struct profile_ops feedback_profile_ops = {
+       .profile               = profile_get_name,
+       .init                  = profile_init,
+       .exit                  = profile_exit,
+       .get_switched_pattern  = profile_get_switched_pattern,
+       .get_always_alert_case = profile_get_always_alert_case,
+       .get_always_off_case   = profile_get_always_off_case,
+       .get_strength_type     = profile_get_strength_type,
+       .get_priority          = profile_get_priority,
+       .is_notification_type  = profile_is_notification_type,
+       .max_type              = FEEDBACK_TYPE_END,
+       .max_pattern           = FEEDBACK_PATTERN_INTERNAL_END,
+       .str_type              = profile_str_type,
+       .str_pattern           = profile_str_pattern,
+};
+
+PROFILE_OPS_REGISTER(&feedback_profile_ops);
index f0ebded..52b9b7f 100644 (file)
@@ -131,7 +131,7 @@ API int feedback_play(feedback_pattern_e pattern)
                result = profile->get_switched_pattern(pattern, &switched);
                if (result) {
                        _W("pattern is changed : (%s) -> (%s)", //LCOV_EXCL_LINE
-                                       profile->str_pattern[pattern], profile->str_pattern[switched]);
+                                       profile->str_pattern(pattern), profile->str_pattern(switched));
                        pattern = switched;
                }
        }
@@ -184,7 +184,7 @@ API int feedback_play_type(feedback_type_e type, feedback_pattern_e pattern)
                result = profile->get_switched_pattern(pattern, &switched);
                if (result) {
                        _W("pattern is changed : (%s) -> (%s)", //LCOV_EXCL_LINE
-                                       profile->str_pattern[pattern], profile->str_pattern[switched]);
+                                       profile->str_pattern(pattern), profile->str_pattern(switched));
                        pattern = switched;
                }
        }
@@ -271,7 +271,7 @@ API int feedback_is_supported_pattern(feedback_type_e type, feedback_pattern_e p
                result = profile->get_switched_pattern(pattern, &switched);
                if (result) {
                        _W("pattern is changed : (%s) -> (%s)", //LCOV_EXCL_LINE
-                                       profile->str_pattern[pattern], profile->str_pattern[switched]);
+                                       profile->str_pattern(pattern), profile->str_pattern(switched));
                        pattern = switched;
                }
        }
@@ -289,7 +289,7 @@ API int feedback_is_supported_pattern(feedback_type_e type, feedback_pattern_e p
        else if (err == -ECOMM || err == -EACCES)
                return FEEDBACK_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE System Error
        else if (err < 0) {
-               _E("fail to invoke is_supported() : pattern(%s)", profile->str_pattern[pattern]); //LCOV_EXCL_LINE
+               _E("fail to invoke is_supported() : pattern(%s)", profile->str_pattern(pattern)); //LCOV_EXCL_LINE
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
@@ -324,7 +324,7 @@ API int feedback_play_type_by_name(char *type, char *pattern)
 
        pattern_max = profile->max_pattern;
        for (epattern = 0; epattern < pattern_max; ++epattern) {
-               if (!strncmp(pattern, profile->str_pattern[epattern], strlen(pattern)))
+               if (!strncmp(pattern, profile->str_pattern(epattern), strlen(pattern)))
                        break;
        }
 
index 3bde6a6..26b0cb9 100644 (file)
@@ -157,15 +157,15 @@ static int load_config(struct parse_result *result, void *user_data)
        value = result->value;
 
        for (i = 0; i < profile->max_pattern; i++) {
-               if (!profile->str_pattern[i])
+               if (!profile->str_pattern(i))
                        continue;
-               if (!MATCH(name, (char *)profile->str_pattern[i]))
+               if (!MATCH(name, (char *)profile->str_pattern(i)))
                        continue;
 
                info->data[i].origin = strdup(value);
                if (!info->data[i].origin)
                        _E("fail to copy %s sound data", //LCOV_EXCL_LINE
-                                       profile->str_pattern[i]);
+                                       profile->str_pattern(i));
                break;
        }
 
index 398b78d..508205b 100644 (file)
@@ -31,7 +31,7 @@ enum priority_level {
 };
 
 struct profile_ops {
-       const char *profile;
+       char *(*profile)(void);
        void (*init) (void);
        void (*exit) (void);
        bool (*get_switched_pattern)(int pattern, int *switched);
@@ -43,7 +43,7 @@ struct profile_ops {
        const int max_type;
        const int max_pattern;
        const char **str_type;
-       const char **str_pattern;
+       const char *(*str_pattern)(int pattern);
 };
 
 #define PROFILE_OPS_REGISTER(ops)      \
index f2e107c..1a5bc35 100644 (file)
@@ -143,7 +143,7 @@ static int sound_play(feedback_pattern_e pattern)
 
        if (sndstatus && profile->get_always_off_case &&
            profile->get_always_off_case(FEEDBACK_TYPE_SOUND, pattern)) {
-               _D("Sound always off condition(pattern %s)", profile->str_pattern[pattern]); //LCOV_EXCL_LINE
+               _D("Sound always off condition(pattern %s)", profile->str_pattern(pattern)); //LCOV_EXCL_LINE
                return 0;
        }
 
@@ -206,7 +206,7 @@ static int sound_get_path(feedback_pattern_e pattern, char *buf, unsigned int bu
        cur_path = get_data(pattern);
        if (!cur_path) {
                _E("This pattern(%s) in sound type is not supported to play",
-                               profile->str_pattern[pattern]);
+                               profile->str_pattern(pattern));
                cur_path = "NULL";
                ret = -ENOENT;
        }
@@ -238,7 +238,7 @@ static int sound_set_path(feedback_pattern_e pattern, char *path)
                sound_info.data[pattern].changed = strdup(path);
 
        _D("The file of pattern(%s) is changed to [%s]",
-                       profile->str_pattern[pattern], path);
+                       profile->str_pattern(pattern), path);
        return 0;
 }
 
index aa0eeaf..94242ed 100644 (file)
@@ -232,7 +232,7 @@ static int vibrator_play(feedback_pattern_e pattern)
        else
                level = DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
 
-       temp = strdup(profile->str_pattern[pattern]);
+       temp = strdup(profile->str_pattern(pattern));
        data = trim_str(temp);
        if (!data) {
                free(temp);
@@ -311,7 +311,7 @@ static int vibrator_is_supported(int pattern, bool *supported)
        }
 
        /* get vibration data */
-       temp = strdup(profile->str_pattern[pattern]);
+       temp = strdup(profile->str_pattern(pattern));
        data = trim_str(temp);
        if (!data) {
                free(temp);
diff --git a/wearable/src/check.c b/wearable/src/check.c
deleted file mode 100644 (file)
index f845be3..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * libfeedback
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * 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 <stdio.h>
-#include <vconf.h>
-
-#include "feedback.h"
-#include "feedback-ids-internal.h"
-#include "profiles.h"
-#include "log.h"
-
-
-static const char *wearable_str_type[] = {
-       "FEEDBACK_TYPE_NONE",
-       "FEEDBACK_TYPE_SOUND",
-       "FEEDBACK_TYPE_VIBRATION",
-};
-
-static const char *wearable_str_pattern[] = {
-       "FEEDBACK_PATTERN_TAP",
-       "FEEDBACK_PATTERN_SIP",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_KEY0",
-       "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_KEY_SHARP",
-       "FEEDBACK_PATTERN_KEY_BACK",
-       "FEEDBACK_PATTERN_HOLD",
-       "",
-       "FEEDBACK_PATTERN_HW_TAP",
-       "FEEDBACK_PATTERN_HW_HOLD",
-
-       "FEEDBACK_PATTERN_MESSAGE",
-       "FEEDBACK_PATTERN_MESSAGE_ON_CALL",
-       "FEEDBACK_PATTERN_EMAIL",
-       "FEEDBACK_PATTERN_EMAIL_ON_CALL",
-       "FEEDBACK_PATTERN_WAKEUP",
-       "FEEDBACK_PATTERN_WAKEUP_ON_CALL",
-       "FEEDBACK_PATTERN_SCHEDULE",
-       "FEEDBACK_PATTERN_SCHEDULE_ON_CALL",
-       "FEEDBACK_PATTERN_TIMER",
-       "FEEDBACK_PATTERN_TIMER_ON_CALL",
-       "FEEDBACK_PATTERN_GENERAL",
-       "FEEDBACK_PATTERN_GENERAL_ON_CALL",
-       "",
-
-       "FEEDBACK_PATTERN_POWERON",
-       "FEEDBACK_PATTERN_POWEROFF",
-       "FEEDBACK_PATTERN_CHARGERCONN",
-       "FEEDBACK_PATTERN_CHARGERCONN_ON_CALL",
-       "FEEDBACK_PATTERN_CHARGING_ERROR",
-       "FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL",
-       "FEEDBACK_PATTERN_FULLCHARGED",
-       "FEEDBACK_PATTERN_FULLCHARGED_ON_CALL",
-       "FEEDBACK_PATTERN_LOWBATT",
-       "FEEDBACK_PATTERN_LOWBATT_ON_CALL",
-       "FEEDBACK_PATTERN_LOCK",
-       "FEEDBACK_PATTERN_UNLOCK",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_VIBRATION_ON",
-       "FEEDBACK_PATTERN_SILENT_OFF",
-       "FEEDBACK_PATTERN_BT_CONNECTED",
-       "FEEDBACK_PATTERN_BT_DISCONNECTED",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SCREEN_CAPTURE",
-       "FEEDBACK_PATTERN_LIST_REORDER",
-       "FEEDBACK_PATTERN_LIST_SLIDER",
-       "FEEDBACK_PATTERN_VOLUME_KEY",
-
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SEND_SOS_MESSAGE",
-       "FEEDBACK_PATTERN_RINGER",
-       "FEEDBACK_PATTERN_NOTIFICATION",
-       "FEEDBACK_PATTERN_INFO",
-       "FEEDBACK_PATTERN_WARNING",
-       "FEEDBACK_PATTERN_ERROR",
-       "FEEDBACK_PATTERN_EMERGENCY",
-};
-
-static int callstatus;
-static int camerastatus;
-static int shutter_sndstatus;
-static int noti_vibstatus;
-static int vib_level;
-static int noti_level;
-static int feedbackstatus;
-
-static void feedback_callstatus_cb(keynode_t *key, void* data)
-{
-       callstatus = vconf_keynode_get_int(key);
-}
-
-static void feedback_camerastatus_cb(keynode_t *key, void* data)
-{
-       camerastatus = vconf_keynode_get_int(key);
-}
-
-static void feedback_noti_vibstatus_cb(keynode_t *key, void* data)
-{
-       noti_vibstatus = vconf_keynode_get_bool(key);
-}
-
-static void feedback_vib_cb(keynode_t *key, void* data)
-{
-       vib_level = vconf_keynode_get_int(key);
-}
-
-static void feedback_noti_cb(keynode_t *key, void* data)
-{
-       noti_level = vconf_keynode_get_int(key);
-}
-
-static void feedback_feedbackstatus_cb(keynode_t *key, void* data)
-{
-       feedbackstatus = vconf_keynode_get_bool(key);
-}
-
-static void wearable_init(void)
-{
-       /* check call status */
-       if (vconf_get_int(VCONFKEY_CALL_STATE, &callstatus) < 0)
-               _W("VCONFKEY_CALL_STATE ==> FAIL!!");
-
-       /* check camera status */
-       if (vconf_get_int(VCONFKEY_CAMERA_STATE, &camerastatus) < 0)
-               _W("VCONFKEY_CAMERA_STATE ==> FAIL!!");
-
-       /* shutter sound policy */
-       /* This vconf is read just once, because this value is not changed in running time. */
-       if (vconf_get_int(VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY, &shutter_sndstatus) < 0)
-               _W("VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY ==> FAIL!!");
-
-       /* check vibration status */
-       if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, &noti_vibstatus) < 0)
-               _W("VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL ==> FAIL!!");
-
-       /* check vib_level */
-       if (vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vib_level) < 0)
-               _W("VCONFKEY_FEEDBACK_VIBRATION_LEVEL_INT ==> FAIL!!");
-
-       /* check noti_level */
-       if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &noti_level) < 0)
-               _W("VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT ==> FAIL!!");
-
-       /* feedback Init */
-       if (vconf_get_bool(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, &feedbackstatus) < 0)
-               _W("VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL ==> FAIL!!");
-
-       /* add watch for status value */
-       vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb, NULL);
-       vconf_notify_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb, NULL);
-}
-
-static void wearable_exit(void)
-{
-       /* remove watch */
-       vconf_ignore_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb);
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb);
-}
-
-static bool wearable_get_switched_pattern(int pattern, int *switched)
-{
-       if (!switched)
-               return false;
-
-       if (callstatus == VCONFKEY_CALL_OFF)
-               return false;
-
-       /* in case of call connected or connecting */
-       _D("Call status is connected or connecting.");
-       if (pattern == FEEDBACK_PATTERN_MESSAGE)
-               *switched = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_EMAIL)
-               *switched = FEEDBACK_PATTERN_EMAIL_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_WAKEUP)
-               *switched = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_SCHEDULE)
-               *switched = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_TIMER)
-               *switched = FEEDBACK_PATTERN_TIMER_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_GENERAL)
-               *switched = FEEDBACK_PATTERN_GENERAL_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_CHARGERCONN)
-               *switched = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
-               *switched = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_FULLCHARGED)
-               *switched = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
-       else if (pattern == FEEDBACK_PATTERN_LOWBATT)
-               *switched = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
-       else
-               return false;
-
-       return true;
-}
-
-static bool wearable_is_notification_type(int pattern)
-{
-       switch (pattern) {
-       case FEEDBACK_PATTERN_WAKEUP:
-       case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
-       case FEEDBACK_PATTERN_TIMER:
-       case FEEDBACK_PATTERN_TIMER_ON_CALL:
-               return false;
-       case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
-       case FEEDBACK_PATTERN_SCHEDULE:
-       case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
-       case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
-               return true;
-       }
-       return false;
-}
-
-static bool wearable_is_system_type(int pattern)
-{
-       switch (pattern) {
-       case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_VOLUME_KEY:
-               return true;
-       }
-       return false;
-}
-
-static int wearable_get_priority(int pattern)
-{
-       return PRIORITY_MIDDLE;
-}
-
-static bool wearable_get_always_alert_case(int type, int pattern)
-{
-       if (CHECK_SOUND(type)) {
-               switch (pattern) {
-               case FEEDBACK_PATTERN_WAKEUP:
-               case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
-                       return true;
-               case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
-               case FEEDBACK_PATTERN_EMAIL_ON_CALL:
-               case FEEDBACK_PATTERN_GENERAL_ON_CALL:
-                       break;
-               case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
-                       return true;
-               case FEEDBACK_PATTERN_SCREEN_CAPTURE:
-                       if (camerastatus && shutter_sndstatus)
-                               return true;
-                       break;
-               case FEEDBACK_PATTERN_OUTGOING_CALL:
-                       return true;
-               default:
-                       break;
-               }
-       } else if (CHECK_VIBRATION(type)) {
-               switch (pattern) {
-               case FEEDBACK_PATTERN_TAP:
-               case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
-               case FEEDBACK_PATTERN_HOLD:
-                       if (feedbackstatus)
-                               return true;
-                       break;
-               case FEEDBACK_PATTERN_MESSAGE:
-               case FEEDBACK_PATTERN_EMAIL:
-               case FEEDBACK_PATTERN_GENERAL:
-               case FEEDBACK_PATTERN_SCHEDULE:
-                       if (noti_vibstatus)
-                               return true;
-                       break;
-               case FEEDBACK_PATTERN_SIP:
-               case FEEDBACK_PATTERN_TIMER:
-               case FEEDBACK_PATTERN_TIMER_ON_CALL:
-               case FEEDBACK_PATTERN_WAKEUP:
-               case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
-               case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
-               case FEEDBACK_PATTERN_EMAIL_ON_CALL:
-               case FEEDBACK_PATTERN_GENERAL_ON_CALL:
-               case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
-               case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
-               case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
-               case FEEDBACK_PATTERN_BT_DISCONNECTED:
-               case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
-               case FEEDBACK_PATTERN_OUTGOING_CALL:
-                       return true;
-               default:
-                       break;
-               }
-       }
-       return false;
-}
-
-static bool wearable_get_always_off_case(int type, int pattern)
-{
-       int ret;
-
-       if (CHECK_SOUND(type)) {
-               if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
-                   callstatus) {
-                       _W("skip %s sound during call", wearable_str_pattern[pattern]);
-                       return true;
-               }
-               /* check if the state of voice recorder is recording */
-               if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) == 0 &&
-                   ret == VCONFKEY_RECORDER_STATE_RECORDING) {
-                       _D("voice recording status is RECORDING");
-                       return true;
-               }
-
-               switch (pattern) {
-               case FEEDBACK_PATTERN_TAP:
-               case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
-                       if (!is_touch_sndstatus())
-                               return true;
-                       break;
-               case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
-                       if (!is_keytone_sndstatus())
-                               return true;
-                       break;
-               default:
-                       break;
-               }
-       } else if (CHECK_VIBRATION(type)) {
-               switch (pattern) {
-               case FEEDBACK_PATTERN_TAP:
-               case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
-               case FEEDBACK_PATTERN_HOLD:
-                       if (!feedbackstatus)
-                               return true;
-                       break;
-               default:
-                       break;
-               }
-       }
-       return false;
-}
-
-static int wearable_get_strength_type(int type, int pattern)
-{
-       if (CHECK_SOUND(type)) {
-               if (pattern == FEEDBACK_PATTERN_TAP)
-                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
-               else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
-                       return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
-               else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY || pattern == FEEDBACK_PATTERN_SILENT_OFF)
-                       return VOLUME_TYPE_RINGTONE;
-               else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
-                       return VOLUME_TYPE_FIXED;
-               return VOLUME_TYPE_SYSTEM;
-       } else if (CHECK_VIBRATION(type)) {
-               if (pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) {
-                       _D("use default level");
-                       return DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
-               }
-               /* if call status is ON, vibration magnitude is 20% */
-               if (pattern != FEEDBACK_PATTERN_RINGER &&
-                   (callstatus == VCONFKEY_CALL_VOICE_ACTIVE || callstatus == VCONFKEY_CALL_VIDEO_ACTIVE)) {
-                       _W("force change weak level");
-                       return HAPTIC_FEEDBACK_STEP;
-               }
-               return noti_level * HAPTIC_FEEDBACK_STEP;
-       }
-       return -EINVAL;
-}
-
-static const struct profile_ops wearable_profile_ops = {
-       .profile               = "wearable",
-       .init                  = wearable_init,
-       .exit                  = wearable_exit,
-       .get_switched_pattern  = wearable_get_switched_pattern,
-       .get_always_alert_case = wearable_get_always_alert_case,
-       .get_always_off_case   = wearable_get_always_off_case,
-       .get_strength_type     = wearable_get_strength_type,
-       .get_priority          = wearable_get_priority,
-       .is_notification_type  = wearable_is_notification_type,
-       .max_type              = FEEDBACK_TYPE_END,
-       .max_pattern           = FEEDBACK_PATTERN_INTERNAL_END,
-       .str_type              = wearable_str_type,
-       .str_pattern           = wearable_str_pattern,
-};
-
-PROFILE_OPS_REGISTER(&wearable_profile_ops);