MX Player video playback, bluetooth adjustments

This commit is contained in:
Joshua Bahnsen 2013-05-31 01:02:25 -07:00
parent 5483cf16dc
commit d76e427bdc
26 changed files with 531 additions and 494 deletions

View File

@ -126,6 +126,9 @@
</receiver>
<receiver a:name=".receiver.BluetoothIntentReceiver" >
<intent-filter>
<action a:name="android.bluetooth.device.action.ACL_CONNETED" />
<action a:name="android.bluetooth.device.action.ACL_DISCONNETED" />
<action a:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />
<action a:name="android.bluetooth.a2dp.action.SINK_STATE_CHANGED" />
</intent-filter>
</receiver>

View File

@ -38,6 +38,8 @@ public final class R {
public static final int searchValues=0x7f0b0011;
public static final int themeNames=0x7f0b0001;
public static final int themeValues=0x7f0b0000;
public static final int videoPlayerNames=0x7f0b0014;
public static final int videoPlayerValues=0x7f0b0013;
}
public static final class attr {
/** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
@ -1047,14 +1049,12 @@ or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>na
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 play_video_loading=0x7f080085;
public static final int play_video_noplugin=0x7f080086;
public static final int playlist_label=0x7f080087;
public static final int playlist_update_info=0x7f080088;
public static final int playlist_updated_info=0x7f080089;
public static final int playlist_updated_info_error=0x7f08008a;
public static final int playlist_error=0x7f08008b;
public static final int progress_wait=0x7f08008c;
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;
/** 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,191 +1064,193 @@ or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>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=0x7f08008d;
public static final int search_albums=0x7f08008e;
public static final int search_artists=0x7f08008f;
public static final int search_label=0x7f080090;
public static final int search_more=0x7f080091;
public static final int search_no_match=0x7f080092;
public static final int search_search=0x7f080093;
public static final int search_songs=0x7f080094;
public static final int search_title=0x7f080095;
public static final int select_album_donate_dialog_0_trial_days_left=0x7f080096;
public static final int select_album_donate_dialog_later=0x7f080097;
public static final int select_album_donate_dialog_message=0x7f080098;
public static final int select_album_donate_dialog_now=0x7f080099;
public static final int select_album_empty=0x7f08009a;
public static final int select_album_more=0x7f08009b;
public static final int select_album_n_selected=0x7f08009c;
public static final int select_album_n_unselected=0x7f08009d;
public static final int select_album_no_network=0x7f08009e;
public static final int select_album_no_sdcard=0x7f08009f;
public static final int select_album_not_licensed=0x7f0800a0;
public static final int select_album_offline=0x7f0800a1;
public static final int select_album_play_all=0x7f0800a2;
public static final int select_album_searching=0x7f0800a3;
public static final int select_album_select=0x7f0800a4;
public static final int select_artist_all_folders=0x7f0800a5;
public static final int select_artist_empty=0x7f0800a6;
public static final int select_artist_folder=0x7f0800a7;
public static final int select_artist_refresh=0x7f0800a8;
public static final int select_genre_empty=0x7f0800a9;
public static final int select_playlist_empty=0x7f0800aa;
public static final int service_connecting=0x7f0800ab;
public static final int settings_appearance_title=0x7f0800ac;
public static final int settings_buffer_length=0x7f0800ad;
public static final int settings_buffer_length_0=0x7f0800ae;
public static final int settings_buffer_length_1=0x7f0800af;
public static final int settings_buffer_length_10=0x7f0800b0;
public static final int settings_buffer_length_12=0x7f0800b1;
public static final int settings_buffer_length_120=0x7f0800b2;
public static final int settings_buffer_length_15=0x7f0800b3;
public static final int settings_buffer_length_2=0x7f0800b4;
public static final int settings_buffer_length_20=0x7f0800b5;
public static final int settings_buffer_length_30=0x7f0800b6;
public static final int settings_buffer_length_5=0x7f0800b7;
public static final int settings_buffer_length_60=0x7f0800b8;
public static final int settings_buffer_length_8=0x7f0800b9;
public static final int settings_cache_location=0x7f0800ba;
public static final int settings_cache_location_error=0x7f0800bb;
public static final int settings_cache_size=0x7f0800bc;
public static final int settings_cache_size_100=0x7f0800bd;
public static final int settings_cache_size_1000=0x7f0800be;
public static final int settings_cache_size_10000=0x7f0800bf;
public static final int settings_cache_size_200=0x7f0800c0;
public static final int settings_cache_size_2000=0x7f0800c1;
public static final int settings_cache_size_20000=0x7f0800c2;
public static final int settings_cache_size_500=0x7f0800c3;
public static final int settings_cache_size_5000=0x7f0800c4;
public static final int settings_cache_size_unlimited=0x7f0800c5;
public static final int settings_cache_title=0x7f0800c6;
public static final int settings_chat_refresh=0x7f0800c7;
public static final int settings_clear_bookmark=0x7f0800c8;
public static final int settings_clear_bookmark_summary=0x7f0800c9;
public static final int settings_clear_playlist=0x7f0800ca;
public static final int settings_clear_playlist_summary=0x7f0800cb;
public static final int settings_clear_search_history=0x7f0800cc;
public static final int settings_connection_failure=0x7f0800cd;
public static final int settings_default_albums=0x7f0800ce;
public static final int settings_default_artists=0x7f0800cf;
public static final int settings_default_songs=0x7f0800d0;
public static final int settings_directory_cache_time=0x7f0800d1;
public static final int settings_directory_cache_time_0=0x7f0800d2;
public static final int settings_directory_cache_time_1=0x7f0800d3;
public static final int settings_directory_cache_time_10=0x7f0800d4;
public static final int settings_directory_cache_time_2=0x7f0800d5;
public static final int settings_directory_cache_time_30=0x7f0800d6;
public static final int settings_directory_cache_time_5=0x7f0800d7;
public static final int settings_directory_cache_time_60=0x7f0800d8;
public static final int settings_disc_sort=0x7f0800d9;
public static final int settings_disc_sort_summary=0x7f0800da;
public static final int settings_display_bitrate=0x7f0800db;
public static final int settings_display_bitrate_summary=0x7f0800dc;
public static final int settings_download_transition=0x7f0800dd;
public static final int settings_download_transition_summary=0x7f0800de;
public static final int settings_gapless_playback=0x7f0800df;
public static final int settings_gapless_playback_summary=0x7f0800e0;
public static final int settings_hide_media_summary=0x7f0800e1;
public static final int settings_hide_media_title=0x7f0800e2;
public static final int settings_hide_media_toast=0x7f0800e3;
public static final int settings_increment_time=0x7f0800e4;
public static final int settings_invalid_url=0x7f0800e5;
public static final int settings_invalid_username=0x7f0800e6;
public static final int settings_max_albums=0x7f0800e7;
public static final int settings_max_artists=0x7f0800e8;
public static final int settings_max_bitrate_112=0x7f0800e9;
public static final int settings_max_bitrate_128=0x7f0800ea;
public static final int settings_max_bitrate_160=0x7f0800eb;
public static final int settings_max_bitrate_192=0x7f0800ec;
public static final int settings_max_bitrate_256=0x7f0800ed;
public static final int settings_max_bitrate_32=0x7f0800ee;
public static final int settings_max_bitrate_320=0x7f0800ef;
public static final int settings_max_bitrate_64=0x7f0800f0;
public static final int settings_max_bitrate_80=0x7f0800f1;
public static final int settings_max_bitrate_96=0x7f0800f2;
public static final int settings_max_bitrate_mobile=0x7f0800f3;
public static final int settings_max_bitrate_unlimited=0x7f0800f4;
public static final int settings_max_bitrate_wifi=0x7f0800f5;
public static final int settings_max_songs=0x7f0800f6;
public static final int settings_media_button_summary=0x7f0800f7;
public static final int settings_media_button_title=0x7f0800f8;
public static final int settings_network_timeout=0x7f0800f9;
public static final int settings_network_timeout_105000=0x7f0800fa;
public static final int settings_network_timeout_120000=0x7f0800fb;
public static final int settings_network_timeout_15000=0x7f0800fc;
public static final int settings_network_timeout_30000=0x7f0800fd;
public static final int settings_network_timeout_45000=0x7f0800fe;
public static final int settings_network_timeout_60000=0x7f0800ff;
public static final int settings_network_timeout_75000=0x7f080100;
public static final int settings_network_timeout_90000=0x7f080101;
public static final int settings_network_title=0x7f080102;
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_server_add_server=0x7f080120;
public static final int settings_server_address=0x7f080121;
public static final int settings_server_name=0x7f080122;
public static final int settings_server_number=0x7f080123;
public static final int settings_server_password=0x7f080124;
public static final int settings_server_remove_server=0x7f080125;
public static final int settings_server_scaling_summary=0x7f080126;
public static final int settings_server_scaling_title=0x7f080127;
public static final int settings_server_unused=0x7f080128;
public static final int settings_server_unused1=0x7f080129;
public static final int settings_server_unused2=0x7f08012a;
public static final int settings_server_unused3=0x7f08012b;
public static final int settings_server_username=0x7f08012c;
public static final int settings_servers_title=0x7f08012d;
public static final int settings_show_lockscreen_controls=0x7f08012e;
public static final int settings_show_lockscreen_controls_summary=0x7f08012f;
public static final int settings_show_notification=0x7f080130;
public static final int settings_show_notification_always=0x7f080131;
public static final int settings_show_notification_always_summary=0x7f080132;
public static final int settings_show_notification_summary=0x7f080133;
public static final int settings_show_now_playing=0x7f080134;
public static final int settings_show_now_playing_summary=0x7f080135;
public static final int settings_show_track_number=0x7f080136;
public static final int settings_show_track_number_summary=0x7f080137;
public static final int settings_test_connection_title=0x7f080138;
public static final int settings_testing_connection=0x7f080139;
public static final int settings_testing_ok=0x7f08013a;
public static final int settings_testing_unlicensed=0x7f08013b;
public static final int settings_theme_dark=0x7f08013c;
public static final int settings_theme_light=0x7f08013d;
public static final int settings_theme_title=0x7f08013e;
public static final int settings_title=0x7f08013f;
public static final int settings_use_folder_for_album_artist=0x7f080140;
public static final int settings_use_folder_for_album_artist_summary=0x7f080141;
public static final int settings_use_id3=0x7f080142;
public static final int settings_use_id3_summary=0x7f080143;
public static final int settings_use_stream_proxy=0x7f080144;
public static final int settings_use_stream_proxy_summary=0x7f080145;
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;
@ -1264,9 +1266,11 @@ or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>na
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 widget_initial_text=0x7f080155;
public static final int widget_sdcard_busy=0x7f080156;
public static final int widget_sdcard_missing=0x7f080157;
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 class style {
public static final int MenuDrawer=0x7f0a0005;

View File

@ -7,9 +7,9 @@
<string name="background_task.not_found">Ressources introuvables. Veuillez vérifier l\'adresse du serveur.</string>
<string name="background_task.parse_error">Réponse incorrecte. Veuillez vérifier l\'adresse du serveur.</string>
<string name="background_task.wait">Veuillez patienter&#8230;</string>
<string name="button_bar.bookmarks">Bookmarks</string>
<string name="button_bar.bookmarks">Signets</string>
<string name="button_bar.browse">Bibliothèque musicale</string>
<string name="button_bar.chat">Clavardage</string>
<string name="button_bar.chat">Salon de discussion</string>
<string name="button_bar.home">Accueil Ultrasonic</string>
<string name="button_bar.now_playing">Lecture en cours</string>
<string name="button_bar.playlists">Playlists</string>
@ -17,27 +17,27 @@
<string name="chat.send_a_message">Envoyer un message</string>
<string name="common.appname">UltraSonic</string>
<string name="common.cancel">Annuler</string>
<string name="common.comment">Comment</string>
<string name="common.confirm">Confirm</string>
<string name="common.comment">Commenter</string>
<string name="common.confirm">Confirmer</string>
<string name="common.delete">Supprimer</string>
<string name="common.download">Download</string>
<string name="common.info">Details</string>
<string name="common.multiple_genres">Genres multiples</string>
<string name="common.name">Name</string>
<string name="common.name">Nom</string>
<string name="common.ok">OK</string>
<string name="common.pin">Épingler</string>
<string name="common.play_last">Jouer en dernier</string>
<string name="common.play_next">Jouer à la suite</string>
<string name="common.play_now">Jouer maintenant</string>
<string name="common.play_shuffled">Play Shuffled</string>
<string name="common.play_shuffled">Jouer aleatoirement</string>
<string name="common.public">Public</string>
<string name="common.save">Enregistrer</string>
<string name="common.show_artist">Show Artist</string>
<string name="common.show_artist">Voir Artiste</string>
<string name="common.unpin">Détacher</string>
<string name="common.various_artists">Artistes divers</string>
<string name="delete_playlist">Do you want to delete %1$s</string>
<string name="download.bookmark_removed" formatted="false">Bookmark removed.</string>
<string name="download.bookmark_set_at_position" formatted="false">Bookmark set at %s.</string>
<string name="delete_playlist">Voulez-vous supprimer %1$s</string>
<string name="download.bookmark_removed" formatted="false">Signet supprimé.</string>
<string name="download.bookmark_set_at_position" formatted="false">Bookmark défini sur %s.</string>
<string name="download.empty">Playlist vide</string>
<string name="download.jukebox_not_authorized">La télécommande n\'est pas autorisée. Veuillez activer le mode jukebox dans <b>Utilisateurs &gt; Paramètres</b> à partir de votre serveur Subsonic.</string>
<string name="download.jukebox_off">Télécommande désactivée. La musique est jouée sur le téléphone.</string>
@ -55,8 +55,8 @@
<string name="download.menu_screen_off">Désactiver l\'écran</string>
<string name="download.menu_screen_on">Sur l\'écran</string>
<string name="download.menu_show_album">Afficher l\'album</string>
<string name="download.menu_shuffle">Mélanger</string>
<string name="download.menu_shuffle_notification">Playlist mélangée</string>
<string name="download.menu_shuffle">Aleatoire</string>
<string name="download.menu_shuffle_notification">Playlist aleatoire</string>
<string name="download.menu_visualizer">Visualiseur</string>
<string name="download.playerstate_buffering">Mise en mémoire</string>
<string name="download.playerstate_downloading">Téléchargement - %s</string>
@ -81,8 +81,8 @@
<string name="help.loading">Chargement&#8230;</string>
<string name="help.title">Bienvenue dans UltraSonic !</string>
<string name="help.url">file:///android_asset/html/en/index.html</string>
<string name="jukebox.is_default">Jukebox By Default</string>
<string name="lyrics.nomatch">Aucune parole trouvée</string>
<string name="jukebox.is_default">Jukebox par defaut</string>
<string name="lyrics.nomatch">Aucunes paroles trouvées</string>
<string name="main.albums_alphaByArtist">Alphabétique par artiste</string>
<string name="main.albums_alphaByName">Alphabétique par nom</string>
<string name="main.albums_frequent">Récemment écoutés</string>
@ -108,14 +108,14 @@
<string name="main.welcome_text">Bienvenue dans UltraSonic ! L\'application n\'est pas configurée. Après avoir configuré votre serveur personnel (disponible à partir de <b>subsonic.org</b>), veuillez accéder aux <b>Paramètres</b> et modifier la configuration pour vous y connecter.</string>
<string name="main.welcome_title">Bienvenue!</string>
<string name="menu.about">À propos</string>
<string name="menu.add_playlist">Add To Playlist</string>
<string name="menu.add_playlist">Ajouer à la playlist</string>
<string name="menu.common">Général</string>
<string name="menu.deleted_playlist">Deleted playlist %s</string>
<string name="menu.deleted_playlist_error">Failed to delete playlist %s</string>
<string name="menu.deleted_playlist">Playlist %s supprimée</string>
<string name="menu.deleted_playlist_error">Echec de suppression playlist %s</string>
<string name="menu.exit">Quitter</string>
<string name="menu.help">Aide</string>
<string name="menu.navigation">Navigation</string>
<string name="menu.remove_playlist">Remove From Playlist</string>
<string name="menu.remove_playlist">Supprimer de la playlist</string>
<string name="menu.search">Recherche</string>
<string name="menu.settings">Paramètres</string>
<string name="music_library.label">Bibliothèque musicale</string>
@ -128,15 +128,13 @@
<string name="parser.reading_done">Lecture du serveur. Terminé!</string>
<string name="parser.upgrade_client">Versions incompatible. Veuillez mette à jour l\'application Android UltraSonic.</string>
<string name="parser.upgrade_server">Versions incompatible. Veuillez mette à jour le serveur Subsonic.</string>
<string name="play_video.loading">Chargement de la vidéo&#8230;</string>
<string name="play_video.noplugin">Veuillez installer Adobe Flash Player à partir du Google Play Store.</string>
<string name="playlist.label">Playlists</string>
<string name="playlist.update_info">Update Information</string>
<string name="playlist.updated_info">Updated playlist information for %s</string>
<string name="playlist.updated_info_error">Failed to update playlist information for %s</string>
<string name="playlist_error">Failed to grab list of playlists</string>
<string name="playlist.update_info">Mise à jour des informations</string>
<string name="playlist.updated_info">Informations de la playlist %s mises à jour</string>
<string name="playlist.updated_info_error">Echec de mise à jour des informations pour la playlist %s</string>
<string name="playlist_error">Echec de récupération de la liste des playlists</string>
<string name="progress.wait">Veuillez patienter&#8230;</string>
<string name="removed_playlist">Removed %1$s songs from \"%2$s\"</string>
<string name="removed_playlist"> %1$s titre(s) enlevé(s) de \"%2$s\"</string>
<string name="search.albums">Albums</string>
<string name="search.artists">Artistes</string>
<string name="search.label">Recherche</string>
@ -194,36 +192,36 @@
<string name="settings.cache_size_5000">5 Go</string>
<string name="settings.cache_size_unlimited">Illimité</string>
<string name="settings.cache_title">Cache des musiques</string>
<string name="settings.chat_refresh">Intervalle de clavardage</string>
<string name="settings.clear_bookmark">Clear Bookmark</string>
<string name="settings.clear_bookmark_summary">Clear bookmark upon completion of playback of a song</string>
<string name="settings.clear_playlist">Clear Playlist</string>
<string name="settings.clear_playlist_summary">Clear the playlist upon completion of playback of all songs</string>
<string name="settings.chat_refresh">Délai de rafraichissement du salon de discussion</string>
<string name="settings.clear_bookmark">Effacer le signet</string>
<string name="settings.clear_bookmark_summary">Effacer le signet à la fin de la lecture d\'un titre</string>
<string name="settings.clear_playlist">Effacer la playlist</string>
<string name="settings.clear_playlist_summary">Effacer la playlist à la fin de la lecture de tous les titres</string>
<string name="settings.clear_search_history">Effacer l\'historique des recherches</string>
<string name="settings.connection_failure">Connection échouée</string>
<string name="settings.default_albums">Albums par défaut</string>
<string name="settings.default_artists">Artistes par défaut</string>
<string name="settings.default_songs">Musiques par défaut</string>
<string name="settings.directory_cache_time">Directory Cache Time</string>
<string name="settings.directory_cache_time_0">Disabled</string>
<string name="settings.directory_cache_time">Durée du cache</string>
<string name="settings.directory_cache_time_0">Désactivé</string>
<string name="settings.directory_cache_time_1">1 minute</string>
<string name="settings.directory_cache_time_10">10 minutes</string>
<string name="settings.directory_cache_time_2">2 minutes</string>
<string name="settings.directory_cache_time_30">30 minutes</string>
<string name="settings.directory_cache_time_5">5 minutes</string>
<string name="settings.directory_cache_time_60">1 hour</string>
<string name="settings.disc_sort">Sort Songs By Disc</string>
<string name="settings.disc_sort_summary">Sort song list by disc number and track number</string>
<string name="settings.disc_sort">Trier les titres par disque</string>
<string name="settings.disc_sort_summary">Trier la liste des titres par numero de disques/pistes</string>
<string name="settings.display_bitrate">Afficher bitrate et suffixe du fichier</string>
<string name="settings.display_bitrate_summary">Ajouter le nom d\'artiste, bitrate et suffixe du fichier</string>
<string name="settings.download_transition">Show Downloads On Play</string>
<string name="settings.download_transition_summary">Transition to download activity when starting playback</string>
<string name="settings.download_transition">Afficher le téléchargement lors de la lecture</string>
<string name="settings.download_transition_summary">Aller vers les téléchargements lorsque qu\'un titre est écouté</string>
<string name="settings.gapless_playback">Gapless Playback</string>
<string name="settings.gapless_playback_summary">Enable gapless playback</string>
<string name="settings.gapless_playback_summary">Activer gapless playback</string>
<string name="settings.hide_media_summary">Masquer les fichiers musicaux et les couvertures d\'album aux autres applis (Gallerie, Musique, etc.)</string>
<string name="settings.hide_media_title">Masquer aux autres</string>
<string name="settings.hide_media_toast">Prendra effet la prochaine fois qu\'Android recensera les médias disponibles sur l\'appareil.</string>
<string name="settings.increment_time">Skip Interval</string>
<string name="settings.increment_time">Passer interval</string>
<string name="settings.invalid_url">Veuillez spécifier un URL valide.</string>
<string name="settings.invalid_username">Veuillez spécifier un nom d\'utilisateur valide (sans espace à la fin).</string>
<string name="settings.max_albums">Albums maximum</string>
@ -283,15 +281,15 @@
<string name="settings.search_75">75</string>
<string name="settings.search_history_cleared">Historique des recherches effacé</string>
<string name="settings.search_title">Paramètres de recherche</string>
<string name="settings.server_add_server">Add Server</string>
<string name="settings.server_add_server">Ajouter un serveur</string>
<string name="settings.server_address">Adresse du serveur</string>
<string name="settings.server_name">Nom</string>
<string name="settings.server_number">Number Of Servers</string>
<string name="settings.server_number">Nombres de serveurs</string>
<string name="settings.server_password">Mot de passe</string>
<string name="settings.server_remove_server">Remove Server</string>
<string name="settings.server_remove_server">Supprimer ce serveur</string>
<string name="settings.server_scaling_summary">Télécharger des images redimensionnées à partir du serveur au lieu des tailles de bases (bande passante réduite)</string>
<string name="settings.server_scaling_title">Album serveur mis à l\'échelle de la cover</string>
<string name="settings.server_unused">Unused</string>
<string name="settings.server_scaling_title">Album serveur mis à l\'échelle de la couverture</string>
<string name="settings.server_unused">Inutilisé</string>
<string name="settings.server_unused1">Inutilisé 1</string>
<string name="settings.server_unused2">Inutilisé 2</string>
<string name="settings.server_unused3">Inutilisé 3</string>
@ -317,25 +315,29 @@
<string name="settings.title">Paramètres d\'UltraSonic</string>
<string name="settings.use_folder_for_album_artist">Utilisez des dossiers pour les noms d\'artistes</string>
<string name="settings.use_folder_for_album_artist_summary">Dossier de niveau supérieur devient le nom de l\'artiste de l\'album</string>
<string name="settings.use_id3">Browse Using ID3 Tags</string>
<string name="settings.use_id3_summary">Use ID3 tag methods instead of file system based methods</string>
<string name="settings.use_id3">Naviguer en utilisant ID3 Tags</string>
<string name="settings.use_id3_summary">Utiliser ID3 tag à la place du système de fichier basique</string>
<string name="settings.use_stream_proxy">Utiliser un proxy</string>
<string name="settings.use_stream_proxy_summary">Support de lecture de flux à travers un proxy (peut provoquer des fritures)</string>
<string name="settings.video_title">Video</string>
<string name="settings.video_player">Video player</string>
<string name="settings.wifi_required_summary">Lire uniquement les flux médias si connecté au réseau Wi-Fi</string>
<string name="settings.wifi_required_title">Wi-Fi en streaming uniquement</string>
<string name="shuffle.endYear">End Year:</string>
<string name="shuffle.endYear">Année de fin:</string>
<string name="shuffle.genre">Genre:</string>
<string name="shuffle.startYear">Start Year:</string>
<string name="shuffle.startYear">Année de début:</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d Kb/s</string>
<string name="updated_playlist">Added %1$s songs to \"%2$s\"</string>
<string name="updated_playlist_error">Failed to update \"%s\", please try later.</string>
<string name="updated_playlist">%1$s titre(s) ajouté(s) à \"%2$s\"</string>
<string name="updated_playlist_error">Echec de mise à jour \"%s\", veuillez essayer plus tard.</string>
<string name="util.bytes_format.byte">0 o</string>
<string name="util.bytes_format.gigabyte">0.00 Go</string>
<string name="util.bytes_format.kilobyte">0 Ko</string>
<string name="util.bytes_format.megabyte">0.00 Mo</string>
<string name="util.no_time">-:--</string>
<string name="util.zero_time">0:00</string>
<string name="video.get_mx_player_text">MX Player is not installed. Get it for free on Play Store, or change video settings.</string>
<string name="video.get_mx_player_button">Get MX Player</string>
<string name="widget.initial_text">Touchez pour sélectionner un titre</string>
<string name="widget.sdcard_busy">Carte SD non disponible</string>
<string name="widget.sdcard_missing">Aucune carte SD</string>

View File

@ -128,8 +128,6 @@
<string name="parser.reading_done">Olvasás a kiszolgálóról&#8230; Kész!</string>
<string name="parser.upgrade_client">Nem kompatibilis verzió. Kérjük, frissítse az UltraSonic Android alkalmazást!</string>
<string name="parser.upgrade_server">Nem kompatibilis verzió. Kérjük, frissítse a Subsonic kiszolgálót!</string>
<string name="play_video.loading">Videó betöltése&#8230;</string>
<string name="play_video.noplugin">Kérjük, telepítse az Adobe Flash Player-t a Play Áruházból!</string>
<string name="playlist.label">Lejátszási listák</string>
<string name="playlist.update_info">Módosítás</string>
<string name="playlist.updated_info">Módosított lejátszási lista %s</string>
@ -321,6 +319,8 @@
<string name="settings.use_id3_summary">ID3 Tag módszer használata a fájlredszer alapú mód helyett.</string>
<string name="settings.use_stream_proxy">Stream Proxy használata</string>
<string name="settings.use_stream_proxy_summary">Média lejátszása stream proxy-n keresztül (akadozások elkerülése érdekében).</string>
<string name="settings.video_title">Video</string>
<string name="settings.video_player">Video player</string>
<string name="settings.wifi_required_summary">Streaming, csak ha rendelkezésre áll Wi-Fi kapcsolat.</string>
<string name="settings.wifi_required_title">Csak Wi-Fi streaming</string>
<string name="shuffle.endYear">Utolsó év:</string>
@ -336,6 +336,8 @@
<string name="util.bytes_format.megabyte">0.00 MB</string>
<string name="util.no_time">-:--</string>
<string name="util.zero_time">0:00</string>
<string name="video.get_mx_player_text">MX Player is not installed. Get it for free on Play Store, or change video settings.</string>
<string name="video.get_mx_player_button">Get MX Player</string>
<string name="widget.initial_text">Érintse meg a zene kiválasztásához</string>
<string name="widget.sdcard_busy">Az SD kártya nem elérhető!</string>
<string name="widget.sdcard_missing">Nincs SD kártya!</string>
@ -370,4 +372,4 @@
<item quantity="other">%d nap van hátra a próba időszakból.</item>
</plurals>
</resources>
</resources>

View File

@ -204,5 +204,15 @@
<item>@string/settings.search_250</item>
<item>@string/settings.search_500</item>
</string-array>
<string-array name="videoPlayerValues">
<item>mx</item>
<item>default</item>
<item>flash</item>
</string-array>
<string-array name="videoPlayerNames">
<item>MX Player</item>
<item>Default</item>
<item>Flash</item>
</string-array>
</resources>

View File

@ -128,8 +128,6 @@
<string name="parser.reading_done">Reading from server. Done!</string>
<string name="parser.upgrade_client">Incompatible versions. Please upgrade UltraSonic Android app.</string>
<string name="parser.upgrade_server">Incompatible versions. Please upgrade Subsonic server.</string>
<string name="play_video.loading">Loading video&#8230;</string>
<string name="play_video.noplugin">Please install Adobe Flash Player from Android Market.</string>
<string name="playlist.label">Playlists</string>
<string name="playlist.update_info">Update Information</string>
<string name="playlist.updated_info">Updated playlist information for %s</string>
@ -321,6 +319,8 @@
<string name="settings.use_id3_summary">Use ID3 tag methods instead of file system based methods</string>
<string name="settings.use_stream_proxy">Use Stream Proxy</string>
<string name="settings.use_stream_proxy_summary">Stream media playback through a proxy (may help stutter)</string>
<string name="settings.video_title">Video</string>
<string name="settings.video_player">Video player</string>
<string name="settings.wifi_required_summary">Only stream media if connected to Wi-Fi</string>
<string name="settings.wifi_required_title">Wi-Fi Streaming Only</string>
<string name="shuffle.endYear">End Year:</string>
@ -336,6 +336,8 @@
<string name="util.bytes_format.megabyte">0.00 MB</string>
<string name="util.no_time">-:--</string>
<string name="util.zero_time">0:00</string>
<string name="video.get_mx_player_text">MX Player is not installed. Get it for free on Play Store, or change video settings.</string>
<string name="video.get_mx_player_button">Get MX Player</string>
<string name="widget.initial_text">Touch to select music</string>
<string name="widget.sdcard_busy">SD card unavailable</string>
<string name="widget.sdcard_missing">No SD card</string>

View File

@ -2,7 +2,9 @@
<PreferenceScreen xmlns:a="http://schemas.android.com/apk/res/android"
a:title="@string/common.appname" >
<PreferenceCategory a:key="serversKey" a:title="@string/settings.servers_title" >
<PreferenceCategory
a:key="serversKey"
a:title="@string/settings.servers_title" >
</PreferenceCategory>
<PreferenceCategory a:title="@string/settings.appearance_title" >
<ListPreference
@ -48,7 +50,7 @@
a:defaultValue="false"
a:key="useId3Tags"
a:summary="@string/settings.use_id3_summary"
a:title="@string/settings.use_id3" />
a:title="@string/settings.use_id3" />
<CheckBoxPreference
a:defaultValue="true"
a:key="mediaButtons"
@ -78,7 +80,7 @@
a:defaultValue="true"
a:key="transitionToDownloadOnPlay"
a:summary="@string/settings.download_transition_summary"
a:title="@string/settings.download_transition" />
a:title="@string/settings.download_transition" />
<CheckBoxPreference
a:defaultValue="false"
a:key="gaplessPlayback"
@ -93,14 +95,23 @@
a:defaultValue="false"
a:key="clearBookmark"
a:summary="@string/settings.clear_bookmark_summary"
a:title="@string/settings.clear_bookmark" />
a:title="@string/settings.clear_bookmark" />
<ListPreference
a:defaultValue="5000"
a:entries="@array/bufferLengthNames"
a:entryValues="@array/incrementTimeValues"
a:key="incrementTime"
a:title="@string/settings.increment_time" />
</PreferenceCategory>
a:title="@string/settings.increment_time" />
</PreferenceCategory>
<PreferenceCategory a:title="@string/settings.video_title" >
<ListPreference
a:defaultValue="default"
a:entries="@array/videoPlayerNames"
a:entryValues="@array/videoPlayerValues"
a:key="videoPlayer"
a:title="@string/settings.video_player" />
</PreferenceCategory>
<PreferenceCategory a:title="@string/settings.network_title" >
<ListPreference
a:defaultValue="0"
@ -133,13 +144,12 @@
a:entryValues="@array/networkTimeoutValues"
a:key="networkTimeout"
a:title="@string/settings.network_timeout" />
<ListPreference
a:defaultValue="5000"
a:entries="@array/chatRefreshNames"
a:entryValues="@array/chatRefreshValues"
a:key="chatRefreshInterval"
a:title="@string/settings.chat_refresh" />
a:title="@string/settings.chat_refresh" />
</PreferenceCategory>
<PreferenceCategory a:title="@string/settings.cache_title" >
<ListPreference
@ -164,7 +174,7 @@
a:entries="@array/directoryCacheTimeNames"
a:entryValues="@array/directoryCacheTimeValues"
a:key="directoryCacheTime"
a:title="@string/settings.directory_cache_time" />
a:title="@string/settings.directory_cache_time" />
</PreferenceCategory>
<PreferenceCategory a:title="@string/settings.search_title" >
<ListPreference

View File

@ -334,15 +334,6 @@ public class BookmarkActivity extends SubsonicTabActivity {
}
}
private void playVideo(MusicDirectory.Entry entry) {
int maxBitrate = Util.getMaxVideoBitrate(this);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(MusicServiceFactory.getMusicService(this).getVideoUrl(maxBitrate, this, entry.getId())));
startActivity(intent);
}
public void deleteRecursively(MusicDirectory.Entry album) {
File dir = FileUtil.getAlbumDirectory(this, album);
Util.recursiveDelete(dir);

View File

@ -961,8 +961,8 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi
if (currentPlaying != null) {
final int millisTotal = duration == null ? 0 : duration;
positionTextView.setText(Util.formatDuration(millisPlayed / 1000));
durationTextView.setText(Util.formatDuration(millisTotal / 1000));
positionTextView.setText(Util.formatTotalDuration(millisPlayed, true));
durationTextView.setText(Util.formatTotalDuration(millisTotal, true));
progressBar.setMax(millisTotal == 0 ? 100 : millisTotal); // Work-around for apparent bug.
progressBar.setProgress(millisPlayed);
progressBar.setEnabled(currentPlaying.isWorkDone() || isJukeboxEnabled);

View File

@ -1,148 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
Copyright 2009 (C) Sindre Mehus
*/
package com.thejoshwa.ultrasonic.androidapp.activity;
import java.lang.reflect.Method;
import android.app.Activity;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.thejoshwa.ultrasonic.androidapp.R;
import com.thejoshwa.ultrasonic.androidapp.service.MusicServiceFactory;
import com.thejoshwa.ultrasonic.androidapp.util.Constants;
import com.thejoshwa.ultrasonic.androidapp.util.Util;
/**
* Plays videos in a web page.
*
* @author Sindre Mehus
*/
public final class PlayVideoActivity extends Activity {
private static final String TAG = PlayVideoActivity.class.getSimpleName();
private WebView webView;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
setContentView(R.layout.play_video);
webView = (WebView) findViewById(R.id.play_video_contents);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setWebViewClient(new Client());
if (bundle != null) {
webView.restoreState(bundle);
} else {
webView.loadUrl(getVideoUrl());
}
// Show warning if Flash plugin is not installed.
if (isFlashPluginInstalled()) {
Util.toast(this, R.string.play_video_loading, false);
} else {
Util.toast(this, R.string.play_video_noplugin, false);
}
}
@Override
protected void onPause() {
super.onPause();
callHiddenWebViewMethod("onPause");
}
@Override
protected void onResume() {
super.onResume();
callHiddenWebViewMethod("onResume");
}
private String getVideoUrl() {
String id = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_ID);
int maxBitrate = Util.getMaxVideoBitrate(this);
return MusicServiceFactory.getMusicService(this).getVideoUrl(maxBitrate, this, id);
}
@Override
protected void onSaveInstanceState(Bundle state) {
webView.saveState(state);
}
private void callHiddenWebViewMethod(String name){
if( webView != null ){
try {
Method method = WebView.class.getMethod(name);
method.invoke(webView);
} catch (Throwable x) {
Log.e(TAG, "Failed to invoke " + name, x);
}
}
}
private boolean isFlashPluginInstalled() {
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo("com.adobe.flashplayer", 0);
return packageInfo != null;
} catch (PackageManager.NameNotFoundException x) {
return false;
}
}
private final class Client extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Util.toast(PlayVideoActivity.this, description);
Log.e(TAG, "Error: " + description);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Log.d(TAG, "onLoadResource: " + url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d(TAG, "onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d(TAG, "onPageFinished: " + url);
}
}
}

