From e74020bf29de29a7975f49c696c310a0f4fbf533 Mon Sep 17 00:00:00 2001 From: Joshua Bahnsen Date: Mon, 1 Apr 2013 23:01:15 -0700 Subject: [PATCH] New repeat all, repeat once icons. Hide separators when going offline. Add offline menu item. --- AndroidManifest.xml | 4 +- .../sourceforge/subsonic/androidapp/R.java | 411 ++++++------ res/drawable-hdpi/ic_menu_offline2.png | Bin 0 -> 2015 bytes res/drawable-hdpi/media_repeat_all.png | Bin 3878 -> 4166 bytes res/drawable-hdpi/media_repeat_single.png | Bin 3878 -> 4079 bytes res/drawable-xhdpi/media_repeat_all.png | Bin 3878 -> 4166 bytes res/drawable-xhdpi/media_repeat_single.png | Bin 3878 -> 4079 bytes res/layout/button_bar.xml | 98 +-- res/layout/notification.xml | 227 ++++--- res/menu/main_offline.xml | 10 + .../androidapp/activity/MainActivity.java | 604 +++++++++--------- .../activity/SubsonicTabActivity.java | 8 + 12 files changed, 695 insertions(+), 667 deletions(-) create mode 100644 res/drawable-hdpi/ic_menu_offline2.png create mode 100644 res/menu/main_offline.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 95293178..4e1ccb6c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + a:versionCode="65" + a:versionName="3.9.9.24" a:installLocation="auto"> diff --git a/gen/net/sourceforge/subsonic/androidapp/R.java b/gen/net/sourceforge/subsonic/androidapp/R.java index 9c9afb47..59888e6e 100644 --- a/gen/net/sourceforge/subsonic/androidapp/R.java +++ b/gen/net/sourceforge/subsonic/androidapp/R.java @@ -73,220 +73,224 @@ public final class R { public static final int ic_menu_home=0x7f020015; public static final int ic_menu_moreoverflow=0x7f020016; public static final int ic_menu_offline=0x7f020017; - public static final int ic_menu_play_all=0x7f020018; - public static final int ic_menu_playlists=0x7f020019; - public static final int ic_menu_refresh=0x7f02001a; - public static final int ic_menu_remove_all=0x7f02001b; - public static final int ic_menu_save=0x7f02001c; - public static final int ic_menu_screen_on_off=0x7f02001d; - public static final int ic_menu_search=0x7f02001e; - public static final int ic_menu_select_artist_folder=0x7f02001f; - public static final int ic_menu_settings=0x7f020020; - public static final int ic_menu_share=0x7f020021; - public static final int ic_menu_shuffle=0x7f020022; - public static final int ic_stat_downloaded=0x7f020023; - public static final int ic_stat_downloading=0x7f020024; - public static final int ic_stat_play=0x7f020025; - public static final int ic_stat_saved=0x7f020026; - public static final int ic_stat_subsonic=0x7f020027; - public static final int list_background=0x7f020028; - public static final int list_focused_holo=0x7f020029; - public static final int list_item_more=0x7f02002a; - public static final int list_longpressed_holo=0x7f02002b; - public static final int list_pressed_holo_dark=0x7f02002c; - public static final int list_pressed_holo_light=0x7f02002d; - public static final int list_selector_background_transition_holo_dark=0x7f02002e; - public static final int list_selector_background_transition_holo_light=0x7f02002f; - public static final int list_selector_disabled_holo_dark=0x7f020030; - public static final int list_selector_disabled_holo_light=0x7f020031; - public static final int list_selector_holo_dark=0x7f020032; - public static final int list_selector_holo_light=0x7f020033; - public static final int main_header_icon=0x7f020034; - public static final int media_backward_normal=0x7f020035; - public static final int media_forward_normal=0x7f020036; - public static final int media_pause_normal=0x7f020037; - public static final int media_repeat_all=0x7f020038; - public static final int media_repeat_off=0x7f020039; - public static final int media_repeat_single=0x7f02003a; - public static final int media_shuffle_normal=0x7f02003b; - public static final int media_start_normal=0x7f02003c; - public static final int media_start_pressed=0x7f02003d; - public static final int media_stop_normal=0x7f02003e; - public static final int media_toggle_list_normal=0x7f02003f; - public static final int menubar_button_disabled=0x7f020040; - public static final int menubar_button_normal=0x7f020041; - public static final int notify_panel_notification_icon_bg=0x7f020042; - public static final int pinstripe_tile=0x7f020043; - public static final int preview=0x7f020044; - public static final int preview_two=0x7f020045; - public static final int progress_bg_holo_dark=0x7f020046; - public static final int progress_horizontal_holo_dark=0x7f020047; - public static final int progress_primary_holo_dark=0x7f020048; - public static final int progress_secondary_holo_dark=0x7f020049; - public static final int select_album_play_all=0x7f02004a; - public static final int select_album_play_all_normal=0x7f02004b; - public static final int select_album_play_all_pressed=0x7f02004c; - public static final int slider_knob=0x7f02004d; - public static final int star=0x7f02004e; - public static final int star_hollow=0x7f02004f; - public static final int status_bg=0x7f020050; - public static final int status_next=0x7f020051; - public static final int status_pause=0x7f020052; - public static final int status_play=0x7f020053; - public static final int status_prev=0x7f020054; - public static final int status_stop=0x7f020055; - public static final int title_bar_shadow=0x7f020056; - public static final int unknown_album=0x7f020057; - public static final int unknown_album_large=0x7f020058; + public static final int ic_menu_offline2=0x7f020018; + public static final int ic_menu_play_all=0x7f020019; + public static final int ic_menu_playlists=0x7f02001a; + public static final int ic_menu_refresh=0x7f02001b; + public static final int ic_menu_remove_all=0x7f02001c; + public static final int ic_menu_save=0x7f02001d; + public static final int ic_menu_screen_on_off=0x7f02001e; + public static final int ic_menu_search=0x7f02001f; + public static final int ic_menu_select_artist_folder=0x7f020020; + public static final int ic_menu_settings=0x7f020021; + public static final int ic_menu_share=0x7f020022; + public static final int ic_menu_shuffle=0x7f020023; + public static final int ic_stat_downloaded=0x7f020024; + public static final int ic_stat_downloading=0x7f020025; + public static final int ic_stat_play=0x7f020026; + public static final int ic_stat_saved=0x7f020027; + public static final int ic_stat_subsonic=0x7f020028; + public static final int list_background=0x7f020029; + public static final int list_focused_holo=0x7f02002a; + public static final int list_item_more=0x7f02002b; + public static final int list_longpressed_holo=0x7f02002c; + public static final int list_pressed_holo_dark=0x7f02002d; + public static final int list_pressed_holo_light=0x7f02002e; + public static final int list_selector_background_transition_holo_dark=0x7f02002f; + public static final int list_selector_background_transition_holo_light=0x7f020030; + public static final int list_selector_disabled_holo_dark=0x7f020031; + public static final int list_selector_disabled_holo_light=0x7f020032; + public static final int list_selector_holo_dark=0x7f020033; + public static final int list_selector_holo_light=0x7f020034; + public static final int main_header_icon=0x7f020035; + public static final int media_backward_normal=0x7f020036; + public static final int media_forward_normal=0x7f020037; + public static final int media_pause_normal=0x7f020038; + public static final int media_repeat_all=0x7f020039; + public static final int media_repeat_off=0x7f02003a; + public static final int media_repeat_single=0x7f02003b; + public static final int media_shuffle_normal=0x7f02003c; + public static final int media_start_normal=0x7f02003d; + public static final int media_start_pressed=0x7f02003e; + public static final int media_stop_normal=0x7f02003f; + public static final int media_toggle_list_normal=0x7f020040; + public static final int menubar_button_disabled=0x7f020041; + public static final int menubar_button_normal=0x7f020042; + public static final int notify_panel_notification_icon_bg=0x7f020043; + public static final int pinstripe_tile=0x7f020044; + public static final int preview=0x7f020045; + public static final int preview_two=0x7f020046; + public static final int progress_bg_holo_dark=0x7f020047; + public static final int progress_horizontal_holo_dark=0x7f020048; + public static final int progress_primary_holo_dark=0x7f020049; + public static final int progress_secondary_holo_dark=0x7f02004a; + public static final int select_album_play_all=0x7f02004b; + public static final int select_album_play_all_normal=0x7f02004c; + public static final int select_album_play_all_pressed=0x7f02004d; + public static final int slider_knob=0x7f02004e; + public static final int star=0x7f02004f; + public static final int star_hollow=0x7f020050; + public static final int status_bg=0x7f020051; + public static final int status_next=0x7f020052; + public static final int status_pause=0x7f020053; + public static final int status_play=0x7f020054; + public static final int status_prev=0x7f020055; + public static final int status_stop=0x7f020056; + public static final int title_bar_shadow=0x7f020057; + public static final int unknown_album=0x7f020058; + public static final int unknown_album_large=0x7f020059; } public static final class id { - public static final int album=0x7f0d004d; + public static final int album=0x7f0d004f; public static final int album_artist=0x7f0d0002; public static final int album_coverart=0x7f0d0000; - public static final int album_menu_pin=0x7f0d008b; - public static final int album_menu_play_last=0x7f0d008a; - public static final int album_menu_play_now=0x7f0d0089; + public static final int album_menu_pin=0x7f0d008e; + public static final int album_menu_play_last=0x7f0d008d; + public static final int album_menu_play_now=0x7f0d008c; public static final int album_star=0x7f0d0003; public static final int album_title=0x7f0d0001; public static final int appwidget_coverart=0x7f0d0004; public static final int appwidget_top=0x7f0d0006; public static final int artist=0x7f0d0008; - public static final int artist_menu_pin=0x7f0d008e; - public static final int artist_menu_play_last=0x7f0d008d; - public static final int artist_menu_play_now=0x7f0d008c; + public static final int artist_menu_pin=0x7f0d0091; + public static final int artist_menu_play_last=0x7f0d0090; + public static final int artist_menu_play_now=0x7f0d008f; public static final int button_bar=0x7f0d000c; public static final int button_bar_home=0x7f0d000d; public static final int button_bar_music=0x7f0d000e; - public static final int button_bar_now_playing=0x7f0d0011; - public static final int button_bar_playlists=0x7f0d0010; + public static final int button_bar_now_playing=0x7f0d0013; + public static final int button_bar_playlists=0x7f0d0011; + public static final int button_bar_playlists_separator=0x7f0d0012; public static final int button_bar_search=0x7f0d000f; + public static final int button_bar_search_separator=0x7f0d0010; public static final int control_next=0x7f0d000b; public static final int control_play=0x7f0d000a; public static final int control_previous=0x7f0d0009; - public static final int control_stop=0x7f0d004e; - public static final int download_album=0x7f0d0025; - public static final int download_album_art_image=0x7f0d001f; - public static final int download_album_art_layout=0x7f0d001e; - public static final int download_artist=0x7f0d0024; - public static final int download_button_bar_flipper=0x7f0d0021; - public static final int download_control_layout=0x7f0d0012; - public static final int download_duration=0x7f0d0023; - public static final int download_empty=0x7f0d0026; - public static final int download_equalizer=0x7f0d007f; - public static final int download_jukebox=0x7f0d0081; - public static final int download_list=0x7f0d0027; - public static final int download_next=0x7f0d0018; - public static final int download_pause=0x7f0d0015; - public static final int download_playlist_flipper=0x7f0d001d; - public static final int download_position=0x7f0d0022; - public static final int download_previous=0x7f0d0014; - public static final int download_progress_bar=0x7f0d0028; - public static final int download_repeat=0x7f0d0019; - public static final int download_shuffle=0x7f0d0013; - public static final int download_song_title=0x7f0d001c; - public static final int download_start=0x7f0d0017; - public static final int download_status=0x7f0d001b; - public static final int download_stop=0x7f0d0016; - public static final int download_toggle_list=0x7f0d001a; - public static final int download_visualizer=0x7f0d0080; - public static final int download_visualizer_view_layout=0x7f0d0020; - public static final int equalizer_bar=0x7f0d002e; - public static final int equalizer_frequency=0x7f0d002c; - public static final int equalizer_level=0x7f0d002d; - public static final int equalizer_enabled=0x7f0d0029; - public static final int equalizer_layout=0x7f0d002a; - public static final int equalizer_preset=0x7f0d002b; - public static final int help_back=0x7f0d0030; - public static final int help_buttons=0x7f0d002f; - public static final int help_close=0x7f0d0031; - public static final int help_contents=0x7f0d0032; - public static final int icon=0x7f0d0074; - public static final int jukebox_volume_progress_bar=0x7f0d0034; + public static final int control_stop=0x7f0d0050; + public static final int download_album=0x7f0d0027; + public static final int download_album_art_image=0x7f0d0021; + public static final int download_album_art_layout=0x7f0d0020; + public static final int download_artist=0x7f0d0026; + public static final int download_button_bar_flipper=0x7f0d0023; + public static final int download_control_layout=0x7f0d0014; + public static final int download_duration=0x7f0d0025; + public static final int download_empty=0x7f0d0028; + public static final int download_equalizer=0x7f0d0082; + public static final int download_jukebox=0x7f0d0084; + public static final int download_list=0x7f0d0029; + public static final int download_next=0x7f0d001a; + public static final int download_pause=0x7f0d0017; + public static final int download_playlist_flipper=0x7f0d001f; + public static final int download_position=0x7f0d0024; + public static final int download_previous=0x7f0d0016; + public static final int download_progress_bar=0x7f0d002a; + public static final int download_repeat=0x7f0d001b; + public static final int download_shuffle=0x7f0d0015; + public static final int download_song_title=0x7f0d001e; + public static final int download_start=0x7f0d0019; + public static final int download_status=0x7f0d001d; + public static final int download_stop=0x7f0d0018; + public static final int download_toggle_list=0x7f0d001c; + public static final int download_visualizer=0x7f0d0083; + public static final int download_visualizer_view_layout=0x7f0d0022; + public static final int equalizer_bar=0x7f0d0030; + public static final int equalizer_frequency=0x7f0d002e; + public static final int equalizer_level=0x7f0d002f; + public static final int equalizer_enabled=0x7f0d002b; + public static final int equalizer_layout=0x7f0d002c; + public static final int equalizer_preset=0x7f0d002d; + public static final int help_back=0x7f0d0032; + public static final int help_buttons=0x7f0d0031; + public static final int help_close=0x7f0d0033; + public static final int help_contents=0x7f0d0034; + public static final int icon=0x7f0d0076; + public static final int jukebox_volume_progress_bar=0x7f0d0036; public static final int linearLayout1=0x7f0d0005; - public static final int lyrics_artist=0x7f0d0036; - public static final int lyrics_scrollview=0x7f0d0035; - public static final int lyrics_text=0x7f0d0038; - public static final int lyrics_title=0x7f0d0037; - public static final int main_select_server_1=0x7f0d003c; - public static final int main_select_server_2=0x7f0d003d; - public static final int main_albums=0x7f0d0040; - public static final int main_albums_alphaByArtist=0x7f0d0048; - public static final int main_albums_alphaByName=0x7f0d0047; - public static final int main_albums_frequent=0x7f0d0043; - public static final int main_albums_highest=0x7f0d0044; - public static final int main_albums_newest=0x7f0d0041; - public static final int main_albums_random=0x7f0d0045; - public static final int main_albums_recent=0x7f0d0042; - public static final int main_albums_starred=0x7f0d0046; - public static final int main_dummy=0x7f0d003a; - public static final int main_list=0x7f0d0039; - public static final int main_select_server=0x7f0d003b; - public static final int main_shuffle=0x7f0d007e; - public static final int main_songs=0x7f0d003e; - public static final int main_songs_starred=0x7f0d003f; - public static final int menu_exit=0x7f0d007d; - public static final int menu_help=0x7f0d007c; - public static final int menu_lyrics=0x7f0d0086; - public static final int menu_refresh=0x7f0d008f; - public static final int menu_remove=0x7f0d0087; - public static final int menu_remove_all=0x7f0d0083; - public static final int menu_save_playlist=0x7f0d0082; - public static final int menu_screen_on_off=0x7f0d0084; - public static final int menu_settings=0x7f0d007b; - public static final int menu_show_album=0x7f0d0085; - public static final int menu_shuffle=0x7f0d0088; - public static final int notification_image=0x7f0d004a; - public static final int play_video_contents=0x7f0d004f; - public static final int progress_message=0x7f0d0050; - public static final int save_playlist_name=0x7f0d0052; - public static final int save_playlist_root=0x7f0d0051; - public static final int search_albums=0x7f0d0056; - public static final int search_artists=0x7f0d0055; - public static final int search_list=0x7f0d0053; - public static final int search_more_albums=0x7f0d0059; - public static final int search_more_artists=0x7f0d0058; - public static final int search_more_songs=0x7f0d005a; - public static final int search_search=0x7f0d0054; - public static final int search_songs=0x7f0d0057; - public static final int select_album_cover_art=0x7f0d0064; - public static final int select_album_delete=0x7f0d0062; - public static final int select_album_empty=0x7f0d005b; - public static final int select_album_entries=0x7f0d005c; - public static final int select_album_more=0x7f0d0063; - public static final int select_album_pin=0x7f0d0060; - public static final int select_album_play_all=0x7f0d0067; - public static final int select_album_play_last=0x7f0d005f; - public static final int select_album_play_now=0x7f0d005e; - public static final int select_album_select=0x7f0d005d; - public static final int select_album_text1=0x7f0d0065; - public static final int select_album_text2=0x7f0d0066; - public static final int select_album_unpin=0x7f0d0061; - public static final int select_artist_folder=0x7f0d0069; - public static final int select_artist_folder_1=0x7f0d006a; - public static final int select_artist_folder_2=0x7f0d006b; - public static final int select_artist_list=0x7f0d0068; - public static final int select_playlist_empty=0x7f0d006c; - public static final int select_playlist_list=0x7f0d006d; - public static final int song_artist=0x7f0d0071; - public static final int song_check=0x7f0d006e; - public static final int song_duration=0x7f0d0072; - public static final int song_menu_play_last=0x7f0d0092; - public static final int song_menu_play_next=0x7f0d0091; - public static final int song_menu_play_now=0x7f0d0090; - public static final int song_star=0x7f0d0073; - public static final int song_status=0x7f0d0070; - public static final int song_title=0x7f0d006f; - public static final int status_icon=0x7f0d004b; - public static final int status_media_collapse=0x7f0d0078; - public static final int status_media_next=0x7f0d0077; - public static final int status_media_play=0x7f0d0076; - public static final int status_media_prev=0x7f0d0075; - public static final int statusbar=0x7f0d0049; - public static final int tab_progress=0x7f0d0079; - public static final int tab_progress_message=0x7f0d007a; + public static final int lyrics_artist=0x7f0d0038; + public static final int lyrics_scrollview=0x7f0d0037; + public static final int lyrics_text=0x7f0d003a; + public static final int lyrics_title=0x7f0d0039; + public static final int main_select_server_1=0x7f0d003e; + public static final int main_select_server_2=0x7f0d003f; + public static final int main_albums=0x7f0d0042; + public static final int main_albums_alphaByArtist=0x7f0d004a; + public static final int main_albums_alphaByName=0x7f0d0049; + public static final int main_albums_frequent=0x7f0d0045; + public static final int main_albums_highest=0x7f0d0046; + public static final int main_albums_newest=0x7f0d0043; + public static final int main_albums_random=0x7f0d0047; + public static final int main_albums_recent=0x7f0d0044; + public static final int main_albums_starred=0x7f0d0048; + public static final int main_dummy=0x7f0d003c; + public static final int main_list=0x7f0d003b; + public static final int main_offline=0x7f0d0081; + public static final int main_select_server=0x7f0d003d; + public static final int main_shuffle=0x7f0d0080; + public static final int main_songs=0x7f0d0040; + public static final int main_songs_starred=0x7f0d0041; + public static final int menu_exit=0x7f0d007f; + public static final int menu_help=0x7f0d007e; + public static final int menu_lyrics=0x7f0d0089; + public static final int menu_refresh=0x7f0d0092; + public static final int menu_remove=0x7f0d008a; + public static final int menu_remove_all=0x7f0d0086; + public static final int menu_save_playlist=0x7f0d0085; + public static final int menu_screen_on_off=0x7f0d0087; + public static final int menu_settings=0x7f0d007d; + public static final int menu_show_album=0x7f0d0088; + public static final int menu_shuffle=0x7f0d008b; + public static final int notification_image=0x7f0d004c; + public static final int play_video_contents=0x7f0d0051; + public static final int progress_message=0x7f0d0052; + public static final int save_playlist_name=0x7f0d0054; + public static final int save_playlist_root=0x7f0d0053; + public static final int search_albums=0x7f0d0058; + public static final int search_artists=0x7f0d0057; + public static final int search_list=0x7f0d0055; + public static final int search_more_albums=0x7f0d005b; + public static final int search_more_artists=0x7f0d005a; + public static final int search_more_songs=0x7f0d005c; + public static final int search_search=0x7f0d0056; + public static final int search_songs=0x7f0d0059; + public static final int select_album_cover_art=0x7f0d0066; + public static final int select_album_delete=0x7f0d0064; + public static final int select_album_empty=0x7f0d005d; + public static final int select_album_entries=0x7f0d005e; + public static final int select_album_more=0x7f0d0065; + public static final int select_album_pin=0x7f0d0062; + public static final int select_album_play_all=0x7f0d0069; + public static final int select_album_play_last=0x7f0d0061; + public static final int select_album_play_now=0x7f0d0060; + public static final int select_album_select=0x7f0d005f; + public static final int select_album_text1=0x7f0d0067; + public static final int select_album_text2=0x7f0d0068; + public static final int select_album_unpin=0x7f0d0063; + public static final int select_artist_folder=0x7f0d006b; + public static final int select_artist_folder_1=0x7f0d006c; + public static final int select_artist_folder_2=0x7f0d006d; + public static final int select_artist_list=0x7f0d006a; + public static final int select_playlist_empty=0x7f0d006e; + public static final int select_playlist_list=0x7f0d006f; + public static final int song_artist=0x7f0d0073; + public static final int song_check=0x7f0d0070; + public static final int song_duration=0x7f0d0074; + public static final int song_menu_play_last=0x7f0d0095; + public static final int song_menu_play_next=0x7f0d0094; + public static final int song_menu_play_now=0x7f0d0093; + public static final int song_star=0x7f0d0075; + public static final int song_status=0x7f0d0072; + public static final int song_title=0x7f0d0071; + public static final int status_icon=0x7f0d004d; + public static final int status_media_collapse=0x7f0d007a; + public static final int status_media_next=0x7f0d0079; + public static final int status_media_play=0x7f0d0078; + public static final int status_media_prev=0x7f0d0077; + public static final int statusbar=0x7f0d004b; + public static final int tab_progress=0x7f0d007b; + public static final int tab_progress_message=0x7f0d007c; public static final int title=0x7f0d0007; - public static final int toast_layout_root=0x7f0d0033; - public static final int trackname=0x7f0d004c; + public static final int toast_layout_root=0x7f0d0035; + public static final int trackname=0x7f0d004e; } public static final class integer { public static final int config_activityDefaultDur=0x7f080001; @@ -328,13 +332,14 @@ public final class R { public static final class menu { public static final int common=0x7f0c0000; public static final int main=0x7f0c0001; - public static final int nowplaying=0x7f0c0002; - public static final int nowplaying_context=0x7f0c0003; - public static final int select_album=0x7f0c0004; - public static final int select_album_context=0x7f0c0005; - public static final int select_artist_context=0x7f0c0006; - public static final int select_common=0x7f0c0007; - public static final int select_song_context=0x7f0c0008; + public static final int main_offline=0x7f0c0002; + public static final int nowplaying=0x7f0c0003; + public static final int nowplaying_context=0x7f0c0004; + public static final int select_album=0x7f0c0005; + public static final int select_album_context=0x7f0c0006; + public static final int select_artist_context=0x7f0c0007; + public static final int select_common=0x7f0c0008; + public static final int select_song_context=0x7f0c0009; } public static final class plurals { public static final int select_album_donate_dialog_n_trial_days_left=0x7f0a0003; diff --git a/res/drawable-hdpi/ic_menu_offline2.png b/res/drawable-hdpi/ic_menu_offline2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba97fce2e40b93b0aa71ecc121dc7e00877540d4 GIT binary patch literal 2015 zcmV<52O#)~P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000M0NklaaopGe4enk<~ulf^Fuz#W-K^9aL zWw#lNil|@JKF{0t4qual- z2}tw-qJU8$d6Y2$0Rg*0LqknrVPQ?+glUw~#JNL4LQMYt{yVUyRN|Y=Ne*5T6&2O| z@Zm$-ix)2(-one5FCBO9-nCH)tjUug(I-YsQi0Uy=;(u7j4-RkOyD5OWFUli@N`X-~p|2F6(4z^TDlj-W=r9-zZF;@_aA|32+p}lSdY(Uj z?%1|%+fmdXE-NcLq804VaaXQf>G7EY6gDU*s2=s@K;6xoH!Y7JKepq$MyJ#52H&F< z7O~1Ns1W=!V_njDAd@EdyudYT7_`(Om!^3$3 zjQXVipA%1=I`tsdO!>UD7Zh-Sa&vQ!Y}~lfl#`RwIxsNMLo?X0VM7b*n>TIRq#2tx zZ*E?{e*K|~7cUAQ@QDH-I&mZF>45e9{r%F3jmVj*!1rneoS6MDVzkeuar@810*>pUenhtCw?ku&8D z3=FIsKYo1E?c294Po6w+px^#UlO|P9m@uJcIKYQ$FqXU;SeE!&{y{eQKXEV@5+Ph6XN3o+5^! z>gqbIR%_>(GiR)kk&#p&nG54}rUUpnB66z$xe6@1*13ZNiJOJ-0w%~SbO!`9fHSY! zsh|XHOTYz9oH%jB8n{(}W+cI~yheuuvscU~giTIPuCJ=9I%c!k%xBM@?e6XEHKW{? zl9Iw0vkQu4O_?&q`8I~nD4*JCNChYeoUZ}(6+r#1TeoB&+lN5LEVEJ#2(kx`yB7}5 zHbYuk+JW=u&s%sJLxCFtg?iu{t>|Bdaq-|Je<-AUYNH_)VDMSJdUeZ+6)WnOEn9Zz z!Gi}Dq!M-r)`a@TRjXDBtX#RWF(V_Rap}^f4N&4w%u|fqza2r##(4+|>k8S14A+{M zm)DMQqw&Kcd z!92fz`t-?f`SRsLC@thx0X4X&6u`9}CUY3$4W~|>68AiTEVcu6C5!_!M>&?9N+DL% zvb~_7phFpB$93C{x^nmf{}7Tiox+GrNNKktI`b!0^{iR5jIUn361z`up0#V&9>u)H zixw@alPAHQM}VX7#YoNDl=Z}1^aljaX0)YKAduG;a9p}{$%3&JMMXuevR*33xz?;% z!z;BoH8s_E`t)gAe0;nR9`A!=>b2y2`T6;D=p2}l=IH!Q3Y*IpuX0y3VU9bAKU$}6g zPp8u{R^%d9R9(J&S(w@oeI2c>t@MMU#Kgp4A(aL*a;v~_;DX3&xZp06$t0Xn)+=26 zow(H_st%yc@o`gW3I@P4MxWWxuB-FZpUS(YF}Y`%W|dM_8&3heOU?Af#H@Ia|W zSw>%R+aT@c&KGB8WjP&|TsrpR#fv#c2+lT;W%~5#{9lwtfk2v+ke#Aoqk7nAohLx} z-w*tS@%pZ=E_EDWWG#d6t_~}dz)2iIy8&@PMs5c#0-9r4czAduI7#y{xw8g?!NS*bPA(0bGNZXdeOSshA5df`77-?4dP$Cr9t(aFV;307keZnI^fdDQ# zdGh2~l=T$m{{8z@LI_B>3a!9#@7_Hto}3h3&+*(0%;iZgH#&rc{dw%c!NEVFSb!5b zz&m|lU|`5M!J|iytY|m0ANv2naU9Qin9TW{!otGDu~P`#NFn&9EpJDj)X1w7ue8p} z%1Sdib0j=k_#!JszYO;0IF9E$-<5DPiL>WD4#9rFX9DmmkPGA~oaLXDc0qi^D4+ic xqA*esfos>U>Dt@d0}*F*vQ8mqU-#ta_b;FVSyg;)Yq|gc002ovPDHLkV1j&p%&PzZ literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/media_repeat_all.png b/res/drawable-hdpi/media_repeat_all.png index daf966eb24648030056a963113bc450383a107d9..6c2a6ff65ae233f88da52143b873d6d30e3eae7f 100644 GIT binary patch delta 4145 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%0DtHz2o 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%0DtHz2o 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 - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/notification.xml b/res/layout/notification.xml index 5024a3d6..a72de124 100644 --- a/res/layout/notification.xml +++ b/res/layout/notification.xml @@ -1,114 +1,113 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/menu/main_offline.xml b/res/menu/main_offline.xml new file mode 100644 index 00000000..a10f32c3 --- /dev/null +++ b/res/menu/main_offline.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/net/sourceforge/subsonic/androidapp/activity/MainActivity.java b/src/net/sourceforge/subsonic/androidapp/activity/MainActivity.java index 472dee74..ac6a79a3 100644 --- a/src/net/sourceforge/subsonic/androidapp/activity/MainActivity.java +++ b/src/net/sourceforge/subsonic/androidapp/activity/MainActivity.java @@ -1,300 +1,306 @@ -/* - This file is part of Subsonic. - - Subsonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Subsonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Subsonic. If not, see . - - Copyright 2009 (C) Sindre Mehus - */ - -package net.sourceforge.subsonic.androidapp.activity; - -import java.util.Arrays; - -import net.sourceforge.subsonic.androidapp.R; -import net.sourceforge.subsonic.androidapp.service.DownloadService; -import net.sourceforge.subsonic.androidapp.service.DownloadServiceImpl; -import net.sourceforge.subsonic.androidapp.util.Constants; -import net.sourceforge.subsonic.androidapp.util.MergeAdapter; -import net.sourceforge.subsonic.androidapp.util.Util; -import net.sourceforge.subsonic.androidapp.util.FileUtil; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ListView; -import android.widget.TextView; - -public class MainActivity extends SubsonicTabActivity { - - private static final int MENU_GROUP_SERVER = 10; - private static final int MENU_ITEM_SERVER_1 = 101; - private static final int MENU_ITEM_SERVER_2 = 102; - private static final int MENU_ITEM_SERVER_3 = 103; - private static final int MENU_ITEM_OFFLINE = 104; - - private String theme; - - private static boolean infoDialogDisplayed; - - /** - * Called when the activity is first created. - */ - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_EXIT)) { - exit(); - return; - } - - setContentView(R.layout.main); - - loadSettings(); - - View buttons = LayoutInflater.from(this).inflate(R.layout.main_buttons, null); - - final View serverButton = buttons.findViewById(R.id.main_select_server); - final TextView serverTextView = (TextView) serverButton.findViewById(R.id.main_select_server_2); - - final View albumsTitle = buttons.findViewById(R.id.main_albums); - final View songsTitle = buttons.findViewById(R.id.main_songs); - final View albumsNewestButton = buttons.findViewById(R.id.main_albums_newest); - final View albumsRandomButton = buttons.findViewById(R.id.main_albums_random); - final View albumsHighestButton = buttons.findViewById(R.id.main_albums_highest); - final View albumsStarredButton = buttons.findViewById(R.id.main_albums_starred); - final View albumsRecentButton = buttons.findViewById(R.id.main_albums_recent); - 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 songsStarredButton = buttons.findViewById(R.id.main_songs_starred); - - final View dummyView = findViewById(R.id.main_dummy); - - int instance = Util.getActiveServer(this); - String name = Util.getServerName(this, instance); - serverTextView.setText(name); - - ListView list = (ListView) findViewById(R.id.main_list); - list.setOnTouchListener(gestureListener); - - MergeAdapter adapter = new MergeAdapter(); - adapter.addViews(Arrays.asList(serverButton), true); - - if (!Util.isOffline(this)) { - adapter.addView(songsTitle, false); - adapter.addViews(Arrays.asList(songsStarredButton), true); - adapter.addView(albumsTitle, false); - adapter.addViews(Arrays.asList(albumsNewestButton, albumsRecentButton, albumsFrequentButton, albumsHighestButton, albumsRandomButton, albumsStarredButton, albumsAlphaByNameButton, albumsAlphaByArtistButton), true); - } - - list.setAdapter(adapter); - registerForContextMenu(dummyView); - - list.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (view == serverButton) { - dummyView.showContextMenu(); - } else if (view == albumsNewestButton) { - showAlbumList("newest"); - } else if (view == albumsRandomButton) { - showAlbumList("random"); - } else if (view == albumsHighestButton) { - showAlbumList("highest"); - } else if (view == albumsRecentButton) { - showAlbumList("recent"); - } else if (view == albumsFrequentButton) { - showAlbumList("frequent"); - } else if (view == albumsStarredButton) { - showAlbumList("starred"); - } else if (view == albumsAlphaByNameButton) { - showAlbumList("alphabeticalByName"); - } else if (view == albumsAlphaByArtistButton) { - showAlbumList("alphabeticalByArtist"); - } else if (view == songsStarredButton) { - showStarredSongs(); - } - } - }); - - // Title: Subsonic - setTitle(R.string.common_appname); - - // Remember the current theme. - theme = Util.getTheme(this); - - showInfoDialog(); - } - - private void loadSettings() { - PreferenceManager.setDefaultValues(this, R.xml.settings, false); - SharedPreferences prefs = Util.getPreferences(this); - if (!prefs.contains(Constants.PREFERENCES_KEY_CACHE_LOCATION)) { - SharedPreferences.Editor editor = prefs.edit(); - editor.putString(Constants.PREFERENCES_KEY_CACHE_LOCATION, FileUtil.getDefaultMusicDirectory().getPath()); - editor.commit(); - } - } - - @Override - protected void onResume() { - super.onResume(); - - // Restart activity if theme has changed. - if (theme != null && !theme.equals(Util.getTheme(this))) { - restart(); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main, menu); - super.onCreateOptionsMenu(menu); - - return true; - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, view, menuInfo); - - MenuItem menuItem1 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_SERVER_1, MENU_ITEM_SERVER_1, Util.getServerName(this, 1)); - MenuItem menuItem2 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_SERVER_2, MENU_ITEM_SERVER_2, Util.getServerName(this, 2)); - MenuItem menuItem3 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_SERVER_3, MENU_ITEM_SERVER_3, Util.getServerName(this, 3)); - MenuItem menuItem4 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_OFFLINE, MENU_ITEM_OFFLINE, Util.getServerName(this, 0)); - menu.setGroupCheckable(MENU_GROUP_SERVER, true, true); - menu.setHeaderTitle(R.string.main_select_server); - - switch (Util.getActiveServer(this)) { - case 0: - menuItem4.setChecked(true); - break; - case 1: - menuItem1.setChecked(true); - break; - case 2: - menuItem2.setChecked(true); - break; - case 3: - menuItem3.setChecked(true); - break; - } - } - - @Override - public boolean onContextItemSelected(MenuItem menuItem) { - switch (menuItem.getItemId()) { - case MENU_ITEM_OFFLINE: - setActiveServer(0); - break; - case MENU_ITEM_SERVER_1: - setActiveServer(1); - break; - case MENU_ITEM_SERVER_2: - setActiveServer(2); - break; - case MENU_ITEM_SERVER_3: - setActiveServer(3); - break; - default: - return super.onContextItemSelected(menuItem); - } - - // Restart activity - restart(); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - - case R.id.main_shuffle: - Intent intent1 = new Intent(this, DownloadActivity.class); - intent1.putExtra(Constants.INTENT_EXTRA_NAME_SHUFFLE, true); - Util.startActivityWithoutTransition(this, intent1); - return true; - - case R.id.menu_exit: - Intent intent = new Intent(this, MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - intent.putExtra(Constants.INTENT_EXTRA_NAME_EXIT, true); - Util.startActivityWithoutTransition(this, intent); - return true; - - case R.id.menu_settings: - startActivity(new Intent(this, SettingsActivity.class)); - return true; - - case R.id.menu_help: - startActivity(new Intent(this, HelpActivity.class)); - return true; - } - - return false; - } - - private void setActiveServer(int instance) { - if (Util.getActiveServer(this) != instance) { - DownloadService service = getDownloadService(); - if (service != null) { - service.clearIncomplete(); - } - Util.setActiveServer(this, instance); - } - } - - private void restart() { - Intent intent = new Intent(this, MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - Util.startActivityWithoutTransition(this, intent); - } - - private void exit() { - stopService(new Intent(this, DownloadServiceImpl.class)); - Util.unregisterMediaButtonEventReceiver(this); - finish(); - } - - private void showInfoDialog() { - if (!infoDialogDisplayed) { - infoDialogDisplayed = true; - if (Util.getRestUrl(this, null).contains("demo.subsonic.org")) { - Util.info(this, R.string.main_welcome_title, R.string.main_welcome_text); - } - } - } - - private void showAlbumList(String type) { - Intent intent = new Intent(this, SelectAlbumActivity.class); - intent.putExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE, type); - intent.putExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, Util.getMaxAlbums(this)); - intent.putExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET, 0); - Util.startActivityWithoutTransition(this, intent); - } - - private void showStarredSongs() { - Intent intent = new Intent(this, SelectAlbumActivity.class); - intent.putExtra(Constants.INTENT_EXTRA_NAME_STARRED, 1); - Util.startActivityWithoutTransition(this, intent); - } +/* + This file is part of Subsonic. + + Subsonic is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Subsonic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Subsonic. If not, see . + + Copyright 2009 (C) Sindre Mehus + */ + +package net.sourceforge.subsonic.androidapp.activity; + +import java.util.Arrays; + +import net.sourceforge.subsonic.androidapp.R; +import net.sourceforge.subsonic.androidapp.service.DownloadService; +import net.sourceforge.subsonic.androidapp.service.DownloadServiceImpl; +import net.sourceforge.subsonic.androidapp.util.Constants; +import net.sourceforge.subsonic.androidapp.util.MergeAdapter; +import net.sourceforge.subsonic.androidapp.util.Util; +import net.sourceforge.subsonic.androidapp.util.FileUtil; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.view.ContextMenu; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +public class MainActivity extends SubsonicTabActivity { + + private static final int MENU_GROUP_SERVER = 10; + private static final int MENU_ITEM_SERVER_1 = 101; + private static final int MENU_ITEM_SERVER_2 = 102; + private static final int MENU_ITEM_SERVER_3 = 103; + private static final int MENU_ITEM_OFFLINE = 104; + + private String theme; + + private static boolean infoDialogDisplayed; + + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_EXIT)) { + exit(); + return; + } + + setContentView(R.layout.main); + + loadSettings(); + + View buttons = LayoutInflater.from(this).inflate(R.layout.main_buttons, null); + + final View serverButton = buttons.findViewById(R.id.main_select_server); + final TextView serverTextView = (TextView) serverButton.findViewById(R.id.main_select_server_2); + + final View albumsTitle = buttons.findViewById(R.id.main_albums); + final View songsTitle = buttons.findViewById(R.id.main_songs); + final View albumsNewestButton = buttons.findViewById(R.id.main_albums_newest); + final View albumsRandomButton = buttons.findViewById(R.id.main_albums_random); + final View albumsHighestButton = buttons.findViewById(R.id.main_albums_highest); + final View albumsStarredButton = buttons.findViewById(R.id.main_albums_starred); + final View albumsRecentButton = buttons.findViewById(R.id.main_albums_recent); + 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 songsStarredButton = buttons.findViewById(R.id.main_songs_starred); + + final View dummyView = findViewById(R.id.main_dummy); + + int instance = Util.getActiveServer(this); + String name = Util.getServerName(this, instance); + serverTextView.setText(name); + + ListView list = (ListView) findViewById(R.id.main_list); + list.setOnTouchListener(gestureListener); + + MergeAdapter adapter = new MergeAdapter(); + adapter.addViews(Arrays.asList(serverButton), true); + + if (!Util.isOffline(this)) { + adapter.addView(songsTitle, false); + adapter.addViews(Arrays.asList(songsStarredButton), true); + adapter.addView(albumsTitle, false); + adapter.addViews(Arrays.asList(albumsNewestButton, albumsRecentButton, albumsFrequentButton, albumsHighestButton, albumsRandomButton, albumsStarredButton, albumsAlphaByNameButton, albumsAlphaByArtistButton), true); + } + + list.setAdapter(adapter); + registerForContextMenu(dummyView); + + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (view == serverButton) { + dummyView.showContextMenu(); + } else if (view == albumsNewestButton) { + showAlbumList("newest"); + } else if (view == albumsRandomButton) { + showAlbumList("random"); + } else if (view == albumsHighestButton) { + showAlbumList("highest"); + } else if (view == albumsRecentButton) { + showAlbumList("recent"); + } else if (view == albumsFrequentButton) { + showAlbumList("frequent"); + } else if (view == albumsStarredButton) { + showAlbumList("starred"); + } else if (view == albumsAlphaByNameButton) { + showAlbumList("alphabeticalByName"); + } else if (view == albumsAlphaByArtistButton) { + showAlbumList("alphabeticalByArtist"); + } else if (view == songsStarredButton) { + showStarredSongs(); + } + } + }); + + // Title: Subsonic + setTitle(R.string.common_appname); + + // Remember the current theme. + theme = Util.getTheme(this); + + showInfoDialog(); + } + + private void loadSettings() { + PreferenceManager.setDefaultValues(this, R.xml.settings, false); + SharedPreferences prefs = Util.getPreferences(this); + if (!prefs.contains(Constants.PREFERENCES_KEY_CACHE_LOCATION)) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(Constants.PREFERENCES_KEY_CACHE_LOCATION, FileUtil.getDefaultMusicDirectory().getPath()); + editor.commit(); + } + } + + @Override + protected void onResume() { + super.onResume(); + + // Restart activity if theme has changed. + if (theme != null && !theme.equals(Util.getTheme(this))) { + restart(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main_offline, menu); + inflater.inflate(R.menu.main, menu); + super.onCreateOptionsMenu(menu); + + return true; + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, view, menuInfo); + + MenuItem menuItem1 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_SERVER_1, MENU_ITEM_SERVER_1, Util.getServerName(this, 1)); + MenuItem menuItem2 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_SERVER_2, MENU_ITEM_SERVER_2, Util.getServerName(this, 2)); + MenuItem menuItem3 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_SERVER_3, MENU_ITEM_SERVER_3, Util.getServerName(this, 3)); + MenuItem menuItem4 = menu.add(MENU_GROUP_SERVER, MENU_ITEM_OFFLINE, MENU_ITEM_OFFLINE, Util.getServerName(this, 0)); + menu.setGroupCheckable(MENU_GROUP_SERVER, true, true); + menu.setHeaderTitle(R.string.main_select_server); + + switch (Util.getActiveServer(this)) { + case 0: + menuItem4.setChecked(true); + break; + case 1: + menuItem1.setChecked(true); + break; + case 2: + menuItem2.setChecked(true); + break; + case 3: + menuItem3.setChecked(true); + break; + } + } + + @Override + public boolean onContextItemSelected(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case MENU_ITEM_OFFLINE: + setActiveServer(0); + break; + case MENU_ITEM_SERVER_1: + setActiveServer(1); + break; + case MENU_ITEM_SERVER_2: + setActiveServer(2); + break; + case MENU_ITEM_SERVER_3: + setActiveServer(3); + break; + default: + return super.onContextItemSelected(menuItem); + } + + // Restart activity + restart(); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + + case R.id.main_offline: + setActiveServer(0); + restart(); + return true; + + case R.id.main_shuffle: + Intent intent1 = new Intent(this, DownloadActivity.class); + intent1.putExtra(Constants.INTENT_EXTRA_NAME_SHUFFLE, true); + Util.startActivityWithoutTransition(this, intent1); + return true; + + case R.id.menu_exit: + Intent intent = new Intent(this, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra(Constants.INTENT_EXTRA_NAME_EXIT, true); + Util.startActivityWithoutTransition(this, intent); + return true; + + case R.id.menu_settings: + startActivity(new Intent(this, SettingsActivity.class)); + return true; + + case R.id.menu_help: + startActivity(new Intent(this, HelpActivity.class)); + return true; + } + + return false; + } + + private void setActiveServer(int instance) { + if (Util.getActiveServer(this) != instance) { + DownloadService service = getDownloadService(); + if (service != null) { + service.clearIncomplete(); + } + Util.setActiveServer(this, instance); + } + } + + private void restart() { + Intent intent = new Intent(this, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Util.startActivityWithoutTransition(this, intent); + } + + private void exit() { + stopService(new Intent(this, DownloadServiceImpl.class)); + Util.unregisterMediaButtonEventReceiver(this); + finish(); + } + + private void showInfoDialog() { + if (!infoDialogDisplayed) { + infoDialogDisplayed = true; + if (Util.getRestUrl(this, null).contains("demo.subsonic.org")) { + Util.info(this, R.string.main_welcome_title, R.string.main_welcome_text); + } + } + } + + private void showAlbumList(String type) { + Intent intent = new Intent(this, SelectAlbumActivity.class); + intent.putExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE, type); + intent.putExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, Util.getMaxAlbums(this)); + intent.putExtra(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET, 0); + Util.startActivityWithoutTransition(this, intent); + } + + private void showStarredSongs() { + Intent intent = new Intent(this, SelectAlbumActivity.class); + intent.putExtra(Constants.INTENT_EXTRA_NAME_STARRED, 1); + Util.startActivityWithoutTransition(this, intent); + } } \ No newline at end of file diff --git a/src/net/sourceforge/subsonic/androidapp/activity/SubsonicTabActivity.java b/src/net/sourceforge/subsonic/androidapp/activity/SubsonicTabActivity.java index b778e89c..ca8e409f 100644 --- a/src/net/sourceforge/subsonic/androidapp/activity/SubsonicTabActivity.java +++ b/src/net/sourceforge/subsonic/androidapp/activity/SubsonicTabActivity.java @@ -68,7 +68,9 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ private View homeButton; private View musicButton; private View searchButton; + private View searchSeparator; private View playlistButton; + private View playlistSeparator; private View nowPlayingButton; //private boolean shortPress = false; @@ -132,6 +134,8 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ } }); + searchSeparator = findViewById(R.id.button_bar_search_separator); + searchButton = findViewById(R.id.button_bar_search); searchButton.setOnClickListener(new View.OnClickListener() { @Override @@ -142,6 +146,8 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ } }); + playlistSeparator = findViewById(R.id.button_bar_playlists_separator); + playlistButton = findViewById(R.id.button_bar_playlists); playlistButton.setOnClickListener(new View.OnClickListener() { @Override @@ -265,7 +271,9 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ private void updateButtonVisibility() { int visibility = Util.isOffline(this) ? View.GONE : View.VISIBLE; searchButton.setVisibility(visibility); + searchSeparator.setVisibility(visibility); playlistButton.setVisibility(visibility); + playlistSeparator.setVisibility(visibility); } public void setProgressVisible(boolean visible) {