From 0e32a026d114c15ac43e1fe3b83b201adef1430b Mon Sep 17 00:00:00 2001 From: Jinkun Jang Date: Wed, 13 Mar 2013 01:38:39 +0900 Subject: [PATCH] Tizen 2.1 base --- AUTHORS | 2 + CMakeLists.txt | 95 ++ LICENSE.Flora | 206 +++++ NOTICE | 4 + data/CMakeLists.txt | 16 + data/images/private/00_divider_line.png | Bin 0 -> 2812 bytes data/images/private/00_popup_bg.png | Bin 0 -> 1070 bytes data/images/private/00_progress_bar.png | Bin 0 -> 1628 bytes data/images/private/00_progress_bg.png | Bin 0 -> 2419 bytes data/images/private/00_slider_handle.png | Bin 0 -> 4576 bytes data/images/private/00_slider_handle_dim.png | Bin 0 -> 4011 bytes data/images/private/00_slider_handle_press.png | Bin 0 -> 4515 bytes data/images/private/00_volume_icon.png | Bin 0 -> 3446 bytes data/images/private/00_volume_icon_Call.png | Bin 0 -> 3693 bytes data/images/private/00_volume_icon_Mute.png | Bin 0 -> 3990 bytes data/images/private/00_volume_icon_Vibrat.png | Bin 0 -> 4680 bytes data/images/private/00_volume_icon_headphone.png | Bin 0 -> 3716 bytes data/images/private/00_volume_icon_media.png | Bin 0 -> 3564 bytes data/images/public/00_volume_icon_settings.png | Bin 0 -> 4131 bytes .../public/00_volume_icon_settings_pressed.png | Bin 0 -> 4229 bytes data/volume_app.edc | 333 +++++++ debian/changelog | 37 + debian/compat | 1 + debian/control | 17 + debian/org.tizen.volume.install.in | 3 + debian/rules | 119 +++ org.tizen.volume.desktop.in | 8 + org.tizen.volume.manifest | 21 + org.tizen.volume.png | Bin 0 -> 5780 bytes org.tizen.volume.xml | 10 + packaging/org.tizen.volume.spec | 50 ++ po/CMakeLists.txt | 24 + po/POTFILES.in | 2 + po/ar.po | 18 + po/az.po | 18 + po/bg.po | 18 + po/ca.po | 18 + po/cs.po | 18 + po/da.po | 18 + po/de_DE.po | 18 + po/el_GR.po | 18 + po/en.po | 18 + po/en_GB.po | 18 + po/en_PH.po | 18 + po/en_US.po | 18 + po/es_ES.po | 18 + po/es_US.po | 18 + po/et.po | 18 + po/eu.po | 18 + po/fi.po | 18 + po/fr_CA.po | 18 + po/fr_FR.po | 18 + po/ga.po | 18 + po/gl.po | 18 + po/he.po | 18 + po/hi.po | 18 + po/hr.po | 18 + po/hu.po | 18 + po/hy.po | 18 + po/id.po | 18 + po/is.po | 18 + po/it_IT.po | 18 + po/ja_JP.po | 18 + po/ka.po | 18 + po/kk.po | 18 + po/ko_KR.po | 18 + po/lt.po | 18 + po/lv.po | 18 + po/mk.po | 18 + po/ms.po | 18 + po/nb.po | 18 + po/nl_NL.po | 18 + po/no.po | 18 + po/pl.po | 18 + po/pt_BR.po | 18 + po/pt_PT.po | 18 + po/ro.po | 18 + po/ru_RU.po | 18 + po/sk.po | 18 + po/sl.po | 18 + po/sr.po | 18 + po/sv.po | 18 + po/th.po | 18 + po/tr_TR.po | 18 + po/uk.po | 18 + po/update-po.sh | 60 ++ po/uz.po | 18 + po/vi.po | 18 + po/volume.pot | 26 + po/zh_CN.po | 18 + po/zh_HK.po | 18 + po/zh_SG.po | 18 + po/zh_TW.po | 18 + src/_logic.c | 994 +++++++++++++++++++++ src/_logic.h | 39 + src/_sound.c | 299 +++++++ src/_sound.h | 37 + src/_util_efl.c | 138 +++ src/_util_efl.h | 32 + src/_util_log.h | 60 ++ src/format | 18 + src/volume.c | 122 +++ src/volume.h | 120 +++ 103 files changed, 3937 insertions(+) create mode 100644 AUTHORS create mode 100644 CMakeLists.txt create mode 100755 LICENSE.Flora create mode 100755 NOTICE create mode 100755 data/CMakeLists.txt create mode 100755 data/images/private/00_divider_line.png create mode 100755 data/images/private/00_popup_bg.png create mode 100755 data/images/private/00_progress_bar.png create mode 100755 data/images/private/00_progress_bg.png create mode 100755 data/images/private/00_slider_handle.png create mode 100755 data/images/private/00_slider_handle_dim.png create mode 100755 data/images/private/00_slider_handle_press.png create mode 100755 data/images/private/00_volume_icon.png create mode 100755 data/images/private/00_volume_icon_Call.png create mode 100755 data/images/private/00_volume_icon_Mute.png create mode 100755 data/images/private/00_volume_icon_Vibrat.png create mode 100755 data/images/private/00_volume_icon_headphone.png create mode 100755 data/images/private/00_volume_icon_media.png create mode 100755 data/images/public/00_volume_icon_settings.png create mode 100755 data/images/public/00_volume_icon_settings_pressed.png create mode 100755 data/volume_app.edc create mode 100755 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/org.tizen.volume.install.in create mode 100755 debian/rules create mode 100644 org.tizen.volume.desktop.in create mode 100755 org.tizen.volume.manifest create mode 100755 org.tizen.volume.png create mode 100755 org.tizen.volume.xml create mode 100755 packaging/org.tizen.volume.spec create mode 100644 po/CMakeLists.txt create mode 100644 po/POTFILES.in create mode 100644 po/ar.po create mode 100644 po/az.po create mode 100644 po/bg.po create mode 100644 po/ca.po create mode 100644 po/cs.po create mode 100644 po/da.po create mode 100644 po/de_DE.po create mode 100644 po/el_GR.po create mode 100644 po/en.po create mode 100644 po/en_GB.po create mode 100644 po/en_PH.po create mode 100644 po/en_US.po create mode 100644 po/es_ES.po create mode 100644 po/es_US.po create mode 100644 po/et.po create mode 100644 po/eu.po create mode 100644 po/fi.po create mode 100644 po/fr_CA.po create mode 100644 po/fr_FR.po create mode 100644 po/ga.po create mode 100644 po/gl.po create mode 100644 po/he.po create mode 100644 po/hi.po create mode 100644 po/hr.po create mode 100644 po/hu.po create mode 100644 po/hy.po create mode 100644 po/id.po create mode 100644 po/is.po create mode 100644 po/it_IT.po create mode 100644 po/ja_JP.po create mode 100644 po/ka.po create mode 100644 po/kk.po create mode 100644 po/ko_KR.po create mode 100644 po/lt.po create mode 100644 po/lv.po create mode 100644 po/mk.po create mode 100644 po/ms.po create mode 100644 po/nb.po create mode 100644 po/nl_NL.po create mode 100644 po/no.po create mode 100644 po/pl.po create mode 100644 po/pt_BR.po create mode 100644 po/pt_PT.po create mode 100644 po/ro.po create mode 100644 po/ru_RU.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 po/sr.po create mode 100644 po/sv.po create mode 100644 po/th.po create mode 100644 po/tr_TR.po create mode 100644 po/uk.po create mode 100755 po/update-po.sh create mode 100644 po/uz.po create mode 100644 po/vi.po create mode 100644 po/volume.pot create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_SG.po create mode 100644 po/zh_TW.po create mode 100755 src/_logic.c create mode 100755 src/_logic.h create mode 100755 src/_sound.c create mode 100755 src/_sound.h create mode 100755 src/_util_efl.c create mode 100755 src/_util_efl.h create mode 100755 src/_util_log.h create mode 100755 src/format create mode 100755 src/volume.c create mode 100755 src/volume.h diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..566bee7 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +Hong Kwon +Minho Kim diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cc64eac --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,95 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(volume C) + +SET(SRCS + src/volume.c + src/_util_efl.c + src/_logic.c + src/_sound.c +) + +SET(VENDOR "tizen") +SET(PACKAGE ${PROJECT_NAME}) +SET(PKGNAME "org.${VENDOR}.${PACKAGE}") +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "/opt/usr/apps/com.${VENDOR}.${PACKAGE}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(ICONDIR "/opt/share/icons/default/small") +SET(IMAGEDIR "${RESDIR}/images/${PACKAGE}") +SET(EDJDIR "${RESDIR}/edje") + +IF("${CMAKE_BUILD_TYPE}" STREQUAL "") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") +MESSAGE("Build type: ${CMAKE_BUILD_TYPE}") + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + appcore-efl + ecore-input + ecore-x + ecore + evas + edje + mm-sound + vconf + utilX + syspopup + bundle + svi + feedback + glib-2.0 + ui-gadget-1 + notification + capi-system-info +) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +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") + +ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"") +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"") +ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"") +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"") +ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"") +ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"") + +#SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") +SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed") + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -lm) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) + +# install desktop file & icon +#CONFIGURE_FILE(${PKGNAME}.desktop.in ${CMAKE_BINARY_DIR}/${PKGNAME}.desktop) +INSTALL(FILES ${CMAKE_BINARY_DIR}/${PKGNAME}.xml DESTINATION /usr/share/packages) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PKGNAME}.png DESTINATION ${ICONDIR}) + +# data +ADD_SUBDIRECTORY(data) + +# i18n +ADD_SUBDIRECTORY(po) + diff --git a/LICENSE.Flora b/LICENSE.Flora new file mode 100755 index 0000000..9c95663 --- /dev/null +++ b/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.0, May, 2012 + +http://floralicense.org/license/ + +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. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Compatibility Definition Document +and passes the Compatibility Test Suite as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +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 +solely as incorporated into a Tizen Certified Platform, 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 solely +as incorporated into a Tizen Certified Platform 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 pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. 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 + 4. 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 Flora License to your work + +To apply the Flora 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 Flora License, Version 1.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://floralicense.org/license/ + + 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 100755 index 0000000..3997999 --- /dev/null +++ b/NOTICE @@ -0,0 +1,4 @@ +Copyright (c) Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1. +Please, see the LICENSE file for Flora License terms and conditions. + diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt new file mode 100755 index 0000000..33e0974 --- /dev/null +++ b/data/CMakeLists.txt @@ -0,0 +1,16 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +# install edj +ADD_CUSTOM_COMMAND(OUTPUT volume_app.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images/private + ${CMAKE_CURRENT_SOURCE_DIR}/volume_app.edc ${CMAKE_BINARY_DIR}/volume_app.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/volume_app.edc +) + +ADD_CUSTOM_TARGET(edj_build DEPENDS volume_app.edj) +ADD_DEPENDENCIES(${PROJECT_NAME} edj_build) +INSTALL(FILES ${CMAKE_BINARY_DIR}/volume_app.edj DESTINATION ${EDJDIR}) + +# install images +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/images/public/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.png") + diff --git a/data/images/private/00_divider_line.png b/data/images/private/00_divider_line.png new file mode 100755 index 0000000000000000000000000000000000000000..fa2f19e06bb9ea67b499cf42f5f28a955aa6d04f GIT binary patch literal 2812 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 HUGJs8XAELK literal 0 HcmV?d00001 diff --git a/data/images/private/00_progress_bar.png b/data/images/private/00_progress_bar.png new file mode 100755 index 0000000000000000000000000000000000000000..5ca3aa286a102a24d425cb1e77dfc0cb9600eb4b GIT binary patch literal 1628 zcmaJ>dr;GM9FM4shbW4m)I(xWoLZWsh1ymMv`vAkWl-4wQM9x{DmIB}XbU*zVCvZ6 zz(X9uaYND5agI3^aEA&f1*RMi73Xc9Jls@NhE7iu-PlqD+#h4POMZ|0d_LdT=aLs4 z72)Q>aRC6pO%;i0*cGzBPLAwX65)E8UA!4(JhOpJVJuo22V{CO83$EH?KWJ4YxNmB zui(J|FdZ_)#xwEi^%5Ovp_%;I}g`U(mK%hY{h2nzL zh?-L1sfNf*8sCr^6|2ik(~0#^Xb2c=m9PRvoY8_-;|{_ku}YyaT?xClU&9bM24T{q z(A%Wq)zP4Wq;W8ahXm*lAqolud1xRa4is}iK7t}J%7>BF0VpB~S}j3PaQuPTXtX{> zqQSz)W3eYGl*%xa1cogZ3(q3pk@Pkg6^q3%!iV|%02UEo${-l6HGnYrO(?KVA)$0F;8jX`^6QjZ3<@=w) zrq~P$hc&o~Os941;8OhTp(u%h#4|B`Hv`A&7^9aRx$9T1;bj zwOXPgOpKP$;VMiDu?jqcK`&8;V*fdn{Q*!NAFj8z}45tldTpv!8MsTcTiDBwo#8c{xbM;f_BAb#6v&q2r!TxK| z6IZNz?AuA(vWH3I;{@w=nzgkW6Ey&ULzfDZ#ae$EJk*)i9X7wUcd6lSb$yw+F1`4p zIg2lNax-5Xd-2;5a8&d;xERZHzi2(1)AM?PlhWPx=tzZiZg;NS^IB1D&8y1!zYo=# zZ>Y^@M}ms-;B{S4szo)&li$BiSoHIi<-ITOs5Sm31a2l9npYa*(9vMriBJwcm{ zj>wknm+PwbYb*M!*==+8_B(e9lNPBR)AuQOWw}F_Mg`ONb@(=|IOF7JGh_4i#CVjS zTe>jZPao=E?@06&`f+?Dn-$F}{uO_a}jyE?B|KCpEj z@N6$JgF(!G_u)m)@5)TWblLqgt3C(zT_`_A9$T{CWkymtqgD!-3yRVKK(OhjbZ9cu;Cx81) zPVva{nh)TfU*~hKez`fJiBou6aIVt&)TUP6$%s-tn4yZw1;2Ql@6^;kt>$rGpc}#a zxMXF+CBeO{;kXMvR~yk_b6!LVk}qwZ-ddoyJZS(|9F{>>MqcPdrduZy%5S869U}DV z&9+s~d$gviHU?i-K6ux!WLDK`&Fq_=J+F&TygH(|8FMr8ez?0&E`}_va{gw3J38%d uM4tEk&*~m->DBK$w0o)DQP)%6tY`!{?O97i58wP?|KF>WQCPKnYtBDOnrW#3 literal 0 HcmV?d00001 diff --git a/data/images/private/00_progress_bg.png b/data/images/private/00_progress_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..1f4a0f4793559d9e11baff0e393777c82baef635 GIT binary patch literal 2419 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 Am;e9( literal 0 HcmV?d00001 diff --git a/data/images/private/00_slider_handle_dim.png b/data/images/private/00_slider_handle_dim.png new file mode 100755 index 0000000000000000000000000000000000000000..4d8ebb68b50d24357d98ce46b79118d1488608ea GIT binary patch literal 4011 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 literal 0 HcmV?d00001 diff --git a/data/images/private/00_volume_icon.png b/data/images/private/00_volume_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..ee6b1333785b995a68ccc00c8eb0b150833ff4eb GIT binary patch literal 3446 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 Y0LcJ_su{C+?*IS*07*qoM6N<$g33)-bpQYW literal 0 HcmV?d00001 diff --git a/data/images/private/00_volume_icon_Call.png b/data/images/private/00_volume_icon_Call.png new file mode 100755 index 0000000000000000000000000000000000000000..26246b4aa86215e0f843a253685870e16c866664 GIT binary patch literal 3693 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 literal 0 HcmV?d00001 diff --git a/data/images/private/00_volume_icon_Vibrat.png b/data/images/private/00_volume_icon_Vibrat.png new file mode 100755 index 0000000000000000000000000000000000000000..4c8fb04158dde45ea3f6278d4b6691e3af7597c0 GIT binary patch literal 4680 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 C54Pn1 literal 0 HcmV?d00001 diff --git a/data/images/private/00_volume_icon_headphone.png b/data/images/private/00_volume_icon_headphone.png new file mode 100755 index 0000000000000000000000000000000000000000..76e8098750f954184415fbbd57c2756058e01bbc GIT binary patch literal 3716 zcmV-~4tw#5P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000B8Nkl6(O2n#HfQ17!l)w z7jZwR^r0pcC3!>&>z zAP4o~L0pKVo4CFkXUFR*Jd3sXd%E`lUGW4z!eEn?pQz(;58lS2=?tJ7cj9^U76A5K zypM~fV-q+8k7D&C=k39l*b(h|G%DAF#nBHOlX3lF(HySDo6`lrOx!z3<;U<`M90Pe zQA=mwa$FgqUrUE$eL&ba9h$%()?}1#!wOu7moh33ALA}ufhRN0I}%S#GP0BcU$X>OJqHiQUDwq zQ`uTtU-0a5Lq=zKepvtpQpWw?@om8XzQ?aAWeYH`3;;dh0Ve8;NnBnY+K10Fd`Vv! z02ZcnfIs8k5&)zPuXEzz6bhg>rlo0*_{qxtkVHBz% zZ@*qy8KZi?XR~CZ#r9@=z<8~bY*~3j`Z_(e*9uCrwBxi*vPJKbw01vU^(HvqlkCu1 zfeUboBvsZG_ZX4n-~K7M^7|#rV@oBAAbaCC{D80HslSD9>JF#sUt`r=paM_KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0009QNkl7soacR>dmB?zQ|hdFYOVwz0Z0H6fCL}`NC4`q1^;(Ke}8{jb6bpVti-DL z{34#hCTzgEhraU#4&uVVz(6qoI;38#4`-i251z;BaB_WY{Q>b1n_J)wJ{vs zfaQ1^Yq1PVb6#U3w&O$<0Ib0-Y>m&$!@(7?#Aiy|$_6kGd$B+6c&As|lEQ*un|d9e zU{OgiWwOlI;1ax3qVuKa0c)|P&WTWWJomK)uoMgDOeR*;B&hD0#!mq@#ycx&a)nXjO zTRChrW&%JD4&$}QIM^E_uXg8jo~*iDD1bhEj?Eodk?$8^XQaqHUMT8pwl2q-3yFjPXKr`c3~?Yk$s(tAap9Wsg+kF{cW!1 mN&pgo1Rw!O01|*2>;3=(1eS>*8*P{X0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000F}Nkl|C}Pmm7NRz`iAHU9{V@N9VaUwf zo!y@hF050;;sRqjbuSZ}eaJG-m4B)i?8UQii5-r|K zE;d}#0w0}uz~#9FKqJrx><8+B(_Qoy7}~qk<$fvf6wnLo2AXmKfJR^~Pz00!uL18l z-q5KUUu$UdO5ieEke&uC0d@k<2;d?;w=wHkz+-L`(4r$?m&L#i;5p!X;CkRj1wj+J z0_X;|03QSMfo7m!lB2f{hyxpdiLd}D1X_Ux51kU=*)#wymHh^T__H3Etrv143;@;| zEG%q7cR!E-9t@}g>tP}3lCxw*hXAH83cE?);m zJl^6ST^oS=WWUVEc8|!>ln|j|;DC?LPr!2E1&_@;WkmYRHQ!6VOEvXn5`YVVTYUo4 z-9VS4BD_aL=b-KC)_pr!>eBonk7wKroD(JhF$Ju0;0~bJMQ=i`xywOudw@+q4RF5g zs?q%(=_O^C?6|SKGl7Q{Kuds=vk?Pk3grqFD)UtR&GneG6KHqP+fJWazd#jZr>JwU z?zaQCd(;vQ(*H(Bq8AvH=L}{7fOi$4O=TSD0RGarSb@#7(NQk_MZlQsbO2YY2y*Kq z%uohdse1!{6{zVEs7~>i9CoCoWhs=x_R@KoZM-c2`I?`p7!XhK!Gpk2+xV7%G0Hyg zsGmCrS$DQtVopX@7SK+akKLT<2xUuRVU&^CkXe&3!65RpkKND!NEN6m<>#cl6L5VU zj(lI0>HV2*Y#_x4R|0jmaXauuiZ%v-?Y429?4~09nIb|rDaTfc(98iYz`YG#1S|!% zDu<7WtZX;r0>jGXqZ*$gdqo~|z6HL->P+tij!bfd0s}Cp>l5HDEus-;=IHalRW9Ba$7+H$t17hfh+2>JwP3aB#(+Q78p~Qa{I{-SK%0t{=`OT(HSnXY z9@rzwdYimzjv{?R6t)w1Teg!@BRd5y>-i0MRbCT%Kj3Sf?|VJy>1O>sSrHxs-q7VI zOQh%Z#p!($SI<@&JV|fSOU_d)cm%7}Z6c-8->Uh3C3#Sym9_`0#`{yZozbmP3`n-c z`c*X91823Z9cJ1RTc{XtSJ(j50S~1(C%Lf|iqfMx|1qpD!W98h9aw$I53%}`p#U%o zcsY$DR2guiUb05%Z(kTOpauU=;bBXqQfw$e@JNmpPY1&~0;_axSLR4X83#6E^#()n zfD>5X<(oWM*96wr;iV!fBLTWf8#Vt42RX7!LhEQGKzlr$EHDAQBoNm*YWIHNaizP2 z7~Uq}71a`catOFV+&;OfZmi!MEOu;umDVw3{eV`v-Z*d^cv`u<%jO;b0G|V&8ru9w z`t~>4Cs0<%8^-nA)^rwMn4vSc9{5aoeZPm^UPF6srSoysA0J@-=J2a@7hagbK-6cr zvABWf`E6_n@2^Eu-V$?@QGkt literal 0 HcmV?d00001 diff --git a/data/images/public/00_volume_icon_settings_pressed.png b/data/images/public/00_volume_icon_settings_pressed.png new file mode 100755 index 0000000000000000000000000000000000000000..1808e65306db9c51bf7c073f36cef107662842cf GIT binary patch literal 4229 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 Mon, 21 Jan 2013 13:35:38 +0900 + +volume (0.2.5-1) unstable; urgency=low + + * Fix some issues + * Git : apps/home/volume-app + + -- minho07.kim Mon, 07 Jan 2013 15:42:55 +0900 + +volume (0.2.4-1) unstable; urgency=low + + * Remove unused files + * Git: magnolia/apps/home/volume-app + * Tag: volume_0.2.4-1 + + -- Junghyun Kim Fri, 17 Aug 2012 16:51:10 +0900 + +volume (0.2.3-1) unstable; urgency=low + + * Fix an error not to read PO files + * Git: magnolia/apps/home/volume-app + * Tag: volume_0.2.3-1 + + -- Hong Kwon Thu, 16 Aug 2012 19:02:09 +0900 + +volume (0.2.2-1) unstable; urgency=low + + * Apply open source code + * Git: apps/home/volume-app + * Tag: volume_0.2.2-1 + + -- Hong Kwon Mon, 13 Aug 2012 19:36:09 +0900 + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..c692e15 --- /dev/null +++ b/debian/control @@ -0,0 +1,17 @@ +Source: volume +Section: devel +Priority: extra +Maintainer: Junghyun Kim , hhh.kwon +Build-Depends: debhelper (>= 5), libappcore-efl-dev, libelm-dev, libmm-sound-dev, dlog-dev, libsvi-dev, libvconf-dev, libslp-utilx-dev, syspopup-dev, libbundle-dev, libglib2.0-dev, libui-gadget-dev +Standards-Version: 3.7.2 + +Package: org.tizen.volume +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: volume + +Package: org-tizen.volume-dbg +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Volume Debug Symbols + Debug symbols for volume diff --git a/debian/org.tizen.volume.install.in b/debian/org.tizen.volume.install.in new file mode 100644 index 0000000..776cc6a --- /dev/null +++ b/debian/org.tizen.volume.install.in @@ -0,0 +1,3 @@ +@PREFIX@/* +/opt/share/applications/org.tizen.desktop +/opt/share/icons/default/small/org.tizen.volume.png diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..079eb49 --- /dev/null +++ b/debian/rules @@ -0,0 +1,119 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +CFLAGS ?= -Wall -g +LDFLAGS ?= +PREFIX ?= /opt/apps/org.tizen.volume +RESDIR ?= /opt/apps/org.tizen.volume/res +DATADIR ?= /opt/apps/org.tizen.volume/data + +#ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) +# CFLAGS += -O0 +#else +# CFLAGS += -O2 +#endif +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + BUILD_TYPE=Debug +else + BUILD_TYPE=Release +endif + +LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed + +CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \ + CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)" -DCMAKE_BUILD_TYPE="$(BUILD_TYPE)" + + touch configure-stamp + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + cd $(CMAKE_BUILD_DIR) && $(MAKE) + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + rm -rf $(CMAKE_BUILD_DIR) + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k +# dh_installdirs + + # Add here commands to install the package into debian/wavplayer. + cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot +# dh_installchangelogs +# dh_installdocs +# dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip --dbg-package=org.tizen.volume-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/org.tizen.volume.desktop.in b/org.tizen.volume.desktop.in new file mode 100644 index 0000000..f6062b4 --- /dev/null +++ b/org.tizen.volume.desktop.in @@ -0,0 +1,8 @@ +Name=@PROJECT_NAME@ +Exec=@BINDIR@/@PROJECT_NAME@ +Icon=@PKGNAME@.png +Type=Application +Version=0.1.0-0 +NoDisplay=true +X-TIZEN-TaskManage=false +X-TIZEN-Removable=false diff --git a/org.tizen.volume.manifest b/org.tizen.volume.manifest new file mode 100755 index 0000000..2b8e373 --- /dev/null +++ b/org.tizen.volume.manifest @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/org.tizen.volume.png b/org.tizen.volume.png new file mode 100755 index 0000000000000000000000000000000000000000..8f488b4ca4199c7a0e0584a8c7da92eccd516c7d GIT binary patch literal 5780 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 S8t(}J0000 + + + Hong Kwon + Volume Application + + org.tizen.volume.png + + + diff --git a/packaging/org.tizen.volume.spec b/packaging/org.tizen.volume.spec new file mode 100755 index 0000000..5a30e97 --- /dev/null +++ b/packaging/org.tizen.volume.spec @@ -0,0 +1,50 @@ +#sbs-git:slp/pkgs/v/volume-app volume-app 0.1.2 226202351de9fefb43756c36d215ca74f52431d0 +Name: org.tizen.volume +Summary: Volume application (EFL) +Version: 0.2.6 +Release: 1 +Group: TO_BE/FILLED_IN +License: Flora Software License +Source0: %{name}-%{version}.tar.gz +BuildRequires: pkgconfig(appcore-efl) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(mm-sound) +BuildRequires: pkgconfig(syspopup) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(svi) +BuildRequires: pkgconfig(ui-gadget-1) +BuildRequires: pkgconfig(notification) +BuildRequires: pkgconfig(capi-system-info) +BuildRequires: pkgconfig(feedback) + +BuildRequires: cmake +BuildRequires: edje-bin +BuildRequires: embryo-bin +BuildRequires: gettext-devel + +%description +volume. + +%prep +%setup -q + +%define PREFIX /usr/apps/org.tizen.volume + +%build +RPM_OPT=`echo $CFLAGS|sed 's/-Wp,-D_FORTIFY_SOURCE=2//'` +export CFLAGS=$RPM_OPT +cmake -DCMAKE_INSTALL_PREFIX="%{PREFIX}" +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + +%files +%manifest org.tizen.volume.manifest +%defattr(-,root,root,-) +%{PREFIX}/bin/* +%{PREFIX}/res/* +/opt/share/icons/default/small/org.tizen.volume.png +/usr/share/packages/org.tizen.volume.xml diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..17eb8ff --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,24 @@ +# for i18n + +SET(POFILES hy.po az.po eu.po bg.po ca.po zh_CN.po zh_HK.po zh_TW.po hr.po cs.po da.po nl_NL.po en.po en_US.po et.po fi.po fr_FR.po gl.po ka.po de_DE.po el_GR.po hu.po is.po ga.po it_IT.po ja_JP.po kk.po ko_KR.po lv.po lt.po mk.po nb.po pl.po pt_PT.po pt_BR.po ro.po ru_RU.po sr.po sk.po sl.po es_ES.po es_US.po sv.po tr_TR.po uk.po uz.po ar.po zh_SG.po hi.po en_PH.po fr_CA.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/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..a77ceca --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,2 @@ +# List of source files containing translatable strings. +volume.c diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 0000000..0b2bb3a --- /dev/null +++ b/po/ar.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "قد تضر مستويات الصوت العالية بسمعك إذا استمعت إليها لفترة طويلة" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "جافا" + +msgid "IDS_COM_BODY_WARNING" +msgstr "تحذير" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "وسائط" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "سماعات رأس" + diff --git a/po/az.po b/po/az.po new file mode 100644 index 0000000..9ef5746 --- /dev/null +++ b/po/az.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Uzun müddət ucadan qulaq assanız, bu sizin eşitmənizə mənfi təsir edə bilər" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Mediya" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Xəbərdarlıq" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Qulaqlıqlar" + diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..f3f42e3 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Голямата сила на звука може да увреди слуха ви, ако слушате дълго" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Предупреждение" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Медии" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Слушалки" + diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..49cc43c --- /dev/null +++ b/po/ca.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Volums elevats poden malmetre la seva oïda si els escolta durant molt temps" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Advertiment" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multimèdia" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Auriculars" + diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..791cffd --- /dev/null +++ b/po/cs.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Dlouhodobý poslech velmi hlasité reprodukce může poškodit sluch" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Upozornění" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Média" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Sluchátka" + diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..492564b --- /dev/null +++ b/po/da.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Høj musik kan skade din hørelse, hvis du lytter i for lang tid" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Advarsel" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medie" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Høretelefoner" + diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100644 index 0000000..609d635 --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Das Hören lauter Musik über einen längeren Zeitraum kann sich schädlich auf Ihr Gehör auswirken." + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Warnung" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medien" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Kopfhörer" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100644 index 0000000..5b8e401 --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Η ακρόαση μουσικής σε υψηλή ένταση για μεγάλο χρονικό διάστημα μπορεί να βλάψει την ακοή σας" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Προειδοποίηση" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Μέσα" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Ακουστικά" + diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..7aaa29e --- /dev/null +++ b/po/en.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "High volumes may harm your hearing if you listen for a long time" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Warning" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphones" + diff --git a/po/en_GB.po b/po/en_GB.po new file mode 100644 index 0000000..7aaa29e --- /dev/null +++ b/po/en_GB.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "High volumes may harm your hearing if you listen for a long time" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Warning" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphones" + diff --git a/po/en_PH.po b/po/en_PH.po new file mode 100644 index 0000000..0d1afd8 --- /dev/null +++ b/po/en_PH.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "High volume may harm your hearing if you listen to it for a long time" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Warning" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphones" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..7aaa29e --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "High volumes may harm your hearing if you listen for a long time" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Warning" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphones" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 0000000..8293735 --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "El volumen alto durante un tiempo prolongado puede dañar sus oídos" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multimedia" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Auriculares" + diff --git a/po/es_US.po b/po/es_US.po new file mode 100644 index 0000000..138201b --- /dev/null +++ b/po/es_US.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Volúmenes elevados pueden dañar su oído si los escucha durante un tiempo prolongado" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multimedia" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Auriculares" + diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..464a6fe --- /dev/null +++ b/po/et.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Valju heli kuulamine pika aja vältel võib põhjustada kuulmiskahjustusi" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Meedia (Telefon)" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Hoiatus" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Kõrvaklapid" + diff --git a/po/eu.po b/po/eu.po new file mode 100644 index 0000000..ed35339 --- /dev/null +++ b/po/eu.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Baliteke bolumen handien zure entzumena kaltetzea denbora luzean entzuten baduzu" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Oharra" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Aurikularrak" + diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..c7178a2 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Suuri äänenvoimakkuus vaurioittaa kuuloasi pitkäaikaisen kuuntelun aikana" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Varoitus" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Kuulokkeet" + diff --git a/po/fr_CA.po b/po/fr_CA.po new file mode 100644 index 0000000..4437185 --- /dev/null +++ b/po/fr_CA.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "L'écoute prolongée de musique à un volume élevé risque d'endommager votre audition" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Média" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Avertissement" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Écouteurs" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100644 index 0000000..ece5be6 --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr " L'écoute prolongée de musique à un volume élevé risque d'endommager votre audition" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Avertissement" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Média" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Ecouteurs" + diff --git a/po/ga.po b/po/ga.po new file mode 100644 index 0000000..3382374 --- /dev/null +++ b/po/ga.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Is féidir le hairdí arda dochar a dhéanamh don éisteacht má éisteann tú ar feadh tamall fada" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Meáin" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Rabhadh" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Cluasáin" + diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..0c9d7de --- /dev/null +++ b/po/gl.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "A música a un volume elevado pode danar a túa capacidade auditiva se a escoitas durante un período de tempo prolongado" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multimedia" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Androide" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Auriculares" + diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..d13bad1 --- /dev/null +++ b/po/he.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "עוצמות קול גבוהות עלולות לפגוע בשמיעה אם מאזינים להן למשך זמן רב" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "אזהרה" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "מדיה" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "אוזניות" + diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..cce70e5 --- /dev/null +++ b/po/hi.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "उच्च वॉल्यूम से आपके सुनने में नुकसान हो सकता है यदि आप लंबे समय तक उसे सुनते हैं" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "एंड्रोइड" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "चेतावनी" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "मीडिया" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "हेडफ़ोन्‍स" + diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 0000000..d78e735 --- /dev/null +++ b/po/hr.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Velika glasnoća može oštetiti sluh pri dugom slušanju" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Upozorenje" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Mediji" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Slušalice" + diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..696f86d --- /dev/null +++ b/po/hu.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Ha sokáig hallgat nagy hangerőn zenét vagy egyebet, akkor károsodhat a hallása" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Figyelmeztetés" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Média" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Fejhallgató" + diff --git a/po/hy.po b/po/hy.po new file mode 100644 index 0000000..299d0a3 --- /dev/null +++ b/po/hy.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Բարձր ձայնը կարող է վնասել Ձեր լսողությունը, եթե այն լսեք երկար ժամանակ" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Մեդիա" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Զգուշացում" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Գլխ. հեռախոսներ" + diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..fb7537c --- /dev/null +++ b/po/id.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Volume tinggi dapat membahayakan pendengaran Anda jika Anda mendengarkannya dalam waktu yang lama" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Peringatan" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphone" + diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..174b96b --- /dev/null +++ b/po/is.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Hátt spiluð tónlist getur skaðað heyrn þína ef hlustað er í langan tíma í einu" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Miðill" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Viðvörun" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Höfuðtól" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..26f69ca --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Volumi troppo alti possono danneggiare l'udito in caso di ascolto prolungato" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Avviso" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multimedia" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Cuffie" + diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100644 index 0000000..a35215f --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr " ​長時間​​大音量​​で​​聴き​​続ける​​と、​​聴力​​を​​損傷​​する​​可能性​​が​​あります" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "警告" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "メディア" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "ヘッドホン" + diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 0000000..57ddae2 --- /dev/null +++ b/po/ka.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "ხანგრძლივი დროით მუსიკის მაღალ ხმაზე მოსმენა შეიძლება გახდეს სმენის დაქვეითების მიზეზი" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "მედია" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "ჯავა" + +msgid "IDS_COM_BODY_WARNING" +msgstr "გაფრთხილება" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "გარნიტურები" + diff --git a/po/kk.po b/po/kk.po new file mode 100644 index 0000000..4b21e9d --- /dev/null +++ b/po/kk.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Ұзақ уақыт тыңдайтын болсаңыз, қатты дауыс деңгейі есту мүшеңізді зақымдауы мүмкін" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Ақпарат" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Ескерту" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Құлаққаптар" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..6f4d30e --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "오랫동안 큰 소리로 음악을 들으면 청각이 손상될 수 있습니다" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "안드로이드" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "경고" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "미디어" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "헤드폰" + diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..a8b3357 --- /dev/null +++ b/po/lt.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Jei klausysitės garsiai ilgą laiką, gali būti pažeista klausa" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "„Android“" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Perspėjimas" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Daugialypė terpė" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Ausinės" + diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 0000000..7949db5 --- /dev/null +++ b/po/lv.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Ilgstoša skaļas mūzikas klausīšanās var izraisīt dzirdes traucējumus" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Brīdinājums" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multivide" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Austiņas" + diff --git a/po/mk.po b/po/mk.po new file mode 100644 index 0000000..a348a15 --- /dev/null +++ b/po/mk.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Големи јачини може да ви го оштетат слухот ако слушате долго време" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Медиум" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Андроид" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Предупредување" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Слушалки" + diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..6955d87 --- /dev/null +++ b/po/ms.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Kelantangan tinggi mungkin merosakkan pendengaran anda jika anda mendengar untuk masa yang lama" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Amaran" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Fon kepala" + diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..177cec0 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Høy lydstyrke kan skade hørselen din hvis du lytter til det over lengre perioder" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medier" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Advarsel" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Hodetelefoner" + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100644 index 0000000..038c6bf --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Hoog volume kan uw gehoor beschadigen wanneer u er lang naar luistert" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Waarschuwing" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Koptelefoons" + diff --git a/po/no.po b/po/no.po new file mode 100644 index 0000000..b14a452 --- /dev/null +++ b/po/no.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Høy lydstyrke kan skade hørselen din hvis du lytter til det over lengre perioder" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Advarsel" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medier" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Hodetelefoner" + diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..700a5d4 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Słuchanie muzyki przy wysokim ustawieniu głośności przez długi czas może spowodować uszkodzenie słuchu" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Ostrzeżenie" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Słuchawki" + diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..a04d26a --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "O volume alto do som pode prejudicar a sua audição se a expor durante muito tempo" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Mídia" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Fones de ouvido" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..deeeae3 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "O volume de som elevado pode prejudicar a sua audição se a expuser a este durante muito tempo" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Multimédia" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Auscultadores" + diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..57c032f --- /dev/null +++ b/po/ro.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Sunetele la volum ridicat pot afecta auzul, dacă le ascultaţi timp îndelungat" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Avertisment" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Căşti" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100644 index 0000000..9c14ef4 --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Прослушивание громкой музыки в течение продолжительного времени может привести к ухудшению слуха" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Предупреждение" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Медиа" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Наушники" + diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..e09ad1e --- /dev/null +++ b/po/sk.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Vysoká hlasitosť môže pri dlhodobom počúvaní poškodiť sluch" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Varovanie" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Médium" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Slúchadlá" + diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..8d2d911 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Če glasno glasbo poslušate daljši čas, lahko to škoduje vašem sluhu" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Opozorilo" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medij" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Slušalke" + diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..29dd718 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Velika jačina zvuka može da ošteti sluh ukoliko tako slušate duže vreme" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Upozorenje" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Mediji" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Slušalice" + diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..e837074 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Hög volym kan skada din hörsel om du lyssnar för länge" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Varning" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Hörlurar" + diff --git a/po/th.po b/po/th.po new file mode 100644 index 0000000..c69ee38 --- /dev/null +++ b/po/th.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "ระดับ​เสียง​ที่​สูง​อาจ​เป็น​อันตราย​ต่อ​การ​ฟัง​ของ​คุณ​ได้ หาก​คุณ​ฟัง​เป็น​เวลา​นาน" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "เตือน" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "มี​เดีย" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "หู​ฟัง" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..271e339 --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Yüksek ses düzeyi, uzun süre dinlemeniz durumunda işitme duyunuza zarar verebilir" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Uyarı" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medya" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Kulaklıklar" + diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..08d2684 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Тривале прослуховування за високого рівня гучності може призвести до погіршення слуху" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Попередження" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Медіадані" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Навушники" + diff --git a/po/update-po.sh b/po/update-po.sh new file mode 100755 index 0000000..c84f1a7 --- /dev/null +++ b/po/update-po.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +PACKAGE=volume +SRCROOT=../src +POTFILES=POTFILES.in + +#ALL_LINGUAS= ar bg ca cs da de_DE el_GR en en_GB en_US es_ES fi fr_FR he hi hr hu id it_IT ja_JP ko_KR lt lv ms nl_NL no pl pt_PT ro ru_RU sk sl sr sv th tr_TR uk vi zh_CN zh_HK zh_TW +ALL_LINGUAS="ar bg ca cs da de_DE el_GR en en_GB en_US es_ES fi fr_FR he hi hr hu id it_IT ja_JP ko_KR lt lv ms nl_NL no pl pt_PT ro ru_RU sk sl sr sv th tr_TR uk vi zh_CN zh_HK zh_TW" + +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/po/uz.po b/po/uz.po new file mode 100644 index 0000000..85fccdc --- /dev/null +++ b/po/uz.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Musiqani baland ovozda uzoq vaqt davomida tinglash eshitish a’zolaringizga zarar yetkazishi mumkin" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Ogohlantirish" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Quloqliklar" + diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..aa6c018 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Nghe âm lượng to trong thời gian dài có thể làm hại thính giác của bạn" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Cảnh báo" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Tai nghe" + diff --git a/po/volume.pot b/po/volume.pot new file mode 100644 index 0000000..e4901a6 --- /dev/null +++ b/po/volume.pot @@ -0,0 +1,26 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-10-21 17:49+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: volume.c:38 +msgid "Application template" +msgstr "" + +#: volume.c:39 +msgid "Click to exit" +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..f1084c3 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "如果长时间用高音量收听,可能会损坏听力" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java程序" + +msgid "IDS_COM_BODY_WARNING" +msgstr "警告" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "媒体" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "耳机" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100644 index 0000000..3e1988c --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "長期聆聽高音量會損害您的聽力" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "警告" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "媒體" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "耳機" + diff --git a/po/zh_SG.po b/po/zh_SG.po new file mode 100644 index 0000000..6292605 --- /dev/null +++ b/po/zh_SG.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "如果长时间用高音量收听,可能会损坏听力" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "媒体" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "警告" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "耳机" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..7b90ac5 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "長期聆聽過大音量會損害您的聽力" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "警告" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "媒體" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "耳機" + diff --git a/src/_logic.c b/src/_logic.c new file mode 100755 index 0000000..50fe063 --- /dev/null +++ b/src/_logic.c @@ -0,0 +1,994 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 + +#include +#include +#include +#include +#include +#include +#include +#include + +#include"_logic.h" +#include "volume.h" +#include "_util_log.h" +#include "_util_efl.h" +#include "_sound.h" + +#define STRBUF_SIZE 128 +#define PATHBUF_SIZE 256 +#define EMUL_STR "Emulator" + +enum { + IDLELOCK_OFF = 0x0, + IDLELOCK_ON, + IDLELOCK_MAX, +}; + +/* _check_status() return value */ +enum{ + LOCK_AND_NOT_MEDIA = -0x1, + UNLOCK_STATUS, + LOCK_AND_MEIDA, +}; + +#ifndef VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS +#define VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS VCONFKEY_SETAPPL_PREFIX"/accessibility/turn_off_all_sounds" +#endif + +int _close_volume(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + retvm_if(ad->flag_deleting == EINA_TRUE, -1, "Closing volume\n"); + + _D("start closing volume\n"); + ad->flag_deleting = EINA_TRUE; + + _ungrab_key_new(ad); + _grab_key_new(ad, ad->input_win, SHARED_GRAB); + + DEL_TIMER(ad->sutimer) + DEL_TIMER(ad->lutimer) + DEL_TIMER(ad->sdtimer) + DEL_TIMER(ad->ldtimer) + DEL_TIMER(ad->ptimer) + + if (evas_object_visible_get(ad->win) == EINA_TRUE){ + _D("hide window\n"); + evas_object_hide(ad->win); + } + appcore_flush_memory(); + + ad->flag_deleting = EINA_FALSE; + ad->flag_launching = EINA_FALSE; + _D("end closing volume\n"); + return 0; +} + +Eina_Bool popup_timer_cb(void *data) +{ + _D("%s\n", __func__); + _close_volume(data); + return ECORE_CALLBACK_CANCEL; +} + +Eina_Bool _lu_timer_cb(void *data) +{ + int val = -1; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, 0, "Invalid argument: appdata is NULL\n"); + if (ad->win == NULL || evas_object_visible_get(ad->win) == EINA_FALSE){ + _D("win is NULL or hide state, so long press pass\n"); + return ECORE_CALLBACK_CANCEL; + } + DEL_TIMER(ad->stimer) + + _get_sound_level(ad->type, &val); + _set_sound_level(ad->type, val +1 > ad->step ? ad->step : val + 1); + _D("down, type(%d), step(%d) val[%d]\n", ad->type, ad->step, val+1); + return ECORE_CALLBACK_RENEW; +} + +Eina_Bool _su_timer_cb(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, 0, "Invalid argument: appdata is NULL\n"); + ADD_TIMER(ad->lutimer, 0.0, _lu_timer_cb, ad) + return ECORE_CALLBACK_CANCEL; +} + +Eina_Bool _ld_timer_cb(void *data) +{ + int val = 0; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, 0, "Invalid argument: appdata is NULL\n"); + if (ad->win == NULL || evas_object_visible_get(ad->win) == EINA_FALSE){ + _D("win is NULL or hide state, so long press pass\n"); + return ECORE_CALLBACK_CANCEL; + } + DEL_TIMER(ad->stimer) + + _get_sound_level(ad->type, &val); + _set_sound_level(ad->type, val -1 <= 0 ? 0 : val - 1); + _D("down, type(%d), step(%d) val[%d]\n", ad->type, ad->step, val+1); + return ECORE_CALLBACK_RENEW; +} + +Eina_Bool _sd_timer_cb(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, 0, "Invalid argument: appdata is NULL\n"); + _D("add long down timer\n"); + ADD_TIMER(ad->ldtimer, 0.0, _ld_timer_cb, ad) + return ECORE_CALLBACK_CANCEL; +} + +Eina_Bool _volume_show(void *data) +{ + _D("%s\n", __func__); + int status = -1; + int type = MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY; + int lock = IDLELOCK_ON; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, EINA_FALSE, "Invalid argument: appdata is NULL\n"); + + status = _check_status(&lock, &type); + if(status != LOCK_AND_NOT_MEDIA && ad->win) + { + _init_mm_sound(ad); + /* ungrab SHARED_GRAB */ + _ungrab_key_new(ad); + + if(status == UNLOCK_STATUS) + { + _grab_key_new(ad, -1, TOP_POSITION_GRAB); + + _rotate_func(ad); + elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_HIDE); + evas_object_show(ad->win); + if(syspopup_has_popup(ad->volume_bundle)) + syspopup_reset(ad->volume_bundle); + } + else if(status == LOCK_AND_MEIDA) + { + _grab_key_new(ad, ad->input_win, EXCLUSIVE_GRAB); + } + ad->flag_launching = EINA_TRUE; + _mm_func(ad); + return EINA_TRUE; + } + else if(!ad->win) + { + /* recreate window */ + } + + _D("status == LOCK_AND_NOT_MEDIA\n"); + return EINA_FALSE; +} + +static Eina_Bool _key_press_cb(void *data, int type, void *event) +{ + _D("%s\n", __func__); + int val=0, snd=0, vib=0; + Ecore_Event_Key *ev = event; + int status = -1; + int mtype = MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY; + int lock = IDLELOCK_ON; + int is_turn_off_all_sounds = 0; + int ret = -1; + struct appdata *ad = (struct appdata *)data; + + status = _check_status(&lock, &mtype); + + retvm_if(ev == NULL, ECORE_CALLBACK_CANCEL, "Invalid arguemnt: event is NULL\n"); + retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n"); + retvm_if(ad->win == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: window is NULL\n"); + + ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &is_turn_off_all_sounds); + if(ret == 0) + { + retvm_if(is_turn_off_all_sounds == EINA_TRUE, ECORE_CALLBACK_CANCEL, + "VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS is set, all sound is mute\n"); + } + + if(!ad->flag_launching) + { + if(_volume_show(data) != EINA_TRUE) + { + return ECORE_CALLBACK_CANCEL; + } + } + + if(ad->flag_touching == EINA_TRUE) { + return ECORE_CALLBACK_CANCEL; + } + + ad->flag_pressing = EINA_TRUE; + + DEL_TIMER(ad->ptimer) + vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd); + vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib); + + /* If sound is set off, only RINGTONE, MEDIA types are able to change. */ + if(!snd && ad->type != VOLUME_TYPE_MEDIA && ad->type != VOLUME_TYPE_RINGTONE){ + if(vib)_play_vib(ad->sh); + return ECORE_CALLBACK_CANCEL; + } + + if (!strcmp(ev->keyname, KEY_VOLUMEUP)) { + _get_sound_level(ad->type, &val); + if (val == ad->step) { + _set_sound_level(ad->type, ad->step); + if(snd)_play_sound(ad->type, ad->sh); + return ECORE_CALLBACK_CANCEL; + } + _set_sound_level(ad->type, val + 1); + if(snd)_play_sound(ad->type, ad->sh); + DEL_TIMER(ad->sutimer) + ADD_TIMER(ad->sutimer, 0.5, _su_timer_cb, ad) + + _D("set volume %d -> [%d]\n", val, val+1); + + } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) { + _get_sound_level(ad->type, &val); + if (val == 0) { + if(vib)_play_vib(ad->sh); + return ECORE_CALLBACK_CANCEL; + } + _set_sound_level(ad->type, val - 1); + if(snd)_play_sound(ad->type, ad->sh); + DEL_TIMER(ad->sdtimer) + ADD_TIMER(ad->sdtimer, 0.5, _sd_timer_cb, ad) + + _D("type (%d) set volume %d -> [%d]\n", ad->type, val, val-1); + + } + return ECORE_CALLBACK_CANCEL; +} + +static Eina_Bool _key_release_cb(void *data, int type, void *event) +{ + Ecore_Event_Key *ev = event; + struct appdata *ad = (struct appdata *)data; + + retvm_if(ev == NULL, ECORE_CALLBACK_CANCEL, "Invalid arguemnt: event is NULL\n"); + retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument:appdata is NULL\n"); + retvm_if(ad->win == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: window is NULL\n"); + + if (ad->flag_touching == EINA_TRUE) { + return ECORE_CALLBACK_CANCEL; + } + + if (!strcmp(ev->keyname, KEY_VOLUMEUP)) { + _D("up key released and del timer\n"); + DEL_TIMER(ad->sutimer) + DEL_TIMER(ad->lutimer) + DEL_TIMER(ad->luwarmtimer) + } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) { + _D("down key released and del timer\n"); + DEL_TIMER(ad->sdtimer) + DEL_TIMER(ad->ldtimer) + DEL_TIMER(ad->ldwarmtimer) + } + + ad->flag_pressing = EINA_FALSE; + + DEL_TIMER(ad->ptimer) + + ADD_TIMER(ad->ptimer, 3.0, popup_timer_cb, ad) + + return ECORE_CALLBACK_CANCEL; +} + +int _grab_key_new(struct appdata *ad, Ecore_X_Window _xwin, int grab_mode) +{ + _D("%s\n", __func__); + Ecore_X_Display *disp = NULL; + Ecore_X_Window xwin = 0; + int ret = -1; + + /* ALREADY GRAB check */ + switch(grab_mode) + { + case SHARED_GRAB : if(ad->flag_shared_grabed)return -1; + break; + case EXCLUSIVE_GRAB : if(ad->flag_exclusive_grabed)return -1; + break; + case TOP_POSITION_GRAB : if(ad->flag_top_positioni_grabed)return -1; + break; + } + + disp = ecore_x_display_get(); + retvm_if(disp == NULL, -1, "Failed to get display\n"); + + if(_xwin == -1) + { + /* TOP_POSITION_GRAB */ + xwin = elm_win_xwindow_get(ad->win); + retvm_if(xwin == 0, -1, "elm_win_xwindow_get() failed\n"); + } + else + xwin = _xwin; + + ret = utilx_grab_key(disp, xwin, KEY_VOLUMEDOWN, grab_mode); + retvm_if(ret < 0, -1, "Failed to grab key down\n"); + retvm_if(ret == 1, -1, "Already grab\n"); + + ret = utilx_grab_key(disp, xwin, KEY_VOLUMEUP, grab_mode); + retvm_if(ret < 0, -1, "Failed to grab key up\n"); + retvm_if(ret == 1, -1, "Already grab\n"); + + switch(grab_mode) + { + case SHARED_GRAB : + ad->flag_shared_grabed = EINA_TRUE; + break; + case EXCLUSIVE_GRAB : + ad->flag_exclusive_grabed = EINA_TRUE; + break; + case TOP_POSITION_GRAB : + ad->flag_top_positioni_grabed = EINA_TRUE; + break; + } + + return 0; +} + +int _ungrab_key_new(struct appdata *ad) +{ + Ecore_X_Window xwin = 0; + Ecore_X_Display *disp = NULL; + + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + retvm_if(ad->input_win == 0, -1, "Invalid argument: ad->win is NULL\n"); + + xwin = elm_win_xwindow_get(ad->win); + retvm_if(xwin == 0, -1, "Failed to get xwindow\n"); + + disp = ecore_x_display_get(); + retvm_if(disp == NULL, -1, "Failed to get display\n"); + + utilx_ungrab_key(disp, ad->input_win, KEY_VOLUMEUP); + utilx_ungrab_key(disp, ad->input_win, KEY_VOLUMEDOWN); + _D("key ungrabed\n"); + + if(ad->flag_exclusive_grabed) + ad->flag_exclusive_grabed = EINA_FALSE; + else if(ad->flag_top_positioni_grabed) + ad->flag_top_positioni_grabed = EINA_FALSE; + else if(ad->flag_shared_grabed) + ad->flag_shared_grabed = EINA_FALSE; + + return 0; +} + +int _get_vconf_idlelock(void) +{ + int ret = -1; + int lock = IDLELOCK_OFF; + + ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &lock); + retvm_if(ret < 0, -1, "Failed to get vconf %s\n", + VCONFKEY_IDLE_LOCK_STATE); + _D("idlelock vconf:%d\n", lock); + + return lock == VCONFKEY_IDLE_LOCK ? IDLELOCK_ON : IDLELOCK_OFF; +} + +volume_type_t _get_volume_type(void) +{ + int ret = MM_ERROR_NONE; + volume_type_t type = -1; + + ret = mm_sound_volume_get_current_playing_type(&type); + switch (ret) { + case MM_ERROR_NONE: + break; + case MM_ERROR_SOUND_VOLUME_NO_INSTANCE: + case MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY: + type = VOLUME_TYPE_RINGTONE; + break; + default: + _D("Failed to get sound type(errno:%x)\n", ret); + return -1; + } + if(type == VOLUME_TYPE_NOTIFICATION || type == VOLUME_TYPE_SYSTEM) + type = VOLUME_TYPE_RINGTONE; + return type; +} + +int _check_status(int *lock, int *type) +{ + *lock = _get_vconf_idlelock(); + *type = _get_volume_type(); + _D("lock(%d) type(%d)\n", *lock, *type); + + if (*type == MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY + || *type == MM_ERROR_SOUND_INTERNAL) { + _D("Do not show by type\n"); + return -1; + } + + if (*lock == IDLELOCK_ON && *type != VOLUME_TYPE_MEDIA) { + _D("lock is set, not in media\n"); + return -1; + } + + if (*lock == IDLELOCK_ON && *type == VOLUME_TYPE_MEDIA) { + _D("lock is set, in media\n"); + return 1; + } + _D("unlock status, normal case\n"); + return 0; +} + +void _starter_user_volume_key_vconf_changed_cb(keynode_t *key, void *data){ + _D("%s\n", __func__); + int ret = EINA_FALSE; + vconf_get_int(VCONFKEY_STARTER_USE_VOLUME_KEY, &ret); + if(ret != 0) + { + _D("any other App grab volume hard key\n", __func__); + _close_volume(data); + vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 0); + } +} + +void _idle_lock_state_vconf_chnaged_cb(keynode_t *key, void *data){ + _close_volume(data); +} + +int _app_create(struct appdata *ad) +{ + _D("%s\n", __func__); + int ret = 0; + _init_svi(ad); + + /* create input_window */ + ad->input_win = _add_input_window(); + retvm_if(ad->input_win == 0, -1, "Failed to create input window\n"); + + /* vconf changed callback */ + vconf_notify_key_changed(VCONFKEY_STARTER_USE_VOLUME_KEY, + _starter_user_volume_key_vconf_changed_cb, ad); + + /* Lock screen status vconf changed callback */ + vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, + _idle_lock_state_vconf_chnaged_cb, ad); + + /* grab volume shared grab */ + ret = _grab_key_new(ad, ad->input_win, SHARED_GRAB); + + /* ecore event handler add once */ + if(ad->event_volume_down == NULL) + ad->event_volume_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, ad); + if(ad->event_volume_up == NULL) + ad->event_volume_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, ad); + + _init_mm_sound(ad); + + return ret; +} + +int __utilx_ss_get_window_property(Display *dpy, Window win, Atom atom, + Atom type, unsigned int *val, + unsigned int len) +{ + unsigned char *prop_ret = NULL; + Atom type_ret = -1; + unsigned long bytes_after = 0; + unsigned long num_ret = -1; + int format_ret = -1; + unsigned int i = 0; + int num = 0; + + prop_ret = NULL; + if (XGetWindowProperty(dpy, win, atom, 0, 0x7fffffff, False, + type, &type_ret, &format_ret, &num_ret, + &bytes_after, &prop_ret) != Success) + return -1; + + if (type_ret != type || format_ret != 32) + num = -1; + else if (num_ret == 0 || !prop_ret) + num = 0; + else { + if (num_ret < len) + len = num_ret; + for (i = 0; i < len; i++) { + val[i] = ((unsigned long *)prop_ret)[i]; + } + num = len; + } + + if (prop_ret) + XFree(prop_ret); + + return num; +} + +int _x_rotation_get(Display *dpy, void *data) +{ + Window active_win = 0; + Window root_win = 0; + int rotation = -1; + int ret = -1; + + Atom atom_active_win; + Atom atom_win_rotate_angle; + + retvm_if(dpy == NULL, -1, "dpy is NULL\n"); + root_win = XDefaultRootWindow(dpy); + + atom_active_win = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); + ret = __utilx_ss_get_window_property(dpy, root_win, atom_active_win, + XA_WINDOW, + (unsigned int *)&active_win, 1); + + if(ret < 0) + return ret; + + atom_win_rotate_angle = XInternAtom(dpy, "_E_ILLUME_ROTATE_ROOT_ANGLE", False); + ret = __utilx_ss_get_window_property(dpy, root_win, + atom_win_rotate_angle, XA_CARDINAL, + (unsigned int *)&rotation, 1); + + if(ret != -1) + return rotation; + + return -1; +} + +int _volume_popup_resize(void *data, int angle) +{ + int rotation = 0; + int offx=0, offy=0; + Evas_Coord minw = -1, minh = -1; + Evas_Coord w = 0, h = 0; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad->win == NULL, -1, "Invalid argument: window is NULL\n"); + retvm_if(ad->block_events == NULL, -1, "Invalid argument: notify is NULL\n"); + + if(angle == -1) + rotation = ad->angle; + else + rotation = angle; + + system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_WIDTH, &w); + system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_HEIGHT, &h); + + switch(rotation){ + case 90 : + case 270 : + evas_object_resize(ad->block_events, h, w); + edje_object_size_min_get(ad->block_events, &minw, &minh); + edje_object_size_min_restricted_calc(ad->block_events, &minw, &minh, minw, minh); + offx = (h - minw) / 2; + offy = (w - minh) / 5; + break; + case 0 : + case 180 : + default : + evas_object_resize(ad->block_events, w, h); + edje_object_size_min_get(ad->block_events, &minw, &minh); + edje_object_size_min_restricted_calc(ad->block_events, &minw, &minh, minw, minh); + offx = (w - minw) / 2; + offy = (h - minh) / 5; + break; + } + _D("w(%d) h(%d) offx(%d) offy(%d)\n", w, h, offx, offy); + evas_object_move(ad->ly, offx, offy); + return 1; +} + +int _efl_rotate(Display *dpy, void *data) +{ + int rotation = -1; + struct appdata *ad = (struct appdata *)data; + + rotation = _x_rotation_get(dpy, ad); + + if(rotation == -1) + rotation = 0; + + if(rotation >= 0){ + elm_win_rotation_set(ad->win, rotation); + ad->angle = rotation; + return _volume_popup_resize(data, rotation); + } + + return 0; +} + +int _rotate_func(void *data) +{ + _D("%s\n", __func__); + struct appdata *ad = (struct appdata *)data; + Display *d = NULL; + int ret = 0; + + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + d = XOpenDisplay(NULL); + ret = _efl_rotate(d, ad); + XCloseDisplay(d); + + return ret; +} + +int myterm(bundle *b, void *data) +{ + return 0; +} + +int mytimeout(bundle *b, void *data) +{ + return 0; +} + +syspopup_handler handler = { + .def_term_fn = myterm, + .def_timeout_fn = mytimeout +}; + +void _set_level(int type) +{ + int val = 0; + _get_sound_level(type, &val); + _set_sound_level(type, val); + _D("type(%d) val(%d)\n", type, val); +} + +static void _block_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source) +{ + _close_volume(data); +} + +Eina_Bool _slider_timer_cb(void *data) +{ + double val = 0; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, 0, "Invalid argument: appdata is NULL\n"); + if (ad->sl) { + val = elm_slider_value_get(ad->sl); + val += 0.5; + if ((int)val != 0) { + _set_sound_level(ad->type, (int)val); + } + if (val <= 0.5) { + elm_slider_value_set(ad->sl, 0); + _set_sound_level(ad->type, 0); + } + return ECORE_CALLBACK_RENEW; + } + return ECORE_CALLBACK_CANCEL; +} + +static void _slider_start_cb(void *data, Evas_Object *obj, void *event_info) +{ + _D("%s\n", __func__); + int snd= 0 ; + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + + if (ad->flag_pressing == EINA_TRUE) { + return; + } + ad->flag_touching = EINA_TRUE; + + DEL_TIMER(ad->ptimer) + + vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd); + if(!snd){ + vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, EINA_TRUE); + _set_icon(data, -1); + } + + if (ad->lutimer || ad->ldtimer) { + _D("return when long press is working\n"); + return; + } + + ADD_TIMER(ad->stimer, 0.2, _slider_timer_cb, data) +} + +static void _slider_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + + if (ad->flag_pressing == EINA_TRUE) { + return; + } + if (ad->lutimer || ad->ldtimer) { + _D("return when long press is working\n"); + return; + } +} +static void _slider_stop_cb(void *data, Evas_Object *obj, void *event_info) +{ + _D("func\n"); + double val = 0; + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + + if (ad->flag_pressing == EINA_TRUE) { + return; + } + if (ad->lutimer || ad->ldtimer) { + _D("return when long press is working\n"); + return; + } + DEL_TIMER(ad->stimer) + if (ad->sl) { + val = elm_slider_value_get(ad->sl); + val += 0.5; + _set_sound_level(ad->type, (int)val); + } + _play_sound(ad->type, ad->sh); + ad->flag_touching = EINA_FALSE; + ADD_TIMER(ad->ptimer, 3.0, popup_timer_cb, ad) +} + +Eina_Bool _lu_warmup_timer_cb(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n"); + ADD_TIMER(ad->lutimer, 0.0, _lu_timer_cb, ad) + return ECORE_CALLBACK_CANCEL; +} + +Eina_Bool _ld_warmup_timer_cb(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n"); + ADD_TIMER(ad->ldtimer, 0.0, _ld_timer_cb, ad) + return ECORE_CALLBACK_CANCEL; +} + +void _init_press_timers(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + DEL_TIMER(ad->sdtimer) + DEL_TIMER(ad->ldtimer) + DEL_TIMER(ad->ldwarmtimer) + DEL_TIMER(ad->sutimer) + DEL_TIMER(ad->lutimer) + DEL_TIMER(ad->luwarmtimer) +} + +int _handle_bundle(bundle *b, struct appdata *ad) +{ + const char *bval = NULL; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + bval = bundle_get_val(b, "LONG_PRESS"); + if (bval) { + _D("val(%s)\n", bval); + + if (!strncmp(bval, "VOLUME_UP", strlen("LONG_PRESS"))) { + _D("volume up long press\n"); + DEL_TIMER(ad->ptimer) + ADD_TIMER(ad->luwarmtimer, 0.5, _lu_warmup_timer_cb, ad); + } else if (!strncmp(bval, "VOLUME_DOWN", strlen("LONG_PRESS"))) { + _D("volume down long press\n"); + DEL_TIMER(ad->ptimer) + ADD_TIMER(ad->ldwarmtimer, 0.5, _ld_warmup_timer_cb, ad); + } else { + ADD_TIMER(ad->ptimer, 3.0, popup_timer_cb, ad) + } + } else { + ADD_TIMER(ad->ptimer, 3.0, popup_timer_cb, ad) + _init_press_timers(ad); + } + return 0; +} + +static void _button_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _D("%s\n", __func__); + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + char buf[PATHBUF_SIZE] = {0, }; + snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR, IMG_VOLUME_ICON_SETTINGS_PRESSED); + elm_image_file_set(obj, buf, NULL); +} + +static void _button_cb(void *data, Evas_Object *obj, void *event_info) +{ + _D("%s\n", __func__); + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + char buf[PATHBUF_SIZE] = {0, }; + snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR, IMG_VOLUME_ICON_SETTINGS); + elm_image_file_set(obj, buf, NULL); + if(evas_object_visible_get(ad->win)){ + DEL_TIMER(ad->ptimer) + if(ecore_x_e_illume_quickpanel_state_get( + ecore_x_e_illume_zone_get(elm_win_xwindow_get(ad->win))) != ECORE_X_ILLUME_QUICKPANEL_STATE_OFF) + { + _D("Quickpanel is hide\n"); + ecore_x_e_illume_quickpanel_state_send( + ecore_x_e_illume_zone_get(elm_win_xwindow_get(ad->win)), ECORE_X_ILLUME_QUICKPANEL_STATE_OFF); + } + service_h svc; + service_create(&svc); + service_set_package(svc, "setting-profile-efl"); + service_send_launch_request(svc, NULL, NULL); + _app_pause(ad); + + service_destroy(svc); + } +} + +static int _check_emul(void) +{ + int is_emul = 0; + char *info = NULL; + + if (system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) { + if (info == NULL) return 0; + if (!strncmp(EMUL_STR, info, strlen(info))) { + is_emul = 1; + } + } + + if (info != NULL) free(info); + + return is_emul; +} + +int _app_reset(bundle *b, void *data) +{ + _D("%s\n", __func__); + int ret = -1, status = -1, val = 0; + int type = MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY; + int lock = IDLELOCK_ON; + Evas_Object *win, *sl, *ic, *ic_settings; + /* volume-app layout */ + Elm_Theme *th; + Evas_Object *outer, *inner, *block; + char buf[PATHBUF_SIZE] = {0, }; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + ad->noti_seen = EINA_FALSE; + ad->flag_launching = EINA_FALSE; + ad->flag_pressing = EINA_FALSE; + ad->flag_touching = EINA_FALSE; + + status = _check_status(&lock, &type); + ad->type = type; + mm_sound_volume_get_value(type, (unsigned int*)(&val)); + + if(ad->win == NULL) { + win = _add_window(PACKAGE); + retvm_if(win == NULL, -1, "Failed add window\n"); + _D("create window\n"); + ad->win = win; + } + else { + _E("window already exist\n"); + return -1; + } + + th = elm_theme_new(); + elm_theme_ref_set(th, NULL); + elm_theme_extension_add(th, EDJ_APP); + + ad->flag_emul = _check_emul(); + + if(!ad->flag_emul) + { + block = _add_layout(win, EDJ_APP, GRP_VOLUME_BLOCKEVENTS); + retvm_if(block == NULL, -1, "Failed to add block layout\n"); + + edje_object_signal_callback_add(elm_layout_edje_get(block), "clicked", "*", _block_clicked_cb, ad); + + outer = _add_layout(win, EDJ_APP, GRP_VOLUME_LAYOUT); + retvm_if(outer== NULL, -1, "Failed to add outer layout\n"); + + inner = _add_layout(win, EDJ_APP, "popup_volumebar"); + retvm_if(inner == NULL, -1, "Failed to add inner layout\n"); + + ad->block_events = block; + ad->ly = outer; + + elm_object_part_content_set(outer, "elm.swallow.content", inner); + + sl = _add_slider(win, 0, ad->step, val); + elm_object_theme_set(sl, th); + evas_object_smart_callback_add(sl, "slider,drag,start", _slider_start_cb, ad); + evas_object_smart_callback_add(sl, "changed", _slider_changed_cb, ad); + evas_object_smart_callback_add(sl, "slider,drag,stop", _slider_stop_cb, ad); + + ic_settings = elm_icon_add(win); + evas_object_size_hint_aspect_set(ic_settings, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_image_resizable_set(ic_settings, EINA_FALSE, EINA_FALSE); + snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR, IMG_VOLUME_ICON_SETTINGS); + _D("%s\n", buf); + elm_image_file_set(ic_settings, buf, NULL); + elm_object_part_content_set(inner, "elm.swallow.icon", ic_settings); + evas_object_event_callback_add(ic_settings, EVAS_CALLBACK_MOUSE_DOWN, _button_mouse_down_cb, ad); + evas_object_smart_callback_add(ic_settings, "clicked", _button_cb, ad); + evas_object_show(ic_settings); + ad->ic_settings = ic_settings; + + ad->sl = sl; + elm_object_part_content_set(inner, "elm.swallow.content", sl); + + ic = elm_icon_add(win); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(ad->sl, "icon", ic); + ad->ic = ic; + _set_icon(ad, val); + } + else + { + block = _add_layout(win, EDJ_APP, GRP_VOLUME_BLOCKEVENTS); + retvm_if(block == NULL, -1, "Failed to add block layout\n"); + + edje_object_signal_callback_add(elm_layout_edje_get(block), "clicked", "*", _block_clicked_cb, ad); + outer = _add_layout(win, EDJ_APP, GRP_VOLUME_LAYOUT); + retvm_if(outer == NULL, -1, "Failed to add outer layout\n"); + + inner = _add_layout(win, EDJ_APP, GRP_VOLUME_CONTENT); + retvm_if(inner == NULL, -1, "Failed to add inner layout\n"); + + ad->block_events = block; + ad->ly = outer; + + elm_object_part_content_set(outer, "elm.swallow.content", inner); + + sl = _add_slider(win, 0, ad->step, val); + evas_object_smart_callback_add(sl, "slider,drag,start", _slider_start_cb, ad); + evas_object_smart_callback_add(sl, "changed", _slider_changed_cb, ad); + evas_object_smart_callback_add(sl, "slider,drag,stop", _slider_stop_cb, ad); + + ad->sl = sl; + elm_object_part_content_set(inner, "elm.swallow.content", sl); + evas_object_show(sl); + + ic = elm_icon_add(win); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(ad->sl, "icon", ic); + ad->ic = ic; + _set_icon(ad, val); + } + + + ret = syspopup_create(b, &handler, ad->win, ad); + retvm_if(ret < 0, -1, "Failed to create syspopup\n"); + ad->volume_bundle = bundle_dup(b); + + return 0; +} + +int _app_pause(struct appdata *ad) +{ + _D("%s\n", __func__); + _close_volume(ad); + return 0; +} diff --git a/src/_logic.h b/src/_logic.h new file mode 100755 index 0000000..b55a64e --- /dev/null +++ b/src/_logic.h @@ -0,0 +1,39 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 __VOLUME_LOGIC_H__ +#define __VOLUME_LOGIC_H__ + +#include "volume.h" +#include + +int _get_vconf_idlelock(void); +volume_type_t _get_volume_type(void); +int _close_volume(void *data); +int _app_create(struct appdata *ad); +int _app_pause(struct appdata *ad); +int _rotate_func(void *data); +int _app_reset(bundle *b, void *data); +Eina_Bool popup_timer_cb(void *data); +void _init_press_timers(void *data); +int _check_status(int *lock, int *type); +int _ungrab_key_new(struct appdata *ad); +int _grab_key_new(struct appdata *ad, Ecore_X_Window _xwin, int grab_mode); + +#endif +/* __VOLUME_LOGIC_H__ */ diff --git a/src/_sound.c b/src/_sound.c new file mode 100755 index 0000000..4bb43bc --- /dev/null +++ b/src/_sound.c @@ -0,0 +1,299 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 +#include +#include +#include +#include + +#include "volume.h" +#include "_util_log.h" +#include "_logic.h" + +#define STRBUF_SIZE 64 +#define PATHBUF_SIZE 256 + +int _set_sound_level(volume_type_t type, int val); +int _get_sound_level(volume_type_t type, int * val); + +void _play_vib(int handle) +{ + svi_play_vib(handle, SVI_VIB_OPERATION_VIBRATION); +} + +void _play_sound(int type, int handle) +{ + feedback_initialize(); + + if (type == VOLUME_TYPE_MEDIA) { + + } else { + feedback_play(FEEDBACK_PATTERN_VOLUME_KEY); + } + feedback_deinitialize(); +} + +int _init_svi(void *data) +{ + int ret = -1, handle = -1; + + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, -1, "Invaild argument: appdata is NULL\n"); + + ret = svi_init(&handle); + if (ret != SVI_SUCCESS) { + _E("Failed to init svi\n"); + svi_fini(handle); + return -1; + } + ad->sh = handle; + return 0; +} + +int _set_slider_value(void *data, int val) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + if (ad->flag_touching == EINA_TRUE) { + return 0; + } + if (ad->sl) { + elm_slider_min_max_set(ad->sl, 0, ad->step); + elm_slider_value_set(ad->sl, val); + } + + return 0; +} + +int _set_icon(void *data, int val) +{ + int snd=0, vib=0; + char *img = NULL; + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + system_audio_route_device_t device = 0; + mm_sound_route_get_playing_device(&device); + + vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd); + vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib); + + switch(ad->type){ + case VOLUME_TYPE_RINGTONE: + img = IMG_VOLUME_ICON_CALL; + break; + case VOLUME_TYPE_MEDIA: + if(device == SYSTEM_AUDIO_ROUTE_PLAYBACK_DEVICE_EARPHONE) + img = IMG_VOLUME_ICON_HEADPHONE; + else + img = IMG_VOLUME_ICON_MEDIA; + break; + default: + img = IMG_VOLUME_ICON; + break; + } + if (ad->ic ) { + elm_image_file_set(ad->ic, EDJ_APP, img); + } + return 1; +} + +void _set_device_warning(void *data, int val, int device) +{ + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + + switch (device) { + case SYSTEM_AUDIO_ROUTE_PLAYBACK_DEVICE_EARPHONE: + if (val >= 10 && ad->type == VOLUME_TYPE_MEDIA) { + if(ad->noti_seen == EINA_FALSE){ + ad->noti_seen = EINA_TRUE; + notification_status_message_post(T_(IDS_WARNING_MSG)); + } + } + else { + ad->noti_seen = EINA_FALSE; + } + break; + default: + ad->noti_seen = EINA_FALSE; + break; + } +} + +int _get_title(volume_type_t type, char *label, int size) +{ + char *text = NULL; + + switch (type) { + case VOLUME_TYPE_SYSTEM: + text = S_("IDS_COM_BODY_SYSTEM"); + break; + case VOLUME_TYPE_NOTIFICATION: + text = S_("IDS_COM_HEADER_NOTIFICATION"); + break; + case VOLUME_TYPE_ALARM: + text = S_("IDS_COM_BODY_ALARM"); + break; + case VOLUME_TYPE_RINGTONE: + text = S_("IDS_COM_BODY_RINGTONE"); + break; + case VOLUME_TYPE_MEDIA: + text = T_("IDS_COM_BODY_MEDIA"); + break; + case VOLUME_TYPE_CALL: + text = S_("IDS_COM_BODY_CALL"); + break; + case VOLUME_TYPE_EXT_ANDROID: + /* this enum is different from mm_sound.h and avsys-audio.h */ + text = T_("IDS_COM_BODY_ANDROID"); + break; + case VOLUME_TYPE_EXT_JAVA: + text = T_("IDS_COM_BODY_JAVA"); + break; + default: + text = S_("IDS_COM_BODY_SYSTEM"); + break; + } + snprintf(label, size, "%s", text); + _D("get title(%s)\n", label); + + return 0; +} + +int _get_step(int type) +{ + int ret = -1, step = 0; + ret = mm_sound_volume_get_step(type, &step); + retvm_if(ret < 0, -1, "Failed to get step\n"); + step -= 1; + return step; +} + +void _mm_func(void *data) +{ + _D("%s\n", __func__); + int val = 0; + system_audio_route_device_t device = 0; + struct appdata *ad = (struct appdata *)data; + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + + retm_if(ad->win == NULL, "Failed to get window\n"); + + /* function could be activated when window exists */ + ad->type = _get_volume_type(); + ad->step = _get_step(ad->type); + mm_sound_route_get_playing_device(&device); + mm_sound_volume_get_value(ad->type, (unsigned int*)(&val)); + + /* apply earphone safety concept */ + if(ad->device != device){ + if(device == SYSTEM_AUDIO_ROUTE_PLAYBACK_DEVICE_EARPHONE && val > 9) + val = 9; + _set_sound_level(ad->type, val); + ad->device = device; + } + _set_device_warning(ad, val, device); + _set_slider_value(ad, val); + _set_icon(ad, val); + _D("type(%d) val(%d)\n", ad->type, val); +} + +void _mm_system_cb(void *data) +{ + _mm_func(data); +} + +void _mm_notification_cb(void *data) +{ + _mm_func(data); +} + +void _mm_alarm_cb(void *data) +{ + _mm_func(data); +} + +void _mm_ringtone_cb(void *data) +{ + _mm_func(data); +} + +void _mm_media_cb(void *data) +{ + _mm_func(data); +} + +void _mm_call_cb(void *data) +{ + _mm_func(data); +} + +void _mm_ext_android_cb(void *data) +{ + _mm_func(data); +} + +void _mm_ext_java_cb(void *data) +{ + _mm_func(data); +} + +int _get_volume_type_max(void) +{ + return VOLUME_TYPE_MAX; +} + +int _init_mm_sound(void *data) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + mm_sound_volume_add_callback(VOLUME_TYPE_SYSTEM, + _mm_system_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_NOTIFICATION, + _mm_notification_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_ALARM, + _mm_alarm_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_RINGTONE, + _mm_ringtone_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_MEDIA, + _mm_media_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_CALL, + _mm_call_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_EXT_ANDROID, + _mm_ext_android_cb, (void *)ad); + mm_sound_volume_add_callback(VOLUME_TYPE_EXT_JAVA, + _mm_ext_java_cb, (void *)ad); + + return 0; +} + +int _get_sound_level(volume_type_t type, int *val) +{ + mm_sound_volume_get_value(type, (unsigned int*)val); + return 0; +} + +int _set_sound_level(volume_type_t type, int val) +{ + mm_sound_volume_set_value(type, val); + return 0; +} diff --git a/src/_sound.h b/src/_sound.h new file mode 100755 index 0000000..9b79b2a --- /dev/null +++ b/src/_sound.h @@ -0,0 +1,37 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 __VOLUME_SOUND_H__ +#define __VOLUME_SOUND_H__ + +#include + +int _init_svi(); +int _init_mm_sound(void *data); +int _get_volume_type_max(void); +int _get_title(volume_type_t type, char *label, int size); +int _get_sound_level(volume_type_t type, int *val); +int _get_step(int type); +void _play_vib(int handle); +void _play_sound(int type, int handle); +void _mm_func(void *data); +int _set_icon(void * data, int val); +int _set_sound_level(volume_type_t type, int val); + +#endif +/* __VOLUME_SOUND_H__ */ diff --git a/src/_util_efl.c b/src/_util_efl.c new file mode 100755 index 0000000..42e06aa --- /dev/null +++ b/src/_util_efl.c @@ -0,0 +1,138 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 +#include +#include + +#include "volume.h" +#include "_util_log.h" + +Ecore_X_Window _add_input_window(void) +{ + Ecore_X_Window win = 0; + win = ecore_x_window_input_new(0, 0, 0, 1, 1); + if(win){ + ecore_x_event_mask_unset(win, ECORE_X_EVENT_MASK_NONE); + ecore_x_icccm_title_set(win, "volumekey-input-window"); + ecore_x_netwm_name_set(win, "volumekey-input-window"); + ecore_x_netwm_pid_set(win, getpid()); + return win; + } + else{ + _E("%s() is failed\n", __func__); + return 0; + } +} + +Evas_Object *_add_window(const char *name) +{ + Evas_Object *eo = NULL; + int w = -1, h = -1; + eo = elm_win_add(NULL, name, ELM_WIN_NOTIFICATION); + if (eo) { + elm_win_title_set(eo, name); + elm_win_borderless_set(eo, EINA_TRUE); + elm_win_alpha_set(eo, EINA_TRUE); + system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_WIDTH, &w); + system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_HEIGHT, &h); + if(w == -1 || h == -1){ + _E("ecore_x_window_seiz_get() is failed\n"); + return NULL; + } + evas_object_resize(eo, w, h); + } + return eo; +} + +Evas_Object *_add_slider(Evas_Object *parent, int min, int max, int val) +{ + Evas_Object *sl = NULL; + sl = elm_slider_add(parent); + retvm_if(sl == NULL, NULL, "Failed to add slider\n"); + elm_slider_horizontal_set(sl, EINA_TRUE); + elm_slider_indicator_show_set(sl, EINA_TRUE); + elm_slider_indicator_format_set(sl, "%.0f"); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + elm_slider_min_max_set(sl, min, max); + elm_slider_value_set(sl, val); + return sl; +} + +Evas_Object *_add_layout(Evas_Object *parent, const char *file, + const char *group) +{ + Evas_Object *eo = NULL; + int r = -1; + + retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n"); + retvm_if(file == NULL, NULL, "Invalid argument: file is NULL\n"); + retvm_if(group == NULL, NULL, "Invalid argument: group is NULL\n"); + + eo = elm_layout_add(parent); + retvm_if(eo == NULL, NULL, "Failed to add layout\n"); + + r = elm_layout_file_set(eo, file, group); + if (!r) { + _E("Failed to set file[%s]\n", file); + evas_object_del(eo); + return NULL; + } + + evas_object_size_hint_weight_set(eo, + EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(eo); + return eo; +} + +Evas_Object *_add_button(Evas_Object *parent, const char *style, const char *text) +{ + Evas_Object *bt = NULL; + bt = elm_button_add(parent); + retvm_if(bt == NULL, NULL, "Failed to add button\n"); + if (style) elm_object_style_set(bt, style); + elm_object_focus_set(bt, EINA_FALSE); + elm_object_text_set(bt, text); + evas_object_show(bt); + return bt; +} + +Evas_Object *_add_popup(Evas_Object *parent, const char *style) +{ + Evas_Object *pu = NULL; + pu = elm_popup_add(parent); + retvm_if(pu == NULL, NULL, "[Error] Failed to add popup\n"); + evas_object_size_hint_weight_set(pu, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + if (style) elm_object_style_set(pu, style); + evas_object_show(pu); + return pu; +} +Evas_Object *_add_label(Evas_Object *parent, const char *style, const char *text) +{ + Evas_Object *lb = NULL; + lb = elm_label_add(parent); + retvm_if(lb == NULL, NULL, "Failed to add label\n"); + elm_object_style_set(lb, style); + evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_label_line_wrap_set(lb, ELM_WRAP_MIXED); + elm_object_text_set(lb, text); + return lb; +} + diff --git a/src/_util_efl.h b/src/_util_efl.h new file mode 100755 index 0000000..c58c2d6 --- /dev/null +++ b/src/_util_efl.h @@ -0,0 +1,32 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 __VOLUME_UTIL_EFL_H__ +#define __VOLUME_UTIL_EFL_H__ + +#include + +Ecore_X_Window _add_input_window(void); +Evas_Object *_add_window(const char *name); +Evas_Object *_add_slider(Evas_Object *parent, int min, int max, int val); +Evas_Object *_add_layout(Evas_Object *parent, const char *file, const char *group); +Evas_Object *_add_button(Evas_Object *parent, const char *style, const char *text); +Evas_Object *_add_popup(Evas_Object *parent, const char *style); +Evas_Object *_add_label(Evas_Object *parent, const char *style, const char *text); +#endif +/* __VOLUME_UTIL_EFL_H__ */ diff --git a/src/_util_log.h b/src/_util_log.h new file mode 100755 index 0000000..7e43dd3 --- /dev/null +++ b/src/_util_log.h @@ -0,0 +1,60 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 __VOLUME_UTIL_LOG_H__ +#define __VOLUME_UTIL_LOG_H__ + +#include +#include + +#undef LOG_TAG +#define LOG_TAG "VOLUME" +#define _E(fmt, arg...) LOGE("[%s,%d] "fmt,__FUNCTION__,__LINE__,##arg) +#define _D(fmt, arg...) LOGD("[%s,%d] "fmt,__FUNCTION__,__LINE__,##arg) + +#define retvm_if(expr, val, fmt, arg...) do { \ + if(expr) { \ + _E(fmt, ##arg); \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ +} while (0) + +#define retv_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ +} while (0) + +#define retm_if(expr, fmt, arg...) do { \ + if(expr) { \ + _E(fmt, ##arg); \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ +} while (0) + +#define ret_if(expr) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ +} while (0) + +#endif /* __VOLUME_UTIL_LOG_H__ */ diff --git a/src/format b/src/format new file mode 100755 index 0000000..6fa025a --- /dev/null +++ b/src/format @@ -0,0 +1,18 @@ + +/* + * Copyright (c) 2011 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. + */ + + diff --git a/src/volume.c b/src/volume.c new file mode 100755 index 0000000..121089a --- /dev/null +++ b/src/volume.c @@ -0,0 +1,122 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 + +#include "volume.h" +#include "_util_log.h" +#include "_util_efl.h" +#include "_logic.h" + +struct text_part { + char *part; + char *msgid; +}; + +static Eina_Bool rotate_cb(void *data, int type, void *event) +{ + struct appdata *ad = data; + Ecore_X_Event_Client_Message *ev = event; + + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + if (!event){ + return ECORE_CALLBACK_RENEW; + } + + if (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE){ + _rotate_func(data); + } + return ECORE_CALLBACK_RENEW; +} + +static int app_create(void *data) +{ + struct appdata *ad = data; + + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + if(_app_create(ad)!=0){ + _E("_app_create() if failed\n"); + return -1; + } + + /* add rotation event callback */ + ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, + rotate_cb, (void *)data); + + return 0; +} + +static int app_terminate(void *data) +{ + struct appdata *ad = data; + + if (ad->win) + evas_object_del(ad->win); + + return 0; +} + +static int app_pause(void *data) +{ + _app_pause(data); + return 0; +} + +static int app_resume(void *data) +{ + return 0; +} + +static int app_reset(bundle *b, void *data) +{ + _D("%s\n", __func__); + struct appdata *ad = data; + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + + if(_app_reset(b, data) == -1){ + _D("_app_reset() if failed\n"); + return -1; + } + if (ad->win) + elm_win_activate(ad->win); + + return 0; +} + +int main(int argc, char *argv[]) +{ + struct appdata ad; + struct appcore_ops ops = { + .create = app_create, + .terminate = app_terminate, + .pause = app_pause, + .resume = app_resume, + .reset = app_reset, + }; + + /* appcore measure time example */ + printf("from AUL to %s(): %d msec\n", __func__, + appcore_measure_time_from("APP_START_TIME")); + + memset(&ad, 0x0, sizeof(struct appdata)); + ops.data = &ad; + + return appcore_efl_main(PACKAGE, &argc, &argv, &ops); +} + diff --git a/src/volume.h b/src/volume.h new file mode 100755 index 0000000..38d7a4c --- /dev/null +++ b/src/volume.h @@ -0,0 +1,120 @@ +/* + * org.tizen.volume + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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://floralicense.org/license/ + * + * 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 __VOLUME_H__ +#define __VOLUME_H__ + +#include +#include +#include +#include +#include +#include +#include + +#if !defined(PACKAGE) +# define PACKAGE "volume" +#endif + +#if !defined(RESDIR) +# define RESDIR "/usr/apps/org.tizen.volume/res" +#endif + +#if !defined(LOCALEDIR) +# define LOCALEDIR RESDIR"/locale" +#endif + +#if !defined(EDJDIR) +# define EDJDIR RESDIR"/edje" +#endif + +#if !defined(PKGNAME) +# define PKGNAME "org.tizen.volume" +#endif + +#define EDJ_APP EDJDIR"/volume_app.edj" +#define GRP_VOLUME_BLOCKEVENTS "block_events" +#define GRP_VOLUME_LAYOUT "volumeLayout" +#define GRP_VOLUME_CONTENT "volumeLayoutContent" +#define GRP_VOLUME_SLIDER_HORIZONTAL "volumeHorizontalSlider" + +#define IMG_VOLUME_PACKAGE_ICON "/usr/share/icons/default/small/org.tizen.volume.png" +#define IMG_VOLUME_ICON "00_volume_icon.png" +#define IMG_VOLUME_ICON_CALL "00_volume_icon_Call.png" +#define IMG_VOLUME_ICON_MUTE "00_volume_icon_Mute.png" +#define IMG_VOLUME_ICON_VIB "00_volume_icon_Vibrat.png" +#define IMG_VOLUME_ICON_HEADPHONE "00_volume_icon_headphone.png" +#define IMG_VOLUME_ICON_MEDIA "00_volume_icon_media.png" +#define IMG_VOLUME_ICON_SETTINGS "00_volume_icon_settings.png" +#define IMG_VOLUME_ICON_SETTINGS_PRESSED "00_volume_icon_settings_pressed.png" + +#define IDS_WARNING_MSG "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" + +#define S_(str) dgettext("sys_string", str) +#define T_(str) dgettext(PACKAGE, str) + +#define ADD_TIMER(x, time, _timer_cb, data) \ + x = ecore_timer_add(time, _timer_cb, data);\ + +#define DEL_TIMER(x) \ + if (x) {\ + ecore_timer_del(x);\ + x = NULL;\ + } + +struct appdata +{ + Ecore_X_Window input_win; + Evas_Object *win, *block_events, *ly, *sl, *ic, *ic_settings, *warn_lb; + + Ecore_Timer *ptimer; + Ecore_Timer *stimer; /* slider timer */ + Ecore_Timer *sutimer, *sdtimer, *lutimer, *ldtimer; /* long press */ + Ecore_Timer *warntimer; /* warning message timer */ + Ecore_Timer *luwarmtimer, *ldwarmtimer; + volume_type_t type; + system_audio_route_device_t device; + int step; + int angle; + + /* bundle */ + bundle *volume_bundle; + + /* ticker notification handler */ + int noti_id; + bool noti_seen; + + /* add more variables here */ + int sh; /* svi handle */ + int flag_pressing; /* EINA_TRUE : hw key pressing, block slider cb */ + int flag_touching; /* EINA_TRUE : slider indicator pressing, block hw key cb */ + int flag_launching; /* EINA_TRUE : volume is launcing block double lauch*/ + int flag_deleting; /* EINA_TRUE : closing volume, block double close_volume() */ + int flag_media; + int flag_shared_grabed; + int flag_top_positioni_grabed; + int flag_exclusive_grabed; + int flag_emul; /* EINA_TRUE : emulator, EINA_FALSE : target */ + + /* Ecore event handler */ + Ecore_Event_Handler *event_volume_up; + Ecore_Event_Handler *event_volume_down; +}; + +#endif /* __VOLUME_H__ */ + -- 2.7.4