View File

@ -418,11 +418,7 @@ public class SearchActivity extends SubsonicTabActivity {
}
private void onVideoSelected(MusicDirectory.Entry entry) {
int maxBitrate = Util.getMaxVideoBitrate(this);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(MusicServiceFactory.getMusicService(this).getVideoUrl(maxBitrate, this, entry.getId())));
startActivity(intent);
playVideo(entry);
}
private void autoplay() {

View File

@ -651,15 +651,6 @@ public class SelectAlbumActivity extends SubsonicTabActivity {
getDownloadService().unpin(songs);
}
}
private void playVideo(MusicDirectory.Entry entry) {
int maxBitrate = Util.getMaxVideoBitrate(this);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(MusicServiceFactory.getMusicService(this).getVideoUrl(maxBitrate, this, entry.getId())));
startActivity(intent);
}
public void deleteRecursively(MusicDirectory.Entry album) {
File dir = FileUtil.getAlbumDirectory(this, album);

View File

@ -83,7 +83,7 @@ public class SelectArtistActivity extends SubsonicTabActivity implements Adapter
folderButton = LayoutInflater.from(this).inflate(R.layout.select_artist_header, artistListView, false);
folderName = (TextView) folderButton.findViewById(R.id.select_artist_folder_2);
if (!Util.isOffline(this)) {
if (!Util.isOffline(this) && !Util.getShouldUseId3Tags(this)) {
artistListView.addHeaderView(folderButton);
}
@ -128,6 +128,7 @@ public class SelectArtistActivity extends SubsonicTabActivity implements Adapter
protected Indexes doInBackground() throws Throwable {
boolean refresh = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_REFRESH, false);
MusicService musicService = MusicServiceFactory.getMusicService(SelectArtistActivity.this);
boolean isOffline = Util.isOffline(SelectArtistActivity.this);
boolean useId3Tags = Util.getShouldUseId3Tags(SelectArtistActivity.this);

View File

@ -63,6 +63,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
private final Map<String, ServerSettings> serverSettings = new LinkedHashMap<String, ServerSettings>();
private boolean testingConnection;
private ListPreference theme;
private ListPreference videoPlayer;
private ListPreference maxBitrateWifi;
private ListPreference maxBitrateMobile;
private ListPreference cacheSize;
@ -140,6 +141,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
}
theme = (ListPreference) findPreference(Constants.PREFERENCES_KEY_THEME);
videoPlayer = (ListPreference) findPreference(Constants.PREFERENCES_KEY_VIDEO_PLAYER);
maxBitrateWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI);
maxBitrateMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE);
cacheSize = (ListPreference) findPreference(Constants.PREFERENCES_KEY_CACHE_SIZE);
@ -410,6 +412,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
}
theme.setSummary(theme.getEntry());
videoPlayer.setSummary(videoPlayer.getEntry());
maxBitrateWifi.setSummary(maxBitrateWifi.getEntry());
maxBitrateMobile.setSummary(maxBitrateMobile.getEntry());
cacheSize.setSummary(cacheSize.getEntry());

