aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/layout/preferences.xml10
-rw-r--r--res/menu/select_album_list.xml19
-rw-r--r--res/values/strings.xml2
-rw-r--r--res/xml/settings.xml790
-rw-r--r--src/github/daneren2005/dsub/activity/SettingsActivity.java253
-rw-r--r--src/github/daneren2005/dsub/activity/SubsonicActivity.java15
-rw-r--r--src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java12
-rw-r--r--src/github/daneren2005/dsub/fragments/PreferenceCompatFragment.java313
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java4
-rw-r--r--src/github/daneren2005/dsub/fragments/SubsonicFragment.java120
-rw-r--r--src/github/daneren2005/dsub/provider/DSubSearchProvider.java3
-rw-r--r--src/github/daneren2005/dsub/service/DownloadService.java55
-rw-r--r--src/github/daneren2005/dsub/util/Util.java4
13 files changed, 1005 insertions, 595 deletions
diff --git a/res/layout/preferences.xml b/res/layout/preferences.xml
new file mode 100644
index 00000000..5caaa804
--- /dev/null
+++ b/res/layout/preferences.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ListView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/list"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:drawSelectorOnTop="false"
+ android:scrollbarAlwaysDrawVerticalTrack="true"
+ android:paddingTop="6dp"
+ android:paddingLeft="12dp"
+ android:paddingRight="12dp"/> \ No newline at end of file
diff --git a/res/menu/select_album_list.xml b/res/menu/select_album_list.xml
new file mode 100644
index 00000000..3b86fbcd
--- /dev/null
+++ b/res/menu/select_album_list.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:compat="http://schemas.android.com/apk/res-auto">
+ <item
+ android:id="@+id/menu_play_now"
+ android:icon="?media_button_start"
+ android:title="@string/menu.play"
+ compat:showAsAction="always|withText"/>
+
+ <item
+ android:id="@+id/menu_shuffle"
+ android:icon="?attr/shuffle"
+ android:title="@string/menu.shuffle"
+ compat:showAsAction="ifRoom|withText"/>
+
+ <item
+ android:id="@+id/menu_exit"
+ android:title="@string/menu.exit"/>
+</menu>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 33a40981..3bcdec17 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -256,7 +256,7 @@
<string name="error.label">Error</string>
- <string name="settings.title">DSub settings</string>
+ <string name="settings.title">Settings</string>
<string name="settings.test_connection_title">Test connection</string>
<string name="settings.servers_add">Add Server</string>
<string name="settings.servers_remove">Remove Server</string>
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
index f22a9c3f..0f044476 100644
--- a/res/xml/settings.xml
+++ b/res/xml/settings.xml
@@ -4,421 +4,417 @@
xmlns:myns="http://schemas.android.com/apk/res/github.daneren2005.dsub"
android:title="@string/settings.title">
- <PreferenceCategory
- android:title="@string/menu.settings">
+ <PreferenceScreen
+ android:title="@string/settings.servers_title">
- <PreferenceScreen
+ <PreferenceCategory
+ android:key="server"
android:title="@string/settings.servers_title">
- <PreferenceCategory
- android:key="server"
- android:title="@string/settings.servers_title">
-
- <Preference
- android:key="serverAdd"
- android:order="1000000"
- android:title="@string/settings.servers_add"/>
- </PreferenceCategory>
-
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/settings.appearance_title">
-
- <PreferenceCategory
- android:title="@string/settings.appearance_title">
-
- <ListPreference
- android:title="@string/settings.theme_title"
- android:key="theme"
- android:defaultValue="light"
- android:entryValues="@array/themeValues"
- android:entries="@array/themeNames"/>
-
- <CheckBoxPreference
- android:title="@string/settings.theme_fullscreen"
- android:summary="@string/settings.theme_fullscreen_summary"
- android:key="fullScreen"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.track_title"
- android:summary="@string/settings.track_summary"
- android:key="displayTrack"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.hide_widget_title"
- android:summary="@string/settings.hide_widget_summary"
- android:key="hideWidget"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.custom_sort"
- android:summary="@string/settings.custom_sort_summary"
- android:key="customSortEnabled"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.open_to_library"
- android:summary="@string/settings.open_to_library_summary"
- android:key="openToLibrary"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.override_system_language"
- android:summary="@string/settings.override_system_language_summary"
- android:key="overrideSystemLanguage"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.large_album_art"
- android:summary="@string/settings.large_album_art_summary"
- android:key="largeAlbumArt"
- android:defaultValue="true"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.menu_options.title">
-
- <CheckBoxPreference
- android:title="@string/common.play_next"
- android:summary="@string/settings.menu_options.play_next_summary"
- android:key="showPlayNext"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/common.play_last"
- android:summary="@string/settings.menu_options.play_last_summary"
- android:key="showPlayLast"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/common.star"
- android:summary="@string/settings.menu_options.star_summary"
- android:key="showStar"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/menu.share"
- android:summary="@string/settings.menu_options.shared_summary"
- android:key="showShared"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/menu.rate"
- android:summary="@string/settings.menu_options.rate_summary"
- android:key="showRating"
- android:defaultValue="true"/>
-
- </PreferenceCategory>
- </PreferenceScreen>
-
- <PreferenceScreen
+ <Preference
+ android:key="serverAdd"
+ android:order="1000000"
+ android:title="@string/settings.servers_add"/>
+ </PreferenceCategory>
+
+ </PreferenceScreen>
+
+ <PreferenceScreen
+ android:title="@string/settings.appearance_title">
+
+ <PreferenceCategory
+ android:title="@string/settings.appearance_title">
+
+ <ListPreference
+ android:title="@string/settings.theme_title"
+ android:key="theme"
+ android:defaultValue="light"
+ android:entryValues="@array/themeValues"
+ android:entries="@array/themeNames"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.theme_fullscreen"
+ android:summary="@string/settings.theme_fullscreen_summary"
+ android:key="fullScreen"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.track_title"
+ android:summary="@string/settings.track_summary"
+ android:key="displayTrack"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.hide_widget_title"
+ android:summary="@string/settings.hide_widget_summary"
+ android:key="hideWidget"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.custom_sort"
+ android:summary="@string/settings.custom_sort_summary"
+ android:key="customSortEnabled"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.open_to_library"
+ android:summary="@string/settings.open_to_library_summary"
+ android:key="openToLibrary"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.override_system_language"
+ android:summary="@string/settings.override_system_language_summary"
+ android:key="overrideSystemLanguage"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.large_album_art"
+ android:summary="@string/settings.large_album_art_summary"
+ android:key="largeAlbumArt"
+ android:defaultValue="true"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.menu_options.title">
+
+ <CheckBoxPreference
+ android:title="@string/common.play_next"
+ android:summary="@string/settings.menu_options.play_next_summary"
+ android:key="showPlayNext"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/common.play_last"
+ android:summary="@string/settings.menu_options.play_last_summary"
+ android:key="showPlayLast"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/common.star"
+ android:summary="@string/settings.menu_options.star_summary"
+ android:key="showStar"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/menu.share"
+ android:summary="@string/settings.menu_options.shared_summary"
+ android:key="showShared"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/menu.rate"
+ android:summary="@string/settings.menu_options.rate_summary"
+ android:key="showRating"
+ android:defaultValue="true"/>
+
+ </PreferenceCategory>
+ </PreferenceScreen>
+
+ <PreferenceScreen
+ android:title="@string/settings.drawer_items_title">
+
+ <PreferenceCategory
android:title="@string/settings.drawer_items_title">
- <PreferenceCategory
- android:title="@string/settings.drawer_items_title">
-
- <CheckBoxPreference
- android:title="@string/settings.podcasts_enabled"
- android:summary="@string/settings.podcasts_enabled_summary"
- android:key="podcastsEnabled"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.bookmarks_enabled"
- android:summary="@string/settings.bookmarks_enabled_summary"
- android:key="bookmarksEnabled"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.shares_enabled"
- android:summary="@string/settings.shares_enabled_summary"
- android:key="sharedEnabled"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.chat_enabled"
- android:summary="@string/settings.chat_enabled_summary"
- android:key="chatEnabled"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.admin_enabled"
- android:summary="@string/settings.admin_enabled_summary"
- android:key="adminEnabled"
- android:defaultValue="true"/>
- </PreferenceCategory>
+ <CheckBoxPreference
+ android:title="@string/settings.podcasts_enabled"
+ android:summary="@string/settings.podcasts_enabled_summary"
+ android:key="podcastsEnabled"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.bookmarks_enabled"
+ android:summary="@string/settings.bookmarks_enabled_summary"
+ android:key="bookmarksEnabled"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.shares_enabled"
+ android:summary="@string/settings.shares_enabled_summary"
+ android:key="sharedEnabled"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.chat_enabled"
+ android:summary="@string/settings.chat_enabled_summary"
+ android:key="chatEnabled"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.admin_enabled"
+ android:summary="@string/settings.admin_enabled_summary"
+ android:key="adminEnabled"
+ android:defaultValue="true"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/button_bar.chat">
+
+ <github.daneren2005.dsub.view.SeekBarPreference
+ android:title="@string/settings.chat_refresh"
+ android:key="chatRefreshRate"
+ android:defaultValue="30"
+ android:dialogLayout="@layout/seekbar_preference"
+ myns:max="120"
+ myns:display="%.0f seconds"/>
+ </PreferenceCategory>
+ </PreferenceScreen>
+
+ <PreferenceScreen
+ android:title="@string/settings.cache_screen_title">
+
+ <PreferenceCategory
+ android:title="@string/settings.network_title">
+
+ <ListPreference
+ android:title="@string/settings.max_bitrate_wifi"
+ android:key="maxBitrateWifi"
+ android:defaultValue="0"
+ android:entryValues="@array/maxBitrateValues"
+ android:entries="@array/maxBitrateNames"/>
+
+ <ListPreference
+ android:title="@string/settings.max_bitrate_mobile"
+ android:key="maxBitrateMobile"
+ android:defaultValue="0"
+ android:entryValues="@array/maxBitrateValues"
+ android:entries="@array/maxBitrateNames"/>
+
+ <ListPreference
+ android:title="@string/settings.max_video_bitrate_wifi"
+ android:key="maxVideoBitrateWifi"
+ android:defaultValue="0"
+ android:entryValues="@array/maxVideoBitrateValues"
+ android:entries="@array/maxVideoBitrateNames"/>
+
+ <ListPreference
+ android:title="@string/settings.max_video_bitrate_mobile"
+ android:key="maxVideoBitrateMobile"
+ android:defaultValue="0"
+ android:entryValues="@array/maxVideoBitrateValues"
+ android:entries="@array/maxVideoBitrateNames"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.wifi_required_title"
+ android:summary="@string/settings.wifi_required_summary"
+ android:key="wifiRequiredForDownload"
+ android:defaultValue="false"/>
+
+ <ListPreference
+ android:title="@string/settings.network_timeout_title"
+ android:key="networkTimeout"
+ android:defaultValue="15000"
+ android:entryValues="@array/networkTimeoutValues"
+ android:entries="@array/networkTimeoutNames"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.cache_title">
+
+ <EditTextPreference
+ android:title="@string/settings.cache_size"
+ android:key="cacheSize"
+ android:defaultValue="2000"
+ android:digits="0123456789"/>
+
+ <EditTextPreference
+ android:title="@string/settings.cache_location"
+ android:key="cacheLocation"/>
+
+ <ListPreference
+ android:title="@string/settings.preload_wifi"
+ android:key="preloadCountWifi"
+ android:defaultValue="3"
+ android:entryValues="@array/preloadCountValues"
+ android:entries="@array/preloadCountNames"/>
+
+ <ListPreference
+ android:title="@string/settings.preload_mobile"
+ android:key="preloadCountMobile"
+ android:defaultValue="3"
+ android:entryValues="@array/preloadCountValues"
+ android:entries="@array/preloadCountNames"/>
+
+ <Preference
+ android:key="clearCache"
+ android:title="@string/settings.cache_clear"
+ android:persistent="false"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.other_title">
+
+ <CheckBoxPreference
+ android:title="@string/settings.hide_media_title"
+ android:summary="@string/settings.hide_media_summary"
+ android:key="hideMedia"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.screen_lit_title"
+ android:summary="@string/settings.screen_lit_summary"
+ android:key="screenLitOnDownload"
+ android:defaultValue="true"/>
+ </PreferenceCategory>
+ </PreferenceScreen>
+
+ <PreferenceScreen
+ android:title="@string/settings.sync_title">
+ <PreferenceCategory
+ android:title="@string/settings.sync_title">
- <PreferenceCategory
- android:title="@string/button_bar.chat">
+ <CheckBoxPreference
+ android:title="@string/settings.sync_enabled"
+ android:summary="@string/settings.sync_enabled_summary"
+ android:key="syncEnabled"
+ android:defaultValue="true"/>
+
+ <ListPreference
+ android:title="@string/settings.sync_interval"
+ android:key="syncInterval"
+ android:defaultValue="60"
+ android:entryValues="@array/syncIntervalValues"
+ android:entries="@array/syncIntervalNames"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.sync_wifi"
+ android:summary="@string/settings.sync_wifi_summary"
+ android:key="syncWifi"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.sync_notification"
+ android:summary="@string/settings.sync_notification_summary"
+ android:key="syncNotification"
+ android:defaultValue="true"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.other_title">
+
+ <CheckBoxPreference
+ android:title="@string/settings.sync_starred"
+ android:summary="@string/settings.sync_starred_summary"
+ android:key="syncStarred"
+ android:defaultValue="false"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.sync_most_recent"
+ android:summary="@string/settings.sync_most_recent_summary"
+ android:key="syncMostRecent"
+ android:defaultValue="false"/>
+ </PreferenceCategory>
+ </PreferenceScreen>
+
+ <PreferenceScreen
+ android:title="@string/settings.playback_title">
+
+ <PreferenceCategory
+ android:title="@string/settings.playback_title">
<github.daneren2005.dsub.view.SeekBarPreference
- android:title="@string/settings.chat_refresh"
- android:key="chatRefreshRate"
- android:defaultValue="30"
+ android:title="@string/settings.playlist_random_size_title"
+ android:key="randomSize"
+ android:defaultValue="20"
android:dialogLayout="@layout/seekbar_preference"
- myns:max="120"
- myns:display="%.0f seconds"/>
- </PreferenceCategory>
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/settings.cache_screen_title">
-
- <PreferenceCategory
- android:title="@string/settings.network_title">
-
- <ListPreference
- android:title="@string/settings.max_bitrate_wifi"
- android:key="maxBitrateWifi"
- android:defaultValue="0"
- android:entryValues="@array/maxBitrateValues"
- android:entries="@array/maxBitrateNames"/>
+ myns:max="100"/>
<ListPreference
- android:title="@string/settings.max_bitrate_mobile"
- android:key="maxBitrateMobile"
- android:defaultValue="0"
- android:entryValues="@array/maxBitrateValues"
- android:entries="@array/maxBitrateNames"/>
-
- <ListPreference
- android:title="@string/settings.max_video_bitrate_wifi"
- android:key="maxVideoBitrateWifi"
- android:defaultValue="0"
- android:entryValues="@array/maxVideoBitrateValues"
- android:entries="@array/maxVideoBitrateNames"/>
+ android:title="@string/settings.temp_loss_title"
+ android:key="tempLoss"
+ android:defaultValue="1"
+ android:entryValues="@array/tempLossValues"
+ android:entries="@array/tempLossNames"/>
<ListPreference
- android:title="@string/settings.max_video_bitrate_mobile"
- android:key="maxVideoBitrateMobile"
+ android:title="@string/settings.disconnect_pause_title"
+ android:key="pauseOnDisconnect"
android:defaultValue="0"
- android:entryValues="@array/maxVideoBitrateValues"
- android:entries="@array/maxVideoBitrateNames"/>
+ android:entryValues="@array/disconnectPauseValues"
+ android:entries="@array/disconnectPauseNames"/>
<CheckBoxPreference
- android:title="@string/settings.wifi_required_title"
- android:summary="@string/settings.wifi_required_summary"
- android:key="wifiRequiredForDownload"
+ android:title="@string/settings.persistent_title"
+ android:summary="@string/settings.persistent_summary"
+ android:key="persistentNotification"
android:defaultValue="false"/>
- <ListPreference
- android:title="@string/settings.network_timeout_title"
- android:key="networkTimeout"
- android:defaultValue="15000"
- android:entryValues="@array/networkTimeoutValues"
- android:entries="@array/networkTimeoutNames"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.cache_title">
-
- <EditTextPreference
- android:title="@string/settings.cache_size"
- android:key="cacheSize"
- android:defaultValue="2000"
- android:digits="0123456789"/>
-
- <EditTextPreference
- android:title="@string/settings.cache_location"
- android:key="cacheLocation"/>
-
- <ListPreference
- android:title="@string/settings.preload_wifi"
- android:key="preloadCountWifi"
- android:defaultValue="3"
- android:entryValues="@array/preloadCountValues"
- android:entries="@array/preloadCountNames"/>
-
- <ListPreference
- android:title="@string/settings.preload_mobile"
- android:key="preloadCountMobile"
- android:defaultValue="3"
- android:entryValues="@array/preloadCountValues"
- android:entries="@array/preloadCountNames"/>
-
- <Preference
- android:key="clearCache"
- android:title="@string/settings.cache_clear"
- android:persistent="false"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.other_title">
-
<CheckBoxPreference
- android:title="@string/settings.hide_media_title"
- android:summary="@string/settings.hide_media_summary"
- android:key="hideMedia"
+ android:title="@string/settings.play_now_after"
+ android:summary="@string/settings.play_now_after_summary"
+ android:key="playNowAfter"
android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.screen_lit_title"
- android:summary="@string/settings.screen_lit_summary"
- android:key="screenLitOnDownload"
- android:defaultValue="true"/>
- </PreferenceCategory>
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/settings.sync_title">
- <PreferenceCategory
- android:title="@string/settings.sync_title">
-
- <CheckBoxPreference
- android:title="@string/settings.sync_enabled"
- android:summary="@string/settings.sync_enabled_summary"
- android:key="syncEnabled"
- android:defaultValue="true"/>
-
- <ListPreference
- android:title="@string/settings.sync_interval"
- android:key="syncInterval"
- android:defaultValue="60"
- android:entryValues="@array/syncIntervalValues"
- android:entries="@array/syncIntervalNames"/>
-
- <CheckBoxPreference
- android:title="@string/settings.sync_wifi"
- android:summary="@string/settings.sync_wifi_summary"
- android:key="syncWifi"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.sync_notification"
- android:summary="@string/settings.sync_notification_summary"
- android:key="syncNotification"
- android:defaultValue="true"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.other_title">
-
- <CheckBoxPreference
- android:title="@string/settings.sync_starred"
- android:summary="@string/settings.sync_starred_summary"
- android:key="syncStarred"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.sync_most_recent"
- android:summary="@string/settings.sync_most_recent_summary"
- android:key="syncMostRecent"
- android:defaultValue="false"/>
- </PreferenceCategory>
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/settings.playback_title">
-
- <PreferenceCategory
- android:title="@string/settings.playback_title">
-
- <github.daneren2005.dsub.view.SeekBarPreference
- android:title="@string/settings.playlist_random_size_title"
- android:key="randomSize"
- android:defaultValue="20"
- android:dialogLayout="@layout/seekbar_preference"
- myns:max="100"/>
-
- <ListPreference
- android:title="@string/settings.temp_loss_title"
- android:key="tempLoss"
- android:defaultValue="1"
- android:entryValues="@array/tempLossValues"
- android:entries="@array/tempLossNames"/>
-
- <ListPreference
- android:title="@string/settings.disconnect_pause_title"
- android:key="pauseOnDisconnect"
- android:defaultValue="0"
- android:entryValues="@array/disconnectPauseValues"
- android:entries="@array/disconnectPauseNames"/>
-
- <CheckBoxPreference
- android:title="@string/settings.persistent_title"
- android:summary="@string/settings.persistent_summary"
- android:key="persistentNotification"
- android:defaultValue="false"/>
-
- <CheckBoxPreference
- android:title="@string/settings.play_now_after"
- android:summary="@string/settings.play_now_after_summary"
- android:key="playNowAfter"
- android:defaultValue="false"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.video_title">
-
- <ListPreference
- android:title="@string/settings.video_player"
- android:key="videoPlayer"
- android:defaultValue="raw"
- android:entryValues="@array/videoPlayerValues"
- android:entries="@array/videoPlayerNames"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.replay_gain">
-
- <CheckBoxPreference
- android:title="@string/settings.replay_gain"
- android:summary="@string/settings.replay_gain_summary"
- android:key="replayGain"
- android:defaultValue="false"/>
-
- <ListPreference
- android:title="@string/settings.replay_gain_type"
- android:key="replayGainType"
- android:defaultValue="1"
- android:entryValues="@array/replayGainTypeValues"
- android:entries="@array/replayGainTypeNames"/>
-
- <github.daneren2005.dsub.view.SeekBarPreference
- android:key="replayGainBump2"
- android:dialogLayout="@layout/seekbar_preference"
- android:title="@string/settings.replay_gain_bump"
- android:defaultValue="150"
- myns:max="150"
- myns:min="-150"
- myns:stepSize="10"
- myns:display="%+.1f dB"/>
-
- <github.daneren2005.dsub.view.SeekBarPreference
- android:key="replayGainUntagged2"
- android:dialogLayout="@layout/seekbar_preference"
- android:title="@string/settings.replay_gain_untagged"
- android:defaultValue="150"
- myns:max="0"
- myns:min="-150"
- myns:stepSize="10"
- myns:display="%+.1f dB"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings.other_title">
-
- <CheckBoxPreference
- android:title="@string/settings.scrobble_title"
- android:summary="@string/settings.scrobble_summary"
- android:key="scrobble"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.media_button_title"
- android:summary="@string/settings.media_button_summary"
- android:key="mediaButtons"
- android:defaultValue="true"/>
-
- <CheckBoxPreference
- android:title="@string/settings.gapless_playback"
- android:summary="@string/settings.gapless_playback_summary"
- android:key="gaplessPlayback"
- android:defaultValue="true"/>
- </PreferenceCategory>
- </PreferenceScreen>
- </PreferenceCategory>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.video_title">
+
+ <ListPreference
+ android:title="@string/settings.video_player"
+ android:key="videoPlayer"
+ android:defaultValue="raw"
+ android:entryValues="@array/videoPlayerValues"
+ android:entries="@array/videoPlayerNames"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.replay_gain">
+
+ <CheckBoxPreference
+ android:title="@string/settings.replay_gain"
+ android:summary="@string/settings.replay_gain_summary"
+ android:key="replayGain"
+ android:defaultValue="false"/>
+
+ <ListPreference
+ android:title="@string/settings.replay_gain_type"
+ android:key="replayGainType"
+ android:defaultValue="1"
+ android:entryValues="@array/replayGainTypeValues"
+ android:entries="@array/replayGainTypeNames"/>
+
+ <github.daneren2005.dsub.view.SeekBarPreference
+ android:key="replayGainBump2"
+ android:dialogLayout="@layout/seekbar_preference"
+ android:title="@string/settings.replay_gain_bump"
+ android:defaultValue="150"
+ myns:max="150"
+ myns:min="-150"
+ myns:stepSize="10"
+ myns:display="%+.1f dB"/>
+
+ <github.daneren2005.dsub.view.SeekBarPreference
+ android:key="replayGainUntagged2"
+ android:dialogLayout="@layout/seekbar_preference"
+ android:title="@string/settings.replay_gain_untagged"
+ android:defaultValue="150"
+ myns:max="0"
+ myns:min="-150"
+ myns:stepSize="10"
+ myns:display="%+.1f dB"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/settings.other_title">
+
+ <CheckBoxPreference
+ android:title="@string/settings.scrobble_title"
+ android:summary="@string/settings.scrobble_summary"
+ android:key="scrobble"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.media_button_title"
+ android:summary="@string/settings.media_button_summary"
+ android:key="mediaButtons"
+ android:defaultValue="true"/>
+
+ <CheckBoxPreference
+ android:title="@string/settings.gapless_playback"
+ android:summary="@string/settings.gapless_playback_summary"
+ android:key="gaplessPlayback"
+ android:defaultValue="true"/>
+ </PreferenceCategory>
+ </PreferenceScreen>
</PreferenceScreen>
diff --git a/src/github/daneren2005/dsub/activity/SettingsActivity.java b/src/github/daneren2005/dsub/activity/SettingsActivity.java
index d8a938cd..56a89fd2 100644
--- a/src/github/daneren2005/dsub/activity/SettingsActivity.java
+++ b/src/github/daneren2005/dsub/activity/SettingsActivity.java
@@ -25,7 +25,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.res.Configuration;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -33,9 +32,9 @@ import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
+import android.support.v7.app.ActionBarActivity;
import android.text.InputType;
import android.util.Log;
import android.view.MenuItem;
@@ -43,8 +42,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.FrameLayout;
import github.daneren2005.dsub.R;
+import github.daneren2005.dsub.fragments.PreferenceCompatFragment;
import github.daneren2005.dsub.service.DownloadService;
import github.daneren2005.dsub.service.MusicService;
import github.daneren2005.dsub.service.MusicServiceFactory;
@@ -59,16 +60,15 @@ import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URL;
-import java.security.acl.Group;
import java.text.DecimalFormat;
import java.util.LinkedHashMap;
-import java.util.Locale;
import java.util.Map;
-public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
+public class SettingsActivity extends SubsonicActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = SettingsActivity.class.getSimpleName();
private final Map<String, ServerSettings> serverSettings = new LinkedHashMap<String, ServerSettings>();
private boolean testingConnection;
+ private PreferenceCompatFragment fragment;
private ListPreference theme;
private ListPreference maxBitrateWifi;
private ListPreference maxBitrateMobile;
@@ -96,7 +96,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
private String internalSSID;
private String internalSSIDDisplay;
private EditTextPreference cacheSize;
-
+
private int serverCount = 3;
private SharedPreferences settings;
private DecimalFormat megabyteFromat;
@@ -104,46 +104,114 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
@Override
public void onCreate(Bundle savedInstanceState) {
- applyTheme();
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.settings);
+ setContentView(0);
+
+ fragment = new PreferenceCompatFragment() {
+ @Override
+ public void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+ this.setTitle(getResources().getString(R.string.settings_title));
+ initSettings();
+ }
+ };
+ Bundle args = new Bundle();
+ args.putInt(Constants.INTENT_EXTRA_FRAGMENT_TYPE, R.xml.settings);
+
+ fragment.setArguments(args);
+ this.getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment, null).commit();
+ currentFragment = fragment;
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+
+ SharedPreferences prefs = Util.getPreferences(this);
+ prefs.unregisterOnSharedPreferenceChangeListener(this);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if(item.getItemId() == android.R.id.home) {
+ onBackPressed();
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ // Random error I have no idea how to reproduce
+ if(sharedPreferences == null) {
+ return;
+ }
+ update();
+
+ if (Constants.PREFERENCES_KEY_HIDE_MEDIA.equals(key)) {
+ setHideMedia(sharedPreferences.getBoolean(key, false));
+ }
+ else if (Constants.PREFERENCES_KEY_MEDIA_BUTTONS.equals(key)) {
+ setMediaButtonsEnabled(sharedPreferences.getBoolean(key, true));
+ }
+ else if (Constants.PREFERENCES_KEY_CACHE_LOCATION.equals(key)) {
+ setCacheLocation(sharedPreferences.getString(key, ""));
+ }
+ else if (Constants.PREFERENCES_KEY_SLEEP_TIMER_DURATION.equals(key)){
+ DownloadService downloadService = DownloadService.getInstance();
+ downloadService.setSleepTimerDuration(Integer.parseInt(sharedPreferences.getString(key, "60")));
+ }
+ else if(Constants.PREFERENCES_KEY_SYNC_MOST_RECENT.equals(key)) {
+ SyncUtil.removeMostRecentSyncFiles(this);
+ } else if(Constants.PREFERENCES_KEY_REPLAY_GAIN.equals(key) || Constants.PREFERENCES_KEY_REPLAY_GAIN_BUMP.equals(key) || Constants.PREFERENCES_KEY_REPLAY_GAIN_UNTAGGED.equals(key)) {
+ DownloadService downloadService = DownloadService.getInstance();
+ if(downloadService != null) {
+ downloadService.reapplyVolume();
+ }
+ }
+
+ scheduleBackup();
+ }
+
+ private void initSettings() {
internalSSID = Util.getSSID(this);
if(internalSSID == null) {
internalSSID = "";
}
internalSSIDDisplay = this.getResources().getString(R.string.settings_server_local_network_ssid_hint, internalSSID);
- theme = (ListPreference) findPreference(Constants.PREFERENCES_KEY_THEME);
- maxBitrateWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI);
- maxBitrateMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE);
- maxVideoBitrateWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_VIDEO_BITRATE_WIFI);
- maxVideoBitrateMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_VIDEO_BITRATE_MOBILE);
- networkTimeout = (ListPreference) findPreference(Constants.PREFERENCES_KEY_NETWORK_TIMEOUT);
- cacheLocation = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_CACHE_LOCATION);
- preloadCountWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT_WIFI);
- preloadCountMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT_MOBILE);
- tempLoss = (ListPreference) findPreference(Constants.PREFERENCES_KEY_TEMP_LOSS);
- pauseDisconnect = (ListPreference) findPreference(Constants.PREFERENCES_KEY_PAUSE_DISCONNECT);
- serversCategory = (PreferenceCategory) findPreference(Constants.PREFERENCES_KEY_SERVER_KEY);
- addServerPreference = findPreference(Constants.PREFERENCES_KEY_SERVER_ADD);
- videoPlayer = (ListPreference) findPreference(Constants.PREFERENCES_KEY_VIDEO_PLAYER);
- syncInterval = (ListPreference) findPreference(Constants.PREFERENCES_KEY_SYNC_INTERVAL);
- syncEnabled = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SYNC_ENABLED);
- syncWifi = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SYNC_WIFI);
- syncNotification = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SYNC_NOTIFICATION);
- syncStarred = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SYNC_STARRED);
- syncMostRecent = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_SYNC_MOST_RECENT);
- replayGain = (CheckBoxPreference) findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN);
- replayGainType = (ListPreference) findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN_TYPE);
- replayGainBump = findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN_BUMP);
- replayGainUntagged = findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN_UNTAGGED);
- cacheSize = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_CACHE_SIZE);
-
+ theme = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_THEME);
+ maxBitrateWifi = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI);
+ maxBitrateMobile = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE);
+ maxVideoBitrateWifi = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_MAX_VIDEO_BITRATE_WIFI);
+ maxVideoBitrateMobile = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_MAX_VIDEO_BITRATE_MOBILE);
+ networkTimeout = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_NETWORK_TIMEOUT);
+ cacheLocation = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_CACHE_LOCATION);
+ preloadCountWifi = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT_WIFI);
+ preloadCountMobile = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT_MOBILE);
+ tempLoss = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_TEMP_LOSS);
+ pauseDisconnect = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_PAUSE_DISCONNECT);
+ serversCategory = (PreferenceCategory) fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_KEY);
+ addServerPreference = fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_ADD);
+ videoPlayer = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_VIDEO_PLAYER);
+ syncInterval = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_INTERVAL);
+ syncEnabled = (CheckBoxPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_ENABLED);
+ syncWifi = (CheckBoxPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_WIFI);
+ syncNotification = (CheckBoxPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_NOTIFICATION);
+ syncStarred = (CheckBoxPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_STARRED);
+ syncMostRecent = (CheckBoxPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_MOST_RECENT);
+ replayGain = (CheckBoxPreference) fragment.findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN);
+ replayGainType = (ListPreference) fragment.findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN_TYPE);
+ replayGainBump = fragment.findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN_BUMP);
+ replayGainUntagged = fragment.findPreference(Constants.PREFERENCES_KEY_REPLAY_GAIN_UNTAGGED);
+ cacheSize = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_CACHE_SIZE);
+
settings = Util.getPreferences(this);
serverCount = settings.getInt(Constants.PREFERENCES_KEY_SERVER_COUNT, 1);
- findPreference("clearCache").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ fragment.findPreference("clearCache").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Util.confirmDialog(SettingsActivity.this, R.string.common_delete, R.string.common_confirm_message_cache, new DialogInterface.OnClickListener() {
@@ -179,7 +247,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
serverCount++;
String instance = String.valueOf(serverCount);
- Preference addServerPreference = findPreference(Constants.PREFERENCES_KEY_SERVER_ADD);
+ Preference addServerPreference = fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_ADD);
serversCategory.addPreference(addServer(serverCount));
SharedPreferences.Editor editor = settings.edit();
@@ -189,12 +257,12 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
editor.commit();
serverSettings.put(instance, new ServerSettings(instance));
-
- return true;
- }
- });
- findPreference(Constants.PREFERENCES_KEY_SYNC_ENABLED).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ return true;
+ }
+ });
+
+ fragment.findPreference(Constants.PREFERENCES_KEY_SYNC_ENABLED).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Boolean syncEnabled = (Boolean) newValue;
@@ -220,75 +288,18 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
});
serversCategory.setOrderingAsAdded(false);
- for (int i = 1; i <= serverCount; i++) {
- String instance = String.valueOf(i);
+ for (int i = 1; i <= serverCount; i++) {
+ String instance = String.valueOf(i);
serversCategory.addPreference(addServer(i));
- serverSettings.put(instance, new ServerSettings(instance));
- }
-
- SharedPreferences prefs = Util.getPreferences(this);
- prefs.registerOnSharedPreferenceChangeListener(this);
-
- update();
-
- if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH && getActionBar() != null) {
- getActionBar().setDisplayHomeAsUpEnabled(true);
- getActionBar().setHomeButtonEnabled(true);
+ serverSettings.put(instance, new ServerSettings(instance));
}
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
-
- SharedPreferences prefs = Util.getPreferences(this);
- prefs.unregisterOnSharedPreferenceChangeListener(this);
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if(item.getItemId() == android.R.id.home) {
- onBackPressed();
- return true;
- }
+ SharedPreferences prefs = Util.getPreferences(this);
+ prefs.registerOnSharedPreferenceChangeListener(this);
- return false;
+ update();
}
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- // Random error I have no idea how to reproduce
- if(sharedPreferences == null) {
- return;
- }
-
- update();
-
- if (Constants.PREFERENCES_KEY_HIDE_MEDIA.equals(key)) {
- setHideMedia(sharedPreferences.getBoolean(key, false));
- }
- else if (Constants.PREFERENCES_KEY_MEDIA_BUTTONS.equals(key)) {
- setMediaButtonsEnabled(sharedPreferences.getBoolean(key, true));
- }
- else if (Constants.PREFERENCES_KEY_CACHE_LOCATION.equals(key)) {
- setCacheLocation(sharedPreferences.getString(key, ""));
- }
- else if (Constants.PREFERENCES_KEY_SLEEP_TIMER_DURATION.equals(key)){
- DownloadService downloadService = DownloadService.getInstance();
- downloadService.setSleepTimerDuration(Integer.parseInt(sharedPreferences.getString(key, "60")));
- }
- else if(Constants.PREFERENCES_KEY_SYNC_MOST_RECENT.equals(key)) {
- SyncUtil.removeMostRecentSyncFiles(this);
- } else if(Constants.PREFERENCES_KEY_REPLAY_GAIN.equals(key) || Constants.PREFERENCES_KEY_REPLAY_GAIN_BUMP.equals(key) || Constants.PREFERENCES_KEY_REPLAY_GAIN_UNTAGGED.equals(key)) {
- DownloadService downloadService = DownloadService.getInstance();
- if(downloadService != null) {
- downloadService.reapplyVolume();
- }
- }
-
- scheduleBackup();
- }
-
private void scheduleBackup() {
try {
Class managerClass = Class.forName("android.app.backup.BackupManager");
@@ -364,9 +375,9 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
ss.update();
}
}
-
+
private PreferenceScreen addServer(final int instance) {
- final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this);
+ final PreferenceScreen screen = fragment.getPreferenceManager().createPreferenceScreen(this);
screen.setTitle(R.string.settings_server_unused);
screen.setKey(Constants.PREFERENCES_KEY_SERVER_KEY + instance);
@@ -395,7 +406,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
serverUrlPreference.setSummary(serverUrlPreference.getText());
screen.setSummary(serverUrlPreference.getText());
-
+
final EditTextPreference serverLocalNetworkSSIDPreference = new EditTextPreference(this) {
@Override
protected void onAddEditTextToDialogView(View dialogView, final EditText editText) {
@@ -442,13 +453,13 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
serverTagPreference.setSummary(R.string.settings_browse_by_tags_summary);
serverTagPreference.setTitle(R.string.settings_browse_by_tags);
serverPasswordPreference.setDialogTitle(R.string.settings_server_password);
-
+
final CheckBoxPreference serverSyncPreference = new CheckBoxPreference(this);
serverSyncPreference.setKey(Constants.PREFERENCES_KEY_SERVER_SYNC + instance);
serverSyncPreference.setChecked(Util.isSyncEnabled(this, instance));
serverSyncPreference.setSummary(R.string.settings_server_sync_summary);
serverSyncPreference.setTitle(R.string.settings_server_sync);
-
+
final Preference serverOpenBrowser = new Preference(this);
serverOpenBrowser.setKey(Constants.PREFERENCES_KEY_OPEN_BROWSER);
serverOpenBrowser.setPersistent(false);
@@ -492,7 +503,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
screen.getDialog().dismiss();
}
});
-
+
return true;
}
});
@@ -542,7 +553,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
} catch(Exception e) {
Log.w(TAG, "Failed to create " + nomediaDir, e);
}
-
+
try {
if(!musicNoMedia.createNewFile()) {
Log.w(TAG, "Failed to create " + musicNoMedia);
@@ -636,17 +647,17 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
};
task.execute();
}
-
+
private void openInBrowser(final int instance) {
- SharedPreferences prefs = Util.getPreferences(this);
+ SharedPreferences prefs = Util.getPreferences(this);
String url = prefs.getString(Constants.PREFERENCES_KEY_SERVER_URL + instance, null);
if(url == null) {
new ErrorDialog(SettingsActivity.this, R.string.settings_invalid_url, false);
return;
}
Uri uriServer = Uri.parse(url);
-
- Intent browserIntent = new Intent(Intent.ACTION_VIEW, uriServer);
+
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, uriServer);
startActivity(browserIntent);
}
@@ -660,12 +671,12 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer
private ServerSettings(String instance) {
- screen = (PreferenceScreen) findPreference("server" + instance);
- serverName = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_NAME + instance);
- serverUrl = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_URL + instance);
- serverLocalNetworkSSID = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_LOCAL_NETWORK_SSID + instance);
- serverInternalUrl = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_INTERNAL_URL + instance);
- username = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_USERNAME + instance);
+ screen = (PreferenceScreen) fragment.findPreference("server" + instance);
+ serverName = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_NAME + instance);
+ serverUrl = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_URL + instance);
+ serverLocalNetworkSSID = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_LOCAL_NETWORK_SSID + instance);
+ serverInternalUrl = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_SERVER_INTERNAL_URL + instance);
+ username = (EditTextPreference) fragment.findPreference(Constants.PREFERENCES_KEY_USERNAME + instance);
serverUrl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
diff --git a/src/github/daneren2005/dsub/activity/SubsonicActivity.java b/src/github/daneren2005/dsub/activity/SubsonicActivity.java
index a1e4d9ae..09a1995e 100644
--- a/src/github/daneren2005/dsub/activity/SubsonicActivity.java
+++ b/src/github/daneren2005/dsub/activity/SubsonicActivity.java
@@ -164,8 +164,13 @@ public class SubsonicActivity extends ActionBarActivity implements OnItemSelecte
@Override
public void startActivity(Intent intent) {
- if(intent.getComponent() != null && "github.daneren2005.dsub.activity.DownloadActivity".equals(intent.getComponent().getClassName())) {
- intent.putExtra(Constants.FRAGMENT_POSITION, lastSelectedPosition);
+ if(intent.getComponent() != null) {
+ String name = intent.getComponent().getClassName();
+ if(name != null && name.indexOf("DownloadActivity") != -1) {
+ intent.putExtra(Constants.FRAGMENT_POSITION, lastSelectedPosition);
+ } else if(name != null && name.indexOf("SettingsActivity") != -1) {
+ intent.putExtra(Constants.FRAGMENT_POSITION, drawerItems.length - 1);
+ }
}
super.startActivity(intent);
}
@@ -174,9 +179,11 @@ public class SubsonicActivity extends ActionBarActivity implements OnItemSelecte
public void setContentView(int viewId) {
super.setContentView(R.layout.abstract_activity);
rootView = (ViewGroup) findViewById(R.id.content_frame);
- LayoutInflater layoutInflater = getLayoutInflater();
- layoutInflater.inflate(viewId, rootView);
+ if(viewId != 0) {
+ LayoutInflater layoutInflater = getLayoutInflater();
+ layoutInflater.inflate(viewId, rootView);
+ }
drawerList = (ListView) findViewById(R.id.left_drawer);
diff --git a/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java b/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java
index 3d1f8aab..74ef4894 100644
--- a/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java
+++ b/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java
@@ -442,16 +442,16 @@ public class SubsonicFragmentActivity extends SubsonicActivity {
currentState = state;
}
- if(current == null) {
+ MusicDirectory.Entry song = null;
+ if(current != null) {
+ song = current.getSong();
+ trackView.setText(song.getTitle());
+ artistView.setText(song.getArtist());
+ } else {
trackView.setText("Title");
artistView.setText("Artist");
- getImageLoader().loadImage(coverArtView, null, false, false);
- return;
}
- MusicDirectory.Entry song = current.getSong();
- trackView.setText(song.getTitle());
- artistView.setText(song.getArtist());
getImageLoader().loadImage(coverArtView, song, false, false);
int[] attrs = new int[] {(state == PlayerState.STARTED) ? R.attr.media_button_pause : R.attr.media_button_start};
TypedArray typedArray = this.obtainStyledAttributes(attrs);
diff --git a/src/github/daneren2005/dsub/fragments/PreferenceCompatFragment.java b/src/github/daneren2005/dsub/fragments/PreferenceCompatFragment.java
new file mode 100644
index 00000000..9f413b3b
--- /dev/null
+++ b/src/github/daneren2005/dsub/fragments/PreferenceCompatFragment.java
@@ -0,0 +1,313 @@
+/*
+ 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 2014 (C) Scott Jackson
+*/
+
+package github.daneren2005.dsub.fragments;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager;
+import android.preference.PreferenceScreen;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import github.daneren2005.dsub.R;
+import github.daneren2005.dsub.util.Constants;
+
+public class PreferenceCompatFragment extends SubsonicFragment {
+ private static final int FIRST_REQUEST_CODE = 100;
+ private static final int MSG_BIND_PREFERENCES = 1;
+ private static final String PREFERENCES_TAG = "android:preferences";
+ private boolean mHavePrefs;
+ private boolean mInitDone;
+ private ListView mList;
+ private PreferenceManager mPreferenceManager;
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+
+ case MSG_BIND_PREFERENCES:
+ bindPreferences();
+ break;
+ }
+ }
+ };
+
+ final private Runnable mRequestFocus = new Runnable() {
+ public void run() {
+ mList.focusableViewAvailable(mList);
+ }
+ };
+
+ private void bindPreferences() {
+ PreferenceScreen localPreferenceScreen = getPreferenceScreen();
+ if (localPreferenceScreen != null) {
+ ListView localListView = getListView();
+ localPreferenceScreen.bind(localListView);
+ }
+ }
+
+ private void ensureList() {
+ if (mList == null) {
+ View view = getView();
+ if (view == null) {
+ throw new IllegalStateException("Content view not yet created");
+ }
+
+ View listView = view.findViewById(android.R.id.list);
+ if (!(listView instanceof ListView)) {
+ throw new RuntimeException("Content has view with id attribute 'android.R.id.list' that is not a ListView class");
+ }
+
+ mList = (ListView)listView;
+ if (mList == null) {
+ throw new RuntimeException("Your content must have a ListView whose id attribute is 'android.R.id.list'");
+ }
+
+ mHandler.post(mRequestFocus);
+ }
+ }
+
+ private void postBindPreferences() {
+ if (mHandler.hasMessages(MSG_BIND_PREFERENCES)) {
+ mHandler.obtainMessage(MSG_BIND_PREFERENCES).sendToTarget();
+ }
+ }
+
+ private void requirePreferenceManager() {
+ if (this.mPreferenceManager == null) {
+ throw new RuntimeException("This should be called after super.onCreate.");
+ }
+ }
+
+ public void addPreferencesFromIntent(Intent intent) {
+ requirePreferenceManager();
+ PreferenceScreen screen = inflateFromIntent(intent, getPreferenceScreen());
+ setPreferenceScreen(screen);
+ }
+
+ public void addPreferencesFromResource(int resId) {
+ requirePreferenceManager();
+ PreferenceScreen screen = inflateFromResource(getActivity(), resId, getPreferenceScreen());
+ setPreferenceScreen(screen);
+ }
+
+ public Preference findPreference(CharSequence key) {
+ if (mPreferenceManager == null) {
+ return null;
+ }
+ return mPreferenceManager.findPreference(key);
+ }
+
+ public ListView getListView() {
+ ensureList();
+ return mList;
+ }
+
+ public PreferenceManager getPreferenceManager() {
+ return mPreferenceManager;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ getListView().setScrollBarStyle(0);
+ if (mHavePrefs) {
+ bindPreferences();
+ }
+ mInitDone = true;
+ if (savedInstanceState != null) {
+ Bundle localBundle = savedInstanceState.getBundle(PREFERENCES_TAG);
+ if (localBundle != null) {
+ PreferenceScreen screen = getPreferenceScreen();
+ if (screen != null) {
+ screen.restoreHierarchyState(localBundle);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ dispatchActivityResult(requestCode, resultCode, data);
+ }
+
+ @Override
+ public void onCreate(Bundle paramBundle) {
+ super.onCreate(paramBundle);
+ mPreferenceManager = createPreferenceManager();
+
+ int res = this.getArguments().getInt(Constants.INTENT_EXTRA_FRAGMENT_TYPE, 0);
+ if(res != 0) {
+ addPreferencesFromResource(res);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle) {
+ return paramLayoutInflater.inflate(R.layout.preferences, paramViewGroup, false);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ dispatchActivityDestroy();
+ }
+
+ @Override
+ public void onDestroyView() {
+ mList = null;
+ mHandler.removeCallbacks(mRequestFocus);
+ mHandler.removeMessages(MSG_BIND_PREFERENCES);
+ super.onDestroyView();
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle bundle) {
+ super.onSaveInstanceState(bundle);
+ PreferenceScreen screen = getPreferenceScreen();
+ if (screen != null) {
+ Bundle localBundle = new Bundle();
+ screen.saveHierarchyState(localBundle);
+ bundle.putBundle(PREFERENCES_TAG, localBundle);
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ dispatchActivityStop();
+ }
+
+ /** Access methods with visibility private **/
+
+ private PreferenceManager createPreferenceManager() {
+ try {
+ Constructor<PreferenceManager> c = PreferenceManager.class.getDeclaredConstructor(Activity.class, int.class);
+ c.setAccessible(true);
+ return c.newInstance(this.getActivity(), FIRST_REQUEST_CODE);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private PreferenceScreen getPreferenceScreen() {
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("getPreferenceScreen");
+ m.setAccessible(true);
+ return (PreferenceScreen) m.invoke(mPreferenceManager);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void setPreferenceScreen(PreferenceScreen preferenceScreen) {
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("setPreferences", PreferenceScreen.class);
+ m.setAccessible(true);
+ boolean result = (Boolean) m.invoke(mPreferenceManager, preferenceScreen);
+ if (result && preferenceScreen != null) {
+ mHavePrefs = true;
+ if (mInitDone) {
+ postBindPreferences();
+ }
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void dispatchActivityResult(int requestCode, int resultCode, Intent data) {
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityResult", int.class, int.class, Intent.class);
+ m.setAccessible(true);
+ m.invoke(mPreferenceManager, requestCode, resultCode, data);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void dispatchActivityDestroy() {
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityDestroy");
+ m.setAccessible(true);
+ m.invoke(mPreferenceManager);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void dispatchActivityStop() {
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityStop");
+ m.setAccessible(true);
+ m.invoke(mPreferenceManager);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private void setFragment(PreferenceFragment preferenceFragment) {
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("setFragment", PreferenceFragment.class);
+ m.setAccessible(true);
+ m.invoke(mPreferenceManager, preferenceFragment);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public PreferenceScreen inflateFromResource(Context context, int resId, PreferenceScreen rootPreferences) {
+ PreferenceScreen preferenceScreen ;
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("inflateFromResource", Context.class, int.class, PreferenceScreen.class);
+ m.setAccessible(true);
+ preferenceScreen = (PreferenceScreen) m.invoke(mPreferenceManager, context, resId, rootPreferences);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return preferenceScreen;
+ }
+
+ public PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) {
+ PreferenceScreen preferenceScreen ;
+ try {
+ Method m = PreferenceManager.class.getDeclaredMethod("inflateFromIntent", Intent.class, PreferenceScreen.class);
+ m.setAccessible(true);
+ preferenceScreen = (PreferenceScreen) m.invoke(mPreferenceManager, queryIntent, rootPreferences);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return preferenceScreen;
+ }
+}
diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index a71924cf..3fbb90cf 100644
--- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -203,7 +203,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
}
else if(hideButtons && !showAll) {
if(albumListType != null) {
- menuInflater.inflate(R.menu.empty, menu);
+ menuInflater.inflate(R.menu.select_album_list, menu);
} else {
menuInflater.inflate(R.menu.select_album, menu);
@@ -802,6 +802,8 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
if (hasSubFolders && (id != null || share != null || "starred".equals(albumListType))) {
downloadRecursively(id, false, append, !append, shuffle, false);
+ } else if(hasSubFolders && albumListType != null) {
+ downloadRecursively(albums, shuffle, append);
} else {
selectAll(true, false);
download(append, false, !append, false, shuffle);
diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java
index 5cb7c32f..6e588ec4 100644
--- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java
@@ -847,12 +847,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
downloadRecursively(id, name, isDirectory, save, append, autoplay, shuffle, background, false);
}
protected void downloadRecursively(final String id, final String name, final boolean isDirectory, final boolean save, final boolean append, final boolean autoplay, final boolean shuffle, final boolean background, final boolean playNext) {
- LoadingTask<Boolean> task = new LoadingTask<Boolean>(context) {
- private MusicService musicService;
- private static final int MAX_SONGS = 500;
- private boolean playNowOverride = false;
- private List<Entry> songs;
-
+ new RecursiveLoader(context) {
@Override
protected Boolean doInBackground() throws Throwable {
musicService = MusicServiceFactory.getMusicService(context);
@@ -904,48 +899,47 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
return transition;
}
+ }.execute();
+ }
- private void getSongsRecursively(MusicDirectory parent, List<Entry> songs) throws Exception {
- if (songs.size() > MAX_SONGS) {
- return;
- }
+ protected void downloadRecursively(final List<Entry> albums, final boolean shuffle, final boolean append) {
+ new RecursiveLoader(context) {
+ @Override
+ protected Boolean doInBackground() throws Throwable {
+ musicService = MusicServiceFactory.getMusicService(context);
- for (Entry song : parent.getChildren(false, true)) {
- if (!song.isVideo() && song.getRating() != 1) {
- songs.add(song);
- }
+ if(shuffle) {
+ Collections.shuffle(albums);
}
- for (Entry dir : parent.getChildren(true, false)) {
- if(dir.getRating() == 1) {
- continue;
- }
- MusicDirectory musicDirectory;
- if(Util.isTagBrowsing(context) && !Util.isOffline(context)) {
- musicDirectory = musicService.getAlbum(dir.getId(), dir.getTitle(), false, context, this);
- } else {
- musicDirectory = musicService.getMusicDirectory(dir.getId(), dir.getTitle(), false, context, this);
+ songs = new LinkedList<Entry>();
+ MusicDirectory root = new MusicDirectory();
+ root.addChildren(albums);
+ getSongsRecursively(root, songs);
+
+ DownloadService downloadService = getDownloadService();
+ boolean transition = false;
+ if (!songs.isEmpty() && downloadService != null) {
+ // Conditions for a standard play now operation
+ if(!append && !shuffle) {
+ playNowOverride = true;
+ return false;
}
- getSongsRecursively(musicDirectory, songs);
- }
- }
- @Override
- protected void done(Boolean result) {
- warnIfStorageUnavailable();
+ if (!append) {
+ downloadService.clear();
+ }
- if(playNowOverride) {
- playNow(songs);
- return;
+ downloadService.download(songs, false, true, false, false);
+ if(!append) {
+ transition = true;
+ }
}
+ artistOverride = false;
- if(result) {
- Util.startActivityWithoutTransition(context, DownloadActivity.class);
- }
+ return transition;
}
- };
-
- task.execute();
+ }.execute();
}
protected MusicDirectory getMusicDirectory(String id, String name, boolean refresh, MusicService service, ProgressListener listener) throws Exception {
@@ -1732,4 +1726,54 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
public abstract class OnStarChange {
abstract void starChange(boolean starred);
}
+
+ public abstract class RecursiveLoader extends LoadingTask<Boolean> {
+ protected MusicService musicService;
+ protected static final int MAX_SONGS = 500;
+ protected boolean playNowOverride = false;
+ protected List<Entry> songs;
+
+ public RecursiveLoader(Activity context) {
+ super(context);
+ }
+
+ protected void getSongsRecursively(MusicDirectory parent, List<Entry> songs) throws Exception {
+ if (songs.size() > MAX_SONGS) {
+ return;
+ }
+
+ for (Entry song : parent.getChildren(false, true)) {
+ if (!song.isVideo() && song.getRating() != 1) {
+ songs.add(song);
+ }
+ }
+ for (Entry dir : parent.getChildren(true, false)) {
+ if(dir.getRating() == 1) {
+ continue;
+ }
+
+ MusicDirectory musicDirectory;
+ if(Util.isTagBrowsing(context) && !Util.isOffline(context)) {
+ musicDirectory = musicService.getAlbum(dir.getId(), dir.getTitle(), false, context, this);
+ } else {
+ musicDirectory = musicService.getMusicDirectory(dir.getId(), dir.getTitle(), false, context, this);
+ }
+ getSongsRecursively(musicDirectory, songs);
+ }
+ }
+
+ @Override
+ protected void done(Boolean result) {
+ warnIfStorageUnavailable();
+
+ if(playNowOverride) {
+ playNow(songs);
+ return;
+ }
+
+ if(result) {
+ Util.startActivityWithoutTransition(context, DownloadActivity.class);
+ }
+ }
+ }
}
diff --git a/src/github/daneren2005/dsub/provider/DSubSearchProvider.java b/src/github/daneren2005/dsub/provider/DSubSearchProvider.java
index 30490f17..63bbaaa4 100644
--- a/src/github/daneren2005/dsub/provider/DSubSearchProvider.java
+++ b/src/github/daneren2005/dsub/provider/DSubSearchProvider.java
@@ -24,6 +24,7 @@ import android.content.ContentValues;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
+import android.util.Log;
import java.util.ArrayList;
import java.util.Collections;
@@ -45,6 +46,8 @@ import github.daneren2005.dsub.util.Util;
* @author Sindre Mehus
*/
public class DSubSearchProvider extends ContentProvider {
+ private static final String TAG = DSubSearchProvider.class.getSimpleName();
+
private static final String RESOURCE_PREFIX = "android.resource://github.daneren2005.dsub/";
private static final String[] COLUMNS = {"_id",
SearchManager.SUGGEST_COLUMN_TEXT_1,
diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java
index a1bf7b52..f23b0995 100644
--- a/src/github/daneren2005/dsub/service/DownloadService.java
+++ b/src/github/daneren2005/dsub/service/DownloadService.java
@@ -28,6 +28,7 @@ import static github.daneren2005.dsub.domain.PlayerState.PREPARED;
import static github.daneren2005.dsub.domain.PlayerState.PREPARING;
import static github.daneren2005.dsub.domain.PlayerState.STARTED;
import static github.daneren2005.dsub.domain.PlayerState.STOPPED;
+import static github.daneren2005.dsub.domain.RemoteControlState.LOCAL;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.audiofx.AudioEffectsController;
@@ -140,7 +141,7 @@ public class DownloadService extends Service {
private float volume = 1.0f;
private AudioEffectsController effectsController;
- private RemoteControlState remoteState = RemoteControlState.LOCAL;
+ private RemoteControlState remoteState = LOCAL;
private PositionCache positionCache;
private BufferProxy proxy;
@@ -405,7 +406,7 @@ public class DownloadService extends Service {
}
private void updateJukeboxPlaylist() {
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
remoteController.updatePlaylist();
}
}
@@ -413,7 +414,7 @@ public class DownloadService extends Service {
public synchronized void restore(List<MusicDirectory.Entry> songs, List<MusicDirectory.Entry> toDelete, int currentPlayingIndex, int currentPlayingPosition) {
SharedPreferences prefs = Util.getPreferences(this);
remoteState = RemoteControlState.values()[prefs.getInt(Constants.PREFERENCES_KEY_CONTROL_MODE, 0)];
- if(remoteState != RemoteControlState.LOCAL) {
+ if(remoteState != LOCAL) {
String id = prefs.getString(Constants.PREFERENCES_KEY_CONTROL_ID, null);
setRemoteState(remoteState, null, id);
}
@@ -828,10 +829,10 @@ public class DownloadService extends Service {
nextPlayingTask = null;
}
setCurrentPlaying(index, start);
- if (start && remoteState != RemoteControlState.LOCAL) {
+ if (start && remoteState != LOCAL) {
remoteController.changeTrack(index, currentPlaying);
}
- if (remoteState == RemoteControlState.LOCAL) {
+ if (remoteState == LOCAL) {
bufferAndPlay(position, start);
checkDownloads();
setNextPlaying();
@@ -900,7 +901,7 @@ public class DownloadService extends Service {
}
try {
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
remoteController.changePosition(position / 1000);
} else {
mediaPlayer.seekTo(position);
@@ -989,7 +990,7 @@ public class DownloadService extends Service {
public synchronized void pause(boolean temp) {
try {
if (playerState == STARTED) {
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
remoteController.stop();
} else {
mediaPlayer.pause();
@@ -1006,7 +1007,7 @@ public class DownloadService extends Service {
public synchronized void stop() {
try {
if (playerState == STARTED) {
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
remoteController.stop();
setPlayerState(STOPPED);
handler.post(new Runnable() {
@@ -1029,7 +1030,7 @@ public class DownloadService extends Service {
public synchronized void start() {
try {
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
remoteController.start();
} else {
// Only start if done preparing
@@ -1053,7 +1054,7 @@ public class DownloadService extends Service {
}
try {
// Only set to idle if it's not being killed to start RemoteController
- if(remoteState == RemoteControlState.LOCAL) {
+ if(remoteState == LOCAL) {
setPlayerState(IDLE);
}
mediaPlayer.setOnErrorListener(null);
@@ -1093,7 +1094,7 @@ public class DownloadService extends Service {
if (playerState == IDLE || playerState == DOWNLOADING || playerState == PREPARING) {
return 0;
}
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
return remoteController.getRemotePosition() * 1000;
} else {
return Math.max(0, cachedPosition - subtractPosition);
@@ -1112,7 +1113,7 @@ public class DownloadService extends Service {
}
}
if (playerState != IDLE && playerState != DOWNLOADING && playerState != PlayerState.PREPARING) {
- if(remoteState == RemoteControlState.LOCAL) {
+ if(remoteState == LOCAL) {
try {
return mediaPlayer.getDuration();
} catch (Exception x) {
@@ -1169,7 +1170,7 @@ public class DownloadService extends Service {
scrobbler.scrobble(this, currentPlaying, true);
}
- if(playerState == STARTED && positionCache == null && remoteState == RemoteControlState.LOCAL) {
+ if(playerState == STARTED && positionCache == null && remoteState == LOCAL) {
positionCache = new PositionCache();
Thread thread = new Thread(positionCache, "PositionCache");
thread.start();
@@ -1303,7 +1304,7 @@ public class DownloadService extends Service {
}
public boolean isRemoteEnabled() {
- return remoteState != RemoteControlState.LOCAL;
+ return remoteState != LOCAL;
}
public RemoteController getRemoteController() {
@@ -1339,7 +1340,7 @@ public class DownloadService extends Service {
remoteController.shutdown();
remoteController = null;
- if(newState == RemoteControlState.LOCAL) {
+ if(newState == LOCAL) {
mediaRouter.setDefaultRoute();
}
}
@@ -1351,7 +1352,7 @@ public class DownloadService extends Service {
break;
case CHROMECAST: case DLNA:
if(ref == null) {
- remoteState = RemoteControlState.LOCAL;
+ remoteState = LOCAL;
break;
}
remoteController = (RemoteController) ref;
@@ -1366,7 +1367,7 @@ public class DownloadService extends Service {
play(getCurrentPlayingIndex(), isPlaying, position);
}
- if (remoteState != RemoteControlState.LOCAL) {
+ if (remoteState != LOCAL) {
reset();
// Cancel current download, if necessary.
@@ -1385,7 +1386,7 @@ public class DownloadService extends Service {
}
}
- if(remoteState == RemoteControlState.LOCAL) {
+ if(remoteState == LOCAL) {
checkDownloads();
}
@@ -1395,7 +1396,7 @@ public class DownloadService extends Service {
public void run() {
RouteInfo info = mediaRouter.getRouteForId(routeId);
if(info == null) {
- setRemoteState(RemoteControlState.LOCAL, null);
+ setRemoteState(LOCAL, null);
} else if(newState == RemoteControlState.CHROMECAST) {
RemoteController controller = mediaRouter.getRemoteController(info);
if(controller != null) {
@@ -1551,7 +1552,7 @@ public class DownloadService extends Service {
resetNext();
// Exit when using remote controllers
- if(remoteState != RemoteControlState.LOCAL) {
+ if(remoteState != LOCAL) {
return;
}
@@ -1719,7 +1720,7 @@ public class DownloadService extends Service {
DownloadFile movedSong = list.remove(from);
list.add(to, movedSong);
currentPlayingIndex = downloadList.indexOf(currentPlaying);
- if(remoteState != RemoteControlState.LOCAL && mainList) {
+ if(remoteState != LOCAL && mainList) {
updateJukeboxPlaylist();
} else if(mainList && (movedSong == nextPlaying || movedSong == currentPlaying || (currentPlayingIndex + 1) == to)) {
// Moving next playing, current playing, or moving a song to be next playing
@@ -1766,7 +1767,7 @@ public class DownloadService extends Service {
checkShufflePlay();
}
- if (remoteState != RemoteControlState.LOCAL || !Util.isNetworkConnected(this, true) || Util.isOffline(this)) {
+ if (!Util.isNetworkConnected(this, true) || Util.isOffline(this)) {
return;
}
@@ -1774,8 +1775,8 @@ public class DownloadService extends Service {
return;
}
- // Need to download current playing?
- if (currentPlaying != null && currentPlaying != currentDownloading && !currentPlaying.isWorkDone()) {
+ // Need to download current playing and not casting?
+ if (currentPlaying != null && remoteState == LOCAL && currentPlaying != currentDownloading && !currentPlaying.isWorkDone()) {
// Cancel current download, if necessary.
if (currentDownloading != null) {
currentDownloading.cancelDownload();
@@ -1787,13 +1788,13 @@ public class DownloadService extends Service {
}
// Find a suitable target for download.
- else if (currentDownloading == null || currentDownloading.isWorkDone() || currentDownloading.isFailed() && (!downloadList.isEmpty() || !backgroundDownloadList.isEmpty())) {
+ else if (currentDownloading == null || currentDownloading.isWorkDone() || currentDownloading.isFailed() && ((!downloadList.isEmpty() && remoteState == LOCAL) || !backgroundDownloadList.isEmpty())) {
currentDownloading = null;
int n = size();
int preloaded = 0;
- if(n != 0) {
+ if(n != 0 && remoteState == LOCAL) {
int start = currentPlaying == null ? 0 : getCurrentPlayingIndex();
if(start == -1) {
start = 0;
@@ -1819,7 +1820,7 @@ public class DownloadService extends Service {
} while (i != start);
}
- if((preloaded + 1 == n || preloaded >= Util.getPreloadCount(this) || downloadList.isEmpty()) && !backgroundDownloadList.isEmpty()) {
+ if((preloaded + 1 == n || preloaded >= Util.getPreloadCount(this) || downloadList.isEmpty() || remoteState != LOCAL) && !backgroundDownloadList.isEmpty()) {
for(int i = 0; i < backgroundDownloadList.size(); i++) {
DownloadFile downloadFile = backgroundDownloadList.get(i);
if(downloadFile.isWorkDone() && (!downloadFile.shouldSave() || downloadFile.isSaved()) || downloadFile.isFailedMax()) {
diff --git a/src/github/daneren2005/dsub/util/Util.java b/src/github/daneren2005/dsub/util/Util.java
index 205690f8..626b1d91 100644
--- a/src/github/daneren2005/dsub/util/Util.java
+++ b/src/github/daneren2005/dsub/util/Util.java
@@ -887,6 +887,10 @@ public final class Util {
throw new IllegalArgumentException("Strings must not be null");
}
+ if(t.toString().toLowerCase().indexOf(s.toString().toLowerCase()) != -1) {
+ return 1;
+ }
+
int n = s.length();
int m = t.length();