4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #ifndef __SETTING_PROFILE_H__
22 #define __SETTING_PROFILE_H__
27 #include <Elementary.h>
28 //#include <eina_list.h>
29 #include <glib-object.h>
32 #include <sound_manager.h>
33 #include <dd-haptic.h>
34 #include <setting-common-general-func.h>
35 #include <setting-common-draw-widget.h>
36 #include <setting-common-view.h>
39 //#include <pango/pango.h>
40 #include <efl_assist.h>
43 #define PLAY_FEEDBACK(f_type, f_pattern)\
45 if(feedback_initialize() == FEEDBACK_ERROR_NONE)\
47 feedback_play_type(f_type, f_pattern);\
48 feedback_deinitialize();\
53 #define VOLUME_APP_NAME "org.tizen.setting.volume"
54 #define MAX_SAFETY_VOLUME_LEVEL 10
55 #define SETTING_PROFILE_SOUND_ALERTS_PATH "/opt/usr/share/settings/Alerts"
56 #define SETTING_PROFILE_SOUND_RINGTONES_PATH "/opt/usr/share/settings/Ringtones"
57 #define SETTING_PROFILE_MMC_PATH "/opt/storage/sdcard"
58 #define SUPPORT_PLAYER_ASYNC 1
61 //Call ringtone:3 icon status
62 #define ICON_CALL_VIB SETTING_ICON_PATH_CFG"B04_slider_icon_vibrate.png"
63 #define ICON_CALL_NORMAL SETTING_ICON_PATH_CFG"B04_slider_icon_ring.png"
64 #define ICON_CALL_MUTE SETTING_ICON_PATH_CFG"B04_volume_icon_mute.png"
66 //Notification: 2 icon status
67 #define ICON_NOTI_MUTE SETTING_ICON_PATH_CFG"B04_slider_icon_notification_mute.png"
68 #define ICON_NOTI_NORMAL SETTING_ICON_PATH_CFG"B04_slider_icon_notification.png"
70 //Media: 2 icon status
71 #define ICON_MEDIA_MUTE SETTING_ICON_PATH_CFG"sound_slider_icon_volume_mute.png"
72 #define ICON_MEDIA_NORMAL SETTING_ICON_PATH_CFG"sound_slider_icon_volume.png"
74 //System:2 icon status
75 #define ICON_SYSTEM_MUTE SETTING_ICON_PATH_CFG"B04_slider_icon_system_mute.png"
76 #define ICON_SYSTEM_NORMAL SETTING_ICON_PATH_CFG"B04_slider_icon_system.png"
79 #define SUPPORT_HAPTIC_MENU 0
80 #define SUPPORT_PLAYER_ASYNC 1
83 #define HAPTIC_TEST_ITERATION 1
84 #define VOLUME_DEN (15.0) /* ie equals float(SETTING_SOUND_VOL_MAX) */
86 #define SETTING_SOUND_TEXT_REPEAT_ONCE "IDS_ST_BODY_ONCE"
87 #define SETTING_SOUND_TEXT_REPEAT_2MIN "IDS_ST_BODY_EVERY_2MIN"
88 #define SETTING_SOUND_TEXT_REPEAT_5MIN "IDS_ST_BODY_EVERY_5MIN"
89 #define SETTING_SOUND_TEXT_REPEAT_10MIN "IDS_ST_BODY_EVERY_10MINUTES"
91 #define SETTING_SOUND_VIBRATION_TAB_CREATE "IDS_ST_BUTTON_TAP_TO_CREATE"
92 #define SETTING_SOUND_VIBRATION_IVT_DEFAULT "IDS_ST_BODY_MYTHEME_DEFAULT"
94 #define VOLUME_STR "IDS_ST_BODY_VOLUME"
95 #define RINGTONE_STR "IDS_COM_BODY_RINGTONES"
97 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
99 /* Important !! : After below key is added completely to vconf-internal-keys package, should remove. */
100 #ifndef VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL
101 #define VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL "db/setting/sound/haptic_feedback_on"
105 #define SETTING_SOUND_REPEAT_TYPE_LEN 4
108 SETTING_PROF_VIEW_VOL = 0,
109 SETTING_PROF_VIEW_RTN,
110 SETTING_PROF_VIEW_MAX
111 } setting_profile_types;
114 SETTING_VOL_TYPE_RINGTONE = 0,
115 SETTING_VOL_TYPE_NOTIFICATION,
116 SETTING_VOL_TYPE_MEDIA,
117 SETTING_VOL_TYPE_SYSTEM,
118 SETTING_VOL_TYPE_NOTI_VIB,
119 SETTING_VOL_TYPE_HAPTIC_VIB,
121 } setting_volume_types;
130 SND_SLIDER_SYSTEM_VIB,
136 SETTING_VOL_SOUND_GROUP = 0,
137 SETTING_VOL_VIBRATION_GROUP,
138 SETTING_VOL_GROUP_MAX
139 } setting_volume_groups;
142 SETTING_PROF_CALLER_SETTING = 0,
143 SETTING_PROF_CALLER_PHONE,
144 SETTING_PROF_CALLER_MAX
145 } setting_profile_callers;
147 #define SETTING_VIB_VOL_MAX 5
148 #define SETTING_VIB_VOL_MIN 1
149 #define SETTING_SOUND_VOL_MAX 15
150 #define SETTING_SOUND_VOL_MIN 1
151 #define SETTING_SYSTEM_VOL_MAX 15
152 #define SETTING_SYSTEM_VOL_MIN 0
153 #define SETTING_SOUND_CONTROLBAR_ITEM_LEN 10
155 #define SETTING_DEFAULT_RINGTONE_VOL_INT 11
156 #define SETTING_DEFAULT_NOTI_VOL_INT 11
157 #define SETTING_DEFAULT_MEDIA_VOL_INT 9
158 #define SETTING_DEFAULT_SYSTEM_VOL_INT 9
159 #define SETTING_DEFAULT_CALL_VIB_INT 5
160 #define SETTING_DEFAULT_NOTI_VIB_INT 5
161 #define SETTING_DEFAULT_HAPTIC_VIB_INT 3
162 #define SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT 0
163 #define SETTING_SOUND_VIB_TYPE_LEN 5
165 #define SETTING_DEFAULT_RINGTONE_PATH "/opt/usr/share/settings/Ringtones"
166 #define SETTING_DEFAULT_ALERT_PATH "/opt/usr/share/settings/Alerts"
167 #define SETTING_DEFAULT_PREVIEW_PATH "/opt/usr/share/settings/Previews"
168 #define SETTING_PROFILE_MMC_PATH "/opt/storage/sdcard"
169 #define SETTING_DEFAULT_VIB_PATH "/opt/usr/share/settings/Vibrations/haptic/default/"
170 #define SETTING_CUSTOM_VIB_PATH "/opt/usr/share/feedback/haptic/custom/"
171 #define SETTING_VIB_EXT_NAME_STR ".ivt"
172 #define SETTING_VIB_EXT_SIZE_INT 4
173 #define SETTING_VIB_TYPE_CUSTOM 1
174 #define SETTING_VIB_TYPE_DEFAULT 0
176 #define SETTING_DEFAULT_LED_PLAYING_PATH "/usr/share/feedback/led/default/"
177 #define SETTING_CUSTOM_LED_PLAYING_PATH "/opt/usr/share/feedback/led/custom/"
178 #define SETTING_LED_EXT_NAME_STR ".led"
179 #define SETTING_LED_PLAY_PATH_MAX 512
181 #define SETTING_VIB_FEEDBACK_RATE 20
185 #define SETTING_DEFAULT_MSG_TONE SETTING_DEFAULT_ALERT_PATH""DELIM"Whistle.ogg"
186 #define SETTING_DEFAULT_EMAIL_TONE SETTING_DEFAULT_MSG_TONE
187 #define SETTING_DEFAULT_MEDIA_TONE SETTING_DEFAULT_PREVIEW_PATH""DELIM"Media_preview_Over_the_horizon.ogg"
188 #define SETTING_DEFAULT_SYSTEM_TONE SETTING_DEFAULT_PREVIEW_PATH""DELIM"touch.wav"
189 #define SETTING_DEFAULT_CALL_PREVIEW_VIB "/opt/usr/share/settings/Vibrations/haptic/default/Tictoc.ivt"
190 #define SETTING_DEFAULT_NOTI_PREVIEW_VIB "/opt/usr/share/settings/Vibrations/message.ivt"
191 #define SETTING_DEFAULT_HAPTIC_PREVIEW_VIB "/opt/usr/share/settings/Vibrations/touch.ivt"
192 #define SETTING_DEFAULT_COMPACT_CALL_VIB SETTING_DEFAULT_VIB_PATH"Default.ivt"
194 #define IMG_CTRL_ICON_RINGTONE SETTING_ICON_PATH_CFG"A01-1_controlbar_icon_ringtones.png"
195 #define IMG_CTRL_ICON_VOLUME SETTING_ICON_PATH_CFG"A01-1_controlbar_icon_volume.png"
197 #define IMG_VIB_PLAY SETTING_ICON_PATH_CFG"personal_vibration/A01-1_Vibration_icon_play.png"
198 #define IMG_VIB_STOP SETTING_ICON_PATH_CFG"personal_vibration/A01-1_Vibration_icon_stop.png"
200 #define IMG_CALL_VIB_PLAY_WHITE SETTING_ICON_PATH_CFG"myfile_icon_control_play.png"
201 #define IMG_CALL_VIB_PAUSE_WHITE SETTING_ICON_PATH_CFG"myfile_icon_control_pause.png"
202 #define IMG_CALL_VIB_PLAY_WHITE_PRESS SETTING_ICON_PATH_CFG"myfile_icon_control_play_press.png"
203 #define IMG_CALL_VIB_PAUSE_WHITE_PRESS SETTING_ICON_PATH_CFG"myfile_icon_control_pause_press.png"
205 #define IMG_CALL_VIB_MENU_CREATE SETTING_ICON_PATH_CFG"A01-1_icon_vibration_menu_create.png"
206 #define IMG_CALL_VIB_MENU_DELETE SETTING_ICON_PATH_CFG"A01-1_icon_vibration_menu_delete.png"
208 #define PERSONAL_VIBRATION_IVT_BUFFER_SIZE 14096
210 #define PERSONAL_VIBRATION_IVT_PORTRAIT_PERCENT (1.0)
211 #define PERSONAL_VIBRATION_IVT_LANDSCAPE_PERCENT (0.7)
213 #define PERSONAL_VIBRATION_SECONDS 12
214 #define PERSONAL_VIBRATION_TIMER_INTERVAL (0.04)
215 #define PERSONAL_VIBRATION_TIMER_RATE (1 / PERSONAL_VIBRATION_TIMER_INTERVAL)
216 #define PERSONAL_VIBRATION_MAX_TIMES (PERSONAL_VIBRATION_SECONDS * PERSONAL_VIBRATION_TIMER_RATE)
218 #define PERSONAL_VIBRATION_POPUP_WIDTH ((int)650 * WIDGET_SCALE_FACTOR)
219 #define PERSONAL_VIBRATION_POPUP_HEIGHT ((int)150 * WIDGET_SCALE_FACTOR)
221 #define SETTING_PROFILE_CONTACT_CALLER_STR "org.tizen.contacts"
222 #define SETTING_PROFILE_CALL_SETTING_CALLER_STR "setting-call-efl"
227 typedef struct _Pie_Object Pie_Object;
229 typedef struct _Pie_Slice Pie_Slice;
231 typedef enum _Pie_Flag {
232 Pie_Flag_No_Type = 0,
233 Pie_Flag_Record_Start = 1,
244 Evas_Coord x, y, w, h;
246 double bgcolor_green;
249 Pie_Slice *pie_slice;
251 Evas_Object *pie_image_object; // for cairo...
252 cairo_surface_t *cairo_surface;
253 cairo_surface_t *circle_center_surface;
257 Evas_Object *btn_img;
258 Evas_Object *btn_ef_img;
259 Evas_Object *rec_img;
260 Evas_Object *play_img;
261 Evas_Object *play_press_img;
262 Evas_Object *stop_img;
264 Eina_List *time_slices;
270 bool cairo_move_flag;
279 typedef struct _Ctxpopup_Data
285 typedef struct _VibInfoItem
291 typedef struct _SliderIcons
299 typedef struct _SettingProfileUG SettingProfileUG;
302 * Setting Profile UG context
303 * all UG function has void* as an agument. this is casted back to SettingProfileUG
304 * and the functions access app context.
306 struct _SettingProfileUG {
308 ui_gadget_h ug_loading;
310 Ea_Theme_Color_Table *color_table;
313 /* add more variables here (move your appdata to here) */
315 Evas_Object *win_main_layout;
316 Evas_Object *win_get;
317 Evas_Object *navi_bar;
318 Evas_Object *ctrl_bar;
319 Evas_Object *view_layout;
320 Evas_Object *ly_main;
321 Evas_Object *gl_lite_main;
322 Evas_Object *sub_view[SETTING_PROF_VIEW_MAX];
323 Elm_Object_Item *ctrl_item[SETTING_SOUND_CONTROLBAR_ITEM_LEN];
324 Evas_Object *volume_popup;
325 Evas_Object *sound_mode_popup;
326 Evas_Object *sound_mode_rdg;
328 Elm_Genlist_Item_Class itc_1text_1icon;
329 Elm_Genlist_Item_Class itc_group_item;
330 Elm_Genlist_Item_Class itc_2text_2;
331 Elm_Genlist_Item_Class itc_layout;
332 Elm_Genlist_Item_Class itc_layout_1icon;
333 Elm_Genlist_Item_Class itc_bg_1icon;
334 Elm_Genlist_Item_Class itc_name_editfield;
335 Elm_Genlist_Item_Class itc_2text_3_parent;
336 Elm_Genlist_Item_Class itc_1icon_1text_sub;
339 Setting_GenGroupItem_Data *data_sound;
340 Setting_GenGroupItem_Data *data_vibration;
341 Setting_GenGroupItem_Data *data_sound_mode;
342 Setting_GenGroupItem_Data *data_sound_when_ring;
343 Setting_GenGroupItem_Data *data_vibration_when_notification;
344 Setting_GenGroupItem_Data *data_call_volume;
345 Setting_GenGroupItem_Data *data_noti_volume;
346 Setting_GenGroupItem_Data *data_call_vib_volume;
347 Setting_GenGroupItem_Data *data_vib_volume;
348 Setting_GenGroupItem_Data *data_touch_volume;
349 Setting_GenGroupItem_Data *data_touch_vib;
350 Setting_GenGroupItem_Data *data_media_volume;
351 Setting_GenGroupItem_Data *data_adapt_sound;
352 Setting_GenGroupItem_Data *data_haptic_feedback;
353 setting_profile_types view_type;
355 player_h *mp_ringtone;
359 player_h *mp_prepare_async;
361 Ecore_Timer *volume_timer;
362 setting_volume_types cur_vol_type;
364 haptic_device_h hnd_hpt;
365 haptic_effect_h effect_hnd_hpt;
373 Ecore_Job *sound_slider_job;
374 Ecore_Job *vib_slider_job;
376 Ecore_Idler *set_sound_idler;
377 Ecore_Idler *set_vib_idler;
378 Ecore_Idler *handle_sound_on_idler;
379 Ecore_Idler *play_ringtone_idler; /* for performance of incoming call ringtone slider */
381 Ecore_Event_Handler *keydown_handler;
382 Ecore_Event_Handler *keyup_handler;
384 Ecore_Timer *updown_timer;
387 Setting_GenGroupItem_Data *data_call_alert_tone;
388 Setting_GenGroupItem_Data *data_call_alert_vib;
389 Setting_GenGroupItem_Data *data_msg_alert_tone;
390 Setting_GenGroupItem_Data *data_email_alert_tone;
391 Setting_GenGroupItem_Data *data_msg_alert_repeat;
392 Setting_GenGroupItem_Data *data_email_alert_repeat;
393 Setting_GenGroupItem_Data *data_lock_sound;
394 Setting_GenGroupItem_Data *data_button_sounds;
395 Setting_GenGroupItem_Data *data_touch_sounds;
396 Setting_GenGroupItem_Data *data_name_edit_filed;
398 Setting_GenGroupItem_Data *data_sound_text_repeat_once;
399 Setting_GenGroupItem_Data *data_sound_text_repeat_2min;
400 Setting_GenGroupItem_Data *data_sound_text_repeat_5min;
401 Setting_GenGroupItem_Data *data_sound_text_repeat_10min;
403 Setting_GenGroupItem_Data *default_item;
405 Setting_GenGroupItem_Data *cur_play_item; /* used in incoming call vibration */
407 Eina_List *call_vib_list_default;
408 Eina_List *call_vib_list_custom;
409 Eina_List *all_vib_list;
411 Elm_Genlist_Item_Class itc_1text_3icon;
412 Elm_Genlist_Item_Class itc_1text_2icon;
413 Evas_Object *vib_radio;
414 Evas_Object *vib_scroller;
415 Evas_Object *vib_controlbar;
416 Evas_Point vib_point_down;
417 Elm_Object_Item *vib_mouse_down_selected_item;
418 Eina_Bool personal_vib_down_press_flag;
419 Eina_Bool personal_vib_checkbox_down_press_flag;
421 Evas_Object *title_delete_button;
422 Evas_Object *more_popup;
423 Ctxpopup_Data ctx_data;
424 Elm_Object_Item *set_btn;
425 Elm_Object_Item *cancel_btn;
427 Evas_Object *no_play_popup; /* Unable to pre-listening during a call */
429 Eina_Bool personal_vib_cancel_flag;
431 Setting_GenGroupItem_Data *data_vib;
433 char *vib_caller_selected;
434 app_control_h source_svc;
435 char *vib_caller_title;
436 Ecore_Idler *vib_update_idler;
439 Elm_Object_Item *curitem;
440 Elm_Object_Item *preitem;
441 Ecore_Timer *play_stoper;
442 Ecore_Timer *vib_play_timer;
443 Elm_Object_Item *vib_navi_it;
446 // personal vibration begin
447 Evas_Object *bg_icon;
448 Evas_Object *bg_icon_02;
449 Evas_Object *recording_icon;
450 Evas_Object *ly_personal_vib;
451 Evas_Object *personal_vib_popup;
452 Evas_Object *personal_vib_btn_icon;
453 Evas_Object *personal_vib_rec_icon;
454 Evas_Object *personal_vib_play_icon;
455 Evas_Object *personal_vib_play_press_icon;
456 Evas_Object *personal_vib_stop_icon;
457 Evas_Object *personal_vib_second_icon;
458 Eina_Bool personal_vib_rec_flag;
459 Ecore_Timer *personal_vib_timer;
460 Ecore_Timer *personal_vib_timer_pause;
461 Ecore_Timer *personal_popup_del_timer;
462 int personal_vib_second;
463 Evas_Object *personal_vib_pie;
465 Evas_Object *personal_vib_entry;
466 Evas_Object *personal_vib_cancel_button;
467 Evas_Object *personal_vib_save_button;
468 Elm_Object_Item *personal_vib_navi_it;
470 Eina_Bool personal_vib_keyboard_hide;
471 Eina_Bool personal_vib_popup_close;
472 Eina_Bool personal_vib_press_flag;
473 Eina_Bool personal_vib_done_flag;
474 Eina_Bool personal_vib_mouse_event_flag;
476 Eina_Bool personal_vib_pause_flag;
477 Eina_Bool personal_vib_playing_flag;
479 char *personal_vib_save_filename;
480 //Eina_Bool app_pause;
482 Ecore_Timer *resume_pause_timer;
483 //Evas_Object *popup_max_len;
484 Evas_Object *popup_filename_check;
485 Evas_Object *popup_vib_delete;
487 unsigned char ivt_buffer[PERSONAL_VIBRATION_IVT_BUFFER_SIZE];
488 int personal_vib_effect_handle;
490 Evas_Object *controlbar;
491 Evas_Object *personal_vib_toolbar;
492 Elm_Object_Item *personal_vib_toolbar_done_btn;
493 Elm_Object_Item *personal_vib_toolbar_cancel_btn;
494 Eina_Bool personal_vib_done_to_save;
495 // personal vibration end
497 Evas_Object *ly_vib_delete;
498 Elm_Object_Item *vib_delete_navi_it;
499 Setting_Done_List_Data custom_vib_del_list;
500 Elm_Object_Item *vib_delete_done_btn;
501 Elm_Object_Item *vib_delete_cancel_btn;
503 setting_profile_callers caller;
505 Evas_Object *vib_player_btn;
506 //for customized styles
509 char *play_btn_show_icon;
511 Evas_Object *calling_popup; /* Unable to pre-listening during a call */
514 extern setting_view setting_view_profile_sound_main;
515 //extern setting_view setting_view_profile_sound_call_vibration;
516 //extern setting_view setting_view_profile_sound_personal_vib;
517 //extern setting_view setting_view_profile_sound_vibration_delete;
519 void setting_profile_play_sound_origin(player_h **mp_handle, void *data,
520 void *cb, char *ringtone_file, float vol,
521 sound_type_e sound_type);
522 int setting_profile_check_file_exist(void *data, const char *file_path);
524 player_h *setting_profile_play_sound(void *data, void *cb,
527 sound_type_e sound_type);
529 //int __close_player(void *data, setting_volume_types type);
530 int __close_player2(void *data, SoundType type);
532 int setting_profile_stop_sound(void *data, player_h *player);
533 void setting_profile_change_player_volume(player_h **mp_handle, float vol);
534 int setting_profile_close_other_mm_players_but_type(void *data,
536 int setting_profile_close_all_mm_players(void *data);
538 void setting_init_call_vib_list(void *data);
540 void __setting_profile_ug_key_grab(SettingProfileUG *ad);
541 void __setting_profile_ug_key_ungrab(SettingProfileUG *ad);
542 void __setting_profile_ug_menu_key_grab(SettingProfileUG *ad);
543 void __setting_profile_ug_menu_key_ungrab(SettingProfileUG *ad);
545 void __setting_profile_sound_persional_vib_record_pause_play(void *data, bool bpause);
546 void __setting_profile_sound_personal_vib_update_tap_string(void *data, app_device_orientation_e m);
547 void setting_profile_sound_personal_vib_pie_graph_relocate(void *data);
548 char *__setting_profile_sound_personal_vib_file_default_name_get();
549 char *setting_media_basename(char *path);
550 void _gl_hide_play_btn(Elm_Object_Item *obj);
551 void setting_profile_sound_personal_vib_stop_by_homekey_press(void *data);
553 void setting_profile_create_warning_popup_during_call(void *data);
555 void setting_profile_ug_update_volume_sliders(void *data);
556 Eina_Bool __vib_play_stop_timer_cb(void *data);
559 char* setting_profile_get_slider_icon(int type, int volume);