View File

@ -71,6 +71,8 @@ import com.thejoshwa.ultrasonic.androidapp.util.LoadingTask;
import com.thejoshwa.ultrasonic.androidapp.util.ModalBackgroundTask;
import com.thejoshwa.ultrasonic.androidapp.util.SilentBackgroundTask;
import com.thejoshwa.ultrasonic.androidapp.util.Util;
import com.thejoshwa.ultrasonic.androidapp.util.VideoPlayerType;
import net.simonvt.menudrawer.MenuDrawer;
import net.simonvt.menudrawer.Position;
@ -773,6 +775,21 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{
task.execute();
}
protected void playVideo(MusicDirectory.Entry entry) {
if (!Util.isNetworkConnected(this)) {
Util.toast(this, R.string.select_album_no_network);
return;
}
VideoPlayerType player = Util.getVideoPlayerType(this);
try {
player.playVideo(this, entry);
} catch (Exception e) {
Util.toast(this, e.getMessage(), false);
}
}
protected void addToPlaylist(final List<MusicDirectory.Entry> songs) {
if(songs.isEmpty()) {
Util.toast(this, "No songs selected");

View File

@ -64,5 +64,7 @@ public class A2dpIntentReceiver extends BroadcastReceiver {
default:
return;
}
context.sendBroadcast(avrcpIntent);
}
}

