Merge m-c to inbound, a=merge CLOSED TREE
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -110,7 +110,7 @@
|
|||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="6a1bb59af65b6485b1090522f66fac95c3f9e22c"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="69d524e80cdf3981006627c65ac85f3a871238a3"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="5a48c04c4bb5f079bc757e29864a42427378e051"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="576f57b6510de59c08568b53c0fb60588be8689e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
<project name="platform/system/netd" path="system/netd" revision="a6531f7befb49b1c81bc0de7e51c5482b308e1c5"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -115,7 +115,7 @@
|
|||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="6a1bb59af65b6485b1090522f66fac95c3f9e22c"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="cfcef469537869947abb9aa1d656774cc2678d4c"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="5a48c04c4bb5f079bc757e29864a42427378e051"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="10e78a05252b3de785f88c2d0b9ea8a428009c50"/>
|
||||
<project name="platform/system/media" path="system/media" revision="188b3e51e0a2ce1e16dc8067edef7be3d2365ad9"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8bc59310552179f9a8bc6cdd0188e2475df52fb7"/>
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -117,7 +117,7 @@
|
|||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="842e33e43a55ea44833b9e23e4d180fa17c843af"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="5db24726f0f42124304195a6bdea129039eeeaeb"/>
|
||||
<project name="platform/system/bluetooth" path="system/bluetooth" revision="930ae098543881f47eac054677726ee4b998b2f8"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform_system_core" path="system/core" remote="b2g" revision="542d1f59dc331b472307e5bd043101d14d5a3a3e"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="18c1180e848e7ab8691940481f5c1c8d22c37b3e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
|
||||
|
@ -115,7 +115,7 @@
|
|||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="6a1bb59af65b6485b1090522f66fac95c3f9e22c"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="b562b01c93de9578d5db537b6a602a38e1aaa0ce"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="387f03e815f57d536dd922706db1622bddba8d81"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="5356165f67f4a81c2ef28671c13697f1657590df"/>
|
||||
<project name="platform/system/media" path="system/media" revision="be0e2fe59a8043fa5200f75697df9220a99abe9d"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="61e82f99bb8bc78d52b5717e9a2481ec7267fa33">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
|
@ -127,7 +127,7 @@
|
|||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="2c0d193349c55337e37196a7f2d5cef37753ed3e"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="61a10cbd19d6b7fc052a8cb92dfa1b37b93754f3"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="9e892a67a01671f312c76b0880dedaa6ba478148"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="47fa016e2248b80aebd5928402c7409f8e0ca64e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
<project name="platform/system/media" path="system/media" revision="70bfebc66d9c6a4c614a8c7efde90e8e7e1d8641"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8bc59310552179f9a8bc6cdd0188e2475df52fb7"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -109,7 +109,7 @@
|
|||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="6a1bb59af65b6485b1090522f66fac95c3f9e22c"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="69d524e80cdf3981006627c65ac85f3a871238a3"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="5a48c04c4bb5f079bc757e29864a42427378e051"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="576f57b6510de59c08568b53c0fb60588be8689e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
<project name="platform/system/netd" path="system/netd" revision="a6531f7befb49b1c81bc0de7e51c5482b308e1c5"/>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"git": {
|
||||
"git_revision": "8c009877aff6b8b2f4a60756e2d09c0182393721",
|
||||
"git_revision": "3fac3ed7b8c887351098ffc677769ddc36abb3d0",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "494ef969c9ddbf15fc8a094c2da7bc46d08b1fc3",
|
||||
"revision": "1a91ed6e76994d6279bd2cf81ba1416e86aa2014",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -117,7 +117,7 @@
|
|||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="842e33e43a55ea44833b9e23e4d180fa17c843af"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="5db24726f0f42124304195a6bdea129039eeeaeb"/>
|
||||
<project name="platform/system/bluetooth" path="system/bluetooth" revision="930ae098543881f47eac054677726ee4b998b2f8"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform_system_core" path="system/core" remote="b2g" revision="542d1f59dc331b472307e5bd043101d14d5a3a3e"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="18c1180e848e7ab8691940481f5c1c8d22c37b3e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="61e82f99bb8bc78d52b5717e9a2481ec7267fa33">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c009877aff6b8b2f4a60756e2d09c0182393721"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3fac3ed7b8c887351098ffc677769ddc36abb3d0"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="c490ae41c67f892232599f4ef049467a922b613e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="503fde923fd32bf81b59ca29eee69d67ade37d37"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="f48264d4da9680b6e02c9d0459ac273308e21daf"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
|
@ -127,7 +127,7 @@
|
|||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="2c0d193349c55337e37196a7f2d5cef37753ed3e"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="61a10cbd19d6b7fc052a8cb92dfa1b37b93754f3"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="9e892a67a01671f312c76b0880dedaa6ba478148"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="9afc4e0e3e883f3a22a5eb94470d50f4b1cfe5c5"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="3f6ccfc6bc73e28765d70bbe5c277a6276472b08"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="47fa016e2248b80aebd5928402c7409f8e0ca64e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
<project name="platform/system/media" path="system/media" revision="70bfebc66d9c6a4c614a8c7efde90e8e7e1d8641"/>
|
||||
|
|
|
@ -95,6 +95,13 @@ function shouldAllowRelink(acctName) {
|
|||
return !needRelinkWarning(acctName) || promptForRelink(acctName);
|
||||
}
|
||||
|
||||
function updateDisplayedEmail(user) {
|
||||
let emailDiv = document.getElementById("email");
|
||||
if (emailDiv && user) {
|
||||
emailDiv.textContent = user.email;
|
||||
}
|
||||
}
|
||||
|
||||
let wrapper = {
|
||||
iframe: null,
|
||||
|
||||
|
@ -168,6 +175,7 @@ let wrapper = {
|
|||
.getService(Ci.nsISupports)
|
||||
.wrappedJSObject;
|
||||
xps.whenLoaded().then(() => {
|
||||
updateDisplayedEmail(accountData);
|
||||
return fxAccounts.setSignedInUser(accountData);
|
||||
}).then(() => {
|
||||
// If the user data is verified, we want it to immediately look like
|
||||
|
@ -201,7 +209,10 @@ let wrapper = {
|
|||
log("Received: 'session_status'.");
|
||||
|
||||
fxAccounts.getSignedInUser().then(
|
||||
(accountData) => this.injectData("message", { status: "session_status", data: accountData }),
|
||||
(accountData) => {
|
||||
updateDisplayedEmail(accountData);
|
||||
this.injectData("message", { status: "session_status", data: accountData });
|
||||
},
|
||||
(err) => this.injectData("message", { status: "error", error: err })
|
||||
);
|
||||
},
|
||||
|
@ -288,6 +299,8 @@ function init() {
|
|||
return;
|
||||
}
|
||||
|
||||
updateDisplayedEmail(user);
|
||||
|
||||
// Ideally we'd use new URL(document.URL).searchParams, but for about: URIs,
|
||||
// searchParams is empty.
|
||||
let urlParams = new URLSearchParams(document.URL.split("?")[1] || "");
|
||||
|
@ -327,8 +340,6 @@ function init() {
|
|||
// No action specified.
|
||||
if (user) {
|
||||
show("stage", "manage");
|
||||
let sb = Services.strings.createBundle("chrome://browser/locale/syncSetup.properties");
|
||||
document.title = sb.GetStringFromName("manage.pageTitle");
|
||||
} else {
|
||||
// Attempt a migration if enabled or show the introductory page
|
||||
// otherwise.
|
||||
|
@ -394,6 +405,7 @@ function migrateToDevEdition(urlParams) {
|
|||
let fxAccountsStorage = OS.Path.join(defaultProfilePath, fxAccountsCommon.DEFAULT_STORAGE_FILENAME);
|
||||
return OS.File.read(fxAccountsStorage, { encoding: "utf-8" }).then(text => {
|
||||
let accountData = JSON.parse(text).accountData;
|
||||
updateDisplayedEmail(accountData);
|
||||
return fxAccounts.setSignedInUser(accountData);
|
||||
}).then(() => {
|
||||
return fxAccounts.promiseAccountsForceSigninURI().then(url => {
|
||||
|
|
|
@ -36,7 +36,8 @@
|
|||
|
||||
<div id="manage">
|
||||
<header>
|
||||
<h1>&aboutAccounts.welcome;</h1>
|
||||
<h1>&aboutAccounts.connected;</h1>
|
||||
<div id="email"></div>
|
||||
</header>
|
||||
|
||||
<section>
|
||||
|
|
|
@ -52,9 +52,22 @@ header h1
|
|||
font-size: 24px;
|
||||
font-weight: 200;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
#intro header h1 {
|
||||
margin: 0 0 32px 0;
|
||||
}
|
||||
|
||||
#manage header h1 {
|
||||
margin: 0 0 12px 0;
|
||||
}
|
||||
|
||||
#manage header #email {
|
||||
margin-bottom: 23px;
|
||||
color: rgb(138, 155, 168);
|
||||
font-size: 19px;
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
|
|
@ -1129,7 +1129,10 @@ InspectorPanel.prototype = {
|
|||
CommandUtils.createRequisition(this._target, {
|
||||
environment: CommandUtils.createEnvironment(this, '_target')
|
||||
}).then(requisition => {
|
||||
requisition.updateExec("screenshot --selector " + this.selectionCssSelector);
|
||||
// Bug 1180314 - CssSelector might contain white space so need to make sure it is
|
||||
// passed to screenshot as a single parameter. More work *might* be needed if
|
||||
// CssSelector could contain escaped single- or double-quotes, backslashes, etc.
|
||||
requisition.updateExec("screenshot --selector '" + this.selectionCssSelector + "'");
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<!ENTITY aboutAccounts.welcome "Welcome to &syncBrand.shortName.label;">
|
||||
<!ENTITY aboutAccounts.connected "Account connected">
|
||||
|
||||
<!ENTITY aboutAccountsConfig.description "Sign in to sync your tabs, bookmarks, passwords & more.">
|
||||
<!ENTITY aboutAccountsConfig.startButton.label "Get started">
|
||||
|
|
|
@ -62,5 +62,3 @@ relinkVerify.title = Merge Warning
|
|||
relinkVerify.heading = Are you sure you want to sign in to Sync?
|
||||
# LOCALIZATION NOTE (relinkVerify.description): Email address of a user previously signed into sync.
|
||||
relinkVerify.description = A different user was previously signed in to Sync on this computer. Signing in will merge this browser’s bookmarks, passwords and other settings with %S
|
||||
|
||||
manage.pageTitle = Manage Sync
|
||||
|
|
|
@ -102,8 +102,8 @@ browser.jar:
|
|||
skin/classic/browser/Toolbar-small.png
|
||||
skin/classic/browser/undoCloseTab.png (../shared/undoCloseTab.png)
|
||||
skin/classic/browser/update-badge.svg (../shared/update-badge.svg)
|
||||
skin/classic/browser/urlbar-arrow.png
|
||||
skin/classic/browser/urlbar-arrow@2x.png
|
||||
skin/classic/browser/urlbar-arrow.png (../shared/urlbar-arrow.png)
|
||||
skin/classic/browser/urlbar-arrow@2x.png (../shared/urlbar-arrow@2x.png)
|
||||
skin/classic/browser/session-restore.svg (../shared/incontent-icons/session-restore.svg)
|
||||
skin/classic/browser/tab-crashed.svg (../shared/incontent-icons/tab-crashed.svg)
|
||||
skin/classic/browser/welcome-back.svg (../shared/incontent-icons/welcome-back.svg)
|
||||
|
@ -267,6 +267,8 @@ browser.jar:
|
|||
skin/classic/browser/translation-16@2x.png (../shared/translation/translation-16@2x.png)
|
||||
skin/classic/browser/devedition/search.svg (../shared/devedition/search.svg)
|
||||
skin/classic/browser/devedition/urlbar-history-dropmarker.svg (../shared/devedition/urlbar-history-dropmarker.svg)
|
||||
skin/classic/browser/devedition/urlbar-arrow.png (../shared/devedition/urlbar-arrow.png)
|
||||
skin/classic/browser/devedition/urlbar-arrow@2x.png (../shared/devedition/urlbar-arrow@2x.png)
|
||||
* skin/classic/browser/devtools/common.css (../shared/devtools/common.css)
|
||||
* skin/classic/browser/devtools/dark-theme.css (../shared/devtools/dark-theme.css)
|
||||
* skin/classic/browser/devtools/light-theme.css (../shared/devtools/light-theme.css)
|
||||
|
|
Двоичные данные
browser/themes/linux/urlbar-arrow.png
До Ширина: | Высота: | Размер: 305 B |
|
@ -92,6 +92,13 @@
|
|||
-moz-appearance: none !important;
|
||||
}
|
||||
|
||||
/* Prevent the hover styling from on the identity icon from overlapping the
|
||||
urlbar border. */
|
||||
#identity-box {
|
||||
margin-top: -1px !important;
|
||||
margin-bottom: -1px !important;
|
||||
}
|
||||
|
||||
/* Tab styling - make sure to use an inverted icon for the selected tab
|
||||
(brighttext only covers the unselected tabs) */
|
||||
.tab-close-button[visuallyselected=true]:not(:hover) {
|
||||
|
|
|
@ -137,8 +137,8 @@ browser.jar:
|
|||
skin/classic/browser/update-badge.svg (../shared/update-badge.svg)
|
||||
skin/classic/browser/urlbar-history-dropmarker.png
|
||||
skin/classic/browser/urlbar-history-dropmarker@2x.png
|
||||
skin/classic/browser/urlbar-arrow.png
|
||||
skin/classic/browser/urlbar-arrow@2x.png
|
||||
skin/classic/browser/urlbar-arrow.png (../shared/urlbar-arrow.png)
|
||||
skin/classic/browser/urlbar-arrow@2x.png (../shared/urlbar-arrow@2x.png)
|
||||
skin/classic/browser/urlbar-popup-blocked.png
|
||||
skin/classic/browser/urlbar-popup-blocked@2x.png
|
||||
skin/classic/browser/session-restore.svg (../shared/incontent-icons/session-restore.svg)
|
||||
|
@ -368,6 +368,8 @@ browser.jar:
|
|||
skin/classic/browser/translation-16@2x.png (../shared/translation/translation-16@2x.png)
|
||||
skin/classic/browser/devedition/search.svg (../shared/devedition/search.svg)
|
||||
skin/classic/browser/devedition/urlbar-history-dropmarker.svg (../shared/devedition/urlbar-history-dropmarker.svg)
|
||||
skin/classic/browser/devedition/urlbar-arrow.png (../shared/devedition/urlbar-arrow.png)
|
||||
skin/classic/browser/devedition/urlbar-arrow@2x.png (../shared/devedition/urlbar-arrow@2x.png)
|
||||
* skin/classic/browser/devtools/common.css (../shared/devtools/common.css)
|
||||
* skin/classic/browser/devtools/dark-theme.css (../shared/devtools/dark-theme.css)
|
||||
* skin/classic/browser/devtools/light-theme.css (../shared/devtools/light-theme.css)
|
||||
|
|
Двоичные данные
browser/themes/osx/urlbar-arrow.png
До Ширина: | Высота: | Размер: 305 B |
Двоичные данные
browser/themes/osx/urlbar-arrow@2x.png
До Ширина: | Высота: | Размер: 362 B |
|
@ -241,11 +241,21 @@ window:not([chromehidden~="toolbar"]) #urlbar-wrapper {
|
|||
-moz-margin-start: 0;
|
||||
}
|
||||
|
||||
/* Make the white notication box stick out less. */
|
||||
/* Swap out the white arrow with a dark one for the dark theme */
|
||||
:root[devtoolstheme="dark"] #notification-popup-box {
|
||||
border-image: url("chrome://browser/skin/devedition/urlbar-arrow.png") 0 8 0 0 fill;
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
:root[devtoolstheme="dark"] #notification-popup-box {
|
||||
border-image: url("chrome://browser/skin/devedition/urlbar-arrow@2x.png") 0 16 0 0 fill;
|
||||
}
|
||||
}
|
||||
|
||||
/* The (white) notification box background color should match the theme */
|
||||
#notification-popup-box {
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background: transparent;
|
||||
background-color: var(--url-and-searchbar-background-color);
|
||||
}
|
||||
|
||||
/* Nav bar specific stuff */
|
||||
|
|
После Ширина: | Высота: | Размер: 189 B |
После Ширина: | Высота: | Размер: 263 B |
До Ширина: | Высота: | Размер: 265 B После Ширина: | Высота: | Размер: 265 B |
До Ширина: | Высота: | Размер: 324 B После Ширина: | Высота: | Размер: 324 B |
|
@ -1978,11 +1978,20 @@ richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-
|
|||
|
||||
#sidebar-header > .close-icon {
|
||||
-moz-appearance: none;
|
||||
padding: 4px 2px;
|
||||
padding: 2px;
|
||||
margin: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
#sidebar-header > .close-icon {
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.browserContainer > findbar {
|
||||
background-color: -moz-dialog;
|
||||
color: -moz-DialogText;
|
||||
|
@ -2061,14 +2070,14 @@ richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-
|
|||
|
||||
/* Invert the unhovered close tab icons on bright-text tabs */
|
||||
@media not all and (min-resolution: 1.1dppx) {
|
||||
#TabsToolbar[brighttext] .tab-close-button:not(:hover):not([visuallyselected="true"]) {
|
||||
-moz-image-region: rect(0, 64px, 16px, 48px) !important;
|
||||
#TabsToolbar[brighttext] .tab-close-button:not([visuallyselected="true"]) {
|
||||
list-style-image: url("chrome://global/skin/icons/close-inverted.png");
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
#TabsToolbar[brighttext] .tab-close-button:not(:hover):not([visuallyselected="true"]) {
|
||||
-moz-image-region: rect(0, 128px, 32px, 96px) !important;
|
||||
#TabsToolbar[brighttext] .tab-close-button:not([visuallyselected="true"]) {
|
||||
list-style-image: url("chrome://global/skin/icons/close-inverted@2x.png");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
border-radius: 0 !important;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
padding: 2px 5px !important;
|
||||
padding: var(--toolbarbutton-vertical-inner-padding) 5px !important;
|
||||
margin: 0 !important;
|
||||
border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
|
||||
box-shadow: none !important;
|
||||
|
|
|
@ -136,8 +136,8 @@ browser.jar:
|
|||
skin/classic/browser/undoCloseTab.png (../shared/undoCloseTab.png)
|
||||
skin/classic/browser/undoCloseTab@2x.png (../shared/undoCloseTab@2x.png)
|
||||
skin/classic/browser/update-badge.svg (../shared/update-badge.svg)
|
||||
skin/classic/browser/urlbar-arrow.png
|
||||
skin/classic/browser/urlbar-arrow@2x.png
|
||||
skin/classic/browser/urlbar-arrow.png (../shared/urlbar-arrow.png)
|
||||
skin/classic/browser/urlbar-arrow@2x.png (../shared/urlbar-arrow@2x.png)
|
||||
skin/classic/browser/urlbar-popup-blocked.png
|
||||
skin/classic/browser/urlbar-history-dropmarker.png
|
||||
skin/classic/browser/urlbar-history-dropmarker@2x.png
|
||||
|
@ -318,6 +318,8 @@ browser.jar:
|
|||
skin/classic/browser/tabbrowser/newtab-XPVista7@2x.png (tabbrowser/newtab-XPVista7@2x.png)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted.png (tabbrowser/newtab-inverted.png)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted@2x.png (tabbrowser/newtab-inverted@2x.png)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted-XPVista7.png (tabbrowser/newtab-inverted-XPVista7.png)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted-XPVista7@2x.png (tabbrowser/newtab-inverted-XPVista7@2x.png)
|
||||
skin/classic/browser/tabbrowser/connecting.png (tabbrowser/connecting.png)
|
||||
skin/classic/browser/tabbrowser/crashed.svg (../shared/tabbrowser/crashed.svg)
|
||||
skin/classic/browser/tabbrowser/loading.png (tabbrowser/loading.png)
|
||||
|
@ -365,6 +367,8 @@ browser.jar:
|
|||
skin/classic/browser/translation-16@2x.png (../shared/translation/translation-16@2x.png)
|
||||
skin/classic/browser/devedition/search.svg (../shared/devedition/search.svg)
|
||||
skin/classic/browser/devedition/urlbar-history-dropmarker.svg (../shared/devedition/urlbar-history-dropmarker.svg)
|
||||
skin/classic/browser/devedition/urlbar-arrow.png (../shared/devedition/urlbar-arrow.png)
|
||||
skin/classic/browser/devedition/urlbar-arrow@2x.png (../shared/devedition/urlbar-arrow@2x.png)
|
||||
* skin/classic/browser/devtools/common.css (../shared/devtools/common.css)
|
||||
* skin/classic/browser/devtools/dark-theme.css (../shared/devtools/dark-theme.css)
|
||||
* skin/classic/browser/devtools/light-theme.css (../shared/devtools/light-theme.css)
|
||||
|
@ -645,6 +649,8 @@ browser.jar:
|
|||
% override chrome://browser/skin/places/autocomplete-star.png chrome://browser/skin/places/autocomplete-star-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab.png chrome://browser/skin/tabbrowser/newtab-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab@2x.png chrome://browser/skin/tabbrowser/newtab-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab-inverted.png chrome://browser/skin/tabbrowser/newtab-inverted-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab-inverted@2x.png chrome://browser/skin/tabbrowser/newtab-inverted-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/tab-arrow-left.png chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/tab-arrow-left@2x.png chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
|
||||
|
|
После Ширина: | Высота: | Размер: 180 B |
После Ширина: | Высота: | Размер: 164 B |
Двоичные данные
browser/themes/windows/tabbrowser/newtab-inverted.png
До Ширина: | Высота: | Размер: 180 B После Ширина: | Высота: | Размер: 110 B |
Двоичные данные
browser/themes/windows/tabbrowser/newtab-inverted@2x.png
До Ширина: | Высота: | Размер: 164 B После Ширина: | Высота: | Размер: 142 B |
Двоичные данные
browser/themes/windows/tabbrowser/newtab.png
До Ширина: | Высота: | Размер: 105 B После Ширина: | Высота: | Размер: 87 B |
Двоичные данные
browser/themes/windows/tabbrowser/newtab@2x.png
До Ширина: | Высота: | Размер: 99 B После Ширина: | Высота: | Размер: 99 B |
Двоичные данные
browser/themes/windows/urlbar-arrow@2x.png
До Ширина: | Высота: | Размер: 324 B |
|
@ -27,9 +27,7 @@
|
|||
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
#include "nsJSUtils.h"
|
||||
#include "nsIAudioManager.h"
|
||||
#include "SpeakerManagerService.h"
|
||||
#define NS_AUDIOMANAGER_CONTRACTID "@mozilla.org/telephony/audiomanager;1"
|
||||
#endif
|
||||
|
||||
#include "mozilla/Preferences.h"
|
||||
|
@ -459,47 +457,7 @@ AudioChannelService::Observe(nsISupports* aSubject, const char* aTopic,
|
|||
if (!strcmp(aTopic, "xpcom-shutdown")) {
|
||||
mWindows.Clear();
|
||||
Shutdown();
|
||||
}
|
||||
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
// To process the volume control on each audio channel according to
|
||||
// change of settings
|
||||
else if (!strcmp(aTopic, "mozsettings-changed")) {
|
||||
RootedDictionary<SettingChangeNotification> setting(nsContentUtils::RootingCxForThread());
|
||||
if (!WrappedJSToDictionary(aSubject, setting)) {
|
||||
return NS_OK;
|
||||
}
|
||||
if (!StringBeginsWith(setting.mKey, NS_LITERAL_STRING("audio.volume."))) {
|
||||
return NS_OK;
|
||||
}
|
||||
if (!setting.mValue.isNumber()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAudioManager> audioManager = do_GetService(NS_AUDIOMANAGER_CONTRACTID);
|
||||
NS_ENSURE_TRUE(audioManager, NS_OK);
|
||||
|
||||
int32_t index = setting.mValue.toNumber();
|
||||
if (setting.mKey.EqualsLiteral("audio.volume.content")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Content, index);
|
||||
} else if (setting.mKey.EqualsLiteral("audio.volume.notification")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Notification, index);
|
||||
} else if (setting.mKey.EqualsLiteral("audio.volume.alarm")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Alarm, index);
|
||||
} else if (setting.mKey.EqualsLiteral("audio.volume.telephony")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Telephony, index);
|
||||
} else if (!setting.mKey.EqualsLiteral("audio.volume.bt_sco")) {
|
||||
// bt_sco is not a valid audio channel so we manipulate it in
|
||||
// AudioManager.cpp. And the others should not be used.
|
||||
// We didn't use MOZ_CRASH or MOZ_MAKE_COMPILER_ASSUME_IS_UNREACHABLE here
|
||||
// because any web content who has permission of mozSettings can set any
|
||||
// names then it can be easy to crash the B2G.
|
||||
NS_WARNING("unexpected audio channel for volume control");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (!strcmp(aTopic, "outer-window-destroyed")) {
|
||||
} else if (!strcmp(aTopic, "outer-window-destroyed")) {
|
||||
nsCOMPtr<nsISupportsPRUint64> wrapper = do_QueryInterface(aSubject);
|
||||
NS_ENSURE_TRUE(wrapper, NS_ERROR_FAILURE);
|
||||
|
||||
|
@ -538,9 +496,7 @@ AudioChannelService::Observe(nsISupports* aSubject, const char* aTopic,
|
|||
mSpeakerManager[i]->SetAudioChannelActive(active);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
else if (!strcmp(aTopic, "ipc:content-shutdown")) {
|
||||
} else if (!strcmp(aTopic, "ipc:content-shutdown")) {
|
||||
nsCOMPtr<nsIPropertyBag2> props = do_QueryInterface(aSubject);
|
||||
if (!props) {
|
||||
NS_WARNING("ipc:content-shutdown message without property bag as subject");
|
||||
|
|
|
@ -503,8 +503,7 @@ nsBrowserElement::GetAllowedAudioChannels(
|
|||
// If empty, it means that this is the first call of this method.
|
||||
if (mBrowserElementAudioChannels.IsEmpty()) {
|
||||
nsCOMPtr<nsIFrameLoader> frameLoader = GetFrameLoader();
|
||||
if (!frameLoader) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
if (NS_WARN_IF(!frameLoader)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -62,11 +62,12 @@ using namespace mozilla::dom::bluetooth;
|
|||
#define MOZ_SETTINGS_CHANGE_ID "mozsettings-changed"
|
||||
#define AUDIO_CHANNEL_PROCESS_CHANGED "audio-channel-process-changed"
|
||||
#define AUDIO_POLICY_SERVICE_NAME "media.audio_policy"
|
||||
#define SETTINGS_SERVICE "@mozilla.org/settingsService;1"
|
||||
|
||||
static void BinderDeadCallback(status_t aErr);
|
||||
static void InternalSetAudioRoutes(SwitchState aState);
|
||||
// Refer AudioService.java from Android
|
||||
static int sMaxStreamVolumeTbl[AUDIO_STREAM_CNT] = {
|
||||
static uint32_t sMaxStreamVolumeTbl[AUDIO_STREAM_CNT] = {
|
||||
5, // voice call
|
||||
15, // system
|
||||
15, // ring
|
||||
|
@ -93,6 +94,47 @@ static bool sA2dpSwitchDone = true;
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
namespace gonk {
|
||||
static VolumeData gVolumeData[VOLUME_TOTAL_NUMBER] = {
|
||||
{"audio.volume.content", VOLUME_MEDIA},
|
||||
{"audio.volume.notification", VOLUME_NOTIFICATION},
|
||||
{"audio.volume.alarm", VOLUME_ALARM},
|
||||
{"audio.volume.telephony", VOLUME_TELEPHONY},
|
||||
{"audio.volume.bt_sco", VOLUME_BLUETOOTH_SCO}
|
||||
};
|
||||
|
||||
class AudioProfileData final
|
||||
{
|
||||
public:
|
||||
explicit AudioProfileData(AudioOutputProfiles aProfile)
|
||||
: mProfile(aProfile)
|
||||
, mActive(false)
|
||||
{
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
mVolumeTable.AppendElement(0);
|
||||
}
|
||||
};
|
||||
|
||||
AudioOutputProfiles GetProfile() const
|
||||
{
|
||||
return mProfile;
|
||||
}
|
||||
|
||||
void SetActive(bool aActive)
|
||||
{
|
||||
mActive = aActive;
|
||||
}
|
||||
|
||||
bool GetActive() const
|
||||
{
|
||||
return mActive;
|
||||
}
|
||||
|
||||
nsTArray<uint32_t> mVolumeTable;
|
||||
private:
|
||||
const AudioOutputProfiles mProfile;
|
||||
bool mActive;
|
||||
};
|
||||
|
||||
class RecoverTask : public nsRunnable
|
||||
{
|
||||
public:
|
||||
|
@ -102,7 +144,7 @@ public:
|
|||
NS_ENSURE_TRUE(amService, NS_OK);
|
||||
AudioManager *am = static_cast<AudioManager *>(amService.get());
|
||||
|
||||
int attempt;
|
||||
uint32_t attempt;
|
||||
for (attempt = 0; attempt < 50; attempt++) {
|
||||
if (defaultServiceManager()->checkService(String16(AUDIO_POLICY_SERVICE_NAME)) != 0) {
|
||||
break;
|
||||
|
@ -114,10 +156,10 @@ public:
|
|||
|
||||
MOZ_RELEASE_ASSERT(attempt < 50);
|
||||
|
||||
for (int loop = 0; loop < AUDIO_STREAM_CNT; loop++) {
|
||||
for (uint32_t loop = 0; loop < AUDIO_STREAM_CNT; ++loop) {
|
||||
AudioSystem::initStreamVolume(static_cast<audio_stream_type_t>(loop), 0,
|
||||
sMaxStreamVolumeTbl[loop]);
|
||||
int32_t index;
|
||||
uint32_t index;
|
||||
am->GetStreamVolumeIndex(loop, &index);
|
||||
am->SetStreamVolumeIndex(loop, index);
|
||||
}
|
||||
|
@ -151,31 +193,22 @@ public:
|
|||
|
||||
NS_IMETHOD Handle(const nsAString& aName, JS::Handle<JS::Value> aResult)
|
||||
{
|
||||
nsCOMPtr<nsIAudioManager> audioManager =
|
||||
do_GetService(NS_AUDIOMANAGER_CONTRACTID);
|
||||
NS_ENSURE_TRUE(aResult.isInt32(), NS_OK);
|
||||
|
||||
int32_t volIndex = aResult.toInt32();
|
||||
if (aName.EqualsLiteral("audio.volume.content")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Content,
|
||||
volIndex);
|
||||
} else if (aName.EqualsLiteral("audio.volume.notification")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Notification,
|
||||
volIndex);
|
||||
} else if (aName.EqualsLiteral("audio.volume.alarm")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Alarm,
|
||||
volIndex);
|
||||
} else if (aName.EqualsLiteral("audio.volume.telephony")) {
|
||||
audioManager->SetAudioChannelVolume((int32_t)AudioChannel::Telephony,
|
||||
volIndex);
|
||||
} else if (aName.EqualsLiteral("audio.volume.bt_sco")) {
|
||||
static_cast<AudioManager *>(audioManager.get())->SetStreamVolumeIndex(
|
||||
AUDIO_STREAM_BLUETOOTH_SCO, volIndex);
|
||||
} else {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected audio channel for initializing "
|
||||
"volume control");
|
||||
nsRefPtr<AudioManager> audioManager = AudioManager::GetInstance();
|
||||
MOZ_ASSERT(audioManager);
|
||||
uint32_t volIndex = aResult.toInt32();
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
if (aName.EqualsASCII(gVolumeData[idx].mChannelName)) {
|
||||
uint32_t category = gVolumeData[idx].mCategory;
|
||||
nsresult rv = audioManager->ValidateVolumeIndex(category, volIndex);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
audioManager->InitProfilesVolume(gVolumeData[idx].mCategory, volIndex);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
NS_WARNING("unexpected event name for initializing volume control");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -303,17 +336,21 @@ AudioManager::HandleBluetoothStatusChanged(nsISupports* aSubject,
|
|||
cmd.appendFormat("bt_samplerate=%d", kBtSampleRate);
|
||||
AudioSystem::setParameters(0, cmd);
|
||||
SetForceForUse(nsIAudioManager::USE_COMMUNICATION, nsIAudioManager::FORCE_BT_SCO);
|
||||
SwitchProfileData(DEVICE_BLUETOOTH, true);
|
||||
} else {
|
||||
int32_t force;
|
||||
GetForceForUse(nsIAudioManager::USE_COMMUNICATION, &force);
|
||||
if (force == nsIAudioManager::FORCE_BT_SCO)
|
||||
if (force == nsIAudioManager::FORCE_BT_SCO) {
|
||||
SetForceForUse(nsIAudioManager::USE_COMMUNICATION, nsIAudioManager::FORCE_NONE);
|
||||
}
|
||||
SwitchProfileData(DEVICE_BLUETOOTH, false);
|
||||
}
|
||||
} else if (!strcmp(aTopic, BLUETOOTH_A2DP_STATUS_CHANGED_ID)) {
|
||||
if (audioState == AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE && sA2dpSwitchDone) {
|
||||
MessageLoop::current()->PostDelayedTask(
|
||||
FROM_HERE, NewRunnableFunction(&ProcessDelayedA2dpRoute, audioState, aAddress), 1000);
|
||||
sA2dpSwitchDone = false;
|
||||
SwitchProfileData(DEVICE_BLUETOOTH, false);
|
||||
} else {
|
||||
AudioSystem::setDeviceConnectionState(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP,
|
||||
audioState, aAddress.get());
|
||||
|
@ -322,6 +359,7 @@ AudioManager::HandleBluetoothStatusChanged(nsISupports* aSubject,
|
|||
cmd.setTo("A2dpSuspended=false");
|
||||
AudioSystem::setParameters(0, cmd);
|
||||
sA2dpSwitchDone = true;
|
||||
SwitchProfileData(DEVICE_BLUETOOTH, true);
|
||||
#if ANDROID_VERSION >= 17
|
||||
if (AudioSystem::getForceUse(AUDIO_POLICY_FORCE_FOR_MEDIA) == AUDIO_POLICY_FORCE_NO_BT_A2DP) {
|
||||
SetForceForUse(AUDIO_POLICY_FORCE_FOR_MEDIA, AUDIO_POLICY_FORCE_NONE);
|
||||
|
@ -387,25 +425,28 @@ AudioManager::Observe(nsISupports* aSubject,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// To process the volume control on each audio channel according to
|
||||
// To process the volume control on each volume categories according to
|
||||
// change of settings
|
||||
else if (!strcmp(aTopic, MOZ_SETTINGS_CHANGE_ID)) {
|
||||
RootedDictionary<dom::SettingChangeNotification> setting(nsContentUtils::RootingCxForThread());
|
||||
if (!WrappedJSToDictionary(aSubject, setting)) {
|
||||
return NS_OK;
|
||||
}
|
||||
if (!setting.mKey.EqualsASCII("audio.volume.bt_sco")) {
|
||||
if (!StringBeginsWith(setting.mKey, NS_LITERAL_STRING("audio.volume."))) {
|
||||
return NS_OK;
|
||||
}
|
||||
if (!setting.mValue.isNumber()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
int32_t index = setting.mValue.toNumber();
|
||||
SetStreamVolumeIndex(AUDIO_STREAM_BLUETOOTH_SCO, index);
|
||||
|
||||
uint32_t volIndex = setting.mValue.toNumber();
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
if (setting.mKey.EqualsASCII(gVolumeData[idx].mChannelName)) {
|
||||
SetVolumeByCategory(gVolumeData[idx].mCategory, volIndex);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NS_WARNING("Unexpected topic in AudioManager");
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -439,9 +480,11 @@ public:
|
|||
if (aEvent.status() == SWITCH_STATE_OFF && sSwitchDone) {
|
||||
MessageLoop::current()->PostDelayedTask(
|
||||
FROM_HERE, NewRunnableFunction(&ProcessDelayedAudioRoute, SWITCH_STATE_OFF), 1000);
|
||||
mAudioManager->SwitchProfileData(DEVICE_HEADSET, false);
|
||||
sSwitchDone = false;
|
||||
} else if (aEvent.status() != SWITCH_STATE_OFF) {
|
||||
InternalSetAudioRoutes(aEvent.status());
|
||||
mAudioManager->SwitchProfileData(DEVICE_HEADSET, true);
|
||||
sSwitchDone = true;
|
||||
}
|
||||
// Handle the coexistence of a2dp / headset device, latest one wins.
|
||||
|
@ -471,7 +514,7 @@ AudioManager::AudioManager()
|
|||
InternalSetAudioRoutes(GetCurrentSwitchState(SWITCH_HEADPHONES));
|
||||
NotifyHeadphonesStatus(GetCurrentSwitchState(SWITCH_HEADPHONES));
|
||||
|
||||
for (int loop = 0; loop < AUDIO_STREAM_CNT; loop++) {
|
||||
for (uint32_t loop = 0; loop < AUDIO_STREAM_CNT; ++loop) {
|
||||
AudioSystem::initStreamVolume(static_cast<audio_stream_type_t>(loop), 0,
|
||||
sMaxStreamVolumeTbl[loop]);
|
||||
mCurrentStreamVolumeTbl[loop] = sMaxStreamVolumeTbl[loop];
|
||||
|
@ -479,6 +522,7 @@ AudioManager::AudioManager()
|
|||
// Force publicnotification to output at maximal volume
|
||||
SetStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE,
|
||||
sMaxStreamVolumeTbl[AUDIO_STREAM_ENFORCED_AUDIBLE]);
|
||||
CreateAudioProfilesData();
|
||||
|
||||
// Get the initial volume index from settings DB during boot up.
|
||||
nsCOMPtr<nsISettingsService> settingsService =
|
||||
|
@ -489,11 +533,9 @@ AudioManager::AudioManager()
|
|||
NS_ENSURE_SUCCESS_VOID(rv);
|
||||
nsCOMPtr<nsISettingsServiceCallback> callback = new AudioChannelVolInitCallback();
|
||||
NS_ENSURE_TRUE_VOID(callback);
|
||||
lock->Get("audio.volume.content", callback);
|
||||
lock->Get("audio.volume.notification", callback);
|
||||
lock->Get("audio.volume.alarm", callback);
|
||||
lock->Get("audio.volume.telephony", callback);
|
||||
lock->Get("audio.volume.bt_sco", callback);
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
lock->Get(gVolumeData[idx].mChannelName, callback);
|
||||
}
|
||||
|
||||
// Gecko only control stream volume not master so set to default value
|
||||
// directly.
|
||||
|
@ -710,114 +752,204 @@ AudioManager::SetFmRadioAudioEnabled(bool aFmRadioAudioEnabled)
|
|||
InternalSetAudioRoutes(GetCurrentSwitchState(SWITCH_HEADPHONES));
|
||||
// sync volume with music after powering on fm radio
|
||||
if (aFmRadioAudioEnabled) {
|
||||
int32_t volIndex = mCurrentStreamVolumeTbl[AUDIO_STREAM_MUSIC];
|
||||
uint32_t volIndex = mCurrentStreamVolumeTbl[AUDIO_STREAM_MUSIC];
|
||||
SetStreamVolumeIndex(AUDIO_STREAM_FM, volIndex);
|
||||
mCurrentStreamVolumeTbl[AUDIO_STREAM_FM] = volIndex;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioManager::SetAudioChannelVolume(int32_t aChannel, int32_t aIndex) {
|
||||
nsresult status;
|
||||
|
||||
switch (static_cast<AudioChannel>(aChannel)) {
|
||||
case AudioChannel::Content:
|
||||
// sync FMRadio's volume with content channel.
|
||||
if (IsDeviceOn(AUDIO_DEVICE_OUT_FM)) {
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_FM, aIndex);
|
||||
NS_ENSURE_SUCCESS(status, status);
|
||||
nsresult
|
||||
AudioManager::ValidateVolumeIndex(uint32_t aCategory, uint32_t aIndex) const
|
||||
{
|
||||
uint32_t maxIndex = GetMaxVolumeByCategory(aCategory);
|
||||
if (aIndex < 0 || aIndex > maxIndex) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_MUSIC, aIndex);
|
||||
NS_ENSURE_SUCCESS(status, status);
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_SYSTEM, aIndex);
|
||||
break;
|
||||
case AudioChannel::Notification:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_NOTIFICATION, aIndex);
|
||||
NS_ENSURE_SUCCESS(status, status);
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_RING, aIndex);
|
||||
break;
|
||||
case AudioChannel::Alarm:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_ALARM, aIndex);
|
||||
break;
|
||||
case AudioChannel::Telephony:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_VOICE_CALL, aIndex);
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioManager::GetAudioChannelVolume(int32_t aChannel, int32_t* aIndex) {
|
||||
if (!aIndex) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
switch (static_cast<AudioChannel>(aChannel)) {
|
||||
case AudioChannel::Content:
|
||||
MOZ_ASSERT(mCurrentStreamVolumeTbl[AUDIO_STREAM_MUSIC] ==
|
||||
mCurrentStreamVolumeTbl[AUDIO_STREAM_SYSTEM]);
|
||||
*aIndex = mCurrentStreamVolumeTbl[AUDIO_STREAM_MUSIC];
|
||||
break;
|
||||
case AudioChannel::Notification:
|
||||
MOZ_ASSERT(mCurrentStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION] ==
|
||||
mCurrentStreamVolumeTbl[AUDIO_STREAM_RING]);
|
||||
*aIndex = mCurrentStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION];
|
||||
break;
|
||||
case AudioChannel::Alarm:
|
||||
*aIndex = mCurrentStreamVolumeTbl[AUDIO_STREAM_ALARM];
|
||||
break;
|
||||
case AudioChannel::Telephony:
|
||||
*aIndex = mCurrentStreamVolumeTbl[AUDIO_STREAM_VOICE_CALL];
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioManager::GetMaxAudioChannelVolume(int32_t aChannel, int32_t* aMaxIndex) {
|
||||
if (!aMaxIndex) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
int32_t stream;
|
||||
switch (static_cast<AudioChannel>(aChannel)) {
|
||||
case AudioChannel::Content:
|
||||
MOZ_ASSERT(sMaxStreamVolumeTbl[AUDIO_STREAM_MUSIC] ==
|
||||
sMaxStreamVolumeTbl[AUDIO_STREAM_SYSTEM]);
|
||||
stream = AUDIO_STREAM_MUSIC;
|
||||
break;
|
||||
case AudioChannel::Notification:
|
||||
MOZ_ASSERT(sMaxStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION] ==
|
||||
sMaxStreamVolumeTbl[AUDIO_STREAM_RING]);
|
||||
stream = AUDIO_STREAM_NOTIFICATION;
|
||||
break;
|
||||
case AudioChannel::Alarm:
|
||||
stream = AUDIO_STREAM_ALARM;
|
||||
break;
|
||||
case AudioChannel::Telephony:
|
||||
stream = AUDIO_STREAM_VOICE_CALL;
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
*aMaxIndex = sMaxStreamVolumeTbl[stream];
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
AudioManager::SetStreamVolumeIndex(int32_t aStream, int32_t aIndex) {
|
||||
AudioManager::SetVolumeByCategory(uint32_t aCategory, uint32_t aIndex)
|
||||
{
|
||||
nsresult status;
|
||||
switch (static_cast<AudioVolumeCategories>(aCategory)) {
|
||||
case VOLUME_MEDIA:
|
||||
// sync FMRadio's volume with content channel.
|
||||
if (IsDeviceOn(AUDIO_DEVICE_OUT_FM)) {
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_FM, aIndex);
|
||||
if (NS_WARN_IF(NS_FAILED(status))) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_MUSIC, aIndex);
|
||||
if (NS_WARN_IF(NS_FAILED(status))) {
|
||||
return status;
|
||||
}
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_SYSTEM, aIndex);
|
||||
break;
|
||||
case VOLUME_NOTIFICATION:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_NOTIFICATION, aIndex);
|
||||
if (NS_WARN_IF(NS_FAILED(status))) {
|
||||
return status;
|
||||
}
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_RING, aIndex);
|
||||
break;
|
||||
case VOLUME_ALARM:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_ALARM, aIndex);
|
||||
break;
|
||||
case VOLUME_TELEPHONY:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_VOICE_CALL, aIndex);
|
||||
case VOLUME_BLUETOOTH_SCO:
|
||||
status = SetStreamVolumeIndex(AUDIO_STREAM_BLUETOOTH_SCO, aIndex);
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
AudioManager::GetVolumeByCategory(uint32_t aCategory) const
|
||||
{
|
||||
switch (static_cast<AudioVolumeCategories>(aCategory)) {
|
||||
case VOLUME_MEDIA:
|
||||
MOZ_ASSERT(mCurrentStreamVolumeTbl[AUDIO_STREAM_MUSIC] ==
|
||||
mCurrentStreamVolumeTbl[AUDIO_STREAM_SYSTEM]);
|
||||
return mCurrentStreamVolumeTbl[AUDIO_STREAM_MUSIC];
|
||||
case VOLUME_NOTIFICATION:
|
||||
MOZ_ASSERT(mCurrentStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION] ==
|
||||
mCurrentStreamVolumeTbl[AUDIO_STREAM_RING]);
|
||||
return mCurrentStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION];
|
||||
case VOLUME_ALARM:
|
||||
return mCurrentStreamVolumeTbl[AUDIO_STREAM_ALARM];
|
||||
case VOLUME_TELEPHONY:
|
||||
return mCurrentStreamVolumeTbl[AUDIO_STREAM_VOICE_CALL];
|
||||
case VOLUME_BLUETOOTH_SCO:
|
||||
return mCurrentStreamVolumeTbl[AUDIO_STREAM_BLUETOOTH_SCO];
|
||||
default:
|
||||
NS_WARNING("Can't get volume from error volume category.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
AudioManager::GetMaxVolumeByCategory(uint32_t aCategory) const
|
||||
{
|
||||
switch (static_cast<AudioVolumeCategories>(aCategory)) {
|
||||
case VOLUME_MEDIA:
|
||||
MOZ_ASSERT(sMaxStreamVolumeTbl[AUDIO_STREAM_MUSIC] ==
|
||||
sMaxStreamVolumeTbl[AUDIO_STREAM_SYSTEM]);
|
||||
return sMaxStreamVolumeTbl[AUDIO_STREAM_MUSIC];
|
||||
case VOLUME_NOTIFICATION:
|
||||
MOZ_ASSERT(sMaxStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION] ==
|
||||
sMaxStreamVolumeTbl[AUDIO_STREAM_RING]);
|
||||
return sMaxStreamVolumeTbl[AUDIO_STREAM_NOTIFICATION];
|
||||
case VOLUME_ALARM:
|
||||
return sMaxStreamVolumeTbl[AUDIO_STREAM_ALARM];
|
||||
case VOLUME_TELEPHONY:
|
||||
return sMaxStreamVolumeTbl[AUDIO_STREAM_VOICE_CALL];
|
||||
case VOLUME_BLUETOOTH_SCO:
|
||||
return sMaxStreamVolumeTbl[AUDIO_STREAM_BLUETOOTH_SCO];
|
||||
default:
|
||||
NS_WARNING("Can't get max volume from error volume category.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioManager::SetAudioChannelVolume(uint32_t aChannel, uint32_t aIndex)
|
||||
{
|
||||
nsresult status;
|
||||
AudioVolumeCategories category = (mPresentProfile == DEVICE_BLUETOOTH) ?
|
||||
VOLUME_BLUETOOTH_SCO : VOLUME_TELEPHONY;
|
||||
switch (static_cast<AudioChannel>(aChannel)) {
|
||||
case AudioChannel::Normal:
|
||||
case AudioChannel::Content:
|
||||
status = SetVolumeByCategory(VOLUME_MEDIA, aIndex);
|
||||
break;
|
||||
case AudioChannel::Notification:
|
||||
case AudioChannel::Ringer:
|
||||
case AudioChannel::Publicnotification:
|
||||
status = SetVolumeByCategory(VOLUME_NOTIFICATION, aIndex);
|
||||
break;
|
||||
case AudioChannel::Alarm:
|
||||
status = SetVolumeByCategory(VOLUME_ALARM, aIndex);
|
||||
break;
|
||||
case AudioChannel::Telephony:
|
||||
status = SetVolumeByCategory(category, aIndex);
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioManager::GetAudioChannelVolume(uint32_t aChannel, uint32_t* aIndex)
|
||||
{
|
||||
if (!aIndex) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
AudioVolumeCategories category = (mPresentProfile == DEVICE_BLUETOOTH) ?
|
||||
VOLUME_BLUETOOTH_SCO : VOLUME_TELEPHONY;
|
||||
switch (static_cast<AudioChannel>(aChannel)) {
|
||||
case AudioChannel::Normal:
|
||||
case AudioChannel::Content:
|
||||
*aIndex = GetVolumeByCategory(VOLUME_MEDIA);
|
||||
break;
|
||||
case AudioChannel::Notification:
|
||||
case AudioChannel::Ringer:
|
||||
case AudioChannel::Publicnotification:
|
||||
*aIndex = GetVolumeByCategory(VOLUME_NOTIFICATION);
|
||||
break;
|
||||
case AudioChannel::Alarm:
|
||||
*aIndex = GetVolumeByCategory(VOLUME_ALARM);
|
||||
break;
|
||||
case AudioChannel::Telephony:
|
||||
*aIndex = GetVolumeByCategory(category);
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioManager::GetMaxAudioChannelVolume(uint32_t aChannel, uint32_t* aMaxIndex)
|
||||
{
|
||||
if (!aMaxIndex) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
AudioVolumeCategories category = (mPresentProfile == DEVICE_BLUETOOTH) ?
|
||||
VOLUME_BLUETOOTH_SCO : VOLUME_TELEPHONY;
|
||||
switch (static_cast<AudioChannel>(aChannel)) {
|
||||
case AudioChannel::Normal:
|
||||
case AudioChannel::Content:
|
||||
*aMaxIndex = GetMaxVolumeByCategory(VOLUME_MEDIA);
|
||||
break;
|
||||
case AudioChannel::Notification:
|
||||
case AudioChannel::Ringer:
|
||||
case AudioChannel::Publicnotification:
|
||||
*aMaxIndex = GetMaxVolumeByCategory(VOLUME_NOTIFICATION);
|
||||
break;
|
||||
case AudioChannel::Alarm:
|
||||
*aMaxIndex = GetMaxVolumeByCategory(VOLUME_ALARM);
|
||||
break;
|
||||
case AudioChannel::Telephony:
|
||||
*aMaxIndex = GetMaxVolumeByCategory(category);
|
||||
break;
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
AudioManager::SetStreamVolumeIndex(int32_t aStream, uint32_t aIndex) {
|
||||
if (aIndex < 0 || aIndex > sMaxStreamVolumeTbl[aStream]) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
mCurrentStreamVolumeTbl[aStream] = aIndex;
|
||||
status_t status;
|
||||
#if ANDROID_VERSION < 17
|
||||
|
@ -826,31 +958,25 @@ AudioManager::SetStreamVolumeIndex(int32_t aStream, int32_t aIndex) {
|
|||
aIndex);
|
||||
return status ? NS_ERROR_FAILURE : NS_OK;
|
||||
#else
|
||||
int device = 0;
|
||||
|
||||
if (aStream == AUDIO_STREAM_BLUETOOTH_SCO) {
|
||||
device = AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET;
|
||||
} else if (aStream == AUDIO_STREAM_FM) {
|
||||
device = AUDIO_DEVICE_OUT_FM;
|
||||
}
|
||||
|
||||
if (device != 0) {
|
||||
if (aStream == AUDIO_STREAM_FM) {
|
||||
status = AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
device);
|
||||
AUDIO_DEVICE_OUT_FM);
|
||||
return status ? NS_ERROR_FAILURE : NS_OK;
|
||||
}
|
||||
|
||||
if (mPresentProfile == DEVICE_PRIMARY) {
|
||||
status = AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP);
|
||||
status += AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_SPEAKER);
|
||||
status += AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_EARPIECE);
|
||||
} else if (mPresentProfile == DEVICE_HEADSET) {
|
||||
status = AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_WIRED_HEADSET);
|
||||
|
@ -858,21 +984,24 @@ AudioManager::SetStreamVolumeIndex(int32_t aStream, int32_t aIndex) {
|
|||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_WIRED_HEADPHONE);
|
||||
status += AudioSystem::setStreamVolumeIndex(
|
||||
} else if (mPresentProfile == DEVICE_BLUETOOTH) {
|
||||
status = AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_EARPIECE);
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP);
|
||||
status += AudioSystem::setStreamVolumeIndex(
|
||||
static_cast<audio_stream_type_t>(aStream),
|
||||
aIndex,
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET);
|
||||
|
||||
} else {
|
||||
NS_WARNING("Can't set stream volume on error profile!");
|
||||
}
|
||||
return status ? NS_ERROR_FAILURE : NS_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
nsresult
|
||||
AudioManager::GetStreamVolumeIndex(int32_t aStream, int32_t *aIndex) {
|
||||
AudioManager::GetStreamVolumeIndex(int32_t aStream, uint32_t *aIndex) {
|
||||
if (!aIndex) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
@ -885,3 +1014,138 @@ AudioManager::GetStreamVolumeIndex(int32_t aStream, int32_t *aIndex) {
|
|||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AudioProfileData*
|
||||
AudioManager::FindAudioProfileData(AudioOutputProfiles aProfile)
|
||||
{
|
||||
uint32_t profilesNum = mAudioProfiles.Length();
|
||||
MOZ_ASSERT(profilesNum == DEVICE_TOTAL_NUMBER, "Error profile numbers!");
|
||||
for (uint32_t idx = 0; idx < profilesNum; ++idx) {
|
||||
if (mAudioProfiles[idx]->GetProfile() == aProfile) {
|
||||
return mAudioProfiles[idx];
|
||||
}
|
||||
}
|
||||
NS_WARNING("Can't find audio profile data");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::SendVolumeChangeNotification(AudioProfileData* aProfileData)
|
||||
{
|
||||
MOZ_ASSERT(aProfileData);
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsISettingsService> service = do_GetService(SETTINGS_SERVICE, &rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISettingsServiceLock> lock;
|
||||
rv = service->CreateLock(nullptr, getter_AddRefs(lock));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Send events to update the Gaia volume
|
||||
mozilla::AutoSafeJSContext cx;
|
||||
JS::Rooted<JS::Value> value(cx);
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
value.setInt32(aProfileData->mVolumeTable[gVolumeData[idx].mCategory]);
|
||||
lock->Set(gVolumeData[idx].mChannelName, value, nullptr, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::CreateAudioProfilesData()
|
||||
{
|
||||
MOZ_ASSERT(mAudioProfiles.IsEmpty(), "mAudioProfiles should be empty!");
|
||||
for (uint32_t idx = 0; idx < DEVICE_TOTAL_NUMBER; ++idx) {
|
||||
AudioProfileData* profile = new AudioProfileData(static_cast<AudioOutputProfiles>(idx));
|
||||
mAudioProfiles.AppendElement(profile);
|
||||
}
|
||||
UpdateProfileState(DEVICE_PRIMARY, true);
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::InitProfilesVolume(uint32_t aCategory, uint32_t aIndex)
|
||||
{
|
||||
uint32_t profilesNum = mAudioProfiles.Length();
|
||||
MOZ_ASSERT(profilesNum == DEVICE_TOTAL_NUMBER, "Error profile numbers!");
|
||||
for (uint32_t idx = 0; idx < profilesNum; ++idx) {
|
||||
mAudioProfiles[idx]->mVolumeTable[aCategory] = aIndex;
|
||||
}
|
||||
SetVolumeByCategory(aCategory, aIndex);
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::SwitchProfileData(AudioOutputProfiles aProfile,
|
||||
bool aActive)
|
||||
{
|
||||
MOZ_ASSERT(DEVICE_PRIMARY <= aProfile &&
|
||||
aProfile < DEVICE_TOTAL_NUMBER, "Error profile type!");
|
||||
|
||||
// Save the present profile volume data.
|
||||
AudioOutputProfiles oldProfile = mPresentProfile;
|
||||
AudioProfileData* profileData = FindAudioProfileData(oldProfile);
|
||||
MOZ_ASSERT(profileData);
|
||||
UpdateVolumeToProfile(profileData);
|
||||
UpdateProfileState(aProfile, aActive);
|
||||
|
||||
AudioOutputProfiles newProfile = mPresentProfile;
|
||||
if (oldProfile == newProfile) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Update new profile volume data and send the changing event.
|
||||
profileData = FindAudioProfileData(newProfile);
|
||||
MOZ_ASSERT(profileData);
|
||||
UpdateVolumeFromProfile(profileData);
|
||||
SendVolumeChangeNotification(profileData);
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::UpdateProfileState(AudioOutputProfiles aProfile, bool aActive)
|
||||
{
|
||||
MOZ_ASSERT(DEVICE_PRIMARY <= aProfile && aProfile < DEVICE_TOTAL_NUMBER,
|
||||
"Error profile type!");
|
||||
if (aProfile == DEVICE_PRIMARY && !aActive) {
|
||||
NS_WARNING("Can't turn off the primary profile!");
|
||||
return;
|
||||
}
|
||||
|
||||
mAudioProfiles[aProfile]->SetActive(aActive);
|
||||
if (aActive) {
|
||||
mPresentProfile = aProfile;
|
||||
return;
|
||||
}
|
||||
|
||||
// The primary profile has the lowest priority. We will check whether there
|
||||
// are other profiles. The bluetooth and headset have the same priotity.
|
||||
uint32_t profilesNum = mAudioProfiles.Length();
|
||||
MOZ_ASSERT(profilesNum == DEVICE_TOTAL_NUMBER, "Error profile numbers!");
|
||||
for (uint32_t idx = profilesNum - 1; idx >= 0; --idx) {
|
||||
if (mAudioProfiles[idx]->GetActive()) {
|
||||
mPresentProfile = static_cast<AudioOutputProfiles>(idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::UpdateVolumeToProfile(AudioProfileData* aProfileData)
|
||||
{
|
||||
MOZ_ASSERT(aProfileData);
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
uint32_t volume = GetVolumeByCategory(gVolumeData[idx].mCategory);
|
||||
aProfileData->mVolumeTable[gVolumeData[idx].mCategory] = volume;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioManager::UpdateVolumeFromProfile(AudioProfileData* aProfileData)
|
||||
{
|
||||
MOZ_ASSERT(aProfileData);
|
||||
for (uint32_t idx = 0; idx < VOLUME_TOTAL_NUMBER; ++idx) {
|
||||
SetVolumeByCategory(gVolumeData[idx].mCategory,
|
||||
aProfileData->mVolumeTable[gVolumeData[idx].mCategory]);
|
||||
}
|
||||
}
|
|
@ -36,8 +36,47 @@ typedef Observer<SwitchEvent> SwitchObserver;
|
|||
|
||||
namespace dom {
|
||||
namespace gonk {
|
||||
|
||||
/**
|
||||
* FxOS can remeber the separate volume settings on difference output profiles.
|
||||
* (1) Primary : speaker, receiver
|
||||
* (2) Headset : wired headphone/headset
|
||||
* (3) Bluetooth : BT SCO/A2DP devices
|
||||
**/
|
||||
enum AudioOutputProfiles {
|
||||
DEVICE_PRIMARY = 0,
|
||||
DEVICE_HEADSET = 1,
|
||||
DEVICE_BLUETOOTH = 2,
|
||||
DEVICE_TOTAL_NUMBER = 3,
|
||||
};
|
||||
|
||||
/**
|
||||
* We have five sound volume settings from UX spec,
|
||||
* You can see more informations in Bug1068219.
|
||||
* (1) Media : music, video, FM ...
|
||||
* (2) Notification : ringer, notification ...
|
||||
* (3) Alarm : alarm
|
||||
* (4) Telephony : GSM call, WebRTC call
|
||||
* (5) Bluetooth SCO : SCO call
|
||||
**/
|
||||
enum AudioVolumeCategories {
|
||||
VOLUME_MEDIA = 0,
|
||||
VOLUME_NOTIFICATION = 1,
|
||||
VOLUME_ALARM = 2,
|
||||
VOLUME_TELEPHONY = 3,
|
||||
VOLUME_BLUETOOTH_SCO = 4,
|
||||
VOLUME_TOTAL_NUMBER = 5,
|
||||
};
|
||||
|
||||
struct VolumeData {
|
||||
const char* mChannelName;
|
||||
uint32_t mCategory;
|
||||
};
|
||||
|
||||
class RecoverTask;
|
||||
class AudioChannelVolInitCallback;
|
||||
class AudioProfileData;
|
||||
|
||||
class AudioManager final : public nsIAudioManager
|
||||
, public nsIObserver
|
||||
{
|
||||
|
@ -53,12 +92,18 @@ public:
|
|||
friend class RecoverTask;
|
||||
friend class AudioChannelVolInitCallback;
|
||||
|
||||
// Open or close the specific profile
|
||||
void SwitchProfileData(AudioOutputProfiles aProfile, bool aActive);
|
||||
|
||||
// Validate whether the volume index is within the range
|
||||
nsresult ValidateVolumeIndex(uint32_t aCategory, uint32_t aIndex) const;
|
||||
|
||||
protected:
|
||||
int32_t mPhoneState;
|
||||
int mCurrentStreamVolumeTbl[AUDIO_STREAM_CNT];
|
||||
uint32_t mCurrentStreamVolumeTbl[AUDIO_STREAM_CNT];
|
||||
|
||||
nsresult SetStreamVolumeIndex(int32_t aStream, int32_t aIndex);
|
||||
nsresult GetStreamVolumeIndex(int32_t aStream, int32_t *aIndex);
|
||||
nsresult SetStreamVolumeIndex(int32_t aStream, uint32_t aIndex);
|
||||
nsresult GetStreamVolumeIndex(int32_t aStream, uint32_t *aIndex);
|
||||
|
||||
private:
|
||||
nsAutoPtr<mozilla::hal::SwitchObserver> mObserver;
|
||||
|
@ -68,12 +113,38 @@ private:
|
|||
// mIsMicMuted is only used for toggling mute call to RIL.
|
||||
bool mIsMicMuted;
|
||||
#endif
|
||||
nsTArray<nsAutoPtr<AudioProfileData>> mAudioProfiles;
|
||||
AudioOutputProfiles mPresentProfile;
|
||||
|
||||
void HandleBluetoothStatusChanged(nsISupports* aSubject,
|
||||
const char* aTopic,
|
||||
const nsCString aAddress);
|
||||
void HandleAudioChannelProcessChanged();
|
||||
|
||||
void CreateAudioProfilesData();
|
||||
|
||||
// Init the volume setting from the init setting callback
|
||||
void InitProfilesVolume(uint32_t aCatogory, uint32_t aIndex);
|
||||
|
||||
// Update volume data of profiles
|
||||
void UpdateVolumeToProfile(AudioProfileData* aProfileData);
|
||||
|
||||
// Apply the volume data to device
|
||||
void UpdateVolumeFromProfile(AudioProfileData* aProfileData);
|
||||
|
||||
// Send the volume changing event to Gaia
|
||||
void SendVolumeChangeNotification(AudioProfileData* aProfileData);
|
||||
|
||||
// Update the mPresentProfile and profiles active status
|
||||
void UpdateProfileState(AudioOutputProfiles aProfile, bool aActive);
|
||||
|
||||
// Volume control functions
|
||||
nsresult SetVolumeByCategory(uint32_t aCategory, uint32_t aIndex);
|
||||
uint32_t GetVolumeByCategory(uint32_t aCategory) const;
|
||||
uint32_t GetMaxVolumeByCategory(uint32_t aCategory) const;
|
||||
|
||||
AudioProfileData* FindAudioProfileData(AudioOutputProfiles aProfile);
|
||||
|
||||
AudioManager();
|
||||
~AudioManager();
|
||||
};
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
[scriptable, builtinclass, uuid(60da41b4-cdc2-11e2-8a91-10bf48d64bd4)]
|
||||
[scriptable, builtinclass, uuid(df31c280-1ef1-11e5-867f-0800200c9a66)]
|
||||
interface nsIAudioManager : nsISupports
|
||||
{
|
||||
/**
|
||||
|
@ -52,8 +52,12 @@ interface nsIAudioManager : nsISupports
|
|||
void setForceForUse(in long usage, in long force);
|
||||
long getForceForUse(in long usage);
|
||||
|
||||
/* The range of volume index is from 0 to N. Ex: 0 ~ 15 */
|
||||
void setAudioChannelVolume(in long channel, in long index);
|
||||
long getAudioChannelVolume(in long channel);
|
||||
long getMaxAudioChannelVolume(in long channel);
|
||||
/**
|
||||
* These functions would be used when we enable the new volume control API
|
||||
* (mozAudioChannelManager). The range of volume index is from 0 to N.
|
||||
* More details on : https://gist.github.com/evanxd/41d8e2d91c5201a42bfa
|
||||
*/
|
||||
void setAudioChannelVolume(in unsigned long channel, in unsigned long index);
|
||||
unsigned long getAudioChannelVolume(in unsigned long channel);
|
||||
unsigned long getMaxAudioChannelVolume(in unsigned long channel);
|
||||
};
|
||||
|
|
|
@ -215,7 +215,7 @@ class OSXBootstrapper(BaseBootstrapper):
|
|||
except subprocess.CalledProcessError as e:
|
||||
# This seems to appear on fresh OS X machines before any Xcode
|
||||
# has been installed. It may only occur on OS X 10.9 and later.
|
||||
if 'unable to get active developer directory' in e.output:
|
||||
if b'unable to get active developer directory' in e.output:
|
||||
print(XCODE_NO_DEVELOPER_DIRECTORY)
|
||||
self._install_xcode_app_store()
|
||||
assert False # Above should exit.
|
||||
|
@ -225,7 +225,7 @@ class OSXBootstrapper(BaseBootstrapper):
|
|||
# This isn't the most robust check in the world. It relies on the
|
||||
# default value not being in an application bundle, which seems to
|
||||
# hold on at least Mavericks.
|
||||
if '.app/' not in output:
|
||||
if b'.app/' not in output:
|
||||
print(XCODE_REQUIRED)
|
||||
self._install_xcode_app_store()
|
||||
assert False # Above should exit.
|
||||
|
@ -236,13 +236,13 @@ class OSXBootstrapper(BaseBootstrapper):
|
|||
output = self.check_output(['/usr/bin/xcrun', 'clang'],
|
||||
stderr=subprocess.STDOUT)
|
||||
except subprocess.CalledProcessError as e:
|
||||
if 'license' in e.output:
|
||||
if b'license' in e.output:
|
||||
xcodebuild = self.which('xcodebuild')
|
||||
try:
|
||||
subprocess.check_call([xcodebuild, '-license'],
|
||||
stderr=subprocess.STDOUT)
|
||||
except subprocess.CalledProcessError as e:
|
||||
if 'requires admin privileges' in e.output:
|
||||
if b'requires admin privileges' in e.output:
|
||||
self.run_as_root([xcodebuild, '-license'])
|
||||
|
||||
# Even then we're not done! We need to install the Xcode command line tools.
|
||||
|
@ -316,7 +316,7 @@ class OSXBootstrapper(BaseBootstrapper):
|
|||
self._ensure_homebrew_packages(packages)
|
||||
|
||||
installed = self.check_output([self.brew, 'list']).split()
|
||||
if self.os_version < StrictVersion('10.7') and 'llvm' not in installed:
|
||||
if self.os_version < StrictVersion('10.7') and b'llvm' not in installed:
|
||||
print(PACKAGE_MANAGER_OLD_CLANG % ('Homebrew',))
|
||||
|
||||
subprocess.check_call([self.brew, '-v', 'install', 'llvm',
|
||||
|
@ -487,7 +487,7 @@ class OSXBootstrapper(BaseBootstrapper):
|
|||
subprocess.check_output([self.brew, '-v', 'upgrade', package],
|
||||
stderr=subprocess.STDOUT)
|
||||
except subprocess.CalledProcessError as e:
|
||||
if 'already installed' not in e.output:
|
||||
if b'already installed' not in e.output:
|
||||
raise
|
||||
else:
|
||||
assert self.package_manager == 'macports'
|
||||
|
|
|
@ -325,26 +325,63 @@ popupnotificationcontent {
|
|||
|
||||
.close-icon {
|
||||
list-style-image: url("chrome://global/skin/icons/close.png");
|
||||
-moz-image-region: rect(0, 16px, 16px, 0);
|
||||
-moz-image-region: rect(0, 20px, 20px, 0);
|
||||
}
|
||||
|
||||
.close-icon:hover {
|
||||
-moz-image-region: rect(0, 32px, 16px, 16px);
|
||||
-moz-image-region: rect(0, 40px, 20px, 20px);
|
||||
}
|
||||
|
||||
.close-icon:hover:active {
|
||||
-moz-image-region: rect(0, 48px, 16px, 32px);
|
||||
-moz-image-region: rect(0, 60px, 20px, 40px);
|
||||
}
|
||||
|
||||
.close-icon > .button-icon,
|
||||
.close-icon > .button-box > .button-icon,
|
||||
.close-icon > .toolbarbutton-icon {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
.close-icon {
|
||||
-moz-image-region: rect(0, 16px, 16px, 0);
|
||||
}
|
||||
|
||||
.close-icon:hover {
|
||||
-moz-image-region: rect(0, 32px, 16px, 16px);
|
||||
}
|
||||
|
||||
.close-icon:hover:active {
|
||||
-moz-image-region: rect(0, 48px, 16px, 32px);
|
||||
}
|
||||
|
||||
.close-icon > .button-icon,
|
||||
.close-icon > .button-box > .button-icon,
|
||||
.close-icon > .toolbarbutton-icon {
|
||||
width: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.close-icon {
|
||||
list-style-image: url("chrome://global/skin/icons/close@2x.png");
|
||||
-moz-image-region: rect(0, 40px, 40px, 0);
|
||||
}
|
||||
|
||||
.close-icon:hover {
|
||||
-moz-image-region: rect(0, 80px, 40px, 40px);
|
||||
}
|
||||
|
||||
.close-icon:hover:active {
|
||||
-moz-image-region: rect(0, 120px, 40px, 80px);
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
.close-icon {
|
||||
-moz-image-region: rect(0, 32px, 32px, 0);
|
||||
}
|
||||
|
||||
|
@ -355,4 +392,5 @@ popupnotificationcontent {
|
|||
.close-icon:hover:active {
|
||||
-moz-image-region: rect(0, 96px, 32px, 64px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
После Ширина: | Высота: | Размер: 931 B |
После Ширина: | Высота: | Размер: 2.0 KiB |
После Ширина: | Высота: | Размер: 855 B |
После Ширина: | Высота: | Размер: 1.8 KiB |
После Ширина: | Высота: | Размер: 598 B |
После Ширина: | Высота: | Размер: 1.2 KiB |
Двоичные данные
toolkit/themes/windows/global/icons/close.png
До Ширина: | Высота: | Размер: 838 B После Ширина: | Высота: | Размер: 572 B |
Двоичные данные
toolkit/themes/windows/global/icons/close@2x.png
До Ширина: | Высота: | Размер: 1.7 KiB После Ширина: | Высота: | Размер: 1.1 KiB |
|
@ -102,6 +102,12 @@ toolkit.jar:
|
|||
skin/classic/global/icons/Close.gif (icons/Close.gif)
|
||||
skin/classic/global/icons/close.png (icons/close.png)
|
||||
skin/classic/global/icons/close@2x.png (icons/close@2x.png)
|
||||
skin/classic/global/icons/close-XPVista7.png (icons/close-XPVista7.png)
|
||||
skin/classic/global/icons/close-XPVista7@2x.png (icons/close-XPVista7@2x.png)
|
||||
skin/classic/global/icons/close-inverted.png (icons/close-inverted.png)
|
||||
skin/classic/global/icons/close-inverted@2x.png (icons/close-inverted@2x.png)
|
||||
skin/classic/global/icons/close-inverted-XPVista7.png (icons/close-inverted-XPVista7.png)
|
||||
skin/classic/global/icons/close-inverted-XPVista7@2x.png (icons/close-inverted-XPVista7@2x.png)
|
||||
skin/classic/global/icons/collapse.png (icons/collapse.png)
|
||||
skin/classic/global/icons/Error.png (icons/Error.png)
|
||||
skin/classic/global/icons/error-16.png (icons/error-16.png)
|
||||
|
@ -284,6 +290,11 @@ toolkit.jar:
|
|||
% override chrome://global/skin/tree/sort-dsc.png chrome://global/skin/tree/sort-dsc-XP.png osversion<6
|
||||
% override chrome://global/skin/tree/twisty-clsd.png chrome://global/skin/tree/twisty-clsd-XP.png osversion<6
|
||||
% override chrome://global/skin/tree/twisty-open.png chrome://global/skin/tree/twisty-open-XP.png osversion<6
|
||||
|
||||
% override chrome://global/skin/icons/close.png chrome://global/skin/icons/close-XPVista7.png osversion<=6.1
|
||||
% override chrome://global/skin/icons/close@2x.png chrome://global/skin/icons/close-XPVista7@2x.png osversion<=6.1
|
||||
% override chrome://global/skin/icons/close-inverted.png chrome://global/skin/icons/close-inverted-XPVista7.png osversion<=6.1
|
||||
% override chrome://global/skin/icons/close-inverted@2x.png chrome://global/skin/icons/close-inverted-XPVista7@2x.png osversion<=6.1
|
||||
#endif
|
||||
|
||||
#if MOZ_BUILD_APP == browser
|
||||
|
|
|
@ -17,44 +17,52 @@ HOST_FINGERPRINTS = {
|
|||
}
|
||||
|
||||
|
||||
class HgIncludeException(Exception):
|
||||
pass
|
||||
def config_file(files):
|
||||
"""Select the most appropriate config file from a list."""
|
||||
if not files:
|
||||
return None
|
||||
|
||||
if len(files) > 1:
|
||||
picky = [(os.path.getsize(f), f) for f in files if os.path.isfile(f)]
|
||||
if picky:
|
||||
return max(picky)[1]
|
||||
|
||||
return files[0]
|
||||
|
||||
|
||||
class ParseException(Exception):
|
||||
def __init__(self, line, msg):
|
||||
self.line = line
|
||||
super(Exception, self).__init__(msg)
|
||||
|
||||
|
||||
class MercurialConfig(object):
|
||||
"""Interface for manipulating a Mercurial config file."""
|
||||
|
||||
def __init__(self, infiles=None):
|
||||
def __init__(self, path=None):
|
||||
"""Create a new instance, optionally from an existing hgrc file."""
|
||||
|
||||
if infiles:
|
||||
# If multiple files were specified, figure out which file we're using:
|
||||
if len(infiles) > 1:
|
||||
picky_infiles = filter(os.path.isfile, infiles)
|
||||
if picky_infiles:
|
||||
picky_infiles = [(os.path.getsize(path), path) for path in picky_infiles]
|
||||
infiles = [max(picky_infiles)[1]]
|
||||
|
||||
infile = infiles[0]
|
||||
self.config_path = infile
|
||||
else:
|
||||
infile = None
|
||||
self.config_path = path
|
||||
|
||||
# Mercurial configuration files allow an %include directive to include
|
||||
# other files, this is not supported by ConfigObj, so throw a useful
|
||||
# error saying this.
|
||||
if os.path.exists(infile):
|
||||
with codecs.open(infile, 'r', encoding='utf-8') as f:
|
||||
for line in f:
|
||||
if os.path.exists(path):
|
||||
with codecs.open(path, 'r', encoding='utf-8') as f:
|
||||
for i, line in enumerate(f):
|
||||
if line.startswith('%include'):
|
||||
raise HgIncludeException(
|
||||
raise ParseException(i + 1,
|
||||
'%include directive is not supported by MercurialConfig')
|
||||
if line.startswith(';'):
|
||||
raise ParseException(i + 1,
|
||||
'semicolon (;) comments are not supported; '
|
||||
'use # instead')
|
||||
|
||||
# write_empty_values is necessary to prevent built-in extensions (which
|
||||
# have no value) from being dropped on write.
|
||||
# list_values aren't needed by Mercurial and disabling them prevents
|
||||
# quotes from being added.
|
||||
self._c = ConfigObj(infile=infile, encoding='utf-8',
|
||||
self._c = ConfigObj(infile=path, encoding='utf-8',
|
||||
write_empty_values=True, list_values=False)
|
||||
|
||||
@property
|
||||
|
|
|
@ -26,7 +26,7 @@ class MercurialUpdater(object):
|
|||
self.ext_dir = os.path.join(self.state_dir, 'mercurial', 'extensions')
|
||||
self.vcs_tools_dir = os.path.join(self.state_dir, 'version-control-tools')
|
||||
|
||||
def update_all(self, config_paths):
|
||||
def update_all(self):
|
||||
try:
|
||||
os.makedirs(self.ext_dir)
|
||||
except OSError as e:
|
||||
|
|
|
@ -21,8 +21,9 @@ from mozversioncontrol import get_hg_version
|
|||
|
||||
from .update import MercurialUpdater
|
||||
from .config import (
|
||||
HgIncludeException,
|
||||
config_file,
|
||||
MercurialConfig,
|
||||
ParseException,
|
||||
)
|
||||
|
||||
|
||||
|
@ -216,16 +217,19 @@ class MercurialSetupWizard(object):
|
|||
'up to date.')
|
||||
return 1
|
||||
|
||||
config_path = config_file(config_paths)
|
||||
|
||||
try:
|
||||
c = MercurialConfig(config_paths)
|
||||
c = MercurialConfig(config_path)
|
||||
except ConfigObjError as e:
|
||||
print('Error importing existing Mercurial config!\n')
|
||||
print('Error importing existing Mercurial config: %s\n' % config_path)
|
||||
for error in e.errors:
|
||||
print(error.message)
|
||||
|
||||
return 1
|
||||
except HgIncludeException as e:
|
||||
print(e.message)
|
||||
except ParseException as e:
|
||||
print('Error importing existing Mercurial config: %s\n' % config_path)
|
||||
print('Line %d: %s' % (e.line, e.message))
|
||||
|
||||
return 1
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ class VersionControlCommands(object):
|
|||
if update_only:
|
||||
from hgsetup.update import MercurialUpdater
|
||||
updater = MercurialUpdater(self._context.state_dir)
|
||||
result = updater.update_all(map(os.path.expanduser, config_paths))
|
||||
result = updater.update_all()
|
||||
else:
|
||||
from hgsetup.wizard import MercurialSetupWizard
|
||||
wizard = MercurialSetupWizard(self._context.state_dir)
|
||||
|
|