[attach-panel-voicerecorder] Merge basecode from tizen_2.4 93/49593/1
authorkamesh <kamesh.kvss@samsung.com>
Thu, 15 Oct 2015 09:41:39 +0000 (15:11 +0530)
committerkamesh <kamesh.kvss@samsung.com>
Thu, 15 Oct 2015 09:41:39 +0000 (15:11 +0530)
Change-Id: I9108b3e9bb9e3a1fb63e31df5822b8ef8c50f6c3
Signed-off-by: kamesh <kamesh.kvss@samsung.com>
141 files changed:
CMakeLists.txt [new file with mode: 0644]
LICENSE [new file with mode: 0644]
NOTICE [new file with mode: 0644]
attach-panel-voicerecorder.manifest [new file with mode: 0644]
attach-panel-voicerecorder.xml [new file with mode: 0644]
inc/attach-panel-voicerecorder.h [new file with mode: 0644]
inc/utils/audio-recorder-utils.h [new file with mode: 0644]
inc/utils/config.h [new file with mode: 0644]
inc/utils/logger.h [new file with mode: 0644]
inc/view/audio-recorder-view.h [new file with mode: 0644]
packaging/attach-panel-voicerecorder.spec [new file with mode: 0644]
res/edje/audio_recorder.edc [new file with mode: 0644]
res/images/AGIF/animated.gif [new file with mode: 0644]
res/images/bg.png [new file with mode: 0644]
res/images/bg_pressed.png [new file with mode: 0644]
res/images/drawer.png [new file with mode: 0644]
res/images/icon_close.png [new file with mode: 0644]
res/images/icon_pause.png [new file with mode: 0644]
res/images/icon_play.png [new file with mode: 0644]
res/images/icon_rec.png [new file with mode: 0644]
res/images/icon_stop.png [new file with mode: 0644]
res/images/mic.png [new file with mode: 0644]
res/images/toolbar_control_bg.png [new file with mode: 0644]
res/images/toolbar_control_stop.png [new file with mode: 0644]
res/images/toolbar_icon_rec.png [new file with mode: 0644]
res/images/voice_attach_bg.png [new file with mode: 0644]
res/po/CMakeLists.txt [new file with mode: 0644]
res/po/af.po [new file with mode: 0644]
res/po/am.po [new file with mode: 0644]
res/po/ar.po [new file with mode: 0644]
res/po/as.po [new file with mode: 0644]
res/po/az.po [new file with mode: 0644]
res/po/be_BY.po [new file with mode: 0644]
res/po/bg.po [new file with mode: 0644]
res/po/bn.po [new file with mode: 0644]
res/po/bn_BD.po [new file with mode: 0644]
res/po/ca.po [new file with mode: 0644]
res/po/cs.po [new file with mode: 0644]
res/po/da.po [new file with mode: 0644]
res/po/de.po [new file with mode: 0644]
res/po/el.po [new file with mode: 0644]
res/po/el_GR.po [new file with mode: 0644]
res/po/en.po [new file with mode: 0644]
res/po/en_PH.po [new file with mode: 0644]
res/po/en_US.po [new file with mode: 0644]
res/po/es.po [new file with mode: 0644]
res/po/es_AR.po [new file with mode: 0644]
res/po/es_CL.po [new file with mode: 0644]
res/po/es_CO.po [new file with mode: 0644]
res/po/es_ES.po [new file with mode: 0644]
res/po/es_PE.po [new file with mode: 0644]
res/po/es_US.po [new file with mode: 0644]
res/po/es_VE.po [new file with mode: 0644]
res/po/et.po [new file with mode: 0644]
res/po/eu.po [new file with mode: 0644]
res/po/fa.po [new file with mode: 0644]
res/po/fi.po [new file with mode: 0644]
res/po/fr.po [new file with mode: 0644]
res/po/fr_CA.po [new file with mode: 0644]
res/po/ga.po [new file with mode: 0644]
res/po/gl.po [new file with mode: 0644]
res/po/gu.po [new file with mode: 0644]
res/po/ha.po [new file with mode: 0644]
res/po/he.po [new file with mode: 0644]
res/po/hi.po [new file with mode: 0644]
res/po/hr.po [new file with mode: 0644]
res/po/hu.po [new file with mode: 0644]
res/po/hy.po [new file with mode: 0644]
res/po/id.po [new file with mode: 0644]
res/po/igbo.po [new file with mode: 0644]
res/po/is.po [new file with mode: 0644]
res/po/it.po [new file with mode: 0644]
res/po/it_IT.po [new file with mode: 0644]
res/po/ja_JP.po [new file with mode: 0644]
res/po/ka.po [new file with mode: 0644]
res/po/kk.po [new file with mode: 0644]
res/po/km.po [new file with mode: 0644]
res/po/kn.po [new file with mode: 0644]
res/po/ko.po [new file with mode: 0644]
res/po/ko_KR.po [new file with mode: 0644]
res/po/ky_KG.po [new file with mode: 0644]
res/po/lo.po [new file with mode: 0644]
res/po/lt.po [new file with mode: 0644]
res/po/lv.po [new file with mode: 0644]
res/po/mg.po [new file with mode: 0644]
res/po/mk.po [new file with mode: 0644]
res/po/ml.po [new file with mode: 0644]
res/po/mn_MN.po [new file with mode: 0644]
res/po/mr.po [new file with mode: 0644]
res/po/ms.po [new file with mode: 0644]
res/po/my_MM.po [new file with mode: 0644]
res/po/my_ZG.po [new file with mode: 0644]
res/po/nb.po [new file with mode: 0644]
res/po/ne.po [new file with mode: 0644]
res/po/nl.po [new file with mode: 0644]
res/po/or.po [new file with mode: 0644]
res/po/pa.po [new file with mode: 0644]
res/po/pl.po [new file with mode: 0644]
res/po/pl_SP.po [new file with mode: 0644]
res/po/pt.po [new file with mode: 0644]
res/po/pt_BR.po [new file with mode: 0644]
res/po/pt_PT.po [new file with mode: 0644]
res/po/ro.po [new file with mode: 0644]
res/po/ru.po [new file with mode: 0644]
res/po/ru_RU.po [new file with mode: 0644]
res/po/si.po [new file with mode: 0644]
res/po/sk.po [new file with mode: 0644]
res/po/sl.po [new file with mode: 0644]
res/po/sq.po [new file with mode: 0644]
res/po/sr.po [new file with mode: 0644]
res/po/sv.po [new file with mode: 0644]
res/po/sw.po [new file with mode: 0644]
res/po/ta.po [new file with mode: 0644]
res/po/te.po [new file with mode: 0644]
res/po/tg_TJ.po [new file with mode: 0644]
res/po/th.po [new file with mode: 0644]
res/po/tk_TM.po [new file with mode: 0644]
res/po/tl.po [new file with mode: 0644]
res/po/tr_TR.po [new file with mode: 0644]
res/po/uk.po [new file with mode: 0644]
res/po/update-po.sh [new file with mode: 0644]
res/po/ur.po [new file with mode: 0644]
res/po/uz.po [new file with mode: 0644]
res/po/vi.po [new file with mode: 0644]
res/po/xh.po [new file with mode: 0644]
res/po/yo.po [new file with mode: 0644]
res/po/zh_CN.po [new file with mode: 0644]
res/po/zh_HK.po [new file with mode: 0644]
res/po/zh_TW.po [new file with mode: 0644]
res/po/zu.po [new file with mode: 0644]
res/po/zyyyh.po [new file with mode: 0644]
res/sounds/PreProcessedAudioAAC.raw [new file with mode: 0644]
res/sounds/PreProcessedAudioAMR.raw [new file with mode: 0644]
res/sounds/PreProcessedAudioPCM.raw [new file with mode: 0644]
res/sounds/SampleAAC.aac [new file with mode: 0644]
res/sounds/SampleAMR.amr [new file with mode: 0644]
res/sounds/SampleMP3.mp3 [new file with mode: 0644]
res/sounds/SampleWAV.wav [new file with mode: 0644]
src/attach-panel-voicerecorder.c [new file with mode: 0644]
src/utils/audio-recorder-utils.c [new file with mode: 0644]
src/view/audio-recorder-view.c [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..91e7973
--- /dev/null
@@ -0,0 +1,106 @@
+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)
+
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..54b213e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,204 @@
+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.
+
diff --git a/NOTICE b/NOTICE
new file mode 100644 (file)
index 0000000..851c000
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,2 @@
+Copyright (c) 2000-2015 Samsung Electronics Co., Ltd. All rights reserved.
+
diff --git a/attach-panel-voicerecorder.manifest b/attach-panel-voicerecorder.manifest
new file mode 100644 (file)
index 0000000..acfa5e3
--- /dev/null
@@ -0,0 +1,20 @@
+<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>
diff --git a/attach-panel-voicerecorder.xml b/attach-panel-voicerecorder.xml
new file mode 100644 (file)
index 0000000..41b664b
--- /dev/null
@@ -0,0 +1,23 @@
+<?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>
diff --git a/inc/attach-panel-voicerecorder.h b/inc/attach-panel-voicerecorder.h
new file mode 100644 (file)
index 0000000..c4d9f82
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+* 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__
diff --git a/inc/utils/audio-recorder-utils.h b/inc/utils/audio-recorder-utils.h
new file mode 100644 (file)
index 0000000..60940f9
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+* 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__
+
diff --git a/inc/utils/config.h b/inc/utils/config.h
new file mode 100644 (file)
index 0000000..6ac3653
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+* 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_ */
diff --git a/inc/utils/logger.h b/inc/utils/logger.h
new file mode 100644 (file)
index 0000000..b211792
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+* 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__ */
diff --git a/inc/view/audio-recorder-view.h b/inc/view/audio-recorder-view.h
new file mode 100644 (file)
index 0000000..748b181
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+* 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__
+
diff --git a/packaging/attach-panel-voicerecorder.spec b/packaging/attach-panel-voicerecorder.spec
new file mode 100644 (file)
index 0000000..19e7ccd
--- /dev/null
@@ -0,0 +1,80 @@
+%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
+
diff --git a/res/edje/audio_recorder.edc b/res/edje/audio_recorder.edc
new file mode 100644 (file)
index 0000000..33a91ce
--- /dev/null
@@ -0,0 +1,834 @@
+/*
+* 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
+
+}
diff --git a/res/images/AGIF/animated.gif b/res/images/AGIF/animated.gif
new file mode 100644 (file)
index 0000000..2c62f89
Binary files /dev/null and b/res/images/AGIF/animated.gif differ
diff --git a/res/images/bg.png b/res/images/bg.png
new file mode 100644 (file)
index 0000000..0c582be
Binary files /dev/null and b/res/images/bg.png differ
diff --git a/res/images/bg_pressed.png b/res/images/bg_pressed.png
new file mode 100644 (file)
index 0000000..0537ab8
Binary files /dev/null and b/res/images/bg_pressed.png differ
diff --git a/res/images/drawer.png b/res/images/drawer.png
new file mode 100644 (file)
index 0000000..042d787
Binary files /dev/null and b/res/images/drawer.png differ
diff --git a/res/images/icon_close.png b/res/images/icon_close.png
new file mode 100644 (file)
index 0000000..5d2eeb9
Binary files /dev/null and b/res/images/icon_close.png differ
diff --git a/res/images/icon_pause.png b/res/images/icon_pause.png
new file mode 100644 (file)
index 0000000..736d5bf
Binary files /dev/null and b/res/images/icon_pause.png differ
diff --git a/res/images/icon_play.png b/res/images/icon_play.png
new file mode 100644 (file)
index 0000000..d676d0c
Binary files /dev/null and b/res/images/icon_play.png differ
diff --git a/res/images/icon_rec.png b/res/images/icon_rec.png
new file mode 100644 (file)
index 0000000..373dc34
Binary files /dev/null and b/res/images/icon_rec.png differ
diff --git a/res/images/icon_stop.png b/res/images/icon_stop.png
new file mode 100644 (file)
index 0000000..15a2916
Binary files /dev/null and b/res/images/icon_stop.png differ
diff --git a/res/images/mic.png b/res/images/mic.png
new file mode 100644 (file)
index 0000000..6101a7c
Binary files /dev/null and b/res/images/mic.png differ
diff --git a/res/images/toolbar_control_bg.png b/res/images/toolbar_control_bg.png
new file mode 100644 (file)
index 0000000..b71cd36
Binary files /dev/null and b/res/images/toolbar_control_bg.png differ
diff --git a/res/images/toolbar_control_stop.png b/res/images/toolbar_control_stop.png
new file mode 100644 (file)
index 0000000..c9a49bd
Binary files /dev/null and b/res/images/toolbar_control_stop.png differ
diff --git a/res/images/toolbar_icon_rec.png b/res/images/toolbar_icon_rec.png
new file mode 100644 (file)
index 0000000..e4c533e
Binary files /dev/null and b/res/images/toolbar_icon_rec.png differ
diff --git a/res/images/voice_attach_bg.png b/res/images/voice_attach_bg.png
new file mode 100644 (file)
index 0000000..106aea6
Binary files /dev/null and b/res/images/voice_attach_bg.png differ
diff --git a/res/po/CMakeLists.txt b/res/po/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1c0c79b
--- /dev/null
@@ -0,0 +1,28 @@
+# 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})
diff --git a/res/po/af.po b/res/po/af.po
new file mode 100644 (file)
index 0000000..b5b964d
--- /dev/null
@@ -0,0 +1,6 @@
+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"
+
diff --git a/res/po/am.po b/res/po/am.po
new file mode 100644 (file)
index 0000000..c4ab015
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/ar.po b/res/po/ar.po
new file mode 100644 (file)
index 0000000..fc5dbaf
--- /dev/null
@@ -0,0 +1,9 @@
+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 "انقر مع الاستمرار للتسجيل"
+
diff --git a/res/po/as.po b/res/po/as.po
new file mode 100644 (file)
index 0000000..7743c9e
--- /dev/null
@@ -0,0 +1,9 @@
+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 "ৰেকৰ্ড কৰিবলৈ টিপক আৰু ধৰি থাকক"
+
diff --git a/res/po/az.po b/res/po/az.po
new file mode 100644 (file)
index 0000000..7d0684f
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/be_BY.po b/res/po/be_BY.po
new file mode 100644 (file)
index 0000000..a9b0457
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Запісваецца..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
diff --git a/res/po/bg.po b/res/po/bg.po
new file mode 100644 (file)
index 0000000..a3f9fb5
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Чукн. и задр. за записв."
+
diff --git a/res/po/bn.po b/res/po/bn.po
new file mode 100644 (file)
index 0000000..a7af21c
--- /dev/null
@@ -0,0 +1,9 @@
+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 "রেকর্ড করতে ট্যাপ করুন ধরে থাকুন"
+
diff --git a/res/po/bn_BD.po b/res/po/bn_BD.po
new file mode 100644 (file)
index 0000000..d6115fc
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "রেকর্ড করা হচ্ছে..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
diff --git a/res/po/ca.po b/res/po/ca.po
new file mode 100644 (file)
index 0000000..e77f5d5
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/cs.po b/res/po/cs.po
new file mode 100644 (file)
index 0000000..5d835ca
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/da.po b/res/po/da.po
new file mode 100644 (file)
index 0000000..f90eb9c
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/de.po b/res/po/de.po
new file mode 100644 (file)
index 0000000..dd3b303
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/el.po b/res/po/el.po
new file mode 100644 (file)
index 0000000..486ea79
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Εγγραφή"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Πατ. παρατ. για εγγραφή"
+
diff --git a/res/po/el_GR.po b/res/po/el_GR.po
new file mode 100644 (file)
index 0000000..00cc0c7
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Πατ. παρατ. για εγγραφή"
+
diff --git a/res/po/en.po b/res/po/en.po
new file mode 100644 (file)
index 0000000..c4ab015
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/en_PH.po b/res/po/en_PH.po
new file mode 100644 (file)
index 0000000..3158df5
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/en_US.po b/res/po/en_US.po
new file mode 100644 (file)
index 0000000..3158df5
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/es.po b/res/po/es.po
new file mode 100644 (file)
index 0000000..f243671
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant pulsado para grabar"
+
diff --git a/res/po/es_AR.po b/res/po/es_AR.po
new file mode 100644 (file)
index 0000000..c37471a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
diff --git a/res/po/es_CL.po b/res/po/es_CL.po
new file mode 100644 (file)
index 0000000..c37471a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
diff --git a/res/po/es_CO.po b/res/po/es_CO.po
new file mode 100644 (file)
index 0000000..c37471a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
diff --git a/res/po/es_ES.po b/res/po/es_ES.po
new file mode 100644 (file)
index 0000000..2697cd7
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/es_PE.po b/res/po/es_PE.po
new file mode 100644 (file)
index 0000000..c37471a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
diff --git a/res/po/es_US.po b/res/po/es_US.po
new file mode 100644 (file)
index 0000000..452e5ae
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/es_VE.po b/res/po/es_VE.po
new file mode 100644 (file)
index 0000000..c37471a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Grabando…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Mant. pulsado para grabar"
+
diff --git a/res/po/et.po b/res/po/et.po
new file mode 100644 (file)
index 0000000..be19019
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/eu.po b/res/po/eu.po
new file mode 100644 (file)
index 0000000..2d9a6a2
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/fa.po b/res/po/fa.po
new file mode 100644 (file)
index 0000000..f4f7196
--- /dev/null
@@ -0,0 +1,9 @@
+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 "جهت ضبط ضربه زده،نگهدارید"
+
diff --git a/res/po/fi.po b/res/po/fi.po
new file mode 100644 (file)
index 0000000..ed85867
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/fr.po b/res/po/fr.po
new file mode 100644 (file)
index 0000000..4987d95
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/fr_CA.po b/res/po/fr_CA.po
new file mode 100644 (file)
index 0000000..4987d95
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/ga.po b/res/po/ga.po
new file mode 100644 (file)
index 0000000..4453c2f
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/gl.po b/res/po/gl.po
new file mode 100644 (file)
index 0000000..8bfc09c
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/gu.po b/res/po/gu.po
new file mode 100644 (file)
index 0000000..a1539e6
--- /dev/null
@@ -0,0 +1,9 @@
+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 "રૅકોર્ડ કરવા માટે ટેપ અને હોલ્ડ કરો"
+
diff --git a/res/po/ha.po b/res/po/ha.po
new file mode 100644 (file)
index 0000000..5f8cf4f
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/he.po b/res/po/he.po
new file mode 100644 (file)
index 0000000..bb38a85
--- /dev/null
@@ -0,0 +1,9 @@
+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 "לחץ לחיצה ארוכה כדי להקליט"
+
diff --git a/res/po/hi.po b/res/po/hi.po
new file mode 100644 (file)
index 0000000..04ea0b3
--- /dev/null
@@ -0,0 +1,9 @@
+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 "रिकॉर्ड हेतु टैप करके रखे"
+
diff --git a/res/po/hr.po b/res/po/hr.po
new file mode 100644 (file)
index 0000000..3224db1
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/hu.po b/res/po/hu.po
new file mode 100644 (file)
index 0000000..d3f77b1
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/hy.po b/res/po/hy.po
new file mode 100644 (file)
index 0000000..c02d313
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Ձյնգրլու հր թակել և պահել"
+
diff --git a/res/po/id.po b/res/po/id.po
new file mode 100644 (file)
index 0000000..56f47a3
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/igbo.po b/res/po/igbo.po
new file mode 100644 (file)
index 0000000..a2bc58b
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/is.po b/res/po/is.po
new file mode 100644 (file)
index 0000000..531775b
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/it.po b/res/po/it.po
new file mode 100644 (file)
index 0000000..a76c9cb
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Registrazione"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Premi per registrare"
+
diff --git a/res/po/it_IT.po b/res/po/it_IT.po
new file mode 100644 (file)
index 0000000..73f5964
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/ja_JP.po b/res/po/ja_JP.po
new file mode 100644 (file)
index 0000000..c707dd2
--- /dev/null
@@ -0,0 +1,9 @@
+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 "長押しして録音"
+
diff --git a/res/po/ka.po b/res/po/ka.po
new file mode 100644 (file)
index 0000000..0b2a715
--- /dev/null
@@ -0,0 +1,9 @@
+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 "ჩაწერე ხანგრძლივი შეხებით"
+
diff --git a/res/po/kk.po b/res/po/kk.po
new file mode 100644 (file)
index 0000000..231740b
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Жазу үшін басып тұру"
+
diff --git a/res/po/km.po b/res/po/km.po
new file mode 100644 (file)
index 0000000..41b6fdd
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "កំពុង​ថត"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ប៉ះ​ឲ្យ​ជាប់​ដើម្បី​ថត"
+
diff --git a/res/po/kn.po b/res/po/kn.po
new file mode 100644 (file)
index 0000000..42b5130
--- /dev/null
@@ -0,0 +1,9 @@
+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 "ದಾಖಲಿಸಲು ಒತ್ತಿ ಹಿಡಿಯಿರಿ"
+
diff --git a/res/po/ko.po b/res/po/ko.po
new file mode 100644 (file)
index 0000000..01d11b3
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "녹음 중..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "녹음하려면 길게 누르세요"
+
diff --git a/res/po/ko_KR.po b/res/po/ko_KR.po
new file mode 100644 (file)
index 0000000..74c1852
--- /dev/null
@@ -0,0 +1,9 @@
+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 "녹음하려면 길게 누르세요"
+
diff --git a/res/po/ky_KG.po b/res/po/ky_KG.po
new file mode 100644 (file)
index 0000000..4a62ca0
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Жаздырууда..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Жаздырууга таптап карма"
+
diff --git a/res/po/lo.po b/res/po/lo.po
new file mode 100644 (file)
index 0000000..f56c272
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ກໍາລັງບັນທຶກ..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "ແຕະຄ້າງໄວ້ເພື່ອບັນທຶກ"
+
diff --git a/res/po/lt.po b/res/po/lt.po
new file mode 100644 (file)
index 0000000..652417a
--- /dev/null
@@ -0,0 +1,9 @@
+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š."
+
diff --git a/res/po/lv.po b/res/po/lv.po
new file mode 100644 (file)
index 0000000..cbe1746
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/mg.po b/res/po/mg.po
new file mode 100644 (file)
index 0000000..21b4ac4
--- /dev/null
@@ -0,0 +1,6 @@
+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"
+
diff --git a/res/po/mk.po b/res/po/mk.po
new file mode 100644 (file)
index 0000000..75f4938
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Доп. и држете за снимање"
+
diff --git a/res/po/ml.po b/res/po/ml.po
new file mode 100644 (file)
index 0000000..de69109
--- /dev/null
@@ -0,0 +1,9 @@
+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 "റെക്കോർഡുചെയ്യുന്നതിനായി ടാപ്പുചെയ്ത് പിടിക്കുക"
+
diff --git a/res/po/mn_MN.po b/res/po/mn_MN.po
new file mode 100644 (file)
index 0000000..addd904
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Бичлэг хийж байна..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Товшиж бариад бичлэг хий"
+
diff --git a/res/po/mr.po b/res/po/mr.po
new file mode 100644 (file)
index 0000000..7e41cb4
--- /dev/null
@@ -0,0 +1,9 @@
+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 "रेकॉर्ड करण्यासाठी टॅप आणि होल्ड करा"
+
diff --git a/res/po/ms.po b/res/po/ms.po
new file mode 100644 (file)
index 0000000..be1842b
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/my_MM.po b/res/po/my_MM.po
new file mode 100644 (file)
index 0000000..76af4d2
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ဖမ်းယူနေသည်…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
diff --git a/res/po/my_ZG.po b/res/po/my_ZG.po
new file mode 100644 (file)
index 0000000..a84ca0b
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "ဖမ္းယူေနသည္…"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "အသံဖမ္းရန္ ႏွိပ္ၿပီး ထိန္းကိုင္ထားပါ"
+
diff --git a/res/po/nb.po b/res/po/nb.po
new file mode 100644 (file)
index 0000000..d54c4e8
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/ne.po b/res/po/ne.po
new file mode 100644 (file)
index 0000000..87b1f52
--- /dev/null
@@ -0,0 +1,9 @@
+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 "रेकर्ड गर्नको लागि ट्याप र होल्ड गर्नुहोस्"
+
diff --git a/res/po/nl.po b/res/po/nl.po
new file mode 100644 (file)
index 0000000..d1ce200
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/or.po b/res/po/or.po
new file mode 100644 (file)
index 0000000..8b1437e
--- /dev/null
@@ -0,0 +1,9 @@
+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 "ରେକର୍ଡ୍ କରିବାକୁ ଟ୍ୟାପ୍ ଏବଂ ହୋଲ୍ଡ କର"
+
diff --git a/res/po/pa.po b/res/po/pa.po
new file mode 100644 (file)
index 0000000..5a38d7f
--- /dev/null
@@ -0,0 +1,9 @@
+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 "ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਟੈਪ ਅਤੇ ਹੋਲਡ ਕਰੋ"
+
diff --git a/res/po/pl.po b/res/po/pl.po
new file mode 100644 (file)
index 0000000..a15f283
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/pl_SP.po b/res/po/pl_SP.po
new file mode 100644 (file)
index 0000000..2fcf7cd
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nagrywanie"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Dotk.i przytrz., by nagr."
+
diff --git a/res/po/pt.po b/res/po/pt.po
new file mode 100644 (file)
index 0000000..3849ac0
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "A gravar"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Toque s/ soltar p/ gravar"
+
diff --git a/res/po/pt_BR.po b/res/po/pt_BR.po
new file mode 100644 (file)
index 0000000..90211f3
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/pt_PT.po b/res/po/pt_PT.po
new file mode 100644 (file)
index 0000000..4dd8630
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/ro.po b/res/po/ro.po
new file mode 100644 (file)
index 0000000..1652df6
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/ru.po b/res/po/ru.po
new file mode 100644 (file)
index 0000000..e484a8e
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Запись"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Удерживайте для записи"
+
diff --git a/res/po/ru_RU.po b/res/po/ru_RU.po
new file mode 100644 (file)
index 0000000..02e1b1a
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Удерживайте для записи"
+
diff --git a/res/po/si.po b/res/po/si.po
new file mode 100644 (file)
index 0000000..894c60c
--- /dev/null
@@ -0,0 +1,9 @@
+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 "පටිගත කිරීමට තට්ටු කර අල්ලාගෙන සිටි."
+
diff --git a/res/po/sk.po b/res/po/sk.po
new file mode 100644 (file)
index 0000000..fa1ffdf
--- /dev/null
@@ -0,0 +1,9 @@
+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ž."
+
diff --git a/res/po/sl.po b/res/po/sl.po
new file mode 100644 (file)
index 0000000..3c45c1b
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/sq.po b/res/po/sq.po
new file mode 100644 (file)
index 0000000..b2bd0a1
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Po regjistroj"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Trokit & mbaj për regj."
+
diff --git a/res/po/sr.po b/res/po/sr.po
new file mode 100644 (file)
index 0000000..91ee2f5
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/sv.po b/res/po/sv.po
new file mode 100644 (file)
index 0000000..a5999af
--- /dev/null
@@ -0,0 +1,9 @@
+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."
+
diff --git a/res/po/sw.po b/res/po/sw.po
new file mode 100644 (file)
index 0000000..4a63625
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/ta.po b/res/po/ta.po
new file mode 100644 (file)
index 0000000..794e267
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/te.po b/res/po/te.po
new file mode 100644 (file)
index 0000000..9a689f7
--- /dev/null
@@ -0,0 +1,9 @@
+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 "రికార్డ్ చేయడానికి ట్యాప్ చేసి, పట్టుకోండి"
+
diff --git a/res/po/tg_TJ.po b/res/po/tg_TJ.po
new file mode 100644 (file)
index 0000000..2c2d7e3
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Сабткунӣ иҷро мешавад..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Барои сабт кардан, зарба занед"
+
diff --git a/res/po/th.po b/res/po/th.po
new file mode 100644 (file)
index 0000000..eff2178
--- /dev/null
@@ -0,0 +1,9 @@
+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 "สัมผัสค้างไว้เพื่อบันทึก"
+
diff --git a/res/po/tk_TM.po b/res/po/tk_TM.po
new file mode 100644 (file)
index 0000000..09b95e3
--- /dev/null
@@ -0,0 +1,6 @@
+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"
+
diff --git a/res/po/tl.po b/res/po/tl.po
new file mode 100644 (file)
index 0000000..b2e0cd6
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Nagre-record..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "I-tap matagal, i-record"
+
diff --git a/res/po/tr_TR.po b/res/po/tr_TR.po
new file mode 100644 (file)
index 0000000..fde91f6
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/uk.po b/res/po/uk.po
new file mode 100644 (file)
index 0000000..6d23785
--- /dev/null
@@ -0,0 +1,9 @@
+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 "Натис.і утрим. для запису"
+
diff --git a/res/po/update-po.sh b/res/po/update-po.sh
new file mode 100644 (file)
index 0000000..6e710ce
--- /dev/null
@@ -0,0 +1,60 @@
+#!/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
+
diff --git a/res/po/ur.po b/res/po/ur.po
new file mode 100644 (file)
index 0000000..075b14e
--- /dev/null
@@ -0,0 +1,9 @@
+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 "ریکارڈ کرنے کے لئے ٹیپ کریں اور پکڑے رہیں"
+
diff --git a/res/po/uz.po b/res/po/uz.po
new file mode 100644 (file)
index 0000000..04a8491
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/vi.po b/res/po/vi.po
new file mode 100644 (file)
index 0000000..08e13b0
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/xh.po b/res/po/xh.po
new file mode 100644 (file)
index 0000000..3a0630a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Iyarekhoda"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
diff --git a/res/po/yo.po b/res/po/yo.po
new file mode 100644 (file)
index 0000000..c5cc832
--- /dev/null
@@ -0,0 +1,9 @@
+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"
+
diff --git a/res/po/zh_CN.po b/res/po/zh_CN.po
new file mode 100644 (file)
index 0000000..a4b2b58
--- /dev/null
@@ -0,0 +1,9 @@
+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 "轻敲并按住以录音"
+
diff --git a/res/po/zh_HK.po b/res/po/zh_HK.po
new file mode 100644 (file)
index 0000000..6dcd776
--- /dev/null
@@ -0,0 +1,9 @@
+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 "輕觸並按住以錄製"
+
diff --git a/res/po/zh_TW.po b/res/po/zh_TW.po
new file mode 100644 (file)
index 0000000..8590a76
--- /dev/null
@@ -0,0 +1,9 @@
+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 "輕觸並按住以錄製"
+
diff --git a/res/po/zu.po b/res/po/zu.po
new file mode 100644 (file)
index 0000000..3a0630a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "Iyarekhoda"
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
diff --git a/res/po/zyyyh.po b/res/po/zyyyh.po
new file mode 100644 (file)
index 0000000..2dcfc6a
--- /dev/null
@@ -0,0 +1,6 @@
+msgid "IDS_VR_BODY_RECORDING"
+msgstr "녹음 중..."
+
+msgid "IDS_ST_BUTTON_TAP_AND_HOLD_TO_RECORD_ABB"
+msgstr "Tap and hold to record"
+
diff --git a/res/sounds/PreProcessedAudioAAC.raw b/res/sounds/PreProcessedAudioAAC.raw
new file mode 100644 (file)
index 0000000..54207d7
Binary files /dev/null and b/res/sounds/PreProcessedAudioAAC.raw differ
diff --git a/res/sounds/PreProcessedAudioAMR.raw b/res/sounds/PreProcessedAudioAMR.raw
new file mode 100644 (file)
index 0000000..051b627
Binary files /dev/null and b/res/sounds/PreProcessedAudioAMR.raw differ
diff --git a/res/sounds/PreProcessedAudioPCM.raw b/res/sounds/PreProcessedAudioPCM.raw
new file mode 100644 (file)
index 0000000..20bc8fa
Binary files /dev/null and b/res/sounds/PreProcessedAudioPCM.raw differ
diff --git a/res/sounds/SampleAAC.aac b/res/sounds/SampleAAC.aac
new file mode 100644 (file)
index 0000000..57e71a6
Binary files /dev/null and b/res/sounds/SampleAAC.aac differ
diff --git a/res/sounds/SampleAMR.amr b/res/sounds/SampleAMR.amr
new file mode 100644 (file)
index 0000000..843247e
Binary files /dev/null and b/res/sounds/SampleAMR.amr differ
diff --git a/res/sounds/SampleMP3.mp3 b/res/sounds/SampleMP3.mp3
new file mode 100644 (file)
index 0000000..c608a70
Binary files /dev/null and b/res/sounds/SampleMP3.mp3 differ
diff --git a/res/sounds/SampleWAV.wav b/res/sounds/SampleWAV.wav
new file mode 100644 (file)
index 0000000..d71cd06
Binary files /dev/null and b/res/sounds/SampleWAV.wav differ
diff --git a/src/attach-panel-voicerecorder.c b/src/attach-panel-voicerecorder.c
new file mode 100644 (file)
index 0000000..060d53f
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+* 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); */
+}
diff --git a/src/utils/audio-recorder-utils.c b/src/utils/audio-recorder-utils.c
new file mode 100644 (file)
index 0000000..2135f10
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+* 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;
+}
+
diff --git a/src/view/audio-recorder-view.c b/src/view/audio-recorder-view.c
new file mode 100644 (file)
index 0000000..4e74b1a
--- /dev/null
@@ -0,0 +1,605 @@
+/*
+* 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");
+}