View File

@ -27,27 +27,30 @@ import com.thejoshwa.ultrasonic.androidapp.util.Util;
/**
* Request media button focus when connected to Bluetooth A2DP.
*
*
* @author Sindre Mehus
*/
public class BluetoothIntentReceiver extends BroadcastReceiver {
private static final String TAG = BluetoothIntentReceiver.class.getSimpleName();
private static final String TAG = BluetoothIntentReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
int state = intent.getIntExtra("android.bluetooth.a2dp.extra.SINK_STATE", -1);
Log.i(TAG, "android.bluetooth.a2dp.extra.SINK_STATE, state = " + state);
boolean connected = state == 2; // android.bluetooth.BluetoothA2dp.STATE_CONNECTED
if (connected) {
Log.i(TAG, "Connected to Bluetooth A2DP, requesting media button focus.");
Util.registerMediaButtonEventReceiver(context);
}
@Override
public void onReceive(Context context, Intent intent) {
int state = intent.getIntExtra("android.bluetooth.a2dp.extra.SINK_STATE", -1);
String action = intent.getAction();
boolean disconnected = state == 0; // android.bluetooth.BluetoothA2dp.STATE_DISCONNECTED
if (disconnected) {
Log.i(TAG, "Disconnected from Bluetooth A2DP, requesting pause.");
context.sendBroadcast(new Intent(DownloadServiceImpl.CMD_PAUSE));
}
}
}
Log.d(TAG, "Bluetooth Sink State: " + state);
Log.d(TAG, "Bluetooth Action: " + action);
boolean connected = state == android.bluetooth.BluetoothA2dp.STATE_CONNECTED || action.equals(android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED);
boolean disconnected = state == android.bluetooth.BluetoothA2dp.STATE_DISCONNECTED || (action.equals(android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED) || action.equals(android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED));
if (connected) {
Log.i(TAG, "Connected to Bluetooth A2DP, requesting media button focus.");
Util.registerMediaButtonEventReceiver(context);
} else if (disconnected) {
Log.i(TAG, "Disconnected from Bluetooth A2DP, requesting pause.");
context.sendBroadcast(new Intent(DownloadServiceImpl.CMD_PAUSE));
}
}
}

