├── .gitignore ├── .gitmodules ├── .travis.yml ├── LICENSE ├── Makefile ├── PRIVACY.md ├── README.md ├── android ├── .gitignore ├── .idea │ ├── .name │ ├── codeStyles │ │ └── Project.xml │ ├── compiler.xml │ ├── copyright │ │ ├── Snapcast.xml │ │ └── profiles_settings.xml │ ├── dictionaries │ │ └── User.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── Snapcast │ ├── .gitignore │ ├── Ressources │ │ ├── Mute_Icon.svg │ │ ├── Speaker_Icon.svg │ │ ├── ic_launcher.zip │ │ ├── ic_mute_icon.zip │ │ └── ic_speaker_icon.zip │ ├── build.gradle │ ├── proguard-rules.pro │ ├── src │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── de │ │ │ │ └── badaix │ │ │ │ └── snapcast │ │ │ │ └── ApplicationTest.java │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ ├── bin │ │ │ │ │ ├── arm64-v8a │ │ │ │ │ │ ├── librespot │ │ │ │ │ │ ├── snapclient │ │ │ │ │ │ └── snapserver │ │ │ │ │ ├── armeabi │ │ │ │ │ │ ├── librespot │ │ │ │ │ │ ├── snapclient │ │ │ │ │ │ └── snapserver │ │ │ │ │ ├── mips │ │ │ │ │ │ ├── librespot │ │ │ │ │ │ ├── snapclient │ │ │ │ │ │ └── snapserver │ │ │ │ │ └── x86 │ │ │ │ │ │ ├── librespot │ │ │ │ │ │ ├── snapclient │ │ │ │ │ │ └── snapserver │ │ │ │ └── files │ │ │ │ │ ├── Snapcast_800.png │ │ │ │ │ └── about.html │ │ │ ├── java │ │ │ │ ├── de │ │ │ │ │ └── badaix │ │ │ │ │ │ └── snapcast │ │ │ │ │ │ ├── AboutActivity.java │ │ │ │ │ │ ├── BootCompleteReceiver.java │ │ │ │ │ │ ├── ClientItem.java │ │ │ │ │ │ ├── ClientSettingsActivity.java │ │ │ │ │ │ ├── ClientSettingsFragment.java │ │ │ │ │ │ ├── GroupItem.java │ │ │ │ │ │ ├── GroupListFragment.java │ │ │ │ │ │ ├── GroupSettingsActivity.java │ │ │ │ │ │ ├── GroupSettingsFragment.java │ │ │ │ │ │ ├── LocalServerSettingsDialogFragment.java │ │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ │ ├── ServerDialogFragment.java │ │ │ │ │ │ ├── SnapClientService.java │ │ │ │ │ │ ├── SnapServerService.java │ │ │ │ │ │ ├── SnapService.java │ │ │ │ │ │ ├── control │ │ │ │ │ │ ├── JsonRPC.java │ │ │ │ │ │ ├── RemoteControl.java │ │ │ │ │ │ ├── TcpClient.java │ │ │ │ │ │ └── json │ │ │ │ │ │ │ ├── Client.java │ │ │ │ │ │ │ ├── ClientConfig.java │ │ │ │ │ │ │ ├── Group.java │ │ │ │ │ │ │ ├── Host.java │ │ │ │ │ │ │ ├── JsonSerialisable.java │ │ │ │ │ │ │ ├── Server.java │ │ │ │ │ │ │ ├── ServerStatus.java │ │ │ │ │ │ │ ├── Snapcast.java │ │ │ │ │ │ │ ├── Snapclient.java │ │ │ │ │ │ │ ├── Snapserver.java │ │ │ │ │ │ │ ├── Stream.java │ │ │ │ │ │ │ ├── StreamUri.java │ │ │ │ │ │ │ ├── Time_t.java │ │ │ │ │ │ │ └── Volume.java │ │ │ │ │ │ └── utils │ │ │ │ │ │ ├── MD5.java │ │ │ │ │ │ ├── NsdHelper.java │ │ │ │ │ │ ├── Settings.java │ │ │ │ │ │ └── Setup.java │ │ │ │ └── uk │ │ │ │ │ └── org │ │ │ │ │ └── jaggard │ │ │ │ │ └── snapcast │ │ │ │ │ └── .gitignore │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_media_pause.png │ │ │ │ ├── ic_media_play.png │ │ │ │ ├── ic_media_stop.png │ │ │ │ ├── ic_mute_icon.png │ │ │ │ ├── ic_settings_black_24dp.png │ │ │ │ ├── ic_settings_white_24dp.png │ │ │ │ └── ic_speaker_icon.png │ │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_media_pause.png │ │ │ │ ├── ic_media_play.png │ │ │ │ ├── ic_media_stop.png │ │ │ │ ├── ic_mute_icon.png │ │ │ │ ├── ic_settings_black_24dp.png │ │ │ │ ├── ic_settings_white_24dp.png │ │ │ │ └── ic_speaker_icon.png │ │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_media_pause.png │ │ │ │ ├── ic_media_play.png │ │ │ │ ├── ic_media_stop.png │ │ │ │ ├── ic_mute_icon.png │ │ │ │ ├── ic_settings_black_24dp.png │ │ │ │ ├── ic_settings_white_24dp.png │ │ │ │ └── ic_speaker_icon.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_media_pause.png │ │ │ │ ├── ic_media_play.png │ │ │ │ ├── ic_media_stop.png │ │ │ │ ├── ic_mute_icon.png │ │ │ │ ├── ic_settings_black_24dp.png │ │ │ │ ├── ic_settings_white_24dp.png │ │ │ │ └── ic_speaker_icon.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── ic_mute_icon.png │ │ │ │ ├── ic_settings_black_24dp.png │ │ │ │ ├── ic_settings_white_24dp.png │ │ │ │ └── ic_speaker_icon.png │ │ │ │ ├── drawable │ │ │ │ └── ic_menu_overflow_material.xml │ │ │ │ ├── layout-large │ │ │ │ └── client_item_not_used.xml │ │ │ │ ├── layout │ │ │ │ ├── activity_about.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── client_item.xml │ │ │ │ ├── dialog_local_server_settings.xml │ │ │ │ ├── dialog_server.xml │ │ │ │ ├── fragment_group_list.xml │ │ │ │ └── group_item.xml │ │ │ │ ├── menu │ │ │ │ ├── menu_snapcast.xml │ │ │ │ └── menu_snapcast_server.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values-de │ │ │ │ └── strings.xml │ │ │ │ ├── values-ja │ │ │ │ └── strings.xml │ │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── ids.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ │ └── xml │ │ │ │ ├── client_preferences.xml │ │ │ │ └── group_preferences.xml │ │ └── test │ │ │ └── java │ │ │ └── de │ │ │ └── badaix │ │ │ └── snapcast │ │ │ └── ExampleUnitTest.java │ └── version.properties ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── buildroot ├── Config.in ├── configs │ └── snapcast_defconfig ├── external.desc ├── external.mk └── package │ └── snapcast │ ├── Config.in │ ├── S99snapclient │ └── snapcast.mk ├── client ├── Makefile ├── browseZeroConf │ ├── browseAvahi.cpp │ ├── browseAvahi.h │ ├── browseBonjour.cpp │ ├── browseBonjour.h │ └── browsemDNS.h ├── build_android.sh ├── build_android_all.sh ├── clientConnection.cpp ├── clientConnection.h ├── controller.cpp ├── controller.h ├── debian │ ├── changelog │ ├── compat │ ├── control │ ├── copyright │ ├── docs │ ├── rules │ ├── snapclient.default │ ├── snapclient.init │ ├── snapclient.plist │ ├── snapclient.postinst │ ├── snapclient.postrm │ └── snapclient.service ├── decoder │ ├── decoder.h │ ├── flacDecoder.cpp │ ├── flacDecoder.h │ ├── oggDecoder.cpp │ ├── oggDecoder.h │ ├── pcmDecoder.cpp │ └── pcmDecoder.h ├── doubleBuffer.h ├── player │ ├── alsaPlayer.cpp │ ├── alsaPlayer.h │ ├── coreAudioPlayer.cpp │ ├── coreAudioPlayer.h │ ├── openslPlayer.cpp │ ├── openslPlayer.h │ ├── pcmDevice.h │ ├── player.cpp │ └── player.h ├── snapClient.cpp ├── snapclient.1 ├── stream.cpp ├── stream.h ├── timeProvider.cpp └── timeProvider.h ├── common ├── daemon.cpp ├── daemon.h ├── endian.h ├── queue.h ├── sampleFormat.cpp ├── sampleFormat.h ├── signalHandler.h ├── snapException.h ├── strCompat.h ├── timeDefs.h ├── utils.h └── utils │ ├── file_utils.h │ └── string_utils.h ├── control ├── control.py ├── setVolume.py └── testClient.py ├── doc ├── Snapcast.png ├── Snapcast.svg ├── Snapcast_800.png ├── build.md ├── json_rpc_api │ └── v2_0_0.md ├── player_setup.md ├── snapcast_android.png ├── snapcast_android_scaled.png ├── snapcast_icon.svg └── web_hi_res_512.png ├── docs ├── PRIVACY.md ├── README.md └── _config.yml ├── externals ├── Makefile └── json.hpp ├── message ├── codecHeader.h ├── hello.h ├── jsonMessage.h ├── message.h ├── pcmChunk.cpp ├── pcmChunk.h ├── serverSettings.h ├── time.h └── wireChunk.h ├── notes.txt ├── openWrt ├── Makefile.openwrt ├── snapclient.init └── snapserver.init └── server ├── Makefile ├── build_android.sh ├── build_android_all.sh ├── config.cpp ├── config.h ├── controlServer.cpp ├── controlServer.h ├── controlSession.cpp ├── controlSession.h ├── debian ├── changelog ├── compat ├── control ├── copyright ├── docs ├── rules ├── snapserver.bsd ├── snapserver.default ├── snapserver.init ├── snapserver.plist ├── snapserver.postinst ├── snapserver.postrm └── snapserver.service ├── encoder ├── encoder.h ├── encoderFactory.cpp ├── encoderFactory.h ├── flacEncoder.cpp ├── flacEncoder.h ├── oggEncoder.cpp ├── oggEncoder.h ├── pcmEncoder.cpp └── pcmEncoder.h ├── publishZeroConf ├── publishAvahi.cpp ├── publishAvahi.h ├── publishBonjour.cpp ├── publishBonjour.h └── publishmDNS.h ├── snapServer.cpp ├── snapserver.1 ├── streamServer.cpp ├── streamServer.h ├── streamSession.cpp ├── streamSession.h └── streamreader ├── airplayStream.cpp ├── airplayStream.h ├── fileStream.cpp ├── fileStream.h ├── pcmStream.cpp ├── pcmStream.h ├── pipeStream.cpp ├── pipeStream.h ├── process.hpp ├── processStream.cpp ├── processStream.h ├── spotifyStream.cpp ├── spotifyStream.h ├── streamManager.cpp ├── streamManager.h ├── streamUri.cpp ├── streamUri.h ├── watchdog.cpp └── watchdog.h /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | 19 | # Compiled Static libraries 20 | *.lai 21 | *.la 22 | *.a 23 | *.lib 24 | 25 | # Executables 26 | *.exe 27 | *.out 28 | *.app 29 | 30 | *.*~ 31 | client/snapclient 32 | server/snapserver 33 | .vscode 34 | GPATH 35 | GRTAGS 36 | GTAGS 37 | 38 | # Resolved merge conflicts 39 | *.orig 40 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "externals/popl"] 2 | path = externals/popl 3 | url = https://github.com/badaix/popl.git 4 | [submodule "externals/asio"] 5 | path = externals/asio 6 | url = https://github.com/chriskohlhoff/asio.git 7 | [submodule "externals/flac"] 8 | path = externals/flac 9 | url = https://git.xiph.org/flac.git 10 | [submodule "externals/ogg"] 11 | path = externals/ogg 12 | url = https://git.xiph.org/ogg.git 13 | [submodule "externals/tremor"] 14 | path = externals/tremor 15 | url = https://git.xiph.org/tremor.git 16 | [submodule "externals/jsonrpcpp"] 17 | path = externals/jsonrpcpp 18 | url = https://github.com/badaix/jsonrpcpp.git 19 | [submodule "externals/aixlog"] 20 | path = externals/aixlog 21 | url = https://github.com/badaix/aixlog.git 22 | [submodule "externals/vorbis"] 23 | path = externals/vorbis 24 | url = git@github.com:xiph/vorbis.git 25 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: cpp 2 | compiler: 3 | - gcc 4 | matrix: 5 | include: 6 | # build on ubuntu 7 | - os: linux 8 | sudo: required 9 | addons: 10 | apt: 11 | packages: 12 | - build-essential libasound2-dev libvorbisidec-dev libvorbis-dev libflac-dev alsa-utils libavahi-client-dev avahi-daemon 13 | env: 14 | - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" 15 | # build on osx 16 | - os: osx 17 | osx_image: xcode9.1 18 | env: 19 | - MATRIX_EVAL="brew update && brew install flac libvorbis" 20 | allow_failures: 21 | - os: osx 22 | before_install: 23 | - eval "${MATRIX_EVAL}" 24 | script: 25 | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then BUILD_PARAMS="TARGET=MACOS" ; fi 26 | - make $BUILD_PARAMS 27 | - sudo make installclient $BUILD_PARAMS 28 | - sudo make installserver $BUILD_PARAMS 29 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: client server 2 | 3 | all: client server 4 | 5 | server: 6 | $(MAKE) -C server 7 | 8 | client: 9 | $(MAKE) -C client 10 | 11 | clean: 12 | $(MAKE) clean -C client 13 | $(MAKE) clean -C server 14 | rm -f *~ 15 | 16 | installclient: 17 | $(MAKE) install -C client 18 | 19 | installserver: 20 | $(MAKE) install -C server 21 | 22 | uninstallclient: 23 | $(MAKE) uninstall -C client 24 | 25 | uninstallserver: 26 | $(MAKE) uninstall -C server 27 | 28 | -------------------------------------------------------------------------------- /PRIVACY.md: -------------------------------------------------------------------------------- 1 | Privacy Policy 2 | ============== 3 | 4 | Snapcast does not currently collect any user information for any purpose. 5 | 6 | It does however embed AdMob which performs analytics based on your preferences on Google Ads Settings 7 | https://www.google.co.uk/settings/ads 8 | 9 | For more detailed information, please see 10 | https://support.google.com/admob/answer/6128543?hl=en-GB 11 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | /.idea/caches/ 7 | .DS_Store 8 | /build 9 | /captures 10 | -------------------------------------------------------------------------------- /android/.idea/.name: -------------------------------------------------------------------------------- 1 | android -------------------------------------------------------------------------------- /android/.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /android/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/.idea/copyright/Snapcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /android/.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/.idea/dictionaries/User.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | spotify 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /android/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | -------------------------------------------------------------------------------- /android/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/Snapcast/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /android/Snapcast/Ressources/Mute_Icon.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 60 | 61 | 67 | 73 | -------------------------------------------------------------------------------- /android/Snapcast/Ressources/Speaker_Icon.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 22 | 25 | 28 | 29 | -------------------------------------------------------------------------------- /android/Snapcast/Ressources/ic_launcher.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/Ressources/ic_launcher.zip -------------------------------------------------------------------------------- /android/Snapcast/Ressources/ic_mute_icon.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/Ressources/ic_mute_icon.zip -------------------------------------------------------------------------------- /android/Snapcast/Ressources/ic_speaker_icon.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/Ressources/ic_speaker_icon.zip -------------------------------------------------------------------------------- /android/Snapcast/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/johannes/Develop/android-sdks/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /android/Snapcast/src/androidTest/java/de/badaix/snapcast/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package de.badaix.snapcast; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 15 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 43 | 46 | 47 | 51 | 54 | 55 | 59 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/arm64-v8a/librespot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/arm64-v8a/librespot -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/arm64-v8a/snapclient: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/arm64-v8a/snapclient -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/arm64-v8a/snapserver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/arm64-v8a/snapserver -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/armeabi/librespot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/armeabi/librespot -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/armeabi/snapclient: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/armeabi/snapclient -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/armeabi/snapserver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/armeabi/snapserver -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/mips/librespot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/mips/librespot -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/mips/snapclient: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/mips/snapclient -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/mips/snapserver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/mips/snapserver -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/x86/librespot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/x86/librespot -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/x86/snapclient: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/x86/snapclient -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/bin/x86/snapserver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/bin/x86/snapserver -------------------------------------------------------------------------------- /android/Snapcast/src/main/assets/files/Snapcast_800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/assets/files/Snapcast_800.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/AboutActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast; 20 | 21 | import android.content.pm.PackageInfo; 22 | import android.content.pm.PackageManager; 23 | import android.os.Bundle; 24 | import android.support.v7.app.AppCompatActivity; 25 | import android.util.Log; 26 | import android.webkit.WebView; 27 | 28 | public class AboutActivity extends AppCompatActivity { 29 | private static final String TAG = "About"; 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | setContentView(R.layout.activity_about); 35 | try { 36 | getSupportActionBar().setTitle(getString(R.string.about) + " Snapcast"); 37 | } catch (Exception e) { 38 | Log.wtf(TAG, "Setting title", e); 39 | } 40 | PackageInfo pInfo; 41 | try { 42 | pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 43 | getSupportActionBar().setSubtitle("v" + pInfo.versionName); 44 | } catch (PackageManager.NameNotFoundException e) { 45 | Log.wtf(TAG, "Setting subtitle", e); 46 | } 47 | WebView wv = (WebView) findViewById(R.id.webView); 48 | wv.loadUrl("file:///android_asset/" + this.getText(R.string.about_file)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/BootCompleteReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast; 20 | 21 | import android.content.BroadcastReceiver; 22 | import android.content.Context; 23 | import android.content.Intent; 24 | import android.text.TextUtils; 25 | 26 | import de.badaix.snapcast.utils.Settings; 27 | 28 | /** 29 | * Created by johannes on 05.05.16. 30 | */ 31 | public class BootCompleteReceiver extends BroadcastReceiver { 32 | @Override 33 | public void onReceive(Context context, Intent intent) { 34 | if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 35 | Settings settings = new Settings(context); 36 | if (settings.isAutostart()) { 37 | String host = settings.getHost(); 38 | int port = settings.getStreamPort(); 39 | if (TextUtils.isEmpty(host)) 40 | return; 41 | 42 | Intent i = new Intent(context, SnapClientService.class); 43 | i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 44 | i.putExtra(SnapClientService.EXTRA_HOST, host); 45 | i.putExtra(SnapClientService.EXTRA_PORT, port); 46 | i.setAction(SnapClientService.ACTION_START); 47 | 48 | context.startService(i); 49 | } 50 | } 51 | } 52 | } 53 | 54 | 55 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/ClientSettingsActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast; 20 | 21 | import android.app.Activity; 22 | import android.content.Intent; 23 | import android.os.Bundle; 24 | import android.support.v7.app.AppCompatActivity; 25 | import android.view.MenuItem; 26 | 27 | /** 28 | * Created by johannes on 11.01.16. 29 | */ 30 | public class ClientSettingsActivity extends AppCompatActivity { 31 | private ClientSettingsFragment clientSettingsFragment = null; 32 | 33 | @Override 34 | protected void onCreate(Bundle savedInstanceState) { 35 | super.onCreate(savedInstanceState); 36 | clientSettingsFragment = new ClientSettingsFragment(); 37 | clientSettingsFragment.setArguments(getIntent().getExtras()); 38 | 39 | // Display the fragment as the main content. 40 | getFragmentManager().beginTransaction() 41 | .replace(android.R.id.content, clientSettingsFragment) 42 | .commit(); 43 | } 44 | 45 | @Override 46 | public boolean onOptionsItemSelected(MenuItem item) { 47 | if (item.getItemId() == android.R.id.home) { 48 | onBackPressed(); 49 | return true; 50 | } 51 | return false; 52 | } 53 | 54 | @Override 55 | public void onBackPressed() { 56 | Intent intent = new Intent(); 57 | intent.putExtra("client", clientSettingsFragment.getClient().toJson().toString()); 58 | intent.putExtra("clientOriginal", clientSettingsFragment.getOriginalClientInfo().toJson().toString()); 59 | setResult(Activity.RESULT_OK, intent); 60 | finish(); 61 | // super.onBackPressed(); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/GroupSettingsActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast; 20 | 21 | import android.app.Activity; 22 | import android.content.Intent; 23 | import android.os.Bundle; 24 | import android.support.v7.app.AppCompatActivity; 25 | import android.view.MenuItem; 26 | 27 | /** 28 | * Created by johannes on 06.12.16. 29 | */ 30 | 31 | public class GroupSettingsActivity extends AppCompatActivity { 32 | 33 | private GroupSettingsFragment groupSettingsFragment; 34 | 35 | @Override 36 | protected void onCreate(Bundle savedInstanceState) { 37 | super.onCreate(savedInstanceState); 38 | 39 | groupSettingsFragment = new GroupSettingsFragment(); 40 | groupSettingsFragment.setArguments(getIntent().getExtras()); 41 | // Display the fragment as the main content. 42 | getFragmentManager().beginTransaction() 43 | .replace(android.R.id.content, groupSettingsFragment).commit(); 44 | } 45 | 46 | @Override 47 | public boolean onOptionsItemSelected(MenuItem item) { 48 | if (item.getItemId() == android.R.id.home) { 49 | onBackPressed(); 50 | return true; 51 | } 52 | return false; 53 | } 54 | 55 | @Override 56 | public void onBackPressed() { 57 | Intent intent = new Intent(); 58 | intent.putExtra("group", groupSettingsFragment.getGroup().getId()); 59 | if (groupSettingsFragment.didStreamChange()) 60 | intent.putExtra("stream", groupSettingsFragment.getStream()); 61 | if (groupSettingsFragment.didClientsChange()) 62 | intent.putStringArrayListExtra("clients", groupSettingsFragment.getClients()); 63 | setResult(Activity.RESULT_OK, intent); 64 | finish(); 65 | } 66 | } 67 | 68 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/control/json/JsonSerialisable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast.control.json; 20 | 21 | import org.json.JSONObject; 22 | 23 | /** 24 | * Created by johannes on 08.01.16. 25 | */ 26 | public interface JsonSerialisable { 27 | public void fromJson(JSONObject json); 28 | 29 | public JSONObject toJson(); 30 | } 31 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/control/json/Snapclient.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast.control.json; 20 | 21 | import org.json.JSONObject; 22 | 23 | /** 24 | * Created by johannes on 06.01.16. 25 | */ 26 | public class Snapclient extends Snapcast { 27 | 28 | public Snapclient() { 29 | super(); 30 | } 31 | 32 | public Snapclient(JSONObject json) { 33 | super(json); 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/de/badaix/snapcast/control/json/Snapserver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of snapcast 3 | * Copyright (C) 2014-2017 Johannes Pohl 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | package de.badaix.snapcast.control.json; 20 | 21 | import android.util.Log; 22 | 23 | import org.json.JSONException; 24 | import org.json.JSONObject; 25 | 26 | /** 27 | * Created by johannes on 06.01.16. 28 | */ 29 | public class Snapserver extends Snapcast { 30 | private static final String TAG = "Snapserver"; 31 | 32 | int controlProtocolVersion = 1; 33 | 34 | public Snapserver() { 35 | super(); 36 | } 37 | 38 | public Snapserver(JSONObject json) { 39 | super(json); 40 | } 41 | 42 | @Override 43 | public void fromJson(JSONObject json) { 44 | try { 45 | super.fromJson(json); 46 | controlProtocolVersion = json.getInt("controlProtocolVersion"); 47 | } catch (JSONException e) { 48 | Log.wtf(TAG, "Getting from JSON", e); 49 | } 50 | } 51 | 52 | @Override 53 | public JSONObject toJson() { 54 | JSONObject json = super.toJson(); 55 | try { 56 | json.put("controlProtocolVersion", controlProtocolVersion); 57 | } catch (JSONException e) { 58 | Log.wtf(TAG, "Saving to JSON", e); 59 | } 60 | return json; 61 | } 62 | 63 | public int getControlProtocolVersion() { 64 | return controlProtocolVersion; 65 | } 66 | 67 | @Override 68 | public boolean equals(Object o) { 69 | if (this == o) return true; 70 | if (o == null || getClass() != o.getClass()) return false; 71 | 72 | Snapserver that = (Snapserver) o; 73 | 74 | if (controlProtocolVersion != that.controlProtocolVersion) return false; 75 | return super.equals(o); 76 | } 77 | 78 | @Override 79 | public int hashCode() { 80 | int result = super.hashCode(); 81 | result = 31 * result + controlProtocolVersion; 82 | return result; 83 | } 84 | } 85 | 86 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/java/uk/org/jaggard/snapcast/.gitignore: -------------------------------------------------------------------------------- 1 | AdDetails.java 2 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_media_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_media_pause.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_media_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_media_play.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_media_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_media_stop.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_mute_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_mute_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_settings_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_settings_black_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-hdpi/ic_speaker_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-hdpi/ic_speaker_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_media_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_media_pause.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_media_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_media_play.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_media_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_media_stop.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_mute_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_mute_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_settings_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_settings_black_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-mdpi/ic_speaker_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-mdpi/ic_speaker_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_media_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_media_pause.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_media_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_media_play.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_media_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_media_stop.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_mute_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_mute_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_settings_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_settings_black_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xhdpi/ic_speaker_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xhdpi/ic_speaker_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_media_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_media_pause.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_media_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_media_play.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_media_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_media_stop.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_mute_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_mute_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxhdpi/ic_speaker_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxhdpi/ic_speaker_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxxhdpi/ic_mute_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxxhdpi/ic_mute_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable-xxxhdpi/ic_speaker_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/drawable-xxxhdpi/ic_speaker_icon.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/drawable/ic_menu_overflow_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 25 | 28 | 29 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/layout/activity_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 25 | 26 | 30 | 31 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/layout/dialog_local_server_settings.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 25 | 26 | 29 | 30 | 36 | 37 | 45 | 46 | 47 | 50 | 51 | 57 | 58 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/layout/fragment_group_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 25 | 26 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/menu/menu_snapcast.xml: -------------------------------------------------------------------------------- 1 | 5 | 12 | 17 | 18 | 23 | 29 | 34 | 40 | 41 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/menu/menu_snapcast_server.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 23 | 24 | 31 | 32 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mjaggard/snapcast/d878983a1a6b2bfa7cb92dd7cc05070bb4c7540a/android/Snapcast/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Snapcast 3 | Snapclient gestartet 4 | Snapclient 5 | Snapclient läuft… 6 | Info… 7 | Stop 8 | Details 9 | Löschen 10 | Gruppe 11 | 12 | Snapcast 13 | 14 | Über… 15 | Einstellungen… 16 | Suche nach Server 17 | Aktualisiere Client-Liste 18 | Verstecke offline Clients 19 | 20 | Client Einstellungen 21 | Name 22 | MAC 23 | ID 24 | IP 25 | Host 26 | Betriebssystem 27 | Version 28 | Zuletzt gesehen 29 | Latenz 30 | Online 31 | 32 | Gruppe 33 | 34 | Play/Stop 35 | Client %1$s gelöscht 36 | Stream ist nicht in nativer sample rate: %1$d\nNative sample rate: %2$d 37 | Streams in nicht-nativer sample rate sind evtl. nicht synchron 38 | Rückgängig 39 | Über 40 | files/about.html 41 | Über 42 | 43 | Stream 44 | Warnung 45 | Dies ist ein Test-Client.\nNicht für den Produktiv-Einsatz vorgesehen. 46 | Host 47 | Stream-Port 48 | Control-Port 49 | Snapserver host 50 | Auto-start Snapclient 51 | Verbinden 52 | 53 | 54 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Snapcast 3 | Snapclient 開始しました 4 | Snapclient 5 | Snapclient は実行中です… 6 | 情報… 7 | 停止 8 | 詳細 9 | 削除 10 | 11 | Snapcast 12 | 13 | アプリについて… 14 | 設定… 15 | サーバーのスキャン 16 | クライアント一覧の更新 17 | オフラインのクライアントを非表示 18 | 19 | クライアント設定 20 | 名前 21 | MAC 22 | IP 23 | ホスト 24 | OS 25 | バージョン 26 | 最後の視聴 27 | レイテンシー 28 | オンライン 29 | 再生/停止 30 | クライアント %1$s を削除しました 31 | ストリームはネイティブのサンプリングレートではありません: %1$d\nネイティブのサンプリングレート: %2$d 32 | ネイティブのサンプリングレートではないストリームは同期して再生されないことがあります 33 | 元に戻す 34 | アプリについて 35 | files/about.html 36 | アプリについて 37 | 38 | ストリーム 39 | 警告 40 | これはテストクライアントです。\n正式利用用途ではありません。 41 | ホスト 42 | ストリーム ポート 43 | コントロール ポート 44 | Snapserver ホスト 45 | Snapclient を自動開始 46 | 47 | 48 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | > 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #607D8B 4 | #455A64 5 | #FF4081 6 | #ff999999 7 | #ffffffff 8 | #8c666666 9 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 16dp 7 | 8dp 8 | 9 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 2 5 | 3 6 | -------------------------------------------------------------------------------- /android/Snapcast/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | #EEEEEE 3 | #37474F 4 | 5 | 11 | 12 | 16 | 17 |