From 26481454384bbe28d8cf90f8ce15334ce8bf53d9 Mon Sep 17 00:00:00 2001 From: Joshua Bahnsen Date: Tue, 4 Jun 2013 00:37:53 -0700 Subject: [PATCH] Added Videos, Bluetooth notifications are optional Added getVideo() support New view for videos Bluetooth notifications are now optional Bluetooth album art is now optional and off by default Bluetooth album art is now 300 px instead of 500 px when enabled Fixed swipe to change track on album art --- AndroidManifest.xml | 4 +- assets/fonts/Roboto-Regular.ttf | Bin 74656 -> 0 bytes gen/com/handmark/pulltorefresh/library/R.java | 10 +- .../thejoshwa/ultrasonic/androidapp/R.java | 712 +++++++++--------- res/layout/main_buttons.xml | 10 + res/layout/video_details.xml | 40 + res/layout/video_list_item.xml | 30 + res/values-fr/strings.xml | 8 +- res/values-hu/strings.xml | 6 + res/values/strings.xml | 14 +- res/xml/settings.xml | 43 +- .../androidapp/activity/BookmarkActivity.java | 1 - .../androidapp/activity/DownloadActivity.java | 54 +- .../androidapp/activity/HelpActivity.java | 1 - .../androidapp/activity/MainActivity.java | 14 +- .../androidapp/activity/SearchActivity.java | 1 - .../activity/SelectAlbumActivity.java | 41 +- .../androidapp/activity/SettingsActivity.java | 22 + .../ultrasonic/androidapp/domain/Indexes.java | 1 - .../service/CachedMusicService.java | 17 +- .../androidapp/service/DownloadFile.java | 1 - .../service/DownloadServiceImpl.java | 10 +- .../DownloadServiceLifecycleSupport.java | 1 - .../androidapp/service/MusicService.java | 2 + .../androidapp/service/RESTMusicService.java | 14 +- .../service/parser/MusicDirectoryParser.java | 2 +- .../ultrasonic/androidapp/util/Constants.java | 3 + .../ultrasonic/androidapp/util/FileUtil.java | 1 - .../androidapp/util/StreamProxy.java | 2 - .../ultrasonic/androidapp/util/Util.java | 57 +- .../androidapp/view/SongListAdapter.java | 28 + .../ultrasonic/androidapp/view/SongView.java | 53 +- 32 files changed, 743 insertions(+), 460 deletions(-) delete mode 100644 assets/fonts/Roboto-Regular.ttf create mode 100644 res/layout/video_details.xml create mode 100644 res/layout/video_list_item.xml create mode 100644 src/com/thejoshwa/ultrasonic/androidapp/view/SongListAdapter.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 55e68c14..2804753d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ + a:versionCode="28" + a:versionName="1.2.0.1" > diff --git a/assets/fonts/Roboto-Regular.ttf b/assets/fonts/Roboto-Regular.ttf deleted file mode 100644 index 465dfc19dd25d9bae3b598f9c61e3dbfc89de6ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74656 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%0AgW-B=HqwzhQzfBBo%uHOK`5z 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 RuWLn!R{fSJcQ~El{|hcYm)rmV diff --git a/gen/com/handmark/pulltorefresh/library/R.java b/gen/com/handmark/pulltorefresh/library/R.java index 248f271f..4a375208 100644 --- a/gen/com/handmark/pulltorefresh/library/R.java +++ b/gen/com/handmark/pulltorefresh/library/R.java @@ -51,7 +51,7 @@ public final class R { public static final class id { public static final int both = 0x7f060003; public static final int disabled = 0x7f060000; - public static final int fl_inner = 0x7f06008e; + public static final int fl_inner = 0x7f060090; public static final int flip = 0x7f060008; public static final int gridview = 0x7f060009; public static final int manualOnly = 0x7f060004; @@ -59,10 +59,10 @@ public final class R { public static final int pullFromEnd = 0x7f060002; public static final int pullFromStart = 0x7f060001; public static final int pullUpFromBottom = 0x7f060006; - public static final int pull_to_refresh_image = 0x7f06008f; - public static final int pull_to_refresh_progress = 0x7f060090; - public static final int pull_to_refresh_sub_text = 0x7f060092; - public static final int pull_to_refresh_text = 0x7f060091; + public static final int pull_to_refresh_image = 0x7f060091; + public static final int pull_to_refresh_progress = 0x7f060092; + public static final int pull_to_refresh_sub_text = 0x7f060094; + public static final int pull_to_refresh_text = 0x7f060093; public static final int rotate = 0x7f060007; public static final int scrollview = 0x7f06000b; public static final int webview = 0x7f06000a; diff --git a/gen/com/thejoshwa/ultrasonic/androidapp/R.java b/gen/com/thejoshwa/ultrasonic/androidapp/R.java index 858f9257..fb52720e 100644 --- a/gen/com/thejoshwa/ultrasonic/androidapp/R.java +++ b/gen/com/thejoshwa/ultrasonic/androidapp/R.java @@ -614,23 +614,23 @@ or to a theme attribute in the form "?[package:][type:]na public static final int album=0x7f060028; public static final int album_artist=0x7f06001e; public static final int album_coverart=0x7f06001c; - public static final int album_menu_download=0x7f0600cb; - public static final int album_menu_pin=0x7f0600c9; - public static final int album_menu_play_last=0x7f0600c8; - public static final int album_menu_play_next=0x7f0600c7; - public static final int album_menu_play_now=0x7f0600c6; - public static final int album_menu_unpin=0x7f0600ca; + public static final int album_menu_download=0x7f0600cd; + public static final int album_menu_pin=0x7f0600cb; + public static final int album_menu_play_last=0x7f0600ca; + public static final int album_menu_play_next=0x7f0600c9; + public static final int album_menu_play_now=0x7f0600c8; + public static final int album_menu_unpin=0x7f0600cc; public static final int album_star=0x7f06001f; public static final int album_title=0x7f06001d; public static final int appwidget_coverart=0x7f060020; public static final int appwidget_top=0x7f060022; public static final int artist=0x7f060024; - public static final int artist_menu_download=0x7f0600d1; - public static final int artist_menu_pin=0x7f0600cf; - public static final int artist_menu_play_last=0x7f0600ce; - public static final int artist_menu_play_next=0x7f0600cd; - public static final int artist_menu_play_now=0x7f0600cc; - public static final int artist_menu_unpin=0x7f0600d0; + public static final int artist_menu_download=0x7f0600d3; + public static final int artist_menu_pin=0x7f0600d1; + public static final int artist_menu_play_last=0x7f0600d0; + public static final int artist_menu_play_next=0x7f0600cf; + public static final int artist_menu_play_now=0x7f0600ce; + public static final int artist_menu_unpin=0x7f0600d2; public static final int both=0x7f060003; public static final int chat_edittext=0x7f06002a; public static final int chat_entries=0x7f060029; @@ -642,7 +642,7 @@ or to a theme attribute in the form "?[package:][type:]na public static final int control_next=0x7f060027; public static final int control_play=0x7f060026; public static final int control_previous=0x7f060025; - public static final int control_stop=0x7f060084; + public static final int control_stop=0x7f060086; public static final int disabled=0x7f060000; public static final int download_album=0x7f06003e; public static final int download_album_art_image=0x7f060034; @@ -653,28 +653,28 @@ or to a theme attribute in the form "?[package:][type:]na public static final int download_control_layout=0x7f060030; public static final int download_duration=0x7f06003b; public static final int download_empty=0x7f060044; - public static final int download_equalizer=0x7f0600bd; + public static final int download_equalizer=0x7f0600bf; public static final int download_items=0x7f060038; - public static final int download_jukebox=0x7f0600bf; + public static final int download_jukebox=0x7f0600c1; public static final int download_list=0x7f060045; - public static final int download_next=0x7f060072; - public static final int download_pause=0x7f060070; + public static final int download_next=0x7f060074; + public static final int download_pause=0x7f060072; public static final int download_playlist_flipper=0x7f060032; public static final int download_position=0x7f060039; - public static final int download_previous=0x7f06006e; + public static final int download_previous=0x7f060070; public static final int download_progress_bar=0x7f060046; public static final int download_remove_all=0x7f060041; - public static final int download_repeat=0x7f060073; + public static final int download_repeat=0x7f060075; public static final int download_save_playlist=0x7f060042; - public static final int download_shuffle=0x7f06006d; + public static final int download_shuffle=0x7f06006f; public static final int download_song_title=0x7f060037; public static final int download_star=0x7f060043; - public static final int download_start=0x7f06006f; - public static final int download_stop=0x7f060071; + public static final int download_start=0x7f060071; + public static final int download_stop=0x7f060073; public static final int download_toggle_list=0x7f06003f; public static final int download_total_duration=0x7f06003c; public static final int download_track=0x7f06003a; - public static final int download_visualizer=0x7f0600be; + public static final int download_visualizer=0x7f0600c0; public static final int download_visualizer_view_layout=0x7f060035; public static final int equalizer_bar=0x7f06004c; public static final int equalizer_frequency=0x7f06004a; @@ -682,14 +682,14 @@ or to a theme attribute in the form "?[package:][type:]na public static final int equalizer_enabled=0x7f060047; public static final int equalizer_layout=0x7f060048; public static final int equalizer_preset=0x7f060049; - public static final int fl_inner=0x7f06008e; + public static final int fl_inner=0x7f060090; public static final int flip=0x7f060008; - public static final int get_playlist_comment=0x7f0600b9; - public static final int get_playlist_comment_label=0x7f0600b8; - public static final int get_playlist_name=0x7f0600b7; - public static final int get_playlist_name_label=0x7f0600b6; - public static final int get_playlist_public=0x7f0600bb; - public static final int get_playlist_public_label=0x7f0600ba; + public static final int get_playlist_comment=0x7f0600bb; + public static final int get_playlist_comment_label=0x7f0600ba; + public static final int get_playlist_name=0x7f0600b9; + public static final int get_playlist_name_label=0x7f0600b8; + public static final int get_playlist_public=0x7f0600bd; + public static final int get_playlist_public_label=0x7f0600bc; public static final int gridview=0x7f060009; public static final int help_back=0x7f06004e; public static final int help_buttons=0x7f06004d; @@ -721,10 +721,12 @@ or to a theme attribute in the form "?[package:][type:]na public static final int main_list=0x7f060058; public static final int main_music=0x7f06005d; public static final int main_select_server=0x7f06005a; - public static final int main_shuffle=0x7f0600bc; + public static final int main_shuffle=0x7f0600be; public static final int main_songs=0x7f060061; public static final int main_songs_button=0x7f060062; public static final int main_songs_starred=0x7f060063; + public static final int main_videos=0x7f06006e; + public static final int main_videos_title=0x7f06006d; public static final int manualOnly=0x7f060004; /** Used with View#setTag(int) to specify a position for the active view. */ @@ -744,108 +746,108 @@ or to a theme attribute in the form "?[package:][type:]na /** The ID of the menu container. */ public static final int md__menu=0x7f06000f; - public static final int menu_about=0x7f06007f; + public static final int menu_about=0x7f060081; public static final int menu_album=0x7f060012; - public static final int menu_bookmarks=0x7f06007a; - public static final int menu_browse=0x7f060077; - public static final int menu_chat=0x7f06007b; - public static final int menu_common=0x7f06007d; - public static final int menu_exit=0x7f060080; - public static final int menu_home=0x7f060076; - public static final int menu_lyrics=0x7f0600c2; - public static final int menu_main=0x7f060074; - public static final int menu_navigation=0x7f060075; - public static final int menu_now_playing=0x7f06007c; - public static final int menu_playlists=0x7f060079; - public static final int menu_remove=0x7f0600c3; - public static final int menu_screen_on_off=0x7f0600c0; - public static final int menu_search=0x7f060078; - public static final int menu_settings=0x7f06007e; - public static final int menu_show_album=0x7f0600c1; - public static final int menu_shuffle=0x7f0600c4; - public static final int notification_image=0x7f060082; - public static final int now_playing=0x7f060085; - public static final int now_playing_artist=0x7f060089; - public static final int now_playing_control_play=0x7f06008a; - public static final int now_playing_image=0x7f060087; - public static final int now_playing_trackname=0x7f060088; - public static final int now_playing_view=0x7f060086; - public static final int play_video_contents=0x7f06008b; - public static final int playlist_info=0x7f0600d2; - public static final int playlist_menu_delete=0x7f0600d9; - public static final int playlist_menu_download=0x7f0600d7; - public static final int playlist_menu_pin=0x7f0600d5; - public static final int playlist_menu_play_now=0x7f0600d3; - public static final int playlist_menu_play_shuffled=0x7f0600d4; - public static final int playlist_menu_unpin=0x7f0600d6; - public static final int playlist_name=0x7f06008c; - public static final int playlist_update_info=0x7f0600d8; - public static final int progress_message=0x7f06008d; + public static final int menu_bookmarks=0x7f06007c; + public static final int menu_browse=0x7f060079; + public static final int menu_chat=0x7f06007d; + public static final int menu_common=0x7f06007f; + public static final int menu_exit=0x7f060082; + public static final int menu_home=0x7f060078; + public static final int menu_lyrics=0x7f0600c4; + public static final int menu_main=0x7f060076; + public static final int menu_navigation=0x7f060077; + public static final int menu_now_playing=0x7f06007e; + public static final int menu_playlists=0x7f06007b; + public static final int menu_remove=0x7f0600c5; + public static final int menu_screen_on_off=0x7f0600c2; + public static final int menu_search=0x7f06007a; + public static final int menu_settings=0x7f060080; + public static final int menu_show_album=0x7f0600c3; + public static final int menu_shuffle=0x7f0600c6; + public static final int notification_image=0x7f060084; + public static final int now_playing=0x7f060087; + public static final int now_playing_artist=0x7f06008b; + public static final int now_playing_control_play=0x7f06008c; + public static final int now_playing_image=0x7f060089; + public static final int now_playing_trackname=0x7f06008a; + public static final int now_playing_view=0x7f060088; + public static final int play_video_contents=0x7f06008d; + public static final int playlist_info=0x7f0600d4; + public static final int playlist_menu_delete=0x7f0600db; + public static final int playlist_menu_download=0x7f0600d9; + public static final int playlist_menu_pin=0x7f0600d7; + public static final int playlist_menu_play_now=0x7f0600d5; + public static final int playlist_menu_play_shuffled=0x7f0600d6; + public static final int playlist_menu_unpin=0x7f0600d8; + public static final int playlist_name=0x7f06008e; + public static final int playlist_update_info=0x7f0600da; + public static final int progress_message=0x7f06008f; public static final int pullDownFromTop=0x7f060005; public static final int pullFromEnd=0x7f060002; public static final int pullFromStart=0x7f060001; public static final int pullUpFromBottom=0x7f060006; - public static final int pull_to_refresh_image=0x7f06008f; - public static final int pull_to_refresh_progress=0x7f060090; - public static final int pull_to_refresh_sub_text=0x7f060092; - public static final int pull_to_refresh_text=0x7f060091; + public static final int pull_to_refresh_image=0x7f060091; + public static final int pull_to_refresh_progress=0x7f060092; + public static final int pull_to_refresh_sub_text=0x7f060094; + public static final int pull_to_refresh_text=0x7f060093; public static final int rotate=0x7f060007; - public static final int save_playlist_name=0x7f060094; - public static final int save_playlist_root=0x7f060093; + public static final int save_playlist_name=0x7f060096; + public static final int save_playlist_root=0x7f060095; public static final int scrollview=0x7f06000b; - public static final int search_albums=0x7f060098; - public static final int search_artists=0x7f060097; - public static final int search_list=0x7f060095; - public static final int search_more_albums=0x7f06009b; - public static final int search_more_artists=0x7f06009a; - public static final int search_more_songs=0x7f06009c; - public static final int search_search=0x7f060096; - public static final int search_songs=0x7f060099; - public static final int select_album_art=0x7f06009f; - public static final int select_album_artist=0x7f0600a1; + public static final int search_albums=0x7f06009a; + public static final int search_artists=0x7f060099; + public static final int search_list=0x7f060097; + public static final int search_more_albums=0x7f06009d; + public static final int search_more_artists=0x7f06009c; + public static final int search_more_songs=0x7f06009e; + public static final int search_search=0x7f060098; + public static final int search_songs=0x7f06009b; + public static final int select_album_art=0x7f0600a1; + public static final int select_album_artist=0x7f0600a3; public static final int select_album_delete=0x7f06001a; public static final int select_album_download=0x7f060019; - public static final int select_album_duration=0x7f0600a4; - public static final int select_album_empty=0x7f06009d; - public static final int select_album_entries=0x7f06009e; - public static final int select_album_genre=0x7f0600a2; + public static final int select_album_duration=0x7f0600a6; + public static final int select_album_empty=0x7f06009f; + public static final int select_album_entries=0x7f0600a0; + public static final int select_album_genre=0x7f0600a4; public static final int select_album_more=0x7f06001b; public static final int select_album_pin=0x7f060017; - public static final int select_album_play_all=0x7f0600c5; + public static final int select_album_play_all=0x7f0600c7; public static final int select_album_play_last=0x7f060016; public static final int select_album_play_next=0x7f060015; public static final int select_album_play_now=0x7f060014; public static final int select_album_select=0x7f060013; - public static final int select_album_song_count=0x7f0600a3; - public static final int select_album_title=0x7f0600a0; + public static final int select_album_song_count=0x7f0600a5; + public static final int select_album_title=0x7f0600a2; public static final int select_album_unpin=0x7f060018; - public static final int select_artist_folder=0x7f0600a6; - public static final int select_artist_folder_1=0x7f0600a7; - public static final int select_artist_folder_2=0x7f0600a8; - public static final int select_artist_list=0x7f0600a5; - public static final int select_genre_empty=0x7f0600a9; - public static final int select_genre_list=0x7f0600aa; - public static final int select_playlist_empty=0x7f0600ab; - public static final int select_playlist_list=0x7f0600ac; - public static final int song_artist=0x7f0600b0; - public static final int song_check=0x7f0600b2; - public static final int song_duration=0x7f0600b1; - public static final int song_menu_download=0x7f0600df; - public static final int song_menu_pin=0x7f0600dd; - public static final int song_menu_play_last=0x7f0600dc; - public static final int song_menu_play_next=0x7f0600db; - public static final int song_menu_play_now=0x7f0600da; - public static final int song_menu_unpin=0x7f0600de; - public static final int song_star=0x7f0600b3; - public static final int song_status=0x7f0600af; - public static final int song_title=0x7f0600ae; - public static final int song_track=0x7f0600ad; - public static final int statusbar=0x7f060081; - public static final int tab_progress=0x7f0600b4; - public static final int tab_progress_message=0x7f0600b5; + public static final int select_artist_folder=0x7f0600a8; + public static final int select_artist_folder_1=0x7f0600a9; + public static final int select_artist_folder_2=0x7f0600aa; + public static final int select_artist_list=0x7f0600a7; + public static final int select_genre_empty=0x7f0600ab; + public static final int select_genre_list=0x7f0600ac; + public static final int select_playlist_empty=0x7f0600ad; + public static final int select_playlist_list=0x7f0600ae; + public static final int song_artist=0x7f0600b2; + public static final int song_check=0x7f0600b4; + public static final int song_duration=0x7f0600b3; + public static final int song_menu_download=0x7f0600e1; + public static final int song_menu_pin=0x7f0600df; + public static final int song_menu_play_last=0x7f0600de; + public static final int song_menu_play_next=0x7f0600dd; + public static final int song_menu_play_now=0x7f0600dc; + public static final int song_menu_unpin=0x7f0600e0; + public static final int song_star=0x7f0600b5; + public static final int song_status=0x7f0600b1; + public static final int song_title=0x7f0600b0; + public static final int song_track=0x7f0600af; + public static final int statusbar=0x7f060083; + public static final int tab_progress=0x7f0600b6; + public static final int tab_progress_message=0x7f0600b7; public static final int title=0x7f060023; public static final int toast_layout_root=0x7f060052; - public static final int trackname=0x7f060083; + public static final int trackname=0x7f060085; public static final int webview=0x7f06000a; } public static final class integer { @@ -900,6 +902,8 @@ or to a theme attribute in the form "?[package:][type:]na public static final int song_list_item=0x7f03002c; public static final int tab_progress=0x7f03002d; public static final int update_playlist=0x7f03002e; + public static final int video_details=0x7f03002f; + public static final int video_list_item=0x7f030030; } public static final class menu { public static final int main=0x7f0e0000; @@ -1026,35 +1030,36 @@ or to a theme attribute in the form "?[package:][type:]na public static final int main_songs_random=0x7f08006b; public static final int main_songs_starred=0x7f08006c; public static final int main_songs_title=0x7f08006d; - public static final int main_welcome_text=0x7f08006e; - public static final int main_welcome_title=0x7f08006f; - public static final int menu_about=0x7f080070; - public static final int menu_add_playlist=0x7f080071; - public static final int menu_common=0x7f080072; - public static final int menu_deleted_playlist=0x7f080073; - public static final int menu_deleted_playlist_error=0x7f080074; - public static final int menu_exit=0x7f080075; - public static final int menu_help=0x7f080076; - public static final int menu_navigation=0x7f080077; - public static final int menu_remove_playlist=0x7f080078; - public static final int menu_search=0x7f080079; - public static final int menu_settings=0x7f08007a; - public static final int music_library_label=0x7f08007b; - public static final int music_library_label_offline=0x7f08007c; - public static final int music_service_retry=0x7f08007d; - public static final int parser_artist_count=0x7f08007e; - public static final int parser_not_authenticated=0x7f08007f; - public static final int parser_not_authorized=0x7f080080; - public static final int parser_reading=0x7f080081; - public static final int parser_reading_done=0x7f080082; - public static final int parser_upgrade_client=0x7f080083; - public static final int parser_upgrade_server=0x7f080084; - public static final int playlist_label=0x7f080085; - public static final int playlist_update_info=0x7f080086; - public static final int playlist_updated_info=0x7f080087; - public static final int playlist_updated_info_error=0x7f080088; - public static final int playlist_error=0x7f080089; - public static final int progress_wait=0x7f08008a; + public static final int main_videos=0x7f08006e; + public static final int main_welcome_text=0x7f08006f; + public static final int main_welcome_title=0x7f080070; + public static final int menu_about=0x7f080071; + public static final int menu_add_playlist=0x7f080072; + public static final int menu_common=0x7f080073; + public static final int menu_deleted_playlist=0x7f080074; + public static final int menu_deleted_playlist_error=0x7f080075; + public static final int menu_exit=0x7f080076; + public static final int menu_help=0x7f080077; + public static final int menu_navigation=0x7f080078; + public static final int menu_remove_playlist=0x7f080079; + public static final int menu_search=0x7f08007a; + public static final int menu_settings=0x7f08007b; + public static final int music_library_label=0x7f08007c; + public static final int music_library_label_offline=0x7f08007d; + public static final int music_service_retry=0x7f08007e; + public static final int parser_artist_count=0x7f08007f; + public static final int parser_not_authenticated=0x7f080080; + public static final int parser_not_authorized=0x7f080081; + public static final int parser_reading=0x7f080082; + public static final int parser_reading_done=0x7f080083; + public static final int parser_upgrade_client=0x7f080084; + public static final int parser_upgrade_server=0x7f080085; + public static final int playlist_label=0x7f080086; + public static final int playlist_update_info=0x7f080087; + public static final int playlist_updated_info=0x7f080088; + public static final int playlist_updated_info_error=0x7f080089; + public static final int playlist_error=0x7f08008a; + public static final int progress_wait=0x7f08008b; /** Just use standard Pull Down String when pulling up. These can be set for languages which require it Just use standard Pull Down String when pulling up. These can be set for languages which require it */ @@ -1064,213 +1069,218 @@ or to a theme attribute in the form "?[package:][type:]na public static final int pull_to_refresh_pull_label=0x7f080000; public static final int pull_to_refresh_refreshing_label=0x7f080002; public static final int pull_to_refresh_release_label=0x7f080001; - public static final int removed_playlist=0x7f08008b; - public static final int search_albums=0x7f08008c; - public static final int search_artists=0x7f08008d; - public static final int search_label=0x7f08008e; - public static final int search_more=0x7f08008f; - public static final int search_no_match=0x7f080090; - public static final int search_search=0x7f080091; - public static final int search_songs=0x7f080092; - public static final int search_title=0x7f080093; - public static final int select_album_donate_dialog_0_trial_days_left=0x7f080094; - public static final int select_album_donate_dialog_later=0x7f080095; - public static final int select_album_donate_dialog_message=0x7f080096; - public static final int select_album_donate_dialog_now=0x7f080097; - public static final int select_album_empty=0x7f080098; - public static final int select_album_more=0x7f080099; - public static final int select_album_n_selected=0x7f08009a; - public static final int select_album_n_unselected=0x7f08009b; - public static final int select_album_no_network=0x7f08009c; - public static final int select_album_no_sdcard=0x7f08009d; - public static final int select_album_not_licensed=0x7f08009e; - public static final int select_album_offline=0x7f08009f; - public static final int select_album_play_all=0x7f0800a0; - public static final int select_album_searching=0x7f0800a1; - public static final int select_album_select=0x7f0800a2; - public static final int select_artist_all_folders=0x7f0800a3; - public static final int select_artist_empty=0x7f0800a4; - public static final int select_artist_folder=0x7f0800a5; - public static final int select_artist_refresh=0x7f0800a6; - public static final int select_genre_empty=0x7f0800a7; - public static final int select_playlist_empty=0x7f0800a8; - public static final int service_connecting=0x7f0800a9; - public static final int settings_appearance_title=0x7f0800aa; - public static final int settings_buffer_length=0x7f0800ab; - public static final int settings_buffer_length_0=0x7f0800ac; - public static final int settings_buffer_length_1=0x7f0800ad; - public static final int settings_buffer_length_10=0x7f0800ae; - public static final int settings_buffer_length_12=0x7f0800af; - public static final int settings_buffer_length_120=0x7f0800b0; - public static final int settings_buffer_length_15=0x7f0800b1; - public static final int settings_buffer_length_2=0x7f0800b2; - public static final int settings_buffer_length_20=0x7f0800b3; - public static final int settings_buffer_length_30=0x7f0800b4; - public static final int settings_buffer_length_5=0x7f0800b5; - public static final int settings_buffer_length_60=0x7f0800b6; - public static final int settings_buffer_length_8=0x7f0800b7; - public static final int settings_cache_location=0x7f0800b8; - public static final int settings_cache_location_error=0x7f0800b9; - public static final int settings_cache_size=0x7f0800ba; - public static final int settings_cache_size_100=0x7f0800bb; - public static final int settings_cache_size_1000=0x7f0800bc; - public static final int settings_cache_size_10000=0x7f0800bd; - public static final int settings_cache_size_200=0x7f0800be; - public static final int settings_cache_size_2000=0x7f0800bf; - public static final int settings_cache_size_20000=0x7f0800c0; - public static final int settings_cache_size_500=0x7f0800c1; - public static final int settings_cache_size_5000=0x7f0800c2; - public static final int settings_cache_size_unlimited=0x7f0800c3; - public static final int settings_cache_title=0x7f0800c4; - public static final int settings_chat_refresh=0x7f0800c5; - public static final int settings_clear_bookmark=0x7f0800c6; - public static final int settings_clear_bookmark_summary=0x7f0800c7; - public static final int settings_clear_playlist=0x7f0800c8; - public static final int settings_clear_playlist_summary=0x7f0800c9; - public static final int settings_clear_search_history=0x7f0800ca; - public static final int settings_connection_failure=0x7f0800cb; - public static final int settings_default_albums=0x7f0800cc; - public static final int settings_default_artists=0x7f0800cd; - public static final int settings_default_songs=0x7f0800ce; - public static final int settings_directory_cache_time=0x7f0800cf; - public static final int settings_directory_cache_time_0=0x7f0800d0; - public static final int settings_directory_cache_time_1=0x7f0800d1; - public static final int settings_directory_cache_time_10=0x7f0800d2; - public static final int settings_directory_cache_time_2=0x7f0800d3; - public static final int settings_directory_cache_time_30=0x7f0800d4; - public static final int settings_directory_cache_time_5=0x7f0800d5; - public static final int settings_directory_cache_time_60=0x7f0800d6; - public static final int settings_disc_sort=0x7f0800d7; - public static final int settings_disc_sort_summary=0x7f0800d8; - public static final int settings_display_bitrate=0x7f0800d9; - public static final int settings_display_bitrate_summary=0x7f0800da; - public static final int settings_download_transition=0x7f0800db; - public static final int settings_download_transition_summary=0x7f0800dc; - public static final int settings_gapless_playback=0x7f0800dd; - public static final int settings_gapless_playback_summary=0x7f0800de; - public static final int settings_hide_media_summary=0x7f0800df; - public static final int settings_hide_media_title=0x7f0800e0; - public static final int settings_hide_media_toast=0x7f0800e1; - public static final int settings_increment_time=0x7f0800e2; - public static final int settings_invalid_url=0x7f0800e3; - public static final int settings_invalid_username=0x7f0800e4; - public static final int settings_max_albums=0x7f0800e5; - public static final int settings_max_artists=0x7f0800e6; - public static final int settings_max_bitrate_112=0x7f0800e7; - public static final int settings_max_bitrate_128=0x7f0800e8; - public static final int settings_max_bitrate_160=0x7f0800e9; - public static final int settings_max_bitrate_192=0x7f0800ea; - public static final int settings_max_bitrate_256=0x7f0800eb; - public static final int settings_max_bitrate_32=0x7f0800ec; - public static final int settings_max_bitrate_320=0x7f0800ed; - public static final int settings_max_bitrate_64=0x7f0800ee; - public static final int settings_max_bitrate_80=0x7f0800ef; - public static final int settings_max_bitrate_96=0x7f0800f0; - public static final int settings_max_bitrate_mobile=0x7f0800f1; - public static final int settings_max_bitrate_unlimited=0x7f0800f2; - public static final int settings_max_bitrate_wifi=0x7f0800f3; - public static final int settings_max_songs=0x7f0800f4; - public static final int settings_media_button_summary=0x7f0800f5; - public static final int settings_media_button_title=0x7f0800f6; - public static final int settings_network_timeout=0x7f0800f7; - public static final int settings_network_timeout_105000=0x7f0800f8; - public static final int settings_network_timeout_120000=0x7f0800f9; - public static final int settings_network_timeout_15000=0x7f0800fa; - public static final int settings_network_timeout_30000=0x7f0800fb; - public static final int settings_network_timeout_45000=0x7f0800fc; - public static final int settings_network_timeout_60000=0x7f0800fd; - public static final int settings_network_timeout_75000=0x7f0800fe; - public static final int settings_network_timeout_90000=0x7f0800ff; - public static final int settings_network_title=0x7f080100; - public static final int settings_other_title=0x7f080101; - public static final int settings_playback_control_title=0x7f080102; - public static final int settings_preload=0x7f080103; - public static final int settings_preload_1=0x7f080104; - public static final int settings_preload_10=0x7f080105; - public static final int settings_preload_2=0x7f080106; - public static final int settings_preload_3=0x7f080107; - public static final int settings_preload_5=0x7f080108; - public static final int settings_preload_unlimited=0x7f080109; - public static final int settings_screen_lit_summary=0x7f08010a; - public static final int settings_screen_lit_title=0x7f08010b; - public static final int settings_scrobble_summary=0x7f08010c; - public static final int settings_scrobble_title=0x7f08010d; - public static final int settings_search_1=0x7f08010e; - public static final int settings_search_10=0x7f08010f; - public static final int settings_search_100=0x7f080110; - public static final int settings_search_15=0x7f080111; - public static final int settings_search_20=0x7f080112; - public static final int settings_search_25=0x7f080113; - public static final int settings_search_250=0x7f080114; - public static final int settings_search_3=0x7f080115; - public static final int settings_search_30=0x7f080116; - public static final int settings_search_40=0x7f080117; - public static final int settings_search_5=0x7f080118; - public static final int settings_search_50=0x7f080119; - public static final int settings_search_500=0x7f08011a; - public static final int settings_search_75=0x7f08011b; - public static final int settings_search_history_cleared=0x7f08011c; - public static final int settings_search_title=0x7f08011d; - public static final int settings_server_add_server=0x7f08011e; - public static final int settings_server_address=0x7f08011f; - public static final int settings_server_name=0x7f080120; - public static final int settings_server_number=0x7f080121; - public static final int settings_server_password=0x7f080122; - public static final int settings_server_remove_server=0x7f080123; - public static final int settings_server_scaling_summary=0x7f080124; - public static final int settings_server_scaling_title=0x7f080125; - public static final int settings_server_unused=0x7f080126; - public static final int settings_server_unused1=0x7f080127; - public static final int settings_server_unused2=0x7f080128; - public static final int settings_server_unused3=0x7f080129; - public static final int settings_server_username=0x7f08012a; - public static final int settings_servers_title=0x7f08012b; - public static final int settings_show_lockscreen_controls=0x7f08012c; - public static final int settings_show_lockscreen_controls_summary=0x7f08012d; - public static final int settings_show_notification=0x7f08012e; - public static final int settings_show_notification_always=0x7f08012f; - public static final int settings_show_notification_always_summary=0x7f080130; - public static final int settings_show_notification_summary=0x7f080131; - public static final int settings_show_now_playing=0x7f080132; - public static final int settings_show_now_playing_summary=0x7f080133; - public static final int settings_show_track_number=0x7f080134; - public static final int settings_show_track_number_summary=0x7f080135; - public static final int settings_test_connection_title=0x7f080136; - public static final int settings_testing_connection=0x7f080137; - public static final int settings_testing_ok=0x7f080138; - public static final int settings_testing_unlicensed=0x7f080139; - public static final int settings_theme_dark=0x7f08013a; - public static final int settings_theme_light=0x7f08013b; - public static final int settings_theme_title=0x7f08013c; - public static final int settings_title=0x7f08013d; - public static final int settings_use_folder_for_album_artist=0x7f08013e; - public static final int settings_use_folder_for_album_artist_summary=0x7f08013f; - public static final int settings_use_id3=0x7f080140; - public static final int settings_use_id3_summary=0x7f080141; - public static final int settings_use_stream_proxy=0x7f080142; - public static final int settings_use_stream_proxy_summary=0x7f080143; - public static final int settings_video_player=0x7f080145; - public static final int settings_video_title=0x7f080144; - public static final int settings_wifi_required_summary=0x7f080146; - public static final int settings_wifi_required_title=0x7f080147; - public static final int shuffle_endYear=0x7f080148; - public static final int shuffle_genre=0x7f080149; - public static final int shuffle_startYear=0x7f08014a; - public static final int song_details_all=0x7f08014b; - public static final int song_details_kbps=0x7f08014c; - public static final int updated_playlist=0x7f08014d; - public static final int updated_playlist_error=0x7f08014e; - public static final int util_bytes_format_byte=0x7f08014f; - public static final int util_bytes_format_gigabyte=0x7f080150; - public static final int util_bytes_format_kilobyte=0x7f080151; - public static final int util_bytes_format_megabyte=0x7f080152; - public static final int util_no_time=0x7f080153; - public static final int util_zero_time=0x7f080154; - public static final int video_get_mx_player_button=0x7f080156; - public static final int video_get_mx_player_text=0x7f080155; - public static final int widget_initial_text=0x7f080157; - public static final int widget_sdcard_busy=0x7f080158; - public static final int widget_sdcard_missing=0x7f080159; + public static final int removed_playlist=0x7f08008c; + public static final int search_albums=0x7f08008d; + public static final int search_artists=0x7f08008e; + public static final int search_label=0x7f08008f; + public static final int search_more=0x7f080090; + public static final int search_no_match=0x7f080091; + public static final int search_search=0x7f080092; + public static final int search_songs=0x7f080093; + public static final int search_title=0x7f080094; + public static final int select_album_donate_dialog_0_trial_days_left=0x7f080095; + public static final int select_album_donate_dialog_later=0x7f080096; + public static final int select_album_donate_dialog_message=0x7f080097; + public static final int select_album_donate_dialog_now=0x7f080098; + public static final int select_album_empty=0x7f080099; + public static final int select_album_more=0x7f08009a; + public static final int select_album_n_selected=0x7f08009b; + public static final int select_album_n_unselected=0x7f08009c; + public static final int select_album_no_network=0x7f08009d; + public static final int select_album_no_sdcard=0x7f08009e; + public static final int select_album_not_licensed=0x7f08009f; + public static final int select_album_offline=0x7f0800a0; + public static final int select_album_play_all=0x7f0800a1; + public static final int select_album_searching=0x7f0800a2; + public static final int select_album_select=0x7f0800a3; + public static final int select_artist_all_folders=0x7f0800a4; + public static final int select_artist_empty=0x7f0800a5; + public static final int select_artist_folder=0x7f0800a6; + public static final int select_artist_refresh=0x7f0800a7; + public static final int select_genre_empty=0x7f0800a8; + public static final int select_playlist_empty=0x7f0800a9; + public static final int service_connecting=0x7f0800aa; + public static final int settings_appearance_title=0x7f0800ab; + public static final int settings_buffer_length=0x7f0800ac; + public static final int settings_buffer_length_0=0x7f0800ad; + public static final int settings_buffer_length_1=0x7f0800ae; + public static final int settings_buffer_length_10=0x7f0800af; + public static final int settings_buffer_length_12=0x7f0800b0; + public static final int settings_buffer_length_120=0x7f0800b1; + public static final int settings_buffer_length_15=0x7f0800b2; + public static final int settings_buffer_length_2=0x7f0800b3; + public static final int settings_buffer_length_20=0x7f0800b4; + public static final int settings_buffer_length_30=0x7f0800b5; + public static final int settings_buffer_length_5=0x7f0800b6; + public static final int settings_buffer_length_60=0x7f0800b7; + public static final int settings_buffer_length_8=0x7f0800b8; + public static final int settings_cache_location=0x7f0800b9; + public static final int settings_cache_location_error=0x7f0800ba; + public static final int settings_cache_size=0x7f0800bb; + public static final int settings_cache_size_100=0x7f0800bc; + public static final int settings_cache_size_1000=0x7f0800bd; + public static final int settings_cache_size_10000=0x7f0800be; + public static final int settings_cache_size_200=0x7f0800bf; + public static final int settings_cache_size_2000=0x7f0800c0; + public static final int settings_cache_size_20000=0x7f0800c1; + public static final int settings_cache_size_500=0x7f0800c2; + public static final int settings_cache_size_5000=0x7f0800c3; + public static final int settings_cache_size_unlimited=0x7f0800c4; + public static final int settings_cache_title=0x7f0800c5; + public static final int settings_chat_refresh=0x7f0800c6; + public static final int settings_clear_bookmark=0x7f0800c7; + public static final int settings_clear_bookmark_summary=0x7f0800c8; + public static final int settings_clear_playlist=0x7f0800c9; + public static final int settings_clear_playlist_summary=0x7f0800ca; + public static final int settings_clear_search_history=0x7f0800cb; + public static final int settings_connection_failure=0x7f0800cc; + public static final int settings_default_albums=0x7f0800cd; + public static final int settings_default_artists=0x7f0800ce; + public static final int settings_default_songs=0x7f0800cf; + public static final int settings_directory_cache_time=0x7f0800d0; + public static final int settings_directory_cache_time_0=0x7f0800d1; + public static final int settings_directory_cache_time_1=0x7f0800d2; + public static final int settings_directory_cache_time_10=0x7f0800d3; + public static final int settings_directory_cache_time_2=0x7f0800d4; + public static final int settings_directory_cache_time_30=0x7f0800d5; + public static final int settings_directory_cache_time_5=0x7f0800d6; + public static final int settings_directory_cache_time_60=0x7f0800d7; + public static final int settings_disc_sort=0x7f0800d8; + public static final int settings_disc_sort_summary=0x7f0800d9; + public static final int settings_display_bitrate=0x7f0800da; + public static final int settings_display_bitrate_summary=0x7f0800db; + public static final int settings_download_transition=0x7f0800dc; + public static final int settings_download_transition_summary=0x7f0800dd; + public static final int settings_gapless_playback=0x7f0800de; + public static final int settings_gapless_playback_summary=0x7f0800df; + public static final int settings_hide_media_summary=0x7f0800e0; + public static final int settings_hide_media_title=0x7f0800e1; + public static final int settings_hide_media_toast=0x7f0800e2; + public static final int settings_increment_time=0x7f0800e3; + public static final int settings_invalid_url=0x7f0800e4; + public static final int settings_invalid_username=0x7f0800e5; + public static final int settings_max_albums=0x7f0800e6; + public static final int settings_max_artists=0x7f0800e7; + public static final int settings_max_bitrate_112=0x7f0800e8; + public static final int settings_max_bitrate_128=0x7f0800e9; + public static final int settings_max_bitrate_160=0x7f0800ea; + public static final int settings_max_bitrate_192=0x7f0800eb; + public static final int settings_max_bitrate_256=0x7f0800ec; + public static final int settings_max_bitrate_32=0x7f0800ed; + public static final int settings_max_bitrate_320=0x7f0800ee; + public static final int settings_max_bitrate_64=0x7f0800ef; + public static final int settings_max_bitrate_80=0x7f0800f0; + public static final int settings_max_bitrate_96=0x7f0800f1; + public static final int settings_max_bitrate_mobile=0x7f0800f2; + public static final int settings_max_bitrate_unlimited=0x7f0800f3; + public static final int settings_max_bitrate_wifi=0x7f0800f4; + public static final int settings_max_songs=0x7f0800f5; + public static final int settings_media_button_summary=0x7f0800f6; + public static final int settings_media_button_title=0x7f0800f7; + public static final int settings_network_timeout=0x7f0800f8; + public static final int settings_network_timeout_105000=0x7f0800f9; + public static final int settings_network_timeout_120000=0x7f0800fa; + public static final int settings_network_timeout_15000=0x7f0800fb; + public static final int settings_network_timeout_30000=0x7f0800fc; + public static final int settings_network_timeout_45000=0x7f0800fd; + public static final int settings_network_timeout_60000=0x7f0800fe; + public static final int settings_network_timeout_75000=0x7f0800ff; + public static final int settings_network_timeout_90000=0x7f080100; + public static final int settings_network_title=0x7f080102; + public static final int settings_notifications_title=0x7f080101; + public static final int settings_other_title=0x7f080103; + public static final int settings_playback_control_title=0x7f080104; + public static final int settings_preload=0x7f080105; + public static final int settings_preload_1=0x7f080106; + public static final int settings_preload_10=0x7f080107; + public static final int settings_preload_2=0x7f080108; + public static final int settings_preload_3=0x7f080109; + public static final int settings_preload_5=0x7f08010a; + public static final int settings_preload_unlimited=0x7f08010b; + public static final int settings_screen_lit_summary=0x7f08010c; + public static final int settings_screen_lit_title=0x7f08010d; + public static final int settings_scrobble_summary=0x7f08010e; + public static final int settings_scrobble_title=0x7f08010f; + public static final int settings_search_1=0x7f080110; + public static final int settings_search_10=0x7f080111; + public static final int settings_search_100=0x7f080112; + public static final int settings_search_15=0x7f080113; + public static final int settings_search_20=0x7f080114; + public static final int settings_search_25=0x7f080115; + public static final int settings_search_250=0x7f080116; + public static final int settings_search_3=0x7f080117; + public static final int settings_search_30=0x7f080118; + public static final int settings_search_40=0x7f080119; + public static final int settings_search_5=0x7f08011a; + public static final int settings_search_50=0x7f08011b; + public static final int settings_search_500=0x7f08011c; + public static final int settings_search_75=0x7f08011d; + public static final int settings_search_history_cleared=0x7f08011e; + public static final int settings_search_title=0x7f08011f; + public static final int settings_send_bluetooth_album_art=0x7f080121; + public static final int settings_send_bluetooth_album_art_summary=0x7f080120; + public static final int settings_send_bluetooth_notification=0x7f080123; + public static final int settings_send_bluetooth_notification_summary=0x7f080122; + public static final int settings_server_add_server=0x7f080124; + public static final int settings_server_address=0x7f080125; + public static final int settings_server_name=0x7f080126; + public static final int settings_server_number=0x7f080127; + public static final int settings_server_password=0x7f080128; + public static final int settings_server_remove_server=0x7f080129; + public static final int settings_server_scaling_summary=0x7f08012a; + public static final int settings_server_scaling_title=0x7f08012b; + public static final int settings_server_unused=0x7f08012c; + public static final int settings_server_unused1=0x7f08012d; + public static final int settings_server_unused2=0x7f08012e; + public static final int settings_server_unused3=0x7f08012f; + public static final int settings_server_username=0x7f080130; + public static final int settings_servers_title=0x7f080131; + public static final int settings_show_lockscreen_controls=0x7f080132; + public static final int settings_show_lockscreen_controls_summary=0x7f080133; + public static final int settings_show_notification=0x7f080134; + public static final int settings_show_notification_always=0x7f080135; + public static final int settings_show_notification_always_summary=0x7f080136; + public static final int settings_show_notification_summary=0x7f080137; + public static final int settings_show_now_playing=0x7f080138; + public static final int settings_show_now_playing_summary=0x7f080139; + public static final int settings_show_track_number=0x7f08013a; + public static final int settings_show_track_number_summary=0x7f08013b; + public static final int settings_test_connection_title=0x7f08013c; + public static final int settings_testing_connection=0x7f08013d; + public static final int settings_testing_ok=0x7f08013e; + public static final int settings_testing_unlicensed=0x7f08013f; + public static final int settings_theme_dark=0x7f080140; + public static final int settings_theme_light=0x7f080141; + public static final int settings_theme_title=0x7f080142; + public static final int settings_title=0x7f080143; + public static final int settings_use_folder_for_album_artist=0x7f080144; + public static final int settings_use_folder_for_album_artist_summary=0x7f080145; + public static final int settings_use_id3=0x7f080146; + public static final int settings_use_id3_summary=0x7f080147; + public static final int settings_use_stream_proxy=0x7f080148; + public static final int settings_use_stream_proxy_summary=0x7f080149; + public static final int settings_video_player=0x7f08014b; + public static final int settings_video_title=0x7f08014a; + public static final int settings_wifi_required_summary=0x7f08014c; + public static final int settings_wifi_required_title=0x7f08014d; + public static final int shuffle_endYear=0x7f08014e; + public static final int shuffle_genre=0x7f08014f; + public static final int shuffle_startYear=0x7f080150; + public static final int song_details_all=0x7f080151; + public static final int song_details_kbps=0x7f080152; + public static final int updated_playlist=0x7f080153; + public static final int updated_playlist_error=0x7f080154; + public static final int util_bytes_format_byte=0x7f080155; + public static final int util_bytes_format_gigabyte=0x7f080156; + public static final int util_bytes_format_kilobyte=0x7f080157; + public static final int util_bytes_format_megabyte=0x7f080158; + public static final int util_no_time=0x7f080159; + public static final int util_zero_time=0x7f08015a; + public static final int video_get_mx_player_button=0x7f08015c; + public static final int video_get_mx_player_text=0x7f08015b; + public static final int widget_initial_text=0x7f08015d; + public static final int widget_sdcard_busy=0x7f08015e; + public static final int widget_sdcard_missing=0x7f08015f; } public static final class style { public static final int MenuDrawer=0x7f0a0005; diff --git a/res/layout/main_buttons.xml b/res/layout/main_buttons.xml index 87524396..16984338 100644 --- a/res/layout/main_buttons.xml +++ b/res/layout/main_buttons.xml @@ -107,7 +107,17 @@ a:layout_height="wrap_content" a:gravity="center_vertical" a:minHeight="40dip" a:paddingLeft="6dip" a:paddingRight="6dip" a:text="@string/main.albums_alphaByArtist" a:textAppearance="?android:attr/textAppearanceMedium" /> + + + diff --git a/res/layout/video_details.xml b/res/layout/video_details.xml new file mode 100644 index 00000000..ae02eef6 --- /dev/null +++ b/res/layout/video_details.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/video_list_item.xml b/res/layout/video_list_item.xml new file mode 100644 index 00000000..38049999 --- /dev/null +++ b/res/layout/video_list_item.xml @@ -0,0 +1,30 @@ + + + + " + + + + + + \ No newline at end of file diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 1eeeaf85..eb742899 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -85,7 +85,7 @@ Aucunes paroles trouvées Alphabétique par artiste Alphabétique par nom - Récemment écoutés + Plus écoutés Mieux notés Plus récents Aléatoire @@ -105,6 +105,7 @@ Aléatoire Favoris Titres + Videos Bienvenue dans UltraSonic ! L\'application n\'est pas configurée. Après avoir configuré votre serveur personnel (disponible à partir de subsonic.org), veuillez accéder aux Paramètres et modifier la configuration pour vous y connecter. Bienvenue! À propos @@ -252,6 +253,7 @@ 75 secondes 90 secondes Réseau + Notifications Autres paramètres Paramètres de contrôle de lecture Titres à pré-charger @@ -281,6 +283,10 @@ 75 Historique des recherches effacé Paramètres de recherche + Send album art over Bluetooth (May cause Bluetooth notifications to fail) + Album Art Over Bluetooth + Send playback notifications via Bluetooth + Send Bluetooth Notification Ajouter un serveur Adresse du serveur Nom diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 9c80ac9f..86a469f3 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -105,6 +105,7 @@ Véletlenszerű Csillagozott Dalok + Videos Üdvözli az UltraSonic! Az alkalmazás még nincs beállítva. Miután konfigurálta saját kiszolgálóját (elérhető: subsonic.org), húzza jobbra a képernyőt, lépjen be a Beállítások menüpontba, és adja meg csatlakozási adatokat! Üdvözlet! Névjegy @@ -252,6 +253,7 @@ 75 másodperc 90 másodperc Hálózat + Notifications Egyéb beállítások Lejátszás-vezérlés beállításai Dalok előolvasása @@ -281,6 +283,10 @@ 75 Keresési előzmények törölve. Keresés beállításai + Send album art over Bluetooth (May cause Bluetooth notifications to fail) + Album Art Over Bluetooth + Send playback notifications via Bluetooth + Send Bluetooth Notification Kiszolgáló hozzáadása Kiszolgáló címe Név diff --git a/res/values/strings.xml b/res/values/strings.xml index a8ac8a2b..dd923b7f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -105,6 +105,7 @@ Random Starred Songs + Videos Welcome to UltraSonic! The app is currently not configured. After you\'ve set up your personal server (available from subsonic.org), please go to Settings and change the configuration to connect to it. Welcome! About @@ -251,6 +252,7 @@ 60 seconds 75 seconds 90 seconds + Notifications Network Other Settings Playback Control Settings @@ -281,6 +283,10 @@ 75 Search history cleared Search Settings + Send album art over Bluetooth (May cause Bluetooth notifications to fail) + Album Art Over Bluetooth + Send playback notifications via Bluetooth + Send Bluetooth Notification Add Server Server Address Name @@ -319,8 +325,8 @@ Use ID3 tag methods instead of file system based methods Use Stream Proxy Stream media playback through a proxy (may help stutter) - Video - Video player + Video + Video player Only stream media if connected to Wi-Fi Wi-Fi Streaming Only End Year: @@ -336,8 +342,8 @@ 0.00 MB -:-- 0:00 - MX Player is not installed. Get it for free on Play Store, or change video settings. - Get MX Player + MX Player is not installed. Get it for free on Play Store, or change video settings. + Get MX Player Touch to select music SD card unavailable No SD card diff --git a/res/xml/settings.xml b/res/xml/settings.xml index 6cdfa8d3..925294f5 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -56,21 +56,6 @@ a:key="mediaButtons" a:summary="@string/settings.media_button_summary" a:title="@string/settings.media_button_title" /> - - - - + + + + + + + list = downloadService.getSongs(); emptyTextView.setText(R.string.download_empty); - playlistView.setAdapter(new SongListAdapter(list)); + playlistView.setAdapter(new SongListAdapter(this, list)); emptyTextView.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE); currentRevision = downloadService.getDownloadListUpdateRevision(); @@ -908,10 +924,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi String duration = Util.formatTotalDuration(totalDuration); - String trackFormat = String.format("%d / %d", - currentSongIndex, - totalSongs - ); + String trackFormat = String.format(Locale.getDefault(), "%d / %d", currentSongIndex, totalSongs); if (currentPlaying != null) { currentSong = currentPlaying.getSong(); @@ -977,10 +990,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi switch (playerState) { case DOWNLOADING: final long bytes = currentPlaying != null ? currentPlaying.getPartialFile().length() : 0; - getActionBar().setSubtitle(getResources().getString( - R.string.download_playerstate_downloading, - Util.formatLocalizedBytes(bytes, - DownloadActivity.this))); + getActionBar().setSubtitle(getResources().getString(R.string.download_playerstate_downloading, Util.formatLocalizedBytes(bytes, DownloadActivity.this))); break; case PREPARING: getActionBar().setSubtitle(R.string.download_playerstate_buffering); @@ -1063,21 +1073,6 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi }.execute(); } - private class SongListAdapter extends ArrayAdapter { - public SongListAdapter(final List entries) { - super(DownloadActivity.this, android.R.layout.simple_list_item_1, entries); - } - - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final SongView view; - view = convertView != null && convertView instanceof SongView ? (SongView) convertView : new SongView(DownloadActivity.this); - final DownloadFile downloadFile = getItem(position); - view.setSong(downloadFile.getSong(), false); - return view; - } - } - @Override public boolean onTouchEvent(final MotionEvent me) { return gestureScanner.onTouchEvent(me); @@ -1092,6 +1087,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX, final float velocityY) { final DownloadService downloadService = getDownloadService(); + if (downloadService == null) { return false; } diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/HelpActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/HelpActivity.java index 64f09344..7009c271 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/HelpActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/HelpActivity.java @@ -33,7 +33,6 @@ import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.ImageView; -import android.widget.TextView; import com.thejoshwa.ultrasonic.androidapp.R; import com.thejoshwa.ultrasonic.androidapp.util.Constants; import com.thejoshwa.ultrasonic.androidapp.util.Util; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/MainActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/MainActivity.java index 6490c918..0fa56953 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/MainActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/MainActivity.java @@ -80,6 +80,7 @@ public class MainActivity extends SubsonicTabActivity { final View artistsButton = buttons.findViewById(R.id.main_artists_button); final View albumsButton = buttons.findViewById(R.id.main_albums_button); final View genresButton = buttons.findViewById(R.id.main_genres_button); + final View videosTitle = buttons.findViewById(R.id.main_videos_title); final View songsTitle = buttons.findViewById(R.id.main_songs); final View randomSongsButton = buttons.findViewById(R.id.main_songs_button); @@ -93,7 +94,7 @@ public class MainActivity extends SubsonicTabActivity { final View albumsFrequentButton = buttons.findViewById(R.id.main_albums_frequent); final View albumsAlphaByNameButton = buttons.findViewById(R.id.main_albums_alphaByName); final View albumsAlphaByArtistButton = buttons.findViewById(R.id.main_albums_alphaByArtist); - + final View videosButton = buttons.findViewById(R.id.main_videos); final View dummyView = findViewById(R.id.main_dummy); @@ -135,6 +136,9 @@ public class MainActivity extends SubsonicTabActivity { shouldUseId3 = false; adapter.addViews(Arrays.asList(albumsNewestButton, albumsRecentButton, albumsFrequentButton, albumsHighestButton, albumsRandomButton, albumsStarredButton, albumsAlphaByNameButton, albumsAlphaByArtistButton), true); } + + adapter.addView(videosTitle, false); + adapter.addViews(Arrays.asList(videosButton), true); } list.setAdapter(adapter); @@ -171,6 +175,8 @@ public class MainActivity extends SubsonicTabActivity { showRandomSongs(); } else if (view == genresButton) { showGenres(); + } else if (view == videosButton) { + showVideos(); } } }); @@ -425,4 +431,10 @@ public class MainActivity extends SubsonicTabActivity { intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Util.startActivityWithoutTransition(this, intent); } + + private void showVideos() { + final Intent intent = new Intent(this, SelectAlbumActivity.class); + intent.putExtra(Constants.INTENT_EXTRA_NAME_VIDEOS, 1); + Util.startActivityWithoutTransition(this, intent); + } } \ No newline at end of file diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/SearchActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/SearchActivity.java index ababa2ce..972b767b 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/SearchActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/SearchActivity.java @@ -34,7 +34,6 @@ import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; -import android.net.Uri; import com.thejoshwa.ultrasonic.androidapp.R; import com.thejoshwa.ultrasonic.androidapp.domain.Artist; import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java index 8cc97686..a5248d4e 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java @@ -19,7 +19,6 @@ package com.thejoshwa.ultrasonic.androidapp.activity; import android.content.Intent; -import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.ContextMenu; @@ -200,6 +199,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity { String genreName = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_GENRE_NAME); int albumListTitle = getIntent().getIntExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TITLE, 0); int getStarredTracks = getIntent().getIntExtra(Constants.INTENT_EXTRA_NAME_STARRED, 0); + int getVideos = getIntent().getIntExtra(Constants.INTENT_EXTRA_NAME_VIDEOS, 0); int getRandomTracks = getIntent().getIntExtra(Constants.INTENT_EXTRA_NAME_RANDOM, 0); int albumListSize = getIntent().getIntExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, 0); int albumListOffset = getIntent().getIntExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET, 0); @@ -215,6 +215,8 @@ public class SelectAlbumActivity extends SubsonicTabActivity { getSongsForGenre(genreName, albumListSize, albumListOffset); } else if (getStarredTracks != 0) { getStarred(); + } else if (getVideos != 0) { + getVideos(); } else if (getRandomTracks != 0) { getRandom(albumListSize); } else { @@ -458,6 +460,19 @@ public class SelectAlbumActivity extends SubsonicTabActivity { }.execute(); } + private void getVideos() { + showHeader = false; + + getActionBar().setSubtitle(R.string.main_videos); + + new LoadTask() { + @Override + protected MusicDirectory load(MusicService service) throws Exception { + return service.getVideos(SelectAlbumActivity.this, this); + } + }.execute(); + } + private void getRandom(final int size) { getActionBar().setSubtitle(R.string.main_songs_random); @@ -687,8 +702,14 @@ public class SelectAlbumActivity extends SubsonicTabActivity { String directoryName = musicDirectory.getName(); + boolean allVideos = true; int songCount = 0; + for (MusicDirectory.Entry entry : entries) { + if (!entry.isVideo()) { + allVideos = false; + } + if (!entry.isDirectory()) { songCount++; } @@ -698,14 +719,18 @@ public class SelectAlbumActivity extends SubsonicTabActivity { if (songCount > 0) { if(showHeader) { - albumListView.addHeaderView(createHeader(entries, directoryName, songCount), null, false); + View header = createHeader(entries, directoryName, songCount); + + if (header != null) { + albumListView.addHeaderView(header, null, false); + } } pinButton.setVisibility(View.VISIBLE); unpinButton.setVisibility(View.VISIBLE); downloadButton.setVisibility(View.VISIBLE); deleteButton.setVisibility(View.VISIBLE); - selectButton.setVisibility(View.VISIBLE); + selectButton.setVisibility(allVideos ? View.GONE : View.VISIBLE); playNowButton.setVisibility(View.VISIBLE); playNextButton.setVisibility(View.VISIBLE); playLastButton.setVisibility(View.VISIBLE); @@ -778,9 +803,14 @@ public class SelectAlbumActivity extends SubsonicTabActivity { Set artists = new HashSet(); Set grandParents = new HashSet(); Set genres = new HashSet(); + boolean allVideo = true; long totalDuration = 0; for (MusicDirectory.Entry entry : entries) { + if (!entry.isVideo()) { + allVideo = false; + } + if (!entry.isDirectory()) { if (Util.shouldUseFolderForArtistName(getBaseContext())) { String grandParent = Util.getGrandparent(entry.getPath()); @@ -806,6 +836,11 @@ public class SelectAlbumActivity extends SubsonicTabActivity { } } + // Don't show a header if all entries are videos + if (allVideo) { + return null; + } + TextView artistView = (TextView) header.findViewById(R.id.select_album_artist); String artist = null; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/SettingsActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/SettingsActivity.java index 9a147a5a..a45227e6 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/SettingsActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/SettingsActivity.java @@ -54,6 +54,7 @@ import java.io.File; import java.net.URL; import java.util.LinkedHashMap; import java.util.Map; + import net.simonvt.menudrawer.MenuDrawer; import net.simonvt.menudrawer.Position; @@ -83,6 +84,8 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer private CheckBoxPreference mediaButtonsEnabled; private CheckBoxPreference lockScreenEnabled; private CheckBoxPreference gaplessPlaybackEnabled; + private CheckBoxPreference sendBluetoothNotifications; + private CheckBoxPreference sendBluetoothAlbumArt; private int maxServerCount = 10; private int minServerCount = 0; @@ -161,6 +164,8 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer mediaButtonsEnabled = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_MEDIA_BUTTONS); lockScreenEnabled = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SHOW_LOCK_SCREEN_CONTROLS); gaplessPlaybackEnabled = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_GAPLESS_PLAYBACK); + sendBluetoothAlbumArt = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SEND_BLUETOOTH_ALBUM_ART); + sendBluetoothNotifications = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SEND_BLUETOOTH_NOTIFICATIONS); findPreference(Constants.PREFERENCES_KEY_CLEAR_SEARCH_HISTORY).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override @@ -404,6 +409,9 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer else if (Constants.PREFERENCES_KEY_CACHE_LOCATION.equals(key)) { setCacheLocation(sharedPreferences.getString(key, "")); } + else if (Constants.PREFERENCES_KEY_SEND_BLUETOOTH_NOTIFICATIONS.equals(key)) { + setBluetoothPreferences(sharedPreferences.getBoolean(key, true)); + } } private void update() { @@ -435,6 +443,11 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer lockScreenEnabled.setEnabled(false); } + if (!sendBluetoothNotifications.isChecked()) { + sendBluetoothAlbumArt.setChecked(false); + sendBluetoothAlbumArt.setEnabled(false); + } + for (ServerSettings ss : serverSettings.values()) { ss.update(); } @@ -464,8 +477,17 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer } } + private void setBluetoothPreferences(boolean enabled) { + if (enabled) { + sendBluetoothAlbumArt.setEnabled(true); + } else { + sendBluetoothAlbumArt.setEnabled(false); + } + } + private void setCacheLocation(String path) { File dir = new File(path); + if (!FileUtil.ensureDirectoryExistsAndIsReadWritable(dir)) { Util.toast(this, R.string.settings_cache_location_error, false); diff --git a/src/com/thejoshwa/ultrasonic/androidapp/domain/Indexes.java b/src/com/thejoshwa/ultrasonic/androidapp/domain/Indexes.java index b193c0f4..91d2e832 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/domain/Indexes.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/domain/Indexes.java @@ -18,7 +18,6 @@ */ package com.thejoshwa.ultrasonic.androidapp.domain; -import java.util.ArrayList; import java.util.List; import java.io.Serializable; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/CachedMusicService.java b/src/com/thejoshwa/ultrasonic/androidapp/service/CachedMusicService.java index 261d1da6..575a6890 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/CachedMusicService.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/CachedMusicService.java @@ -58,10 +58,12 @@ public class CachedMusicService implements MusicService { private final LRUCache> cachedAlbum; private final TimeLimitedCache cachedLicenseValid = new TimeLimitedCache(120, TimeUnit.SECONDS); private final TimeLimitedCache cachedIndexes = new TimeLimitedCache(60 * 60, TimeUnit.SECONDS); - private final TimeLimitedCache cachedArtists = new TimeLimitedCache(60 * 60, TimeUnit.SECONDS); + private final TimeLimitedCache cachedArtists = new TimeLimitedCache(60 * 60, TimeUnit.SECONDS); + private final TimeLimitedCache cachedVideos = new TimeLimitedCache(60 * 60, TimeUnit.SECONDS); private final TimeLimitedCache> cachedPlaylists = new TimeLimitedCache>(3600, TimeUnit.SECONDS); private final TimeLimitedCache> cachedMusicFolders = new TimeLimitedCache>(10 * 3600, TimeUnit.SECONDS); private final TimeLimitedCache> cachedGenres = new TimeLimitedCache>(10 * 3600, TimeUnit.SECONDS); + private String restUrl; public CachedMusicService(MusicService musicService) { @@ -388,4 +390,17 @@ public class CachedMusicService implements MusicService { public void createBookmark(String id, int position, Context context, ProgressListener progressListener) throws Exception { musicService.createBookmark(id, position, context, progressListener); } + + @Override + public MusicDirectory getVideos(Context context, ProgressListener progressListener) throws Exception { + checkSettingsChanged(context); + MusicDirectory result = cachedVideos.get(); + + if (result == null) { + result = musicService.getVideos(context, progressListener); + cachedVideos.set(result); + } + + return result; + } } diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadFile.java b/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadFile.java index b62e8408..4319e4e5 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadFile.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadFile.java @@ -27,7 +27,6 @@ import java.io.OutputStream; import android.content.Context; import android.net.wifi.WifiManager; import android.os.PowerManager; -import android.util.DisplayMetrics; import android.util.Log; import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceImpl.java b/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceImpl.java index 97901e8f..a3b3c0c8 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceImpl.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceImpl.java @@ -1151,9 +1151,9 @@ public class DownloadServiceImpl extends Service implements DownloadService { String title = artist + " - " + currentSong.getTitle(); Integer duration = currentSong.getDuration(); - // Always get the album art from disk - if (Util.bluetoothBitmap == null) { - Util.bluetoothBitmap = FileUtil.getAlbumArtBitmap(this, currentSong, Util.bluetoothImagesize, true); + // Reuse albumArt for lockscreen and Bluetooth + if (Util.albumArtBitmap == null) { + Util.albumArtBitmap = FileUtil.getAlbumArtBitmap(this, currentSong, Util.albumArtImageSize, true); } // Update the remote controls @@ -1171,10 +1171,10 @@ public class DownloadServiceImpl extends Service implements DownloadService { .apply(); } - if (Util.bluetoothBitmap != null) { + if (Util.albumArtBitmap != null) { remoteControlClient .editMetadata(false) - .putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, Util.bluetoothBitmap) + .putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, Util.albumArtBitmap) .apply(); } } diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceLifecycleSupport.java b/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceLifecycleSupport.java index 6f840bd0..4cedd826 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceLifecycleSupport.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/DownloadServiceLifecycleSupport.java @@ -30,7 +30,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.media.RemoteControlClient; import android.os.AsyncTask; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/MusicService.java b/src/com/thejoshwa/ultrasonic/androidapp/service/MusicService.java index cc2f9109..9aaa1b7e 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/MusicService.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/MusicService.java @@ -135,4 +135,6 @@ public interface MusicService { void deleteBookmark(String id, Context context, ProgressListener progressListener) throws Exception; void createBookmark(String id, int position, Context context, ProgressListener progressListener) throws Exception; + + MusicDirectory getVideos(Context context, ProgressListener progressListener) throws Exception; } \ No newline at end of file diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/RESTMusicService.java b/src/com/thejoshwa/ultrasonic/androidapp/service/RESTMusicService.java index 2954f055..307eef19 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/RESTMusicService.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/RESTMusicService.java @@ -77,7 +77,6 @@ import com.thejoshwa.ultrasonic.androidapp.domain.Indexes; import com.thejoshwa.ultrasonic.androidapp.domain.JukeboxStatus; import com.thejoshwa.ultrasonic.androidapp.domain.Lyrics; import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory; -import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory.Entry; import com.thejoshwa.ultrasonic.androidapp.domain.MusicFolder; import com.thejoshwa.ultrasonic.androidapp.domain.Playlist; import com.thejoshwa.ultrasonic.androidapp.domain.SearchCritera; @@ -1273,4 +1272,17 @@ public class RESTMusicService implements MusicService { Util.close(reader); } } + + @Override + public MusicDirectory getVideos(Context context, ProgressListener progressListener) throws Exception { + checkServerVersion(context, "1.8", "Videos not supported."); + + Reader reader = getReader(context, progressListener, "getVideos", null); + + try { + return new MusicDirectoryParser(context).parse("", reader, progressListener, false); + } finally { + Util.close(reader); + } + } } diff --git a/src/com/thejoshwa/ultrasonic/androidapp/service/parser/MusicDirectoryParser.java b/src/com/thejoshwa/ultrasonic/androidapp/service/parser/MusicDirectoryParser.java index bcb9011d..534a71f5 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/service/parser/MusicDirectoryParser.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/service/parser/MusicDirectoryParser.java @@ -50,7 +50,7 @@ public class MusicDirectoryParser extends MusicDirectoryEntryParser { if (eventType == XmlPullParser.START_TAG) { String name = getElementName(); - if ("child".equals(name) || "song".equals(name)) { + if ("child".equals(name) || "song".equals(name) || "video".equals(name)) { dir.addChild(parseEntry(artist, false, 0)); } else if ("album".equals(name) && !isAlbum) { dir.addChild(parseEntry(artist, true, 0)); diff --git a/src/com/thejoshwa/ultrasonic/androidapp/util/Constants.java b/src/com/thejoshwa/ultrasonic/androidapp/util/Constants.java index fffc19f0..059b051f 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/util/Constants.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/util/Constants.java @@ -54,6 +54,7 @@ public final class Constants { public static final String INTENT_EXTRA_NAME_RANDOM = "subsonic.random"; public static final String INTENT_EXTRA_NAME_GENRE_NAME = "subsonic.genre"; public static final String INTENT_EXTRA_NAME_IS_ALBUM = "subsonic.isalbum"; + public static final String INTENT_EXTRA_NAME_VIDEOS= "subsonic.videos"; // Notification IDs. public static final int NOTIFICATION_ID_PLAYING = 100; @@ -123,6 +124,8 @@ public final class Constants { public static final String PREFERENCES_KEY_CLEAR_BOOKMARK = "clearBookmark"; public static final String PREFERENCES_KEY_DISC_SORT = "discAndTrackSort"; public static final String PREFERENCES_KEY_VIDEO_PLAYER = "videoPlayer"; + public static final String PREFERENCES_KEY_SEND_BLUETOOTH_NOTIFICATIONS = "sendBluetoothNotifications"; + public static final String PREFERENCES_KEY_SEND_BLUETOOTH_ALBUM_ART = "sendBluetoothAlbumArt"; // Name of the preferences file. public static final String PREFERENCES_FILE_NAME = "com.thejoshwa.ultrasonic.androidapp_preferences"; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/util/FileUtil.java b/src/com/thejoshwa/ultrasonic/androidapp/util/FileUtil.java index 551e3062..43d84861 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/util/FileUtil.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/util/FileUtil.java @@ -25,7 +25,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Arrays; -import java.util.Locale; import java.util.SortedSet; import java.util.TreeSet; import java.util.Iterator; diff --git a/src/com/thejoshwa/ultrasonic/androidapp/util/StreamProxy.java b/src/com/thejoshwa/ultrasonic/androidapp/util/StreamProxy.java index 795a3aef..277c54f4 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/util/StreamProxy.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/util/StreamProxy.java @@ -25,8 +25,6 @@ import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory; import com.thejoshwa.ultrasonic.androidapp.service.DownloadFile; import com.thejoshwa.ultrasonic.androidapp.service.DownloadService; -import android.os.AsyncTask; -import android.os.Looper; import android.util.Log; public class StreamProxy implements Runnable { diff --git a/src/com/thejoshwa/ultrasonic/androidapp/util/Util.java b/src/com/thejoshwa/ultrasonic/androidapp/util/Util.java index 5e5652a7..88ad915b 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/util/Util.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/util/Util.java @@ -39,7 +39,6 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Environment; -import android.os.Parcelable; import android.preference.PreferenceManager; import android.util.DisplayMetrics; import android.util.Log; @@ -105,7 +104,7 @@ public class Util extends DownloadActivity { public static final String CM_AVRCP_PLAYSTATE_CHANGED = "com.android.music.playstatechanged"; public static final String CM_AVRCP_METADATA_CHANGED = "com.android.music.metachanged"; - public final static int bluetoothImagesize = 500; + public final static int albumArtImageSize = 300; private static boolean hasFocus = false; private static boolean pauseFocus = false; @@ -117,7 +116,7 @@ public class Util extends DownloadActivity { private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; private static Toast toast; - public static Bitmap bluetoothBitmap; + public static Bitmap albumArtBitmap; private static Entry currentSong; private Util() { @@ -867,6 +866,10 @@ public class Util extends DownloadActivity { } public static void broadcastA2dpMetaDataChange(Context context, DownloadService downloadService) { + if (!Util.getShouldSendBluetoothNotifications(context)) { + return; + } + Entry song = null; Intent avrcpIntent = new Intent(CM_AVRCP_METADATA_CHANGED); @@ -885,17 +888,24 @@ public class Util extends DownloadActivity { avrcpIntent.putExtra("artist_name", ""); avrcpIntent.putExtra("album", ""); avrcpIntent.putExtra("album_name", ""); - avrcpIntent.putExtra("cover", (Parcelable) null); - avrcpIntent.putExtra("coverart", (Parcelable) null); + + if (Util.getShouldSendBluetoothAlbumArt(context)) { + albumArtBitmap = Bitmap.createBitmap(albumArtImageSize, albumArtImageSize, Bitmap.Config.ARGB_8888); + avrcpIntent.putExtra("cover", albumArtBitmap); + avrcpIntent.putExtra("coverart", albumArtBitmap); + } + avrcpIntent.putExtra("ListSize", (long) 0); avrcpIntent.putExtra("id", (long) 0); avrcpIntent.putExtra("duration", (long) 0); avrcpIntent.putExtra("position", (long) 0); - bluetoothBitmap = null; } else { if (song != currentSong) { currentSong = song; - bluetoothBitmap = FileUtil.getAlbumArtBitmap(context, song, bluetoothImagesize, true); + + if (Util.getShouldSendBluetoothAlbumArt(context)) { + albumArtBitmap = FileUtil.getAlbumArtBitmap(context, song, albumArtImageSize, false); + } } String title = song.getTitle(); @@ -912,8 +922,11 @@ public class Util extends DownloadActivity { avrcpIntent.putExtra("artist_name", artist); avrcpIntent.putExtra("album", album); avrcpIntent.putExtra("album_name", album); - avrcpIntent.putExtra("cover", (Parcelable) bluetoothBitmap); - avrcpIntent.putExtra("coverart", (Parcelable) bluetoothBitmap); + + if (Util.getShouldSendBluetoothAlbumArt(context)) { + avrcpIntent.putExtra("cover", albumArtBitmap); + avrcpIntent.putExtra("coverart", albumArtBitmap); + } if (playerPosition != null) { avrcpIntent.putExtra("position", (long) playerPosition); @@ -936,7 +949,10 @@ public class Util extends DownloadActivity { } public static void broadcastA2dpPlayStatusChange(Context context, PlayerState state, DownloadService downloadService) { - + if (!Util.getShouldSendBluetoothNotifications(context)) { + return; + } + if (downloadService.getCurrentPlaying() != null) { Intent avrcpIntent = new Intent(CM_AVRCP_PLAYSTATE_CHANGED); @@ -948,7 +964,9 @@ public class Util extends DownloadActivity { if (song != currentSong) { currentSong = song; - bluetoothBitmap = FileUtil.getAlbumArtBitmap(context, song, bluetoothImagesize, true); + if (Util.getShouldSendBluetoothAlbumArt(context)) { + albumArtBitmap = FileUtil.getAlbumArtBitmap(context, song, albumArtImageSize, false); + } } String title = song.getTitle(); @@ -965,8 +983,11 @@ public class Util extends DownloadActivity { avrcpIntent.putExtra("artist_name", artist); avrcpIntent.putExtra("album", album); avrcpIntent.putExtra("album_name", album); - avrcpIntent.putExtra("cover", (Parcelable) bluetoothBitmap); - avrcpIntent.putExtra("coverart", (Parcelable) bluetoothBitmap); + + if (Util.getShouldSendBluetoothAlbumArt(context)) { + avrcpIntent.putExtra("cover", albumArtBitmap); + avrcpIntent.putExtra("coverart", albumArtBitmap); + } if (playerPosition != null) { avrcpIntent.putExtra("position", (long) playerPosition); @@ -1335,4 +1356,14 @@ public class Util extends DownloadActivity { return false; } + + public static boolean getShouldSendBluetoothNotifications(Context context) { + SharedPreferences prefs = getPreferences(context); + return prefs.getBoolean(Constants.PREFERENCES_KEY_SEND_BLUETOOTH_NOTIFICATIONS, true); + } + + public static boolean getShouldSendBluetoothAlbumArt(Context context) { + SharedPreferences prefs = getPreferences(context); + return prefs.getBoolean(Constants.PREFERENCES_KEY_SEND_BLUETOOTH_ALBUM_ART, true); + } } diff --git a/src/com/thejoshwa/ultrasonic/androidapp/view/SongListAdapter.java b/src/com/thejoshwa/ultrasonic/androidapp/view/SongListAdapter.java new file mode 100644 index 00000000..040d93f8 --- /dev/null +++ b/src/com/thejoshwa/ultrasonic/androidapp/view/SongListAdapter.java @@ -0,0 +1,28 @@ +package com.thejoshwa.ultrasonic.androidapp.view; + +import java.util.List; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; + +import com.thejoshwa.ultrasonic.androidapp.service.DownloadFile; + + public class SongListAdapter extends ArrayAdapter { + Context context; + + public SongListAdapter(Context context, final List entries) { + super(context, android.R.layout.simple_list_item_1, entries); + this.context = context; + } + + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final SongView view; + view = convertView != null && convertView instanceof SongView ? (SongView) convertView : new SongView(this.context); + final DownloadFile downloadFile = getItem(position); + view.setSong(downloadFile.getSong(), false); + return view; + } + } \ No newline at end of file diff --git a/src/com/thejoshwa/ultrasonic/androidapp/view/SongView.java b/src/com/thejoshwa/ultrasonic/androidapp/view/SongView.java index 1f43c682..23ee15fa 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/view/SongView.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/view/SongView.java @@ -28,7 +28,7 @@ import android.widget.CheckedTextView; import android.widget.ImageView; import android.widget.TextView; import com.thejoshwa.ultrasonic.androidapp.R; -import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory; +import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory.Entry; import com.thejoshwa.ultrasonic.androidapp.service.DownloadService; import com.thejoshwa.ultrasonic.androidapp.service.DownloadServiceImpl; import com.thejoshwa.ultrasonic.androidapp.service.DownloadFile; @@ -54,13 +54,24 @@ public class SongView extends UpdateView implements Checkable { private TextView artistTextView; private TextView durationTextView; private TextView statusTextView; - private MusicDirectory.Entry song; + private Entry song; + private Context context; private DownloadService downloadService; public SongView(Context context) { super(context); - LayoutInflater.from(context).inflate(R.layout.song_list_item, this, true); + this.context = context; + } + + public void setSong(final Entry song, boolean checkable) { + this.song = song; + + if (song.isVideo()) { + LayoutInflater.from(this.context).inflate(R.layout.video_list_item, this, true); + } else { + LayoutInflater.from(this.context).inflate(R.layout.song_list_item, this, true); + } checkedTextView = (CheckedTextView) findViewById(R.id.song_check); starImageView = (ImageView) findViewById(R.id.song_star); @@ -69,10 +80,8 @@ public class SongView extends UpdateView implements Checkable { artistTextView = (TextView) findViewById(R.id.song_artist); durationTextView = (TextView) findViewById(R.id.song_duration); statusTextView = (TextView) findViewById(R.id.song_status); - } - public void setSong(final MusicDirectory.Entry song, boolean checkable) { - this.song = song; + StringBuilder artist = new StringBuilder(60); String bitRate = null; @@ -103,14 +112,20 @@ public class SongView extends UpdateView implements Checkable { int trackNumber = song.getTrack(); - if (Util.shouldShowTrackNumber(getContext()) && trackNumber != 0) { - trackTextView.setText(String.format("%02d.", trackNumber)); - } else { - trackTextView.setVisibility(View.GONE); + if (trackTextView != null) { + if (Util.shouldShowTrackNumber(getContext()) && trackNumber != 0) { + trackTextView.setText(String.format("%02d.", trackNumber)); + } else { + trackTextView.setVisibility(View.GONE); + } } titleTextView.setText(song.getTitle()); - artistTextView.setText(artist); + + if (artistTextView != null) { + artistTextView.setText(artist); + } + durationTextView.setText(Util.formatTotalDuration(song.getDuration())); starImageView.setImageDrawable(song.getStarred() ? Util.getDrawableFromAttribute(getContext(), R.attr.star_full) : Util.getDrawableFromAttribute(getContext(), R.attr.star_hollow)); checkedTextView.setVisibility(checkable && !song.isVideo() ? View.VISIBLE : View.GONE); @@ -186,14 +201,16 @@ public class SongView extends UpdateView implements Checkable { leftImage = downloadFile.isSaved() ? Util.getDrawableFromAttribute(getContext(), R.attr.unpin) : Util.getDrawableFromAttribute(getContext(), R.attr.downloaded); } - if (downloadFile.isDownloading() && !downloadFile.isDownloadCancelled() && partialFile.exists()) { - statusTextView.setText(Util.formatLocalizedBytes(partialFile.length(), getContext())); - rightImage = Util.getDrawableFromAttribute(getContext(), R.attr.downloading); - } else { - statusTextView.setText(null); + if (statusTextView != null) { + if (downloadFile.isDownloading() && !downloadFile.isDownloadCancelled() && partialFile.exists()) { + statusTextView.setText(Util.formatLocalizedBytes(partialFile.length(), getContext())); + rightImage = Util.getDrawableFromAttribute(getContext(), R.attr.downloading); + } else { + statusTextView.setText(null); + } + + statusTextView.setCompoundDrawablesWithIntrinsicBounds(leftImage, null, rightImage, null); } - - statusTextView.setCompoundDrawablesWithIntrinsicBounds(leftImage, null, rightImage, null); if (!song.getStarred()) { starImageView.setImageDrawable(Util.getDrawableFromAttribute(getContext(), R.attr.star_hollow));