View File

@ -278,11 +278,11 @@ public class CachedMusicService implements MusicService {
return musicService.getLatestVersion(context, progressListener);
}
@Override
public String getVideoUrl(int maxBitrate, Context context, String id) {
return musicService.getVideoUrl(maxBitrate, context, id);
}
@Override
public String getVideoUrl(Context context, String id, boolean useFlash) throws Exception {
return musicService.getVideoUrl(context, id, useFlash);
}
@Override
public String getVideoStreamUrl(int maxBitrate, Context context, String id) {
return musicService.getVideoStreamUrl(maxBitrate, context, id);

View File

@ -108,7 +108,7 @@ public interface MusicService {
Version getLatestVersion(Context context, ProgressListener progressListener) throws Exception;
String getVideoUrl(int maxBitrate, Context context, String id);
String getVideoUrl(Context context, String id, boolean useFlash) throws Exception;
String getVideoStreamUrl(int Bitrate, Context context, String id);

View File

@ -494,7 +494,7 @@ public class OfflineMusicService extends RESTMusicService {
}
@Override
public String getVideoUrl(int maxBitrate, Context context, String id) {
public String getVideoUrl(Context context, String id, boolean useFlash) {
return null;
}

View File

@ -729,7 +729,7 @@ public class RESTMusicService implements MusicService {
boolean ok = serverVersion == null || serverVersion.compareTo(requiredVersion) >= 0;
if (!ok) {
throw new ServerTooOldException(text, serverVersion, requiredVersion);
throw new ServerTooOldException(text);
}
}
@ -839,17 +839,25 @@ public class RESTMusicService implements MusicService {
return response;
}
@Override
public String getVideoUrl(int maxBitrate, Context context, String id) {
StringBuilder builder = new StringBuilder(Util.getRestUrl(context, "videoPlayer"));
builder.append("&id=").append(id);
builder.append("&maxBitRate=").append(maxBitrate);
builder.append("&autoplay=true");
@Override
public String getVideoUrl(Context context, String id, boolean useFlash) throws Exception {
StringBuilder builder = new StringBuilder();
if (useFlash) {
builder.append(Util.getRestUrl(context, "videoPlayer"));
builder.append("&id=").append(id);
builder.append("&maxBitRate=500");
builder.append("&autoplay=true");
} else {
checkServerVersion(context, "1.9", "Video streaming not supported.");
builder.append(Util.getRestUrl(context, "stream"));
builder.append("&id=").append(id);
builder.append("&format=raw");
}
String url = rewriteUrlWithRedirect(context, builder.toString());
Log.i(TAG, "Using video URL: " + url);
return url;
}
String url = rewriteUrlWithRedirect(context, builder.toString());
Log.i(TAG, "Using video URL: " + url);
return url;
}
@Override
public String getVideoStreamUrl(int maxBitrate, Context context, String id) {

View File

@ -18,8 +18,6 @@
*/
package com.thejoshwa.ultrasonic.androidapp.service;
import com.thejoshwa.ultrasonic.androidapp.domain.Version;
/**
* Thrown if the REST API version implemented by the server is too old.
*
@ -32,24 +30,19 @@ public class ServerTooOldException extends Exception {
*
*/
private static final long serialVersionUID = -7955245839000220002L;
private final String text;
private final Version serverVersion;
private final Version requiredVersion;
public ServerTooOldException(String text, Version serverVersion, Version requiredVersion) {
this.text = text;
this.serverVersion = serverVersion;
this.requiredVersion = requiredVersion;
public ServerTooOldException(String text) {
super(createMessage(text));
}
@Override
public String toString() {
private static String createMessage(String text) {
StringBuilder builder = new StringBuilder();
if (text != null) {
builder.append(text).append(" ");
}
builder.append("Server API version too old. ");
builder.append("Requires ").append(requiredVersion).append(" but is ").append(serverVersion).append(".");
builder.append("Subsonic server version is too old. Please upgrade.");
return builder.toString();
}
}

View File

@ -122,6 +122,7 @@ public final class Constants {
public static final String PREFERENCES_KEY_CLEAR_PLAYLIST = "clearPlaylist";
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";
// Name of the preferences file.
public static final String PREFERENCES_FILE_NAME = "com.thejoshwa.ultrasonic.androidapp_preferences";

View File

@ -26,6 +26,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@ -1315,4 +1317,22 @@ public class Util extends DownloadActivity {
return String.format("0:%02d", seconds);
}
}
public static VideoPlayerType getVideoPlayerType(Context context) {
SharedPreferences prefs = getPreferences(context);
return VideoPlayerType.forKey(prefs.getString(Constants.PREFERENCES_KEY_VIDEO_PLAYER, VideoPlayerType.MX.getKey()));
}
public static boolean isPackageInstalled(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if (packageInfo.packageName.equals(packageName)) {
return true;
}
}
return false;
}
}

View File

@ -0,0 +1,119 @@
/*
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 <http://www.gnu.org/licenses/>.
Copyright 2013 (C) Sindre Mehus
*/
package com.thejoshwa.ultrasonic.androidapp.util;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import com.thejoshwa.ultrasonic.androidapp.R;
import com.thejoshwa.ultrasonic.androidapp.domain.MusicDirectory;
import com.thejoshwa.ultrasonic.androidapp.service.MusicServiceFactory;
/**
* @author Sindre Mehus
* @version $Id: VideoPlayerType.java 3473 2013-05-23 16:42:49Z sindre_mehus $
*/
public enum VideoPlayerType {
MX("mx") {
@Override
public void playVideo(final Activity activity, MusicDirectory.Entry entry) throws Exception {
// Check if MX Player is installed.
boolean installedAd = Util.isPackageInstalled(activity, PACKAGE_NAME_MX_AD);
boolean installedPro = Util.isPackageInstalled(activity, PACKAGE_NAME_MX_PRO);
if (!installedAd && !installedPro) {
new AlertDialog.Builder(activity)
.setMessage(R.string.video_get_mx_player_text)
.setPositiveButton(R.string.video_get_mx_player_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
try {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + PACKAGE_NAME_MX_AD)));
} catch (android.content.ActivityNotFoundException x) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + PACKAGE_NAME_MX_AD)));
}
dialog.dismiss();
}
})
.setNegativeButton(R.string.common_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
dialog.dismiss();
}
}).show();
} else {
// See documentation on https://sites.google.com/site/mxvpen/api
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setPackage(installedPro ? PACKAGE_NAME_MX_PRO : PACKAGE_NAME_MX_AD);
intent.putExtra("title", entry.getTitle());
intent.setDataAndType(Uri.parse(MusicServiceFactory.getMusicService(activity).getVideoUrl(activity, entry.getId(), false)), "video/*");
activity.startActivity(intent);
}
}
},
FLASH("flash") {
@Override
public void playVideo(Activity activity, MusicDirectory.Entry entry) throws Exception {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(MusicServiceFactory.getMusicService(activity).getVideoUrl(activity, entry.getId(), true)));
activity.startActivity(intent);
}
},
DEFAULT("default") {
@Override
public void playVideo(Activity activity, MusicDirectory.Entry entry) throws Exception {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(MusicServiceFactory.getMusicService(activity).getVideoUrl(activity, entry.getId(), false)), "video/*");
activity.startActivity(intent);
}
};
private final String key;
VideoPlayerType(String key) {
this.key = key;
}
public String getKey() {
return key;
}
public static VideoPlayerType forKey(String key) {
for (VideoPlayerType type : VideoPlayerType.values()) {
if (type.key.equals(key)) {
return type;
}
}
return null;
}
public abstract void playVideo(Activity activity, MusicDirectory.Entry entry) throws Exception;
private static final String PACKAGE_NAME_MX_AD = "com.mxtech.videoplayer.ad";
private static final String PACKAGE_NAME_MX_PRO = "com.mxtech.videoplayer.pro";
}

View File

@ -35,6 +35,7 @@ import com.thejoshwa.ultrasonic.androidapp.service.DownloadFile;
import com.thejoshwa.ultrasonic.androidapp.service.MusicService;
import com.thejoshwa.ultrasonic.androidapp.service.MusicServiceFactory;
import com.thejoshwa.ultrasonic.androidapp.util.Util;
import com.thejoshwa.ultrasonic.androidapp.util.VideoPlayerType;
import java.io.File;
@ -79,20 +80,26 @@ public class SongView extends UpdateView implements Checkable {
bitRate = String.format(getContext().getString(R.string.song_details_kbps), song.getBitRate());
}
VideoPlayerType videoPlayer = Util.getVideoPlayerType(getContext());
String fileFormat = null;
if (song.getTranscodedSuffix() != null && !song.getTranscodedSuffix().equals(song.getSuffix())) {
if (song.getTranscodedSuffix() == null || song.getTranscodedSuffix().equals(song.getSuffix()) || (song.isVideo() && videoPlayer != VideoPlayerType.FLASH)) {
fileFormat = song.getSuffix();
} else {
fileFormat = String.format("%s > %s", song.getSuffix(), song.getTranscodedSuffix());
} else {
fileFormat = song.getSuffix();
}
}
String artistName = song.getArtist();
if (Util.shouldDisplayBitrateWithArtist(getContext())) {
artist.append(song.getArtist()).append(" (")
.append(String.format(getContext().getString(R.string.song_details_all), bitRate == null ? "" : bitRate + " ", fileFormat))
.append(")");
} else {
artist.append(song.getArtist());
}
if (artistName != null) {
if (Util.shouldDisplayBitrateWithArtist(getContext())) {
artist.append(artistName).append(" (")
.append(String.format(getContext().getString(R.string.song_details_all), bitRate == null ? "" : bitRate + " ", fileFormat))
.append(")");
} else {
artist.append(artistName);
}
}
int trackNumber = song.getTrack();
@ -104,7 +111,7 @@ public class SongView extends UpdateView implements Checkable {
titleTextView.setText(song.getTitle());
artistTextView.setText(artist);
durationTextView.setText(Util.formatDuration(song.getDuration()));
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);