--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(attach-panel-voicerecorder C)
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX}/ug)
+SET(LIBDIR "${PREFIX}/lib")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${PREFIX}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(IMAGEDIR "${RESDIR}/images")
+SET(EDJEDIR "${RESDIR}/edje")
+SET(ETCDIR "${RESDIR}/etc")
+
+SET(VERSION 1.0)
+
+ADD_DEFINITIONS("-D_USE_DLOG_")
+ADD_DEFINITIONS("-D_USE_SECURE_LOG_")
+ADD_DEFINITIONS("-D_USE_ROTATE_BG_GE")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+#ADD_DEFINITIONS("-D_USE_CUSTOMIZED_GENGRID_STYLE")
+#ADD_DEFINITIONS("-D_USE_SHOW_SELECTED_COUNT_IN_TITLE")
+#ADD_DEFINITIONS("-D_USE_ADD_TO_HOME_FOR_IMAGES")
+
+file(GLOB UG_SRCS
+ "src/*.c"
+ "src/utils/*.c"
+ "src/view/*.c"
+)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/inc
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc/utils
+ ${CMAKE_CURRENT_SOURCE_DIR}/inc/view
+ )
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ elementary
+ edje
+ evas
+ ecore
+ dlog
+ efl-extension
+ capi-media-recorder
+ capi-appfw-application
+ ui-gadget-1
+ capi-content-media-content
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fvisibility=hidden")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fpie")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -fpie")
+SET(CMAKE_LDFLAGS "-Wl,-zdefs" )
+SET(voicerecorder_UG_PROJECT_NAME attach-panel-voicerecorder)
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+ ADD_DEFINITIONS("-DTARGET")
+ MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+#SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${UG_SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.0.1)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-ldl")
+
+# EDJ
+ADD_CUSTOM_COMMAND(OUTPUT audio_recorder.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images/
+ -sd ${CMAKE_CURRENT_SOURCE_DIR}/res/sounds
+ ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/audio_recorder.edc
+ ${CMAKE_BINARY_DIR}/audio_recorder.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/audio_recorder.edc
+)
+
+
+ADD_CUSTOM_TARGET(audio_recorder_edj_build DEPENDS audio_recorder.edj)
+ADD_DEPENDENCIES(${PROJECT_NAME} audio_recorder_edj_build)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/apps/${PROJECT_NAME}/lib/ug/)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/audio_recorder.edj DESTINATION /usr/ug/res/edje/${PROJECT_NAME}/)
+
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/images/ DESTINATION /usr/ug/res/images/${PROJECT_NAME}/)
+
+
+#INSTALL(FILES ${PROJECT_NAME}.xml DESTINATION /usr/share/packages)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.xml DESTINATION /usr/share/packages/)
+
+# i18n
+ADD_SUBDIRECTORY(res/po)
+
+# Install appcontrol icon
+#INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/icon/attach-panel-voicerecorder.png DESTINATION /usr/ug/res/images/attach-panel-voicerecorder)
+
--- /dev/null
+Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the 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.
+
--- /dev/null
+Copyright (c) 2000-2015 Samsung Electronics Co., Ltd. All rights reserved.
+
--- /dev/null
+<manifest>
+ <define>
+ <domain name="attach-panel-voicerecorder"/>
+ <provide>
+ <label name="attach-panel-voicerecorder::data"/>
+ </provide>
+ <request>
+ <smack request="aul::launch" type="x" />
+ <smack request="attach-panel-voicerecorder::data" type="rw"/>
+ <smack request="pulseaudio" type="rwxat" />
+ <smack request="sound_server" type="rw" />
+ <smack request="system::media" type="rwxat" />
+ <smack request="system::share" type="rwxat" />
+ <smack request="system::homedir" type="rwxat" />
+ </request>
+ </define>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="attach-panel-voicerecorder" version="0.1.0" install-location="internal-only">
+ <label>VoiceRecorderUG</label>
+ <author email="himanshu.t@samsung.com" href="www.samsung.com">Himanshu Talwar</author>
+ <description>VoiceRecorderUG</description>
+
+ <ui-application appid="attach-panel-voicerecorder" exec="/usr/ug/bin/attach-panel-voicerecorder" ui-gadget="true" nodisplay="true" multiple="true" type="capp" taskmanage="false" process-pool="true">
+ <label>VoiceRecorderUG</label>
+ <label xml:lang="en-us">VoiceRecorderUG</label>
+ <app-control>
+ <mime name="audio/AMR"/>
+ <mime name="audio/amr"/>
+ <mime name="audio/x-m4a"/>
+ </app-control>
+ </ui-application>
+
+ <privileges>
+ <privilege>http://developer.samsung.com/tizen/privilege/ui-gadget.admin</privilege>
+ <privilege>http://tizen.org/privilege/recorder</privilege>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
+ <privilege>http://tizen.org/privilege/content.write</privilege>
+ </privileges>
+</manifest>
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __ATTACH_PANEL_VOICERECORDER_H__
+#define __ATTACH_PANEL_VOICERECORDER_H__
+
+#include <Elementary.h>
+
+#define PKGNAME "attach-panel-voicerecorder"
+
+#ifndef _EDJ
+#define _EDJ(o) elm_layout_edje_get(o)
+#endif
+#ifndef _
+#define _(s) dgettext(PKGNAME, s)
+#endif
+#ifndef dgettext_noop
+#define dgettext_noop(s) (s)
+#endif
+#ifndef N_
+#define N_(s) dgettext_noop(s)
+#endif
+
+#endif//__ATTACH_PANEL_VOICERECORDER_H__
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __AUDIO_RECORDER_UTILS_H__
+#define __AUDIO_RECORDER_UTILS_H__
+
+#include <recorder.h>
+
+/**
+ * @brief Enumerations for audio recording quality
+ */
+typedef enum
+{
+ AQ_LOW = 0,
+ AQ_MEDIUM,
+ AQ_HIGH
+} audio_recording_quality_e;
+
+/**
+ * @brief Save preprocessing value to DB
+ * @param[in] preprocessing enable or disable preprocessing
+ */
+void audio_recorder_save_preprocessing(bool preprocessing);
+
+/**
+ * @brief Read preprocessing value from DB
+ * @return preprocessing true - enable, false - disable
+ */
+bool audio_recorder_read_preprocessing();
+
+/**
+ * @brief Set quality
+ * @param[in] recorder Instance of recorder_h
+ * @param[in] quality Recording quality
+ */
+void audio_recorder_set_quality(recorder_h recorder, audio_recording_quality_e quality);
+
+/**
+ * @brief Save quality value to DB
+ * @param[in] quality Recording quality
+ */
+void audio_recorder_save_quality(audio_recording_quality_e quality);
+
+/**
+ * @brief Read quality value from DB
+ * @return Recording quality
+ */
+audio_recording_quality_e audio_recorder_read_quality();
+
+/**
+ * @brief Get supported audio encoder
+ * @param[in] recorder Instance of recorder_h
+ * @param[out] list_length Length of codec list
+ * @return List supported codec list (must be freed)
+ */
+recorder_audio_codec_e *audio_recorder_get_supported_encoder(recorder_h recorder, int *list_length);
+
+/**
+ * @brief Get file format by codec
+ * @param[in] recorder Onstance of recorder_h
+ * @param[in] codec Audio codec
+ * @return File format
+ */
+recorder_file_format_e audio_recorder_get_file_format_by_codec(recorder_h recorder, recorder_audio_codec_e codec);
+
+/**
+ * @brief Get preprocessing file name by codec
+ * @param[in] codec Audio codec
+ * @return File format
+ */
+const char *audio_recorder_get_preproc_file_name_by_codec(recorder_audio_codec_e codec);
+
+/**
+ * @brief Convert codec(int) to string
+ * @param[in] codec Audio codec
+ * @return Codec as C string
+ */
+const char *audio_recorder_codec_to_str(recorder_audio_codec_e codec);
+
+/**
+ * @brief Convert file format(int) to string
+ * @param[in] format Audio format
+ * @return File format as C string
+ */
+const char *audio_recorder_file_format_to_str(recorder_file_format_e format);
+
+#endif // __AUDIO_RECORDER_UTILS_H__
+
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef CONFIG_H_
+#define CONFIG_H_
+
+#include "logger.h"
+#include <app.h>
+
+#define MAX_LENGTH_PATH 1024
+
+static inline const char *get_resource_path(const char * file_path);
+
+#define EDJPATH "edje"
+#define AUDIOPATH "sounds"
+#define VIDEOPATH "video"
+#define IMAGEPATH "images"
+
+// Edj:
+#define LAYOUTEDJ get_resource_path(EDJPATH"/layout.edj")
+#define FLAGSEDJ get_resource_path(EDJPATH"/flags.edj")
+#define TONEEDJ get_resource_path(EDJPATH"/tone.edj")
+#define FRAMEEXTRACTOREDJ get_resource_path(EDJPATH"/frame-extractor.edj")
+#define EQUALIZEREDJ get_resource_path(EDJPATH"/equalizer.edj")
+#define MEDIAPLAYEREDJ get_resource_path(EDJPATH"/media_player.edj")
+#define CAMERAPLAYEREDJ get_resource_path(EDJPATH"/camera_player.edj")
+#define VIDEO_RECORDER_PLAYER_EDJ get_resource_path(EDJPATH"/video_recorder_player.edj")
+#define AUDIORECORDEREDJ get_resource_path(EDJPATH"/audio_recorder.edj")
+#define VIDEOPLAYEREDJ get_resource_path(EDJPATH"/video_player.edj")
+#define CAMERACAPTUREEDJ get_resource_path(EDJPATH"/camera_capture.edj")
+#define CAPTUREIMGVIEWEREEDJ get_resource_path(EDJPATH"/capture_image_viewer.edj")
+
+// Audio:
+#define SAMPLEMP3 AUDIOPATH"/SampleMP3.mp3"
+#define SAMPLEAAC AUDIOPATH"/SampleAAC.aac"
+#define SAMPLEWAV AUDIOPATH"/SampleWAV.wav"
+#define SAMPLEAMR AUDIOPATH"/SampleAMR.amr"
+#define PREPROCAAC AUDIOPATH"/PreProcessedAudioAAC.raw"
+#define PREPROCAMR AUDIOPATH"/PreProcessedAudioAMR.raw"
+#define PREPROCPCM AUDIOPATH"/PreProcessedAudioPCM.raw"
+
+// Video:
+#define SAMPLEH263 VIDEOPATH"/sampleH263.3gp"
+#define SAMPLEH264 VIDEOPATH"/sampleH264.mp4"
+#define SAMPLEMPEG4 VIDEOPATH"/sampleMPEG4.mp4"
+#define RECORDERED_3GP_VIDEO "Recordered_Sample.3gp"
+
+// Image:
+#define AUDIOICON IMAGEPATH"/audio-icon.png"
+#define MICICON IMAGEPATH"/mic.png"
+
+static inline const char *get_resource_path(const char *file_path)
+{
+ static char absolute_path[MAX_LENGTH_PATH] = {'\0'};
+
+ static char *res_path_buff = NULL;
+ if (res_path_buff == NULL) {
+ res_path_buff = app_get_resource_path();
+ }
+
+ snprintf(absolute_path, MAX_LENGTH_PATH, "%s%s", res_path_buff, file_path);
+
+ return absolute_path;
+}
+
+#endif /* CONFIG_H_ */
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __LOGGER_H__
+#define __LOGGER_H__
+
+#define LOG_TAG "voicerecorder"
+
+#include <dlog.h>
+
+#define INF(fmt, arg...) dlog_print(DLOG_INFO, LOG_TAG, fmt, ##arg)
+#define DBG(fmt, arg...) dlog_print(DLOG_DEBUG, LOG_TAG, fmt, ##arg)
+#define ERR(fmt, arg...) dlog_print(DLOG_ERROR, LOG_TAG, fmt, ##arg)
+
+#define WARN_IF(expr, fmt, arg...) \
+{ \
+ if (expr) \
+ { \
+ ERR(fmt, ##arg); \
+ } \
+}
+
+#define RETM_IF(expr, fmt, arg...) \
+{ \
+ if (expr) \
+ { \
+ ERR(fmt, ##arg); \
+ return; \
+ } \
+}
+
+#define RETVM_IF(expr, val, fmt, arg...) \
+{ \
+ if (expr) \
+ { \
+ ERR(fmt, ##arg); \
+ return (val); \
+ } \
+}
+
+#endif /* __LOGGER_H__ */
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __AUDIO_RECORDER_VIEW_H__
+#define __AUDIO_RECORDER_VIEW_H__
+
+#include <Evas.h>
+#include <ui-gadget-module.h>
+#include <Elementary.h>
+#include <Ecore.h>
+#include <recorder.h>
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+typedef enum _audio_recorder_view_type{
+ AUDIO_RECORDER_FULL_VIEW,
+ AUDIO_RECORDER_COMPACT_VIEW,
+}AudioRecorderViewType;
+
+struct _audio_recorder_view
+{
+ Evas_Object *layout;
+ Evas_Object *gesture_long_tap;
+ Elm_Object_Item *settings_item;
+ recorder_h recorder;
+ recorder_audio_codec_e *codec_list;
+ int codec_list_len;
+ char file_path[PATH_MAX];
+ char file_name[PATH_MAX];
+ recorder_audio_codec_e codec;
+ recorder_file_format_e file_format;
+ FILE *preproc_file;
+ ui_gadget_h ug_handle;
+ app_control_h service;
+ int bitrate;
+ int sample_rate;
+ bool is_recording;
+ long long int limitsize;
+};
+
+typedef struct _audio_recorder_view audio_recorder_view;
+
+/**
+ * @brief Create audio recorder view
+ * @param[in] app application instance
+ * @param[in] navi owner naviframe
+ * @return instance of audio_recorder_view
+ */
+
+void _main_layout_add(Evas_Object *parent, ui_gadget_h ug_handle, app_control_h service);
+
+void _audio_recorder_view_set_data(void *data);
+void *_audio_recorder_view_get_data();
+void _audio_recorder_view_destroy();
+void _audio_recorder_view_set_view_layout(AudioRecorderViewType audio_recorder_view_type);
+
+#endif // __AUDIO_RECORDER_VIEW_H__
+
--- /dev/null
+%define _appdir %{_prefix}/apps
+%define _ugdir %{_prefix}/ug
+%define _datadir %{_prefix}/share
+%define _sharedir /opt/usr/media/.iv
+Name: attach-panel-voicerecorder
+Summary: voicerecorder UX
+Version: 0.1.0
+Release: 1
+Group: Applications
+License: Apache-2.0
+Source0: %{name}-%{version}.tar.gz
+
+%if "%{?tizen_profile_name}" == "wearable" || "%{?tizen_profile_name}" == "tv"
+ExcludeArch: %{arm} %ix86 x86_64
+%endif
+
+BuildRequires: cmake
+BuildRequires: gettext-tools
+BuildRequires: edje-tools
+
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(efl-extension)
+BuildRequires: pkgconfig(capi-media-recorder)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(ui-gadget-1)
+BuildRequires: pkgconfig(capi-content-media-content)
+
+%description
+Description: voicerecorder UG
+
+%prep
+%setup -q
+
+%build
+
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE"
+export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
+%endif
+
+%ifarch %{arm}
+CXXFLAGS+=" -D_ARCH_ARM_ -mfpu=neon"
+%endif
+
+%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_DATA_DIR=%{_datadir} -DARCH=%{ARCH}
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+if [ ! -d %{buildroot}/opt/usr/apps/attach-panel-voicerecorder/data ]
+then
+ mkdir -p %{buildroot}/opt/usr/apps/attach-panel-voicerecorder/data
+fi
+
+%make_install
+
+mkdir -p %{buildroot}/usr/share/license
+mkdir -p %{buildroot}%{_sharedir}
+cp LICENSE %{buildroot}/usr/share/license/attach-panel-voicerecorder
+
+%post
+mkdir -p %{_prefix}/apps/%{name}/bin/
+ln -sf %{_prefix}/bin/ug-client %{_prefix}/apps/%{name}/bin/%{name}
+%postun
+
+%files
+%manifest %{name}.manifest
+%defattr(-,root,root,-)
+%{_appdir}/%{name}/lib/ug/libattach-panel-voicerecorder.so*
+%{_prefix}/ug/res/edje/attach-panel-voicerecorder/*
+%{_prefix}/ug/res/images/attach-panel-voicerecorder/*
+%{_prefix}/ug/res/locale/*
+%{_datadir}/packages/attach-panel-voicerecorder.xml
+%{_datadir}/license/attach-panel-voicerecorder
+
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+collections
+{
+group {
+ name:"audio_recorder_hd";
+ images {
+ image:"bg.png" COMP;
+ image:"bg_pressed.png" COMP;
+ image:"icon_close.png" COMP;
+ image:"icon_pause.png" COMP;
+ image:"icon_play.png" COMP;
+ image:"icon_rec.png" COMP;
+ image:"icon_stop.png" COMP;
+ image:"drawer.png" COMP;
+ image:"voice_attach_bg.png" COMP;
+ image:"toolbar_icon_rec.png" COMP;
+ image:"toolbar_control_stop.png" COMP;
+ image:"toolbar_control_bg.png" COMP;
+ }
+
+ parts {
+ part {
+ name:"bg";
+ type:RECT;
+ description {
+ state:"default" 0.0;
+ rel1 {
+ relative:0.0 0.0;
+
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ color:0 0 0 0;
+ }
+ }//end bg
+ part {
+ name:"bg_image";
+ type:IMAGE;
+ description {
+ state:"default" 0.0;
+ rel1 {
+ relative:0.0 0.0;
+
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ image.normal:"voice_attach_bg.png";
+ }
+ }
+ part {
+ name:"recorder_title_bg";
+ type:RECT;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ rel1 { relative:0.0 0.021; to:"bg";}
+ rel2 { relative: 1.0 0.058;to:"bg";}
+ color:0 0 0 0;
+ }
+ }//end recorder_title
+
+ part {
+ name:"recorder_title";
+ type:TEXT;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ min: 720 50;
+ rel1 { relative: 0.5 0.0; to:"bg"; offset: 0 50;}
+ rel2 { relative: 0.5 0.0; to:"bg"; offset: 0 50;}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 40; text:"Tap and hold to record"; }
+ }
+ description {
+ state: "default_compact" 0.0;
+ min: 720 50;
+ rel1 { relative: 0.5 0.0; to: "bg"; offset: 0 40;}
+ rel2 { relative: 0.5 0.0; to: "bg"; offset: 0 40;}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 40; text:"Tap and hold to record"; }
+ }
+ description {
+ state:"recording" 0.0;
+ inherit:"default";
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 40; text:"Recording..."; }
+ }
+ description {
+ state:"recording_compact" 0.0;
+ inherit:"default_compact";
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 40; text:"Recording..."; }
+ }
+ }//end recorder_title
+ part {
+ name:"recorder_timer";
+ type:TEXT;
+ description {
+ state:"default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.388; to: "bg";}
+ rel2 { relative: 1.0 0.523; to: "bg";}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 120; text:"00 : 00"; }
+ }
+ description {
+ state:"default_compact" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.176; to: "bg";}
+ rel2 { relative: 1.0 0.567; to: "bg";}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 120; text:"00 : 00"; }
+ }
+ }//end recorder_timer
+ part {
+ name:"record_icon_bg";
+ type:IMAGE;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ min:120 120;
+ max:120 120;
+ rel1 { relative: 0.41 1.0; to: "bg";offset: 0 -174;}
+ rel2 { relative: 0.60 1.0; to: "bg";offset: 0 -38;}
+ align:0.5 0.5;
+ image.normal:"toolbar_control_bg.png";
+ color: 250 250 250 255;
+ visible:1;
+ }
+ description {
+ state: "default_compact" 0.0;
+ min:120 120;
+ max:120 120;
+ rel1 { relative: 0.41 1.0; to: "bg";offset: 0 -174;}
+ rel2 { relative: 0.60 1.0; to: "bg";offset: 0 -38;}
+ align: 0.5 0.5;
+ image.normal:"toolbar_control_bg.png";
+ color: 250 250 250 255;
+ visible:1;
+ }
+ description {
+ state:"pressed" 0.0;
+ inherit:"default";
+ image.normal:"toolbar_control_bg.png";
+ color: 250 250 250 255;
+ visible:1;
+ }
+ description {
+ state: "pressed_compact" 0.0;
+ inherit: "default_compact";
+ image.normal: "toolbar_control_bg.png";
+ color: 250 250 250 255;
+ visible:1;
+ }
+ description {
+ state:"show";
+ inherit:"default";
+ visible:1;
+ }
+ description {
+ state:"show_compact";
+ inherit:"default_compact";
+ visible:1;
+ }
+
+ }//end record_icon_bg
+ part {
+ name:"record_icon_swallow";
+ type:SWALLOW;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ rel1 {
+ relative:0.0 0.0;
+ to:"record_icon_bg";
+ }
+ rel2 {
+ relative:1.0 1.0;
+ to:"record_icon_bg";
+ }
+ color: 0 0 0 0;
+ visible:1;
+ }
+ }
+ part {
+ name:"record_icon";
+ type:IMAGE;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ min:120 120;
+ max:120 120;
+ rel1 {
+ relative:0.0 0.0;
+ to:"record_icon_bg";
+ }
+ rel2 {
+ relative:1.0 1.0;
+ to:"record_icon_bg";
+ }
+
+ align:0.5 0.5;
+ image.normal:"toolbar_icon_rec.png";
+ color: 255 25 25 255;
+ visible:1;
+ }
+ description {
+ state:"default_compact" 0.0;
+ min:120 120;
+ max:120 120;
+ rel1 { relative: 0.0 0.0; to: "record_icon_bg";}
+ rel2 { relative: 1.0 1.0; to:"record_icon_bg";}
+ align:0.5 0.5;
+ image.normal:"toolbar_icon_rec.png";
+ color: 255 25 25 255;
+ visible:1;
+ }
+ description {
+ state:"show";
+ inherit:"default";
+ min:120 120;
+ max:120 120;
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ description {
+ state:"show_compact";
+ inherit:"default_compact";
+ min:120 120;
+ max:120 120;
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ description {
+ state:"stop";
+ inherit:"default";
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ description {
+ state: "stop_compact";
+ inherit: "default_compact";
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ }//end record_icon
+ }//end parts
+
+ script {
+ public playToggle;
+ public stopToggle;
+ public stopTitleRecording;
+ public t;
+ public showTimer;
+ public iscompactview;
+ public init()
+ {
+ set_int(playToggle,0);
+ set_int(showTimer,0);
+ set_int(stopToggle,0);
+ set_int(stopTitleRecording,0);
+ }
+ public setcompactview()
+ {
+ set_int(iscompactview,1);
+ }
+ public setfullview()
+ {
+ set_int(iscompactview,0);
+ }
+ }
+ programs {
+ program {
+ name:"init";
+ signal:"load";
+ source:"";
+ script {
+ init();
+ }
+ }
+ program {
+ name:"setcompactview";
+ signal:"compact_view";
+ source:"prog";
+ script {
+ setcompactview();
+ set_state(PART:"recorder_title","default_compact",0.0);
+ set_state(PART:"recorder_timer","default_compact",0.0);
+ set_state(PART:"record_icon_bg","default_compact",0.0);
+ set_state(PART:"record_icon","default_compact",0.0);
+ }
+ }
+ program {
+ name:"setfullview";
+ signal:"full_view";
+ source:"prog";
+ script {
+ setfullview();
+ set_state(PART:"recorder_title","default",0.0);
+ set_state(PART:"recorder_timer","default",0.0);
+ set_state(PART:"record_icon_bg","default",0.0);
+ set_state(PART:"record_icon","default",0.0);
+ }
+ }
+
+ program {
+ name:"click_on_record_down";
+ signal:"mouse,down,1";
+ source:"record_icon_bg";
+ script {
+ new str[70];
+ snprintf(str,sizeof(str),"%d %d",get_int(stopToggle),get_int(playToggle));
+ //set_text(PART:"recorder_timer",str);
+ if(get_int(stopToggle) == 0)
+ {
+ if(get_int(iscompactview) == 0)
+ {
+ set_state(PART:"recorder_title","recording",0.0);
+ set_state(PART:"record_icon_bg","pressed",0.0);
+ set_state(PART:"record_icon","show",0.0);
+ }
+ else
+ {
+ set_state(PART:"recorder_title","recording_compact",0.0);
+ set_state(PART:"record_icon_bg","pressed_compact",0.0);
+ set_state(PART:"record_icon","show_compact",0.0);
+ }
+ set_int(stopToggle,1);
+ run_program(PROGRAM:"emit_play_signal");
+ }
+ }
+ }//end click_on_record "mouse,down,1"
+
+ program {
+ name:"click_on_record_up";
+ signal:"mouse,up,1";
+ source:"record_icon_bg";
+ script {
+ new str[70];
+ snprintf(str,sizeof(str),"%d %d",get_int(stopToggle),get_int(playToggle));
+ //set_text(PART:"recorder_timer",str);
+ if(get_int(stopToggle) == 1)
+ {
+ if(get_int(iscompactview) == 0)
+ {
+ set_state(PART:"recorder_title","default",0.0);
+ set_state(PART:"record_icon_bg","default",0.0);
+ set_state(PART:"record_icon","default",0.0);
+ }
+ else
+ {
+ set_state(PART:"recorder_title","default_compact",0.0);
+ set_state(PART:"record_icon_bg","default_compact",0.0);
+ set_state(PART:"record_icon","default_compact",0.0);
+ }
+ set_int(stopToggle,0);
+ run_program(PROGRAM:"emit_stop_signal");
+ }
+
+ }
+ }//end click_on_record "mouse,up,1"
+
+ program {
+ name:"release_on_record";
+ signal:"mouse,down,1";
+ source:"record_icon_bg";
+ script {
+ if(get_int(iscompactview) == 0)
+ {
+ set_state(PART:"record_icon_bg","default",0.0);
+ }
+ else
+ {
+ set_state(PART:"record_icon_bg","default_compact",0.0);
+ }
+ }
+ }//end release_on_record
+
+ program {
+ name:"emit_play_signal";
+ source:"";
+ action:SIGNAL_EMIT "play" "emit_play_signal";
+ }//end emit_play_signal
+
+ program {
+ name:"emit_stop_signal";
+ source:"";
+ action:SIGNAL_EMIT "stop" "emit_stop_signal";
+ }//end emit_stop_signal
+
+ program {
+ name:"emit_cancel_signal";
+ source:"";
+ action:SIGNAL_EMIT "cancel" "emit_cancel_signal";
+ }//end emit_cancel_signal
+
+ program {
+ name:"emit_pause_signal";
+ source:"";
+ action:SIGNAL_EMIT "pause" "emit_pause_signal";
+ }//end emit_pause_signal
+
+ }//end programs
+
+}//end group
+
+group {
+ name:"audio_recorder_wvga";
+ images {
+ image:"bg.png" COMP;
+ image:"bg_pressed.png" COMP;
+ image:"icon_close.png" COMP;
+ image:"icon_pause.png" COMP;
+ image:"icon_play.png" COMP;
+ image:"icon_rec.png" COMP;
+ image:"icon_stop.png" COMP;
+ image:"drawer.png" COMP;
+ image:"voice_attach_bg.png" COMP;
+ image:"toolbar_icon_rec.png" COMP;
+ image:"toolbar_control_stop.png" COMP;
+ image:"toolbar_control_bg.png" COMP;
+ }
+
+ parts {
+ part {
+ name:"bg";
+ type:RECT;
+ description {
+ state:"default" 0.0;
+ rel1 {
+ relative:0.0 0.0;
+
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ color:0 0 0 0;
+ }
+ }//end bg
+ part {
+ name:"bg_image";
+ type:IMAGE;
+ description {
+ state:"default" 0.0;
+ rel1 {
+ relative:0.0 0.0;
+
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ image.normal:"voice_attach_bg.png";
+ }
+ }
+ part {
+ name:"recorder_title_bg";
+ type:RECT;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ rel1 { relative:0.0 0.011; to:"bg";}
+ rel2 { relative: 1.0 0.038;to:"bg";}
+ color:0 0 0 0;
+ }
+ }//end recorder_title
+
+ part {
+ name:"recorder_title";
+ type:TEXT;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ min: 480 40;
+ rel1 { relative: 0.5 0.0; to:"bg"; offset: 0 40;}
+ rel2 { relative: 0.5 0.0; to:"bg"; offset: 0 40;}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 30; text:"Tap and hold to record"; }
+ }
+ description {
+ state: "default_compact" 0.0;
+ min: 480 40;
+ rel1 { relative: 0.5 0.0; to: "bg"; offset: 0 30;}
+ rel2 { relative: 0.5 0.0; to: "bg"; offset: 0 30;}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 30; text:"Tap and hold to record"; }
+ }
+ description {
+ state:"recording" 0.0;
+ inherit:"default";
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 30; text:"Recording..."; }
+ }
+ description {
+ state:"recording_compact" 0.0;
+ inherit:"default_compact";
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 30; text:"Recording..."; }
+ }
+ }//end recorder_title
+ part {
+ name:"recorder_timer";
+ type:TEXT;
+ description {
+ state:"default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.388; to: "bg";}
+ rel2 { relative: 1.0 0.523; to: "bg";}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 90; text:"00 : 00"; }
+ }
+ description {
+ state:"default_compact" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.176; to: "bg";}
+ rel2 { relative: 1.0 0.567; to: "bg";}
+ color:255 255 255 255;
+ text { font: "Tizen:style=Light";align:0.5 0.5; size: 90; text:"00 : 00"; }
+ }
+ }//end recorder_timer
+ part {
+ name:"record_icon_bg";
+ type:IMAGE;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ min:90 90;
+ max:90 90;
+ rel1 { relative: 0.41 1.0; to: "bg"; offset: 0 -90;}
+ rel2 { relative: 0.60 1.0; to: "bg"; offset: 0 -18;}
+ align:0.5 0.5;
+ image.normal:"toolbar_control_bg.png";
+ color: 250 250 250 255;
+ visible:1;
+ }
+ description {
+ state: "default_compact" 0.0;
+ min:90 90;
+ max:90 90;
+ rel1 { relative: 0.41 1.0; to: "bg"; offset: 0 -90;}
+ rel2 { relative: 0.60 1.0; to: "bg"; offset: 0 -18;}
+ align: 0.5 0.5;
+ image.normal:"toolbar_control_bg.png";
+ color: 250 250 250 255;
+ visible:1;
+ }
+ description {
+ state:"pressed" 0.0;
+ inherit:"default";
+ image.normal:"toolbar_control_bg.png";
+ color: 250 250 250 255;
+ }
+ description {
+ state: "pressed_compact" 0.0;
+ inherit: "default_compact";
+ image.normal: "toolbar_control_bg.png";
+ color: 250 250 250 255;
+ }
+ description {
+ state:"show";
+ inherit:"default";
+ visible:1;
+ }
+ description {
+ state:"show_compact";
+ inherit:"default_compact";
+ visible:1;
+ }
+
+ }//end record_icon_bg
+ part {
+ name:"record_icon_swallow";
+ type:SWALLOW;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ rel1 {
+ relative:0.0 0.0;
+ to:"record_icon_bg";
+ }
+ rel2 {
+ relative:1.0 1.0;
+ to:"record_icon_bg";
+ }
+ color: 0 0 0 0;
+ visible:1;
+ }
+ }
+ part {
+ name:"record_icon";
+ type:IMAGE;
+ mouse_events:1;
+ repeat_events:1;
+ description {
+ state:"default" 0.0;
+ min:90 90;
+ max:90 90;
+ rel1 {
+ relative:0.0 0.0;
+ to:"record_icon_bg";
+ }
+ rel2 {
+ relative:1.0 1.0;
+ to:"record_icon_bg";
+ }
+
+ align:0.5 0.5;
+ image.normal:"toolbar_icon_rec.png";
+ color: 255 25 25 255;
+ visible:1;
+ }
+ description {
+ state:"default_compact" 0.0;
+ min:90 90;
+ max:90 90;
+ rel1 { relative: 0.0 0.0; to: "record_icon_bg";}
+ rel2 { relative: 1.0 1.0; to:"record_icon_bg";}
+ align:0.5 0.5;
+ image.normal:"toolbar_icon_rec.png";
+ color: 255 25 25 255;
+ visible:1;
+ }
+ description {
+ state:"show";
+ inherit:"default";
+ min:90 90;
+ max:90 90;
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ description {
+ state:"show_compact";
+ inherit:"default_compact";
+ min:90 90;
+ max:90 90;
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ description {
+ state:"stop";
+ inherit:"default";
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ description {
+ state: "stop_compact";
+ inherit: "default_compact";
+ image.normal:"toolbar_control_stop.png";
+ color: 255 25 25 255;
+ }
+ }//end record_icon
+ }//end parts
+
+ script {
+ public playToggle;
+ public stopToggle;
+ public stopTitleRecording;
+ public t;
+ public showTimer;
+ public iscompactview;
+ public init()
+ {
+ set_int(playToggle,0);
+ set_int(showTimer,0);
+ set_int(stopToggle,0);
+ set_int(stopTitleRecording,0);
+ }
+ public setcompactview()
+ {
+ set_int(iscompactview,1);
+ }
+ public setfullview()
+ {
+ set_int(iscompactview,0);
+ }
+ }
+ programs {
+ program {
+ name:"init";
+ signal:"load";
+ source:"";
+ script {
+ init();
+ }
+ }
+ program {
+ name:"setcompactview";
+ signal:"compact_view";
+ source:"prog";
+ script {
+ setcompactview();
+ set_state(PART:"recorder_title","default_compact",0.0);
+ set_state(PART:"recorder_timer","default_compact",0.0);
+ set_state(PART:"record_icon_bg","default_compact",0.0);
+ set_state(PART:"record_icon","default_compact",0.0);
+ }
+ }
+ program {
+ name:"setfullview";
+ signal:"full_view";
+ source:"prog";
+ script {
+ setfullview();
+ set_state(PART:"recorder_title","default",0.0);
+ set_state(PART:"recorder_timer","default",0.0);
+ set_state(PART:"record_icon_bg","default",0.0);
+ set_state(PART:"record_icon","default",0.0);
+ }
+ }
+
+ program {
+ name:"click_on_record_down";
+ signal:"mouse,down,1";
+ source:"record_icon_bg";
+ script {
+ new str[70];
+ snprintf(str,sizeof(str),"%d %d",get_int(stopToggle),get_int(playToggle));
+ //set_text(PART:"recorder_timer",str);
+ if(get_int(stopToggle) == 0)
+ {
+ if(get_int(iscompactview) == 0)
+ {
+ set_state(PART:"recorder_title","recording",0.0);
+ set_state(PART:"record_icon_bg","pressed",0.0);
+ set_state(PART:"record_icon","show",0.0);
+ }
+ else
+ {
+ set_state(PART:"recorder_title","recording_compact",0.0);
+ set_state(PART:"record_icon_bg","pressed_compact",0.0);
+ set_state(PART:"record_icon","show_compact",0.0);
+ }
+ set_int(stopToggle,1);
+ run_program(PROGRAM:"emit_play_signal");
+ }
+ }
+ }//end click_on_record "mouse,down,1"
+
+ program {
+ name:"click_on_record_up";
+ signal:"mouse,up,1";
+ source:"record_icon_bg";
+ script {
+ new str[70];
+ snprintf(str,sizeof(str),"%d %d",get_int(stopToggle),get_int(playToggle));
+ //set_text(PART:"recorder_timer",str);
+ if(get_int(stopToggle) == 1)
+ {
+ if(get_int(iscompactview) == 0)
+ {
+ set_state(PART:"recorder_title","default",0.0);
+ set_state(PART:"record_icon_bg","default",0.0);
+ set_state(PART:"record_icon","default",0.0);
+ }
+ else
+ {
+ set_state(PART:"recorder_title","default_compact",0.0);
+ set_state(PART:"record_icon_bg","default_compact",0.0);
+ set_state(PART:"record_icon","default_compact",0.0);
+ }
+ set_int(stopToggle,0);
+ run_program(PROGRAM:"emit_stop_signal");
+ }
+
+ }
+ }//end click_on_record "mouse,up,1"
+
+ program {
+ name:"release_on_record";
+ signal:"mouse,down,1";
+ source:"record_icon_bg";
+ script {
+ if(get_int(iscompactview) == 0)
+ {
+ set_state(PART:"record_icon_bg","default",0.0);
+ }
+ else
+ {
+ set_state(PART:"record_icon_bg","default_compact",0.0);
+ }
+ }
+ }//end release_on_record
+
+ program {
+ name:"emit_play_signal";
+ source:"";
+ action:SIGNAL_EMIT "play" "emit_play_signal";
+ }//end emit_play_signal
+
+ program {
+ name:"emit_stop_signal";
+ source:"";
+ action:SIGNAL_EMIT "stop" "emit_stop_signal";
+ }//end emit_stop_signal
+
+ program {
+ name:"emit_cancel_signal";
+ source:"";
+ action:SIGNAL_EMIT "cancel" "emit_cancel_signal";
+ }//end emit_cancel_signal
+
+ program {
+ name:"emit_pause_signal";
+ source:"";
+ action:SIGNAL_EMIT "pause" "emit_pause_signal";
+ }//end emit_pause_signal
+
+ }//end programs
+
+}//end group
+
+}
--- /dev/null
+# for i18n
+
+
+
+
+#SET(POFILES bn.po en.po en_US.po gu.po hi.po kn.po ko_KR.po ml.po mr.po or.po pa.po si.po ta.po te.po)
+
+SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de.po el_GR.po en_PH.po en.po en_US.po es_ES.po es_US.po et.po eu.po fi.po fr_CA.po fr.po ga.po gl.po hi.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po kk.po ko_KR.po lt.po lv.po mk.po nb.po nl.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_TW.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+ INSTALL(FILES ${moFile} DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Neem tans op"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Recording..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "تسجيل"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "يتعذر حفظ التسجيل. إن التسجيل قصير جداً."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "انقر مع الاستمرار للتسجيل"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ৰেকৰ্ডিং..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ৰেকৰ্ডিং সংৰক্ষণ কৰিবলৈ অক্ষম৷ ৰেকৰ্ডিং অতি চুটি৷"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ৰেকৰ্ড কৰিবলৈ টিপক আৰু ধৰি থাকক"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Yazılır"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Yazını saxlamaq olmadı. Yazı çox qısadır."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Yazıyaal üçün vur sax"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Запісваецца..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Запис"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Записът Не може да се запази. Записът е твърде къс."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Чукн. и задр. за записв."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "রেকর্ড করা হচ্ছে..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "রেকর্ডিং সংরক্ষণ করতে অক্ষম। রেকর্ডিং খুব ছোট।"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "রেকর্ড করতে ট্যাপ করুন ধরে থাকুন"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "রেকর্ড করা হচ্ছে..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "S'està gravant"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "No es pot desar la gravació perquè és massa curta."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mantenir tocat per gravar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nahrávání"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nahrávku nelze uložit. Nahrávka je příliš krátká."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Klep. a držte pro nahr."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Optagelse"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Kan ikke gemme optagelsen. Optagelsen er for kort."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tryk og hold for at opt."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Aufnahme"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Speichern der Aufnahme nicht möglich. Aufnahme zu kurz."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Zum Aufnahmen tippen und halten"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Εγγραφή"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Πατ. παρατ. για εγγραφή"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Εγγραφή"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Δεν είναι δυνατή η αποθήκευση της ηχογράφησης. Η ηχογράφηση είναι πολύ σύντομη."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Πατ. παρατ. για εγγραφή"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Recording..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Recording"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Recording"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "No se puede guardar la grabación. Grabación demasiado corta."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "No es posible guardar la grabación. Es demasiado corta."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Salvestamine"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Salvestist ei saa salvestada. Salvestis on liiga lühike."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Hoidke, et salvestada"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabatzen"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Ezin izan da grabaketa gorde. Laburregia da."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Ukitu eutsi grabatzeko"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "در حال ضبط"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ذخیره ضبط ممکن نیست. ضبط بسیار کوتاه است."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "جهت ضبط ضربه زده،نگهدارید"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Tallennetaan"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Tallennetta ei voi tallentaa. Tallenne on liian lyhyt."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tallenna pain. pitkään"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Enregistrement"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Enregistrement impossible. L'enregistrement est trop court."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "App. long. pour enreg."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Enregistrement"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Enregistrement impossible. L'enregistrement est trop court."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "App. long. pour enreg."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Ag taifeadadh"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Ní féidir an taifeadadh a shábháil. Taifeadadh ró-ghearr."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap.'s coinn. le taifeadadh"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Gravando"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Non se pode gardar a gravación. A gravación é demasiado curta."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Manter tocado para gravar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "રેકોર્ડિંગ"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "રેકોર્ડિંગ સાચવવામાં અસમર્થ. રેકોર્ડિંગ ખૂબ ટૂંકી છે."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "રૅકોર્ડ કરવા માટે ટેપ અને હોલ્ડ કરો"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Ana rikodin"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "מקליט"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "לא ניתן לשמור את ההקלטה. ההקלטה קצרה מדי."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "לחץ לחיצה ארוכה כדי להקליט"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "रिकार्ड कर रहा है..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "रिकॉर्डिंग सुरक्षित करने में असमर्थ। रिकॉर्डिंग बहुत छोटी है।"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "रिकॉर्ड हेतु टैप करके रखे"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Snimanje"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nije moguće spremiti snimku. Snimka je prekratka."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Dodir. i drži za snimanje"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Rögzítés"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nem lehet menteni a felvételt, mert túl rövid."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tartsa a rögzítéshez"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Գրանցում"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Անհնար է պահպանել ձայնագրությունը: Ձայնագրությունը շատ կարճ է:"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Ձյնգրլու հր թակել և պահել"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Merekam"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Tidak dapat menyimpan rekaman. Rekaman terlalu pendek."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Ketuk dan tahan utk rekam"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Na-edekọ"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Upptaka í gangi"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Ekki er hægt að vista upptökuna. Hún er of stutt."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Haltu til að taka upp"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Registrazione"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Premi per registrare"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Registrazione"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Impossibile salvare la registrazione perché troppo breve."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Premi per registrare"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "録音中..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "録音ファイルを保存できません。録音時間が短すぎます。"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "長押しして録音"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "იწერება"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ჩანაწერის შენახვა შეუძლებელია. ჩანაწერი ძალზე მოკლეა."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ჩაწერე ხანგრძლივი შეხებით"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Жазба"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Жазуды сақтау мүмкін емес. Жазба тым қысқа."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Жазу үшін басып тұру"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "កំពុងថត"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ប៉ះឲ្យជាប់ដើម្បីថត"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ರೆಕಾರ್ಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ರೆಕಾರ್ಡಿಂಗ್ ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ರೆಕಾರ್ಡಿಂಗ್ ತುಂಬಾ ಚಿಕ್ಕದಾಗಿದೆ."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ದಾಖಲಿಸಲು ಒತ್ತಿ ಹಿಡಿಯಿರಿ"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "녹음 중..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "녹음하려면 길게 누르세요"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "녹음 중..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "녹음 시간이 너무 짧아 녹음 파일을 저장할 수 없습니다."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "녹음하려면 길게 누르세요"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Жаздырууда..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Жаздырууга таптап карма"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ກໍາລັງບັນທຶກ..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ແຕະຄ້າງໄວ້ເພື່ອບັນທຶກ"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Įrašoma"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Negalima išsaugoti įrašo. Įrašas per trumpas."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Baks., palaikyk. ir įraš."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Ierakstīšana"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nevar saglabāt ierakstu. Ieraksts ir pārāk īss."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Piesk. un turiet,lai ier."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Eo am-pakana..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Се снима"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Не може да се сочува снимката. Прекратка е."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Доп. и држете за снимање"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "റെക്കോര്ഡിംഗ്."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "റെക്കോർഡിംഗ് സംരക്ഷിക്കാനാവില്ല. റെക്കോർഡിംഗ് വളരെ ഹ്രസ്വം."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "റെക്കോർഡുചെയ്യുന്നതിനായി ടാപ്പുചെയ്ത് പിടിക്കുക"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Бичлэг хийж байна..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Товшиж бариад бичлэг хий"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "रेकॉर्डिंग..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "रेकॉर्डिंग जतन करण्यात अक्षम. रेकॉर्डिंग खूपच लहान आहे."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "रेकॉर्ड करण्यासाठी टॅप आणि होल्ड करा"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Merakam"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Tidak dapat menyimpan rakaman. Rakaman terlalu pendek."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Ketik & tahan utk m'yeret"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ဖမ်းယူနေသည်…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ဖမ္းယူေနသည္…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "အသံဖမ္းရန္ ႏွိပ္ၿပီး ထိန္းကိုင္ထားပါ"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Spiller inn"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Kan ikke lagre opptak. Opptaket er for kort."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Trykk og hold for opptak"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "रेकर्डिङ"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "रेकर्डिङ सेव गर्न असमर्थ। रेकर्डिङ एकदमै छोटो छ।"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "रेकर्ड गर्नको लागि ट्याप र होल्ड गर्नुहोस्"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Opname"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Kan opname niet opslaan. Opname te kort."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tik en houd vast voor opn"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ରେକର୍ଡିଂ..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ରେକର୍ଡିଂ ସଞ୍ଚୟ କରିବାକୁ ଅସମର୍ଥ। ରେକର୍ଡିଂ ଅତ୍ୟଧିକ ଛୋଟ।"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ରେକର୍ଡ୍ କରିବାକୁ ଟ୍ୟାପ୍ ଏବଂ ହୋଲ୍ଡ କର"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ਰਿਕਾਰਡ ਹੋ ਰਿਹਾ ਹੈ..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ਰਿਕਾਰਡਿੰਗ ਸੁਰੱਖਿਅਤ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਰਿਕਾਰਡਿੰਗ ਬਹੁਤ ਛੋਟੀ ਹੈ।"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਟੈਪ ਅਤੇ ਹੋਲਡ ਕਰੋ"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nagrywanie"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nie można zapisać nagrania. Nagranie zbyt krótkie."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Dotk.i przytrz., by nagr."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nagrywanie"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Dotk.i przytrz., by nagr."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "A gravar"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Toque s/ soltar p/ gravar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Gravando"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Impossível salvar gravação. Gravação muito curta."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pres. para gravar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "A gravar"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Impossível guardar gravação. Gravação demasiado curta."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Toque s/ soltar p/ gravar"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Înregistrare"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Înregistrarea nu poate fi salvată. Aceasta este prea scurtă."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Menţineţi apăs. pt. înr."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Запись"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Удерживайте для записи"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Запись"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Невозможно сохранить запись. Запись слишком короткая."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Удерживайте для записи"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "පටිගත කරමින්..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "පටිගතකරණය සුරැකිය නොහැක. පටිගතකරණය කෙටි වැඩියි."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "පටිගත කිරීමට තට්ටු කර අල්ලාගෙන සිටි."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nahráva sa"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nahrávka sa nedá uložiť. Nahrávka je príliš krátka."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Nahrávanie ťukn. a podrž."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Snemam"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Posnetka ni mogoče shraniti. Posnetek je prekratek."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Prit. in drž. za snemanje"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Po regjistroj"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Trokit & mbaj për regj."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Snimanje"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Nije moguće sačuvati snimak. Snimak je previše kratak."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Kucni i zadrži za snimak"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Inspelning"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Det går inte att spara inspelning. Inspelningen är för kort."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tryck och håll = inspeln."
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Inanasa"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "பதிவு செய்யப்படுகிறது..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "பதிவைச் சேமிக்க இயலவில்லை. பதிவு மிகவும் சிறியது."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "பதிய டேப் செய்து பிடிk"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "రికార్డ్ అవుతోంది..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "రికార్డింగ్ను సేవ్ చేయడం సాధ్యం కాదు. రికార్డింగ్ చాలా చిన్నదిగా ఉంది."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "రికార్డ్ చేయడానికి ట్యాప్ చేసి, పట్టుకోండి"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Сабткунӣ иҷро мешавад..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Барои сабт кардан, зарба занед"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "บันทึก"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ไม่สามารถบันทึกการบันทึกได้ การบันทึกสั้นเกินไป"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "สัมผัสค้างไว้เพื่อบันทึก"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Ýazýar..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Ýazgy geçirmek üçin degip saklamak"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nagre-record..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "I-tap matagal, i-record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Kaydediyor"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Kayıt kaydedilemiyor. Kayıt çok kısa."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Kayıt için basılı tutun"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Записування"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Неможливо зберегти запис. Запис закороткий."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Натис.і утрим. для запису"
+
--- /dev/null
+#!/bin/sh
+
+PACKAGE=gallery
+SRCROOT=..
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW
+ALL_LINGUAS="en_US en_GB ja ko zh_CN"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot "
+if [ ! -e $POTFILES ] ; then
+ echo "$POTFILES not found"
+ exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+ --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES
+if [ $? -ne 0 ]; then
+ echo "xgettext error"
+ exit 1
+fi
+
+if [ ! -f ${PACKAGE}.po ]; then
+ echo "No such file: ${PACKAGE}.po"
+ exit 1
+fi
+
+rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot
+echo "done"
+
+for LANG in $ALL_LINGUAS; do
+ echo "$LANG : "
+
+ if [ ! -e $LANG.po ] ; then
+ sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po
+ echo "${LANG}.po created"
+ else
+ if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+ if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+ rm -f ${LANG}.new.po
+ else
+ if mv -f ${LANG}.new.po ${LANG}.po; then
+ echo ""
+ else
+ echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+ rm -f ${LANG}.new.po
+ exit 1
+ fi
+ fi
+ else
+ echo "msgmerge for $LANG failed!"
+ rm -f ${LANG}.new.po
+ fi
+ fi
+ echo ""
+done
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ریکارڈ کررہا ہے"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "ریکارڈنگ محفوظ کرنے سے قاصر۔ ریکارڈنگ بہت مختصر ہے۔"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ریکارڈ کرنے کے لئے ٹیپ کریں اور پکڑے رہیں"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Yozib olinmoqda..."
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Yozuvni saqlab bo‘lmaydi. Yozuv juda qisqa."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Yoz/olish u-n teg/turing"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Đang ghi"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Không thể lưu bản ghi âm. Bản ghi âm quá ngắn."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Chạm và giữ để ghi"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Iyarekhoda"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Gbigba le daduro"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "Unable to save recording. Recording too short."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "正在录制…"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "无法保存录音。录音太短。"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "轻敲并按住以录音"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "錄製中"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "無法儲存錄音。錄音太短。"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "輕觸並按住以錄製"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "錄製中"
+
+msgid "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+msgstr "無法儲存錄音。錄音過短。"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "輕觸並按住以錄製"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Iyarekhoda"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "녹음 중..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+#include <dlog.h>
+
+#include "view/audio-recorder-view.h"
+#include "attach-panel-voicerecorder.h"
+#define POPUP_TITLE_MAX (128)
+
+struct ug_data *g_ugd;
+
+#ifdef ENABLE_UG_CREATE_CB
+extern int ug_create_cb(void (*create_cb)(char*,char*,char*,void*), void *user_data);
+#endif
+
+bool __attachPanelVoiceRecorder_get_extra_data_cb(app_control_h service, const char *key, void * user_data);
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "ATTACH_PANEL_VOICERECORDER"
+
+struct ug_data {
+ Evas_Object *base;
+ Evas_Object *pu;
+ ui_gadget_h ug;
+ ui_gadget_h sub_ug;
+ app_control_h service;
+ bool is_caller_attach_panel;
+};
+
+
+#ifdef ENABLE_UG_CREATE_CB
+static void create_cb(char *ug, char* mem, char* parent, void* user_data)
+{
+ LOGD("ug : %s, mem : %s, parent : %s, data : %p", ug, mem, parent, user_data);
+}
+#endif
+
+static void __attachPanelVoiceRecorder_create_content(Evas_Object *parent, struct ug_data *ugd)
+{
+ LOGD("__attachPanelVoiceRecorder_create_content");
+ _main_layout_add(parent, ugd->ug, ugd->service);
+}
+
+bool __attachPanelVoiceRecorder_get_extra_data_cb(app_control_h service, const char *key, void *user_data)
+{
+ char *value = NULL;
+ int ret;
+
+ ret = app_control_get_extra_data(service, key, &value);
+ if (ret) {
+ LOGE("__get_extra_data_cb: error get data(%d)\n", ret);
+ return false;
+ }
+
+ LOGD("extra data : %s, %s\n", key, value);
+ free(value);
+
+ return true;
+}
+
+static Evas_Object *__attachPanelVoiceRecorder_create_fullview(Evas_Object *parent, struct ug_data *ugd)
+{
+ Evas_Object *base = NULL;
+
+ base = elm_layout_add(parent);
+ if (!base)
+ return NULL;
+
+ elm_layout_theme_set(base, "layout", "application", "default");
+ elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW);
+
+ return base;
+}
+
+static Evas_Object *__attachPanelVoiceRecorder_create_frameview(Evas_Object *parent, struct ug_data *ugd)
+{
+ Evas_Object *base = NULL;
+
+ base = elm_layout_add(parent);
+ if (!base)
+ return NULL;
+
+ elm_layout_theme_set(base, "standard", "window", "integration");
+ edje_object_signal_emit(_EDJ(base), "elm,state,show,content", "elm");
+
+ return base;
+}
+
+static void *__attachPanelVoiceRecorder_on_create(ui_gadget_h ug, enum ug_mode mode, app_control_h service,
+ void *priv)
+{
+ Evas_Object *parent = NULL;
+ Evas_Object *content = NULL;
+ struct ug_data *ugd = NULL;
+ char *operation = NULL;
+
+ if (!ug || !priv)
+ return NULL;
+
+ LOGD("__attachPanelVoiceRecorder_on_create start");
+ bindtextdomain("attach-panel-voicerecorder", "/usr/ug/res/locale");
+
+ ugd = priv;
+ ugd->ug = ug;
+ ugd->service = service;
+ g_ugd = ugd;
+
+ app_control_get_operation(service, &operation);
+
+ if (operation == NULL) {
+ /* ug called by ug_create */
+ LOGD("ug called by ug_create\n");
+ } else {
+ /* ug called by service request */
+ LOGD("ug called by service request :%s\n", operation);
+ free(operation);
+ }
+
+ app_control_foreach_extra_data(service, __attachPanelVoiceRecorder_get_extra_data_cb, NULL);
+
+ parent = (Evas_Object *)ug_get_parent_layout(ug);
+ if (!parent)
+ return NULL;
+
+ char *contact_id = NULL;
+ app_control_get_extra_data(service, "__CALLER_PANEL__", &contact_id);
+ if (contact_id && !strcmp(contact_id, "attach-panel")) {
+ if (ugd) {
+ ugd->is_caller_attach_panel = TRUE;
+ }
+ } else {
+ ugd->is_caller_attach_panel = FALSE;
+ }
+
+ mode = ug_get_mode(ug);
+
+ ugd->base = __attachPanelVoiceRecorder_create_fullview(parent, ugd);
+
+ __attachPanelVoiceRecorder_create_content(ugd->base, ugd);
+ return ugd->base;
+}
+
+static void __attachPanelVoiceRecorder_on_start(ui_gadget_h ug, app_control_h service, void *priv)
+{
+#if 0
+ int i;
+ pthread_t p_thread[10];
+ int thr_id;
+ int status;
+ int a = 1;
+
+ for (i=0; i<10; i++) {
+ thr_id = pthread_create(&p_thread[i], NULL, __attachPanelVoiceRecorder_start_t_func, (void*)&a);
+ if (thr_id < 0) {
+ perror("thread create error: ");
+ exit(0);
+ }
+ pthread_detach(p_thread[i]);
+ }
+#endif
+}
+
+static void __attachPanelVoiceRecorder_on_pause(ui_gadget_h ug, app_control_h service, void *priv)
+{
+}
+
+static void __attachPanelVoiceRecorder_on_resume(ui_gadget_h ug, app_control_h service, void *priv)
+{
+ LOGD("%s : called\n", __func__);
+}
+
+static void __attachPanelVoiceRecorder_on_destroy(ui_gadget_h ug, app_control_h service, void *priv)
+{
+ struct ug_data *ugd;
+ LOGD("%s : called\n", __func__);
+ if (!ug || !priv)
+ return;
+
+ ugd = priv;
+ evas_object_del(ugd->base);
+ ugd->base = NULL;
+}
+
+static void __attachPanelVoiceRecorder_on_message(ui_gadget_h ug, app_control_h msg, app_control_h service,
+ void *priv)
+{
+ if (!ug || !priv) {
+ LOGD("Invalid ug or priv");
+ return;
+ }
+
+ struct ug_data *ugd = NULL;
+ ugd = priv;
+ char *display_mode = NULL;
+ if (ugd->is_caller_attach_panel) {
+ LOGD("called by attach panel ");
+ app_control_get_extra_data(msg, APP_CONTROL_DATA_SELECTION_MODE, &display_mode);
+ if (display_mode) {
+ if(!strcmp(display_mode, "single")) {
+ //change to compact view
+ LOGD("compact view ");
+ _audio_recorder_view_set_view_layout(AUDIO_RECORDER_COMPACT_VIEW);
+ } else if (display_mode && !strcmp(display_mode, "multiple")) {
+ //change to full view
+ LOGD("full view");
+ _audio_recorder_view_set_view_layout(AUDIO_RECORDER_FULL_VIEW);
+ } else {
+ LOGD("invalid mode: %s", display_mode);
+ }
+ }
+ }
+}
+
+static void __attachPanelVoiceRecorder_on_event(ui_gadget_h ug, enum ug_event event, app_control_h service,
+ void *priv)
+{
+ /*int degree = -1;*/
+
+ /*struct ug_data *ugd = priv;*/
+
+ switch (event) {
+ case UG_EVENT_LOW_MEMORY:
+ break;
+ case UG_EVENT_LOW_BATTERY:
+ break;
+ case UG_EVENT_LANG_CHANGE:
+ break;
+ default:
+ break;
+ }
+}
+
+static void __attachPanelVoiceRecorder_on_key_event(ui_gadget_h ug, enum ug_key_event event,
+ app_control_h service, void *priv)
+{
+ if (!ug)
+ return;
+
+ switch (event) {
+ case UG_KEY_EVENT_END:
+ ug_destroy_me(ug);
+ break;
+ default:
+ break;
+ }
+}
+
+static void __attachPanelVoiceRecorder_on_destroying(ui_gadget_h ug, app_control_h service, void *priv)
+{
+ LOGD("%s : called\n", __func__);
+ _audio_recorder_view_destroy();
+}
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ struct ug_data *ugd;
+
+ if (!ops)
+ return -1;
+
+ ugd = calloc(1, sizeof(struct ug_data));
+ if (!ugd)
+ return -1;
+
+ ops->create = __attachPanelVoiceRecorder_on_create;
+ ops->start = __attachPanelVoiceRecorder_on_start;
+ ops->pause = __attachPanelVoiceRecorder_on_pause;
+ ops->resume = __attachPanelVoiceRecorder_on_resume;
+ ops->destroy = __attachPanelVoiceRecorder_on_destroy;
+ ops->message = __attachPanelVoiceRecorder_on_message;
+ ops->event = __attachPanelVoiceRecorder_on_event;
+ /*ops->key_event = __attachPanelVoiceRecorder_on_key_event;*/
+ ops->destroying = __attachPanelVoiceRecorder_on_destroying;
+ ops->priv = ugd;
+
+ return 0;
+}
+
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+ struct ug_data *ugd;
+
+ if (!ops)
+ return;
+
+ /*ugd = ops->priv;
+ if (ugd)
+ free(ugd); */
+}
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include "utils/config.h"
+#include "utils/audio-recorder-utils.h"
+#include "utils/logger.h"
+
+#include <app.h>
+#include <app_preference.h>
+
+typedef struct
+{
+ recorder_audio_codec_e *codec_list;
+ int len;
+} supported_encoder_data;
+
+typedef struct
+{
+ int samplerate;
+ int channel;
+ int bitrate;
+ recorder_audio_codec_e codec;
+ audio_recording_quality_e quality;
+} audio_quality_table;
+
+static const audio_quality_table audio_quality[] =
+{
+ {8000, 1, 256000, RECORDER_AUDIO_CODEC_PCM, AQ_LOW},
+ {22050, 2, 706000, RECORDER_AUDIO_CODEC_PCM, AQ_MEDIUM},
+ {44100, 2, 1411000, RECORDER_AUDIO_CODEC_PCM, AQ_HIGH},
+ {8000, 1, 4750, RECORDER_AUDIO_CODEC_AMR, AQ_LOW},
+ {8000, 1, 7950, RECORDER_AUDIO_CODEC_AMR, AQ_MEDIUM},
+ {8000, 1, 12200, RECORDER_AUDIO_CODEC_AMR, AQ_HIGH},
+ {22050, 2, 120000, RECORDER_AUDIO_CODEC_AAC, AQ_LOW},
+ {44100, 2, 220000, RECORDER_AUDIO_CODEC_AAC, AQ_MEDIUM},
+ {44100, 2, 320000, RECORDER_AUDIO_CODEC_AAC, AQ_HIGH}
+};
+
+static bool _recorder_supported_audio_encoder_cb(recorder_audio_codec_e codec, void *user_data);
+
+void audio_recorder_save_preprocessing(bool preprocessing)
+{
+ //preference_set_boolean(VCONF_PREPROC_KEY, preprocessing);
+}
+
+bool audio_recorder_read_preprocessing()
+{
+ bool val = false;
+ //_get_boolean(VCONF_PREPROC_KEY, &val);
+ return val;
+}
+
+void audio_recorder_set_quality(recorder_h recorder, audio_recording_quality_e quality)
+{
+ RETM_IF(!recorder, "recorder is null");
+
+ int size = sizeof(audio_quality) / sizeof(audio_quality_table);
+
+ recorder_audio_codec_e codec = RECORDER_AUDIO_CODEC_DISABLE;
+ recorder_get_audio_encoder(recorder, &codec);
+
+ if (codec != RECORDER_AUDIO_CODEC_DISABLE) {
+ int i;
+ for (i = 0; i < size; ++i) {
+ if (audio_quality[i].codec == codec && audio_quality[i].quality == quality) {
+ recorder_attr_set_audio_samplerate(recorder, audio_quality[i].samplerate);
+ recorder_attr_set_audio_channel(recorder, audio_quality[i].channel);
+ recorder_attr_set_audio_encoder_bitrate(recorder, audio_quality[i].bitrate);
+ break;
+ }
+ }
+ }
+}
+
+
+void audio_recorder_save_quality(audio_recording_quality_e quality)
+{
+ // preference_set_int(VCONF_QUALITY_KEY, quality);
+}
+
+audio_recording_quality_e audio_recorder_read_quality()
+{
+ int val = AQ_LOW;
+ // preference_get_int(VCONF_QUALITY_KEY, &val);
+ return val;
+}
+
+recorder_audio_codec_e *audio_recorder_get_supported_encoder(recorder_h recorder, int *list_length)
+{
+ supported_encoder_data data = {0};
+ data.codec_list = NULL;
+ data.len = 0;
+
+ int res = recorder_foreach_supported_audio_encoder(recorder, _recorder_supported_audio_encoder_cb, &data);
+
+ if (res && list_length) {
+ *list_length = data.len;
+ }
+
+ return data.codec_list;
+}
+
+recorder_file_format_e audio_recorder_get_file_format_by_codec(recorder_h recorder, recorder_audio_codec_e codec)
+{
+ switch (codec){
+ case RECORDER_AUDIO_CODEC_AMR:
+ return RECORDER_FILE_FORMAT_AMR;
+ break;
+
+ case RECORDER_AUDIO_CODEC_AAC:
+ return RECORDER_FILE_FORMAT_MP4;
+ break;
+
+ case RECORDER_AUDIO_CODEC_PCM:
+ return RECORDER_FILE_FORMAT_WAV;
+ break;
+
+ case RECORDER_AUDIO_CODEC_VORBIS:
+ return RECORDER_FILE_FORMAT_OGG;
+ break;
+
+ default:
+ break;
+ }
+
+ assert(false);
+ return RECORDER_FILE_FORMAT_WAV;
+}
+
+
+const char *audio_recorder_get_preproc_file_name_by_codec(recorder_audio_codec_e codec)
+{
+ switch (codec) {
+ case RECORDER_AUDIO_CODEC_AMR:
+ return get_resource_path(PREPROCAMR);
+ break;
+
+ case RECORDER_AUDIO_CODEC_AAC:
+ return get_resource_path(PREPROCAAC);
+ break;
+
+ case RECORDER_AUDIO_CODEC_PCM:
+ return get_resource_path(PREPROCPCM);
+ break;
+
+ default:
+ break;
+ }
+
+ return "";
+}
+
+static bool _recorder_supported_audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
+{
+ RETVM_IF(!user_data, false, "data is NULL");
+ bool result = false;
+ supported_encoder_data *data = user_data;
+
+ if (codec != RECORDER_AUDIO_CODEC_DISABLE) {
+ data->codec_list = realloc(data->codec_list, sizeof(recorder_audio_codec_e) * (data->len + 1));
+ if (!data->codec_list) {
+ return false;
+ }
+ data->codec_list[data->len] = codec;
+ ++(data->len);
+ result = true;
+ }
+
+ return result;
+}
+
--- /dev/null
+/*
+* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include "utils/config.h"
+#include "utils/audio-recorder-utils.h"
+#include "view/audio-recorder-view.h"
+#include <efl_extension.h>
+
+#include <assert.h>
+#include <app_control.h>
+#include <media_content.h>
+
+#define MAX_LABEL_LEN 256
+#define MAX_TIME 1200
+#define TIMER_UPD_PERIOD 1.0
+#define PREPROC_FILE_BUF_SIZE 512
+
+#define VR_AUDIO_SOURCE_SAMPLERATE_LOW 8000
+#define VR_AUDIO_SOURCE_SAMPLERATE_HIGH 44100
+#define VR_AUDIO_SOURCE_FORMAT MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE
+#define VR_AUDIO_SOURCE_CHANNEL 1
+#define VR_AUDIO_ENCODER_BITRATE_AMR 12200
+#define VR_AUDIO_ENCODER_BITRATE_AAC 64000
+#define VR_AUDIO_TIME_LIMIT (100 * 60 * 60)
+#define STR_RECORDER_TITLE "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+#define STR_RECORDING "IDS_VR_BODY_RECORDING"
+#define STR_NOTIFICATION_TEXT "IDS_VR_TPOP_UNABLE_TO_SAVE_RECORDING_RECORDING_TOO_SHORT"
+#define VR_STR_DOMAIN_SYS "sys_string"
+#define VR_STR_DOMAIN_LOCAL "attach-panel-voicerecorder"
+
+static audio_recorder_view *viewhandle = NULL;
+
+static void _codec_set(audio_recorder_view *view, recorder_audio_codec_e codec);
+static void _preproc_set(audio_recorder_view *view, bool preproc);
+static void _recorder_create(audio_recorder_view *view);
+static void _recorder_start(audio_recorder_view *view);
+static void _recorder_pause(audio_recorder_view *view);
+static void _recorder_stop(audio_recorder_view *view);
+static void _recorder_cancel(audio_recorder_view *view);
+static void _recorder_preproc_set(audio_recorder_view *view, bool preproc);
+static void _recorder_apply_settings(audio_recorder_view *view);
+static void _get_supported_codec_list(audio_recorder_view *view);
+static void _on_recorder_audio_stream_cb(void* stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data);
+static void _on_recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data);
+static void _on_recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data);
+static bool _main_file_register(const char *filename);
+static void _recorder_destroy(audio_recorder_view *view);
+/*static void _on_main_layout_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);*/
+
+#define APP_CONTROL_DATA_FILE_PATH "http://tizen.org/appcontrol/data/file_path"
+
+void _audio_recorder_view_set_data(void *data) {
+ /*RETM_IF(!data, "data is NULL");*/
+ viewhandle = (audio_recorder_view *)data;
+}
+
+void *_audio_recorder_view_get_data() {
+ if (viewhandle) {
+ return viewhandle;
+ }
+ return NULL;
+}
+
+void _audio_recorder_view_destroy() {
+ LOGD("Enter _audio_recorder_view_destroy()");
+ audio_recorder_view *view = (audio_recorder_view *)_audio_recorder_view_get_data();
+ if (view) {
+ _recorder_destroy(view);
+ }
+ /*free(viewhandle);*/
+ _audio_recorder_view_set_data(NULL);
+}
+
+static void _on_start_btn_pressed_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ LOGD("Enter _on_start_btn_pressed_cb");
+ RETM_IF(!data, "data is NULL");
+
+ audio_recorder_view *view = (audio_recorder_view *)data;
+ if (!view->is_recording) {
+ view->is_recording = TRUE;
+ _recorder_start(view);
+ }
+
+}
+
+static void _on_start_btn_clicked_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ LOGD("Enter _on_start_btn_clicked_cb");
+ RETM_IF(!data, "data is NULL");
+
+ audio_recorder_view *view = (audio_recorder_view *)data;
+}
+
+static void _on_stop_btn_pressed_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ LOGD("Enter _on_stop_btn_pressed_cb");
+ RETM_IF(!data, "data is NULL");
+
+ audio_recorder_view *view = (audio_recorder_view *)data;
+
+ if(view->is_recording) {
+ view->is_recording = FALSE;
+ _recorder_stop(view);
+ }
+}
+
+static void _on_stop_btn_clicked_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ LOGD("Enter _on_stop_btn_clicked_cb");
+ RETM_IF(!data, "data is NULL");
+
+ audio_recorder_view *view = (audio_recorder_view *)data;
+
+ if(view->is_recording) {
+ view->is_recording = FALSE;
+ _recorder_stop(view);
+ } else {
+ char *domain = VR_STR_DOMAIN_LOCAL;
+ int ret = notification_status_message_post(dgettext(domain, STR_NOTIFICATION_TEXT));
+ if (ret != 0)
+ LOGD("notification_status_message_post()... [0x%x]", ret);
+ }
+}
+
+static void _on_pause_pressed_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ LOGD("Enter _on_pause_pressed_cb");
+ RETM_IF(!data, "data is NULL");
+
+ audio_recorder_view *view = (audio_recorder_view *)data;
+
+ _recorder_pause(view);
+}
+
+static void _on_cancel_btn_pressed_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ RETM_IF(!data, "data is NULL");
+ audio_recorder_view *view = (audio_recorder_view *)data;
+
+ _recorder_cancel(view);
+}
+
+static void _recorder_create(audio_recorder_view *view)
+{
+ LOGD("Enter _recorder_create");
+
+ int ret = recorder_create_audiorecorder(&view->recorder);
+ if (ret == RECORDER_ERROR_NONE) {
+ recorder_set_recording_status_cb(view->recorder, _on_recording_status_cb, view);
+ if (view->limitsize > 0) {
+ recorder_attr_set_size_limit(view->recorder, (view->limitsize) / 1024);
+ }
+ recorder_set_recording_limit_reached_cb(view->recorder, _on_recording_limit_reached_cb, view);
+ } else {
+ LOGD("recorder_create_audiorecorder not successful error code: %d", ret);
+ }
+}
+
+static void _get_supported_codec_list(audio_recorder_view *view)
+{
+ RETM_IF(!view, "view is NULL");
+
+ if (!view->codec_list) {
+ view->codec_list = audio_recorder_get_supported_encoder(view->recorder, &view->codec_list_len);
+ }
+}
+
+static void _codec_set(audio_recorder_view *view, recorder_audio_codec_e codec)
+{
+ RETM_IF(!view, "view is NULL");
+
+ view->codec = codec;
+ view->file_format = audio_recorder_get_file_format_by_codec(view->recorder, codec);
+}
+
+static void _preproc_set(audio_recorder_view *view, bool preproc)
+{
+ audio_recorder_save_preprocessing(preproc);
+}
+
+static void _recorder_apply_settings(audio_recorder_view *view)
+{
+ if (view->recorder) {
+ recorder_attr_set_audio_channel(view->recorder, 2);
+ recorder_attr_set_audio_device(view->recorder, RECORDER_AUDIO_DEVICE_MIC);
+ recorder_attr_set_time_limit(view->recorder, MAX_TIME);
+
+ recorder_set_filename(view->recorder, view->file_path);
+ recorder_set_file_format(view->recorder, view->file_format);
+ LOGD("file_format: %d", view->file_format);
+ recorder_set_audio_encoder(view->recorder, view->codec);
+ recorder_attr_set_audio_samplerate(view->recorder, view->sample_rate);
+ recorder_attr_set_audio_encoder_bitrate(view->recorder, view->bitrate);
+
+ recorder_prepare(view->recorder);
+
+ char *domain = VR_STR_DOMAIN_LOCAL;
+ elm_object_domain_translatable_part_text_set(view->layout, "recorder_title", domain, STR_RECORDING);
+
+ }
+}
+
+static void _recorder_preproc_set(audio_recorder_view *view, bool preproc)
+{
+ if (preproc) {
+ recorder_audio_codec_e codec = RECORDER_AUDIO_CODEC_DISABLE;
+ recorder_get_audio_encoder(view->recorder, &codec);
+
+ if (codec != RECORDER_AUDIO_CODEC_DISABLE) {
+ if (view->preproc_file) {
+ fclose(view->preproc_file);
+ }
+
+ const char *file_name = audio_recorder_get_preproc_file_name_by_codec(codec);
+ if (file_name) {
+ view->preproc_file = fopen(file_name, "r");
+ assert(view->preproc_file);
+ }
+
+ recorder_set_audio_stream_cb(view->recorder, _on_recorder_audio_stream_cb, view);
+ }
+ } else {
+ recorder_unset_audio_stream_cb(view->recorder);
+ }
+}
+
+static void _recorder_destroy(audio_recorder_view *view)
+{
+ LOGD("Enter _recorder_destroy");
+ if (view->recorder) {
+ recorder_cancel(view->recorder);
+ recorder_unprepare(view->recorder);
+ recorder_destroy(view->recorder);
+ view->recorder = NULL;
+ }
+ if(view->gesture_long_tap) {
+ evas_object_del(view->gesture_long_tap);
+ }
+ LOGD("End _recorder_destroy");
+}
+
+static void _recorder_start(audio_recorder_view *view)
+{
+ LOGD("Enter _recorder_start");
+ if (!view->recorder) {
+ LOGD("Error view->recorder is null");
+ return;
+ }
+
+ recorder_state_e rec_state;
+ recorder_get_state(view->recorder, &rec_state);
+
+ if (rec_state == RECORDER_STATE_PAUSED) {
+ recorder_start(view->recorder);
+ return;
+ }
+
+ struct tm localtime = {0,};
+ time_t rawtime = time(NULL);
+ char filename[256] = {'\0',};
+ char *data_path = "/opt/usr/media/Music/";
+
+#if 0
+ /*For MMS*/
+ view->codec = RECORDER_AUDIO_CODEC_AMR;
+ view->file_format = RECORDER_FILE_FORMAT_AMR;
+ view->sample_rate = VR_AUDIO_SOURCE_SAMPLERATE_LOW;
+ view->bitrate = VR_AUDIO_ENCODER_BITRATE_AMR;
+ if (localtime_r(&rawtime, &localtime) != NULL) {
+ snprintf(filename, sizeof(filename), "Voice-%04i-%02i-%02i_%02i:%02i:%02i.amr",
+ localtime.tm_year + 1900, localtime.tm_mon + 1, localtime.tm_mday,
+ localtime.tm_hour, localtime.tm_min, localtime.tm_sec);
+ }
+#else
+ /*For High Quality*/
+ view->codec = RECORDER_AUDIO_CODEC_AAC;
+ view->file_format = RECORDER_FILE_FORMAT_MP4;
+ view->sample_rate = VR_AUDIO_SOURCE_SAMPLERATE_HIGH;
+ view->bitrate = VR_AUDIO_ENCODER_BITRATE_AAC;
+ if (localtime_r(&rawtime, &localtime) != NULL) {
+ snprintf(filename, sizeof(filename), "Voice-%04i-%02i-%02i_%02i:%02i:%02i.m4a",
+ localtime.tm_year + 1900, localtime.tm_mon + 1, localtime.tm_mday,
+ localtime.tm_hour, localtime.tm_min, localtime.tm_sec);
+ }
+#endif
+ /*set file path*/
+ snprintf(view->file_path, PATH_MAX, "%s%s", data_path, filename);
+ _recorder_apply_settings(view);
+ recorder_prepare(view->recorder);
+ recorder_start(view->recorder);
+}
+
+static bool _main_file_register(const char *filename)
+{
+ LOGD("Enter _main_file_register");
+ int err_code = 0;
+ media_info_h info = NULL;
+
+ char *register_file = strdup(filename);
+ if (register_file == NULL) {
+ LOGD("Failed to allocate memory");
+ return FALSE;
+ }
+
+ err_code = media_info_insert_to_db(register_file, &info);
+ if (err_code != MEDIA_CONTENT_ERROR_NONE) {
+ LOGD("failed to media_file_register() : [%s], [%d]", register_file, err_code);
+ media_info_destroy(info);
+ free(register_file);
+ return FALSE;
+ }
+
+ media_info_destroy(info);
+ free(register_file);
+
+ LOGD("End _main_file_register");
+ return TRUE;
+}
+
+static void _recorder_stop(audio_recorder_view *view)
+{
+ LOGD("_recorder_stop");
+ int ret = 0;
+ int commitResult = RECORDER_ERROR_NONE;
+ char **path_array = NULL;
+
+ if (view->recorder) {
+ commitResult = recorder_commit(view->recorder);
+ if (commitResult != RECORDER_ERROR_NONE) {
+ LOGD("recorder_commit failed Error [%d]", recorder_commit);
+ }
+
+ _main_file_register(view->file_path);
+ elm_object_part_text_set(view->layout, "recorder_timer", "00 : 00");
+ char *domain = VR_STR_DOMAIN_LOCAL;
+ elm_object_domain_translatable_part_text_set(view->layout, "recorder_title", domain, STR_RECORDER_TITLE);
+
+ /*Return the File To Caller.*/
+ app_control_h app_control = NULL;
+ ret = app_control_create(&app_control);
+ if (ret == APP_CONTROL_ERROR_NONE) {
+ LOGD("APP_CONTROL_ERROR_NONE");
+ if (commitResult == RECORDER_ERROR_NONE) {
+ path_array = (char**)calloc(1, sizeof(char *));
+ if (path_array == NULL) {
+ LOGD("Failed to allocate memory");
+ app_control_destroy(app_control);
+ return;
+ }
+ path_array[0] = strdup(view->file_path);
+ ret = app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_PATH, (const char **)path_array, 1);
+ if (ret != APP_CONTROL_ERROR_NONE) {
+ LOGD("Add selected path failed!");
+ }
+ ret = app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_SELECTED , (const char **)path_array, 1);
+ if (ret != APP_CONTROL_ERROR_NONE) {
+ LOGD("Add selected path failed!");
+ }
+ }
+ ret = ug_send_result(view->ug_handle, app_control);
+ if (ret < 0) {
+ LOGD("ug_send_result failed");
+ }
+ app_control_destroy(app_control);
+ if (path_array != NULL) {
+ if (path_array[0] != NULL) {
+ free(path_array[0]);
+ }
+ free(path_array);
+ }
+ /*ug_destroy_me(view->ug_handle);*/
+ } else {
+ VR_DEBUG("Failed to create app control\n");
+ }
+ }
+}
+
+static void _recorder_pause(audio_recorder_view *view)
+{
+ LOGD(" Enter _recorder_pause");
+
+ if (view->recorder) {
+ int mmf_ret = RECORDER_ERROR_NONE;
+
+ recorder_state_e state_now;
+ mmf_ret = recorder_get_state(view->recorder, &state_now);
+
+ if (mmf_ret != RECORDER_ERROR_NONE) {
+ VR_DEBUG("recorder_get_state Error : %x\n", mmf_ret);
+
+ LOGD("recorder_get_state failed, Recorder can't be paused");
+ return; /* can not pause ! keep old state. */
+ }
+
+ if (state_now == RECORDER_STATE_PAUSED) {
+ VR_DEBUG("\nrecorder already PAUSED\n");
+ LOGD("Recorder can't be paused, already pasued");
+ return; /* already pause ! keep old state. */
+ }
+
+ LOGD("Recorder is paused");
+ recorder_pause(view->recorder);
+ }
+}
+
+static void _recorder_cancel(audio_recorder_view *view)
+{
+ recorder_state_e rec_state = RECORDER_STATE_NONE;
+ recorder_get_state(view->recorder, &rec_state);
+
+ if (rec_state == RECORDER_STATE_PAUSED || rec_state == RECORDER_STATE_RECORDING) {
+ recorder_cancel(view->recorder);
+ elm_object_part_text_set(view->layout,"recorder_timer","00 : 00");
+ char *domain = VR_STR_DOMAIN_LOCAL;
+ elm_object_domain_translatable_part_text_set(view->layout, "recorder_title", domain, STR_RECORDER_TITLE);
+ }
+}
+
+/*static void _destroy(audio_recorder_view *view)
+{
+ app_reset_cbs(view->app);
+ _recorder_destroy(view);
+
+ if (view->preproc_file) {
+ fclose(view->preproc_file);
+ }
+
+ free(view->codec_list);
+ free(view);
+}*/
+
+void _main_layout_add(Evas_Object *layout, ui_gadget_h ug_handle, app_control_h service)
+{
+ audio_recorder_view *view = calloc(1, sizeof(audio_recorder_view));
+ if (!view) {
+ LOGD("Error Failed to create view");
+ return;
+ }
+
+ _audio_recorder_view_set_data(view);
+
+ view->layout = layout;
+ view->ug_handle = ug_handle;
+ view->is_recording = FALSE;
+ view->service = service;
+ view->limitsize = 0;
+ int ret = 0;
+ ret = app_control_get_extra_data(service, "http://tizen.org/appcontrol/data/total_size", &(view->limitsize));
+ if (ret != APP_CONTROL_ERROR_NONE) {
+ LOGD("Failed to get total_size information!!");
+ }
+ LOGD("Size limit = %llu", view->limitsize);
+
+ _recorder_create(view);
+
+ // set layout file
+ double scale = elm_config_scale_get();
+ if ((scale - 1.8) < 0.0001) {
+ LOGD("WVGA");
+ elm_layout_file_set(layout, "/usr/ug/res/edje/attach-panel-voicerecorder/audio_recorder.edj", "audio_recorder_wvga");
+ } else if ((scale - 2.6) < 0.0001) {
+ LOGD("HD");
+ elm_layout_file_set(layout, "/usr/ug/res/edje/attach-panel-voicerecorder/audio_recorder.edj", "audio_recorder_hd");
+ } else {
+ elm_layout_file_set(layout, "/usr/ug/res/edje/attach-panel-voicerecorder/audio_recorder.edj", "audio_recorder_hd");
+ }
+
+ char *domain = VR_STR_DOMAIN_LOCAL;
+ elm_object_domain_translatable_part_text_set(view->layout, "recorder_title", domain, STR_RECORDER_TITLE);
+ Evas_Object *rec_btn = NULL;
+ rec_btn = elm_button_add(view->layout);
+ elm_button_autorepeat_set(rec_btn, EINA_TRUE);
+ evas_object_size_hint_weight_set(rec_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(rec_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_color_set(rec_btn, 0, 0, 0, 0);
+ elm_object_part_content_set(view->layout,"record_icon_swallow",rec_btn);
+ evas_object_show(rec_btn);
+ view->gesture_long_tap = elm_gesture_layer_add(rec_btn);
+
+ elm_gesture_layer_cb_set(view->gesture_long_tap, ELM_GESTURE_N_LONG_TAPS, ELM_GESTURE_STATE_START, _on_start_btn_clicked_cb, view);
+ elm_gesture_layer_cb_set(view->gesture_long_tap, ELM_GESTURE_N_LONG_TAPS, ELM_GESTURE_STATE_MOVE, _on_start_btn_pressed_cb, view);
+ elm_gesture_layer_cb_set(view->gesture_long_tap, ELM_GESTURE_N_LONG_TAPS, ELM_GESTURE_STATE_END, _on_stop_btn_pressed_cb, view);
+ elm_gesture_layer_cb_set(view->gesture_long_tap, ELM_GESTURE_N_LONG_TAPS, ELM_GESTURE_STATE_ABORT, _on_stop_btn_clicked_cb, view);
+ elm_gesture_layer_attach(view->gesture_long_tap, rec_btn);
+
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ return view->layout;
+}
+
+static void _on_recorder_audio_stream_cb(void* stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data)
+{
+ audio_recorder_view *view = user_data;
+
+ if (view && view->preproc_file && !feof(view->preproc_file)) {
+ char buf[PREPROC_FILE_BUF_SIZE] = {0,};
+ int read_bytes = 0;
+
+ while (read_bytes != size) {
+ int request_bytes = MIN(PREPROC_FILE_BUF_SIZE, size - read_bytes);
+ int read = fread(buf, sizeof(char), request_bytes, view->preproc_file);
+
+ if (!read) {
+ break;
+ }
+
+ memcpy(stream + read_bytes, buf, read);
+ read_bytes += read;
+ }
+ }
+}
+
+static void _on_recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data)
+{
+ audio_recorder_view *view = (audio_recorder_view *)user_data;
+
+ if (view) {
+ recorder_state_e rec_state = RECORDER_STATE_NONE;
+ recorder_get_state(view->recorder, &rec_state);
+ if (rec_state == RECORDER_STATE_PAUSED || rec_state == RECORDER_STATE_READY) {
+ return;
+ }
+
+ int min = 0;
+ int sec = 0;
+
+ if (elapsed_time >= 60000) {
+ min = elapsed_time/60000;
+ sec = elapsed_time % 60000;
+ sec = sec/1000;
+ } else {
+ min = 0;
+ sec = elapsed_time/1000;
+ }
+
+ //LOGD("elapsed time is %d",elapsed_time);
+ char timer_string[MAX_LABEL_LEN] = { '\0' };
+
+ if (elapsed_time > 0) {
+ snprintf(timer_string, MAX_LABEL_LEN, "%02d : %02d", min,sec);
+ }
+
+ elm_object_part_text_set(view->layout,"recorder_timer",timer_string);
+ evas_object_show(view->layout);
+ }
+}
+
+static void _on_recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
+{
+ audio_recorder_view *view = (audio_recorder_view *)user_data;
+ if (view) {
+ if (type == RECORDER_RECORDING_LIMIT_TIME) {
+ _recorder_stop(view);
+ } else if (type == RECORDER_RECORDING_LIMIT_SIZE) {
+ _recorder_stop(view);
+ }
+ }
+}
+
+/*static void _on_main_layout_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ audio_recorder_view *view = data;
+ if (view) {
+ _destroy(view);
+ }
+}*/
+
+void _audio_recorder_view_set_view_layout(AudioRecorderViewType audio_recorder_view_type)
+{
+ LOGD("_audio_recorder_view_set_view_layout - START");
+
+ audio_recorder_view *view = (audio_recorder_view *)_audio_recorder_view_get_data();
+ RETM_IF(!view, "view is NULL");
+
+ if (audio_recorder_view_type == AUDIO_RECORDER_COMPACT_VIEW) {
+ elm_object_signal_emit(view->layout, "compact_view", "prog");
+ LOGD("Audio recorder view is set to COMPACT_VIEW");
+ } else {
+ elm_object_signal_emit(view->layout, "full_view", "prog");
+ LOGD("Audio recorder view is set to FULL_VIEW");
+ }
+
+ LOGD("_audio_recorder_view_set_view_layout - END");
+}