diff options
34 files changed, 166 insertions, 162 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0eb73517..758c4e24 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="github.daneren2005.dsub"
android:installLocation="internalOnly"
- android:versionCode="114"
- android:versionName="4.7.1">
+ android:versionCode="115"
+ android:versionName="4.7.2">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
diff --git a/res/drawable-hdpi/menubar_button_selected.9.png b/res/drawable-hdpi/menubar_button_selected.9.png Binary files differdeleted file mode 100644 index d47bec40..00000000 --- a/res/drawable-hdpi/menubar_button_selected.9.png +++ /dev/null diff --git a/res/drawable/actionbar_button.xml b/res/drawable/actionbar_button.xml deleted file mode 100644 index 5445cdcb..00000000 --- a/res/drawable/actionbar_button.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - - <item - android:state_pressed="true" - android:drawable="@drawable/menubar_button_pressed" - /> - - <item - android:state_focused="true" - android:drawable="@drawable/menubar_button_pressed" - /> - - <item - android:drawable="@drawable/actionbar_button_normal" - /> - -</selector>
\ No newline at end of file diff --git a/res/drawable/btn_bg.xml b/res/drawable/btn_bg.xml deleted file mode 100644 index 79d40784..00000000 --- a/res/drawable/btn_bg.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2010 The Android Open Source Project Licensed under the
- Apache License, Version 2.0 (the "License"); you may not use this file except
- in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software distributed
- under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
- OR CONDITIONS OF ANY KIND, either express or implied. See the License for
- the specific language governing permissions and limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
- <item android:drawable="@color/ics_opaque" android:state_pressed="true"/>
- <item android:drawable="@color/ics_opaque" android:state_enabled="true" android:state_focused="true"/>
-
-</selector>
\ No newline at end of file diff --git a/res/drawable/media_button.xml b/res/drawable/media_button.xml deleted file mode 100644 index f144393d..00000000 --- a/res/drawable/media_button.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - - <item android:state_pressed="true" - android:drawable="@drawable/menubar_button_pressed"/> - - <item android:drawable="@drawable/menubar_button_normal"/> - -</selector>
\ No newline at end of file diff --git a/res/drawable/menubar_button.xml b/res/drawable/menubar_button.xml deleted file mode 100644 index 1dc79176..00000000 --- a/res/drawable/menubar_button.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - - <item android:state_pressed="true" - android:drawable="@drawable/menubar_button_pressed"/> - - <item android:state_enabled="true" - android:drawable="@drawable/menubar_button_normal"/> - - <item android:drawable="@drawable/menubar_button_selected"/> - -</selector> - -
\ No newline at end of file diff --git a/res/drawable/menubar_button_normal.xml b/res/drawable/menubar_button_normal.xml deleted file mode 100644 index 76589c0c..00000000 --- a/res/drawable/menubar_button_normal.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android"> - <solid android:color="@android:color/transparent" /> -</shape> diff --git a/res/drawable/menubar_button_pressed.xml b/res/drawable/menubar_button_pressed.xml deleted file mode 100644 index b7b42ee5..00000000 --- a/res/drawable/menubar_button_pressed.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="@color/dividerColor" />
-</shape>
diff --git a/res/layout/abstract_fragment_activity.xml b/res/layout/abstract_fragment_activity.xml index 605b988a..5f3a592b 100644 --- a/res/layout/abstract_fragment_activity.xml +++ b/res/layout/abstract_fragment_activity.xml @@ -15,7 +15,7 @@ android:id="@+id/bottom_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:background="@drawable/media_button"
+ android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
diff --git a/res/layout/album_cell_item.xml b/res/layout/album_cell_item.xml index 46024772..13fe9466 100644 --- a/res/layout/album_cell_item.xml +++ b/res/layout/album_cell_item.xml @@ -68,7 +68,7 @@ android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:paddingRight="2dp"
- android:background="@drawable/menubar_button"/>
+ android:background="?android:selectableItemBackground"/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file diff --git a/res/layout/album_list_item.xml b/res/layout/album_list_item.xml index a98f0e04..805c9033 100644 --- a/res/layout/album_list_item.xml +++ b/res/layout/album_list_item.xml @@ -54,5 +54,5 @@ android:layout_height="fill_parent"
android:layout_gravity="right|center_vertical"
android:paddingRight="10dip"
- android:background="@drawable/menubar_button"/>
+ android:background="?android:selectableItemBackground"/>
</LinearLayout>
diff --git a/res/layout/appwidget4x1.xml b/res/layout/appwidget4x1.xml index 45ab7886..5d75c9e9 100644 --- a/res/layout/appwidget4x1.xml +++ b/res/layout/appwidget4x1.xml @@ -30,7 +30,7 @@ android:clickable="true" android:focusable="true" android:orientation="vertical" - android:background="@drawable/media_button"> + android:background="?android:selectableItemBackground"> <TextView android:id="@+id/title" @@ -81,7 +81,7 @@ android:layout_height="fill_parent" android:layout_weight="1" android:scaleType="center" - android:background="@drawable/media_button" + android:background="?android:selectableItemBackground" android:src="@drawable/ic_appwidget_music_previous" /> <ImageButton @@ -91,7 +91,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_play" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> <ImageButton android:id="@+id/control_next" @@ -100,7 +100,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_next" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> </LinearLayout> </LinearLayout> diff --git a/res/layout/appwidget4x2.xml b/res/layout/appwidget4x2.xml index 0101f76a..8ec61a59 100644 --- a/res/layout/appwidget4x2.xml +++ b/res/layout/appwidget4x2.xml @@ -32,7 +32,7 @@ android:orientation="vertical" android:paddingTop="4dip" android:paddingBottom="4dip" - android:background="@drawable/media_button"> + android:background="?android:selectableItemBackground"> <TextView android:id="@+id/title" @@ -104,7 +104,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:scaleType="center" - android:background="@drawable/media_button" + android:background="?android:selectableItemBackground" android:src="@drawable/ic_appwidget_music_previous" /> <ImageButton @@ -114,7 +114,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_play" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> <ImageButton android:id="@+id/control_next" @@ -123,7 +123,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_next" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> </LinearLayout> </LinearLayout> diff --git a/res/layout/appwidget4x3.xml b/res/layout/appwidget4x3.xml index 70ab3648..1758602b 100644 --- a/res/layout/appwidget4x3.xml +++ b/res/layout/appwidget4x3.xml @@ -34,7 +34,7 @@ android:orientation="vertical" android:paddingBottom="4dip" android:paddingTop="4dip" - android:background="@drawable/media_button"> + android:background="?android:selectableItemBackground"> <TextView android:id="@+id/title" @@ -86,7 +86,7 @@ android:layout_height="56dip" android:layout_weight="1" android:scaleType="center" - android:background="@drawable/media_button" + android:background="?android:selectableItemBackground" android:src="@drawable/ic_appwidget_music_previous" /> <ImageButton @@ -96,7 +96,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_play" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> <ImageButton android:id="@+id/control_next" @@ -105,7 +105,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_next" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> </LinearLayout> </LinearLayout> diff --git a/res/layout/appwidget4x4.xml b/res/layout/appwidget4x4.xml index 302bf297..b15a7339 100644 --- a/res/layout/appwidget4x4.xml +++ b/res/layout/appwidget4x4.xml @@ -35,7 +35,7 @@ android:orientation="vertical" android:paddingTop="4dip" android:paddingBottom="4dip" - android:background="@drawable/media_button"> + android:background="?android:selectableItemBackground"> <TextView android:id="@+id/title" @@ -88,7 +88,7 @@ android:layout_height="56dip" android:layout_weight="1" android:scaleType="center" - android:background="@drawable/media_button" + android:background="?android:selectableItemBackground" android:src="@drawable/ic_appwidget_music_previous" /> <ImageButton @@ -98,7 +98,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_play" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> <ImageButton android:id="@+id/control_next" @@ -107,7 +107,7 @@ android:layout_weight="1" android:scaleType="center" android:src="@drawable/ic_appwidget_music_next" - android:background="@drawable/media_button" /> + android:background="?android:selectableItemBackground" /> </LinearLayout> </LinearLayout> diff --git a/res/layout/basic_list_item.xml b/res/layout/basic_list_item.xml index 2295a9ba..a49d0c3d 100644 --- a/res/layout/basic_list_item.xml +++ b/res/layout/basic_list_item.xml @@ -34,5 +34,5 @@ android:layout_height="fill_parent"
android:layout_gravity="right|center_vertical"
android:paddingRight="10dip"
- android:background="@drawable/menubar_button"/>
+ android:background="?android:selectableItemBackground"/>
</LinearLayout>
\ No newline at end of file diff --git a/res/layout/complex_list_item.xml b/res/layout/complex_list_item.xml index 87fa7b2f..947b2ee0 100644 --- a/res/layout/complex_list_item.xml +++ b/res/layout/complex_list_item.xml @@ -46,5 +46,5 @@ android:layout_height="fill_parent"
android:layout_gravity="right|center_vertical"
android:paddingRight="10dip"
- android:background="@drawable/menubar_button"/>
+ android:background="?android:selectableItemBackground"/>
</LinearLayout>
\ No newline at end of file diff --git a/res/layout/notification.xml b/res/layout/notification.xml index 55c7be2a..e4cec6fb 100644 --- a/res/layout/notification.xml +++ b/res/layout/notification.xml @@ -51,7 +51,7 @@ <ImageButton android:id="@+id/control_previous" android:src="@drawable/notification_previous" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:layout_width="46dip" android:layout_height="fill_parent" android:layout_gravity="center|right" @@ -62,7 +62,7 @@ <ImageButton android:id="@+id/control_pause" android:src="@drawable/notification_pause" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:layout_width="46dip" android:layout_height="fill_parent" android:layout_gravity="center|right" @@ -73,7 +73,7 @@ <ImageButton android:id="@+id/control_next" android:src="@drawable/notification_next" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:layout_width="46dip" android:layout_height="fill_parent" android:layout_gravity="center|right" diff --git a/res/layout/notification_expanded.xml b/res/layout/notification_expanded.xml index 5fc4156a..fe864ce3 100644 --- a/res/layout/notification_expanded.xml +++ b/res/layout/notification_expanded.xml @@ -40,7 +40,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/notification_close" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:padding="10dip" android:layout_gravity="right" android:visibility="gone"/> @@ -70,6 +70,11 @@ android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="fill_parent" /> + + <ImageView + android:background="?android:dividerHorizontal" + android:layout_width="fill_parent" + android:layout_height="1.0px"/> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" @@ -86,7 +91,7 @@ android:layout_gravity="center" android:layout_weight="1" android:padding="10dip" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:scaleType="fitCenter" android:src="@drawable/notification_previous" /> @@ -97,7 +102,7 @@ android:layout_gravity="center" android:layout_weight="1" android:padding="10dip" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:scaleType="fitCenter" android:src="@drawable/notification_pause" /> @@ -108,7 +113,7 @@ android:layout_gravity="center" android:layout_weight="1" android:padding="10dip" - android:background="@drawable/btn_bg" + android:background="?android:selectableItemBackground" android:scaleType="fitCenter" android:src="@drawable/notification_next" /> </LinearLayout> diff --git a/res/layout/select_album_header.xml b/res/layout/select_album_header.xml index f803f3af..eb8346c3 100644 --- a/res/layout/select_album_header.xml +++ b/res/layout/select_album_header.xml @@ -80,7 +80,7 @@ android:padding="10dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" - android:background="@drawable/menubar_button"/> + android:background="?android:selectableItemBackground"/> </RelativeLayout> diff --git a/res/layout/song_list_item.xml b/res/layout/song_list_item.xml index 72ee298b..5b4a2895 100644 --- a/res/layout/song_list_item.xml +++ b/res/layout/song_list_item.xml @@ -102,5 +102,5 @@ android:layout_height="fill_parent"
android:layout_gravity="right|center_vertical"
android:paddingRight="10dip"
- android:background="@drawable/menubar_button"/>
+ android:background="?android:selectableItemBackground"/>
</LinearLayout>
diff --git a/res/layout/user_list_item.xml b/res/layout/user_list_item.xml index 657dd910..d9b15cd0 100644 --- a/res/layout/user_list_item.xml +++ b/res/layout/user_list_item.xml @@ -41,5 +41,5 @@ android:layout_height="fill_parent"
android:layout_gravity="right|center_vertical"
android:paddingRight="10dip"
- android:background="@drawable/menubar_button"/>
+ android:background="?android:selectableItemBackground"/>
</LinearLayout>
\ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 89492cd7..77f18ea9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -284,8 +284,8 @@ <string name="settings.theme_fullscreen_summary">Hide as many UI elements as Android will allow</string>
<string name="settings.track_title">Display Track #</string>
<string name="settings.track_summary">Display Track # in front of songs if one exists</string>
- <string name="settings.custom_sort">Custom Sort</string>
- <string name="settings.custom_sort_summary">Override default server sorting to sort by disc number and by year.</string>
+ <string name="settings.custom_sort">Sort By Year</string>
+ <string name="settings.custom_sort_summary">Sort albums by year, or by alphabetical</string>
<string name="settings.open_to_library">Open To Library</string>
<string name="settings.open_to_library_summary">Open directly to the library screen instead of opening to home.</string>
<string name="settings.network_title">Network</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml index e64e5313..103e4e49 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <style name="PlaybackControl"> - <item name="android:background">@drawable/media_button</item> + <item name="android:background">?android:selectableItemBackground</item> <item name="android:scaleType">fitCenter</item> <item name="android:padding">6dip</item> <item name="android:layout_marginLeft">4dip</item> @@ -23,7 +23,7 @@ <item name="android:layout_weight">1</item> <item name="android:textSize">14sp</item> <item name="android:textStyle">bold</item> - <item name="android:background">@drawable/menubar_button</item> + <item name="android:background">?android:selectableItemBackground</item> <item name="android:textColor">?android:textColorPrimary</item> </style> @@ -32,7 +32,7 @@ <item name="android:layout_height">wrap_content</item> <item name="android:textStyle">bold</item> <item name="android:textSize">22sp</item> - <item name="android:background">@drawable/menubar_button</item> + <item name="android:background">?android:selectableItemBackground</item> <item name="android:paddingTop">4dip</item> <item name="android:paddingBottom">4dip</item> <item name="android:paddingRight">4dip</item> @@ -42,7 +42,7 @@ <style name="DownloadActionImageButton"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> - <item name="android:background">@drawable/menubar_button</item> + <item name="android:background">?android:selectableItemBackground</item> <item name="android:paddingTop">8dip</item> <item name="android:paddingBottom">8dip</item> <item name="android:paddingRight">16dip</item> diff --git a/res/xml/changelog.xml b/res/xml/changelog.xml index 28e8153e..5499f454 100644 --- a/res/xml/changelog.xml +++ b/res/xml/changelog.xml @@ -1,5 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <changelog> + <release version="4.7.2" versioncode="115" releasedate="7/10/2014"> + <change>Android Wear notification support</change> + <change>Selected drawer tab is now bold</change> + <change>Scroll to song when clicked in search results</change> + <change>Custom sort is now a toggle between sorting by year and alphabetical</change> + <change>For persistent notification, use standard notification layout + x in corner</change> + <change>Don't display type information for each song</change> + <change>Return fast scrolling hack for devices still on Android 4.4.2</change> + <change>Various bug fixes and enhancements</change> + </release> <release version="4.7.1" versioncode="113" releasedate="6/25/2014"> <change>Only show podcast, share, and jukebox options when user has server permissions</change> <change>Remove playlist options from public, non-owned lists (throws error anyways)</change> diff --git a/src/github/daneren2005/dsub/activity/SubsonicActivity.java b/src/github/daneren2005/dsub/activity/SubsonicActivity.java index 395a347e..92775f3e 100644 --- a/src/github/daneren2005/dsub/activity/SubsonicActivity.java +++ b/src/github/daneren2005/dsub/activity/SubsonicActivity.java @@ -494,7 +494,10 @@ public class SubsonicActivity extends ActionBarActivity implements OnItemSelecte }
public boolean onBackPressedSupport() {
- if(backStack.size() > 0) {
+ if(drawerOpen) {
+ drawer.closeDrawers();
+ return false;
+ } else if(backStack.size() > 0) {
removeCurrent();
return false;
} else {
diff --git a/src/github/daneren2005/dsub/domain/MusicDirectory.java b/src/github/daneren2005/dsub/domain/MusicDirectory.java index c284ba00..492726f9 100644 --- a/src/github/daneren2005/dsub/domain/MusicDirectory.java +++ b/src/github/daneren2005/dsub/domain/MusicDirectory.java @@ -102,8 +102,8 @@ public class MusicDirectory implements Serializable { return children.size(); } - public void sortChildren() { - EntryComparator.sort(children); + public void sortChildren(boolean byYear) { + EntryComparator.sort(children, byYear); } public static class Entry implements Serializable { @@ -422,23 +422,31 @@ public class MusicDirectory implements Serializable { } public static class EntryComparator implements Comparator<Entry> { + private boolean byYear; + + public EntryComparator(boolean byYear) { + this.byYear = byYear; + } + public int compare(Entry lhs, Entry rhs) { if(lhs.isDirectory() && !rhs.isDirectory()) { return -1; } else if(!lhs.isDirectory() && rhs.isDirectory()) { return 1; } else if(lhs.isDirectory() && rhs.isDirectory()) { - Integer lhsYear = lhs.getYear(); - Integer rhsYear = rhs.getYear(); - if(lhsYear != null && rhsYear != null) { - return lhsYear.compareTo(rhsYear); - } else if(lhsYear != null) { - return -1; - } else if(rhsYear != null) { - return 1; - } else { - return lhs.getTitle().compareToIgnoreCase(rhs.getTitle()); + if(byYear) { + Integer lhsYear = lhs.getYear(); + Integer rhsYear = rhs.getYear(); + if(lhsYear != null && rhsYear != null) { + return lhsYear.compareTo(rhsYear); + } else if(lhsYear != null) { + return -1; + } else if(rhsYear != null) { + return 1; + } } + + return lhs.getTitle().compareToIgnoreCase(rhs.getTitle()); } Integer lhsDisc = lhs.getDiscNumber(); @@ -466,8 +474,11 @@ public class MusicDirectory implements Serializable { } public static void sort(List<Entry> entries) { + sort(entries, true); + } + public static void sort(List<Entry> entries, boolean byYear) { try { - Collections.sort(entries, new EntryComparator()); + Collections.sort(entries, new EntryComparator(byYear)); } catch (Exception e) { Log.w(TAG, "Failed to sort MusicDirectory"); } diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index d40f8fad..fea3d44c 100644 --- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -164,28 +164,8 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter setupScrollList(albumList);
}
- albumList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- MusicDirectory.Entry entry = (MusicDirectory.Entry) parent.getItemAtPosition(position);
- SubsonicFragment fragment = new SelectDirectoryFragment();
- Bundle args = new Bundle();
- args.putString(Constants.INTENT_EXTRA_NAME_ID, entry.getId());
- args.putString(Constants.INTENT_EXTRA_NAME_NAME, entry.getTitle());
- if ("newest".equals(albumListType)) {
- args.putBoolean(Constants.INTENT_EXTRA_REFRESH_LISTINGS, true);
- }
- if(entry.getArtist() == null && entry.getParent() == null) {
- args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
- }
- fragment.setArguments(args);
-
- replaceFragment(fragment, true);
- }
- });
-
registerForContextMenu(entryList);
- registerForContextMenu(albumList);
+ setupAlbumList();
if(entries == null) {
if(primaryFragment || secondaryFragment) {
@@ -662,7 +642,17 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter // Needs to be added here, GB crashes if you to try to remove the header view before adapter is set
if(addAlbumHeader) {
- entryList.addHeaderView(albumList);
+ if(entries.size() > 0) {
+ entryList.addHeaderView(albumList);
+ } else {
+ ViewGroup rootGroup = (ViewGroup) rootView.findViewById(R.id.select_album_layout);
+ albumList = (GridView) context.getLayoutInflater().inflate(R.layout.grid_view, rootGroup, false);
+ rootGroup.removeView(entryList);
+ rootGroup.addView(albumList);
+
+ setupScrollList(albumList);
+ setupAlbumList();
+ }
addAlbumHeader = false;
}
@@ -718,6 +708,31 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter }
}
+ private void setupAlbumList() {
+ albumList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ MusicDirectory.Entry entry = (MusicDirectory.Entry) parent.getItemAtPosition(position);
+ SubsonicFragment fragment = new SelectDirectoryFragment();
+ Bundle args = new Bundle();
+ args.putString(Constants.INTENT_EXTRA_NAME_ID, entry.getId());
+ args.putString(Constants.INTENT_EXTRA_NAME_NAME, entry.getTitle());
+ if ("newest".equals(albumListType)) {
+ args.putBoolean(Constants.INTENT_EXTRA_REFRESH_LISTINGS, true);
+ }
+ if(entry.getArtist() == null && entry.getParent() == null) {
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
+ }
+ fragment.setArguments(args);
+
+ replaceFragment(fragment, true);
+ }
+ });
+
+ registerForContextMenu(entryList);
+ registerForContextMenu(albumList);
+ }
+
private void playNow(final boolean shuffle, final boolean append) {
playNow(shuffle, append, false);
}
diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java index f28c38dc..f458379d 100644 --- a/src/github/daneren2005/dsub/service/DownloadService.java +++ b/src/github/daneren2005/dsub/service/DownloadService.java @@ -700,6 +700,7 @@ public class DownloadService extends Service { nextPlayingTask = new CheckCompletionTask(nextPlaying); nextPlayingTask.execute(); } else { + resetNext(); nextPlaying = null; } } @@ -934,6 +935,8 @@ public class DownloadService extends Service { mediaPlayer.pause(); } setPlayerState(temp ? PAUSED_TEMP : PAUSED); + } else if(playerState == PAUSED_TEMP) { + setPlayerState(temp ? PAUSED_TEMP : PAUSED); } } catch (Exception x) { handleError(x); @@ -994,6 +997,25 @@ public class DownloadService extends Service { } } + public synchronized void resetNext() { + try { + if (nextMediaPlayer != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && nextSetup) { + mediaPlayer.setNextMediaPlayer(null); + nextSetup = false; + } + + nextMediaPlayer.setOnCompletionListener(null); + nextMediaPlayer.setOnErrorListener(null); + nextMediaPlayer.reset(); + nextMediaPlayer.release(); + nextMediaPlayer = null; + } + } catch (Exception e) { + Log.w(TAG, "Failed to reset next media player"); + } + } + public int getPlayerPosition() { try { if (playerState == IDLE || playerState == DOWNLOADING || playerState == PREPARING) { @@ -1395,13 +1417,7 @@ public class DownloadService extends Service { private synchronized void setupNext(final DownloadFile downloadFile) { try { final File file = downloadFile.isCompleteFileAvailable() ? downloadFile.getCompleteFile() : downloadFile.getPartialFile(); - if(nextMediaPlayer != null) { - nextMediaPlayer.setOnCompletionListener(null); - nextMediaPlayer.setOnErrorListener(null); - nextMediaPlayer.reset(); - nextMediaPlayer.release(); - nextMediaPlayer = null; - } + resetNext(); // Exit when using remote controllers if(remoteState != RemoteControlState.LOCAL) { diff --git a/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java b/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java index 76c9abeb..18502846 100644 --- a/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java +++ b/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java @@ -332,7 +332,9 @@ public class DownloadServiceLifecycleSupport { case TelephonyManager.CALL_STATE_IDLE: if (resumeAfterCall) { resumeAfterCall = false; - downloadService.start(); + if(downloadService.getPlayerState() == PlayerState.PAUSED_TEMP) { + downloadService.start(); + } } break; default: diff --git a/src/github/daneren2005/dsub/service/OfflineMusicService.java b/src/github/daneren2005/dsub/service/OfflineMusicService.java index a92e41d1..04955cc3 100644 --- a/src/github/daneren2005/dsub/service/OfflineMusicService.java +++ b/src/github/daneren2005/dsub/service/OfflineMusicService.java @@ -134,7 +134,7 @@ public class OfflineMusicService extends RESTMusicService { result.addChild(createEntry(context, file, name, true, isPodcast)); } } - result.sortChildren(); + result.sortChildren(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_CUSTOM_SORT_ENABLED, true)); return result; } diff --git a/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java b/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java index e705c54d..95ee1744 100644 --- a/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java +++ b/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java @@ -97,8 +97,8 @@ public class MusicDirectoryParser extends MusicDirectoryEntryParser { validate(); // Only apply sorting on server version 4.7 and greater, where disc is supported - if(Util.checkServerVersion(context, "1.8.0") && Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_CUSTOM_SORT_ENABLED, true)) { - dir.sortChildren(); + if(Util.checkServerVersion(context, "1.8.0")) { + dir.sortChildren(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_CUSTOM_SORT_ENABLED, true)); } return dir; diff --git a/src/github/daneren2005/dsub/util/Notifications.java b/src/github/daneren2005/dsub/util/Notifications.java index de4129e9..75c69d9e 100644 --- a/src/github/daneren2005/dsub/util/Notifications.java +++ b/src/github/daneren2005/dsub/util/Notifications.java @@ -65,13 +65,13 @@ public final class Notifications { boolean remote = downloadService.isRemoteEnabled();
if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.JELLY_BEAN){
RemoteViews expandedContentView = new RemoteViews(context.getPackageName(), R.layout.notification_expanded);
- setupViews(expandedContentView,context,song, playing, remote);
+ setupViews(expandedContentView ,context, song, true, playing, remote);
notification.bigContentView = expandedContentView;
notification.priority = Notification.PRIORITY_HIGH;
}
RemoteViews smallContentView = new RemoteViews(context.getPackageName(), R.layout.notification);
- setupViews(smallContentView, context, song, playing, remote);
+ setupViews(smallContentView, context, song, false, playing, remote);
notification.contentView = smallContentView;
Intent notificationIntent = new Intent(context, SubsonicFragmentActivity.class);
@@ -103,7 +103,7 @@ public final class Notifications { DSubWidgetProvider.notifyInstances(context, downloadService, playing);
}
- private static void setupViews(RemoteViews rv, Context context, MusicDirectory.Entry song, boolean playing, boolean remote){
+ private static void setupViews(RemoteViews rv, Context context, MusicDirectory.Entry song, boolean expanded, boolean playing, boolean remote){
// Use the same text for the ticker and the expanded notification
String title = song.getTitle();
@@ -141,16 +141,21 @@ public final class Notifications { rv.setTextColor(R.id.notification_artist, colors.getSecond());
}
- if(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_PERSISTENT_NOTIFICATION, false)) {
- rv.setImageViewResource(R.id.control_previous, playing ? R.drawable.notification_pause : R.drawable.notification_play);
- rv.setImageViewResource(R.id.control_pause, R.drawable.notification_next);
- rv.setImageViewResource(R.id.control_next, R.drawable.notification_close);
+ boolean persistent = Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_PERSISTENT_NOTIFICATION, false);
+ if(persistent) {
+ if(expanded) {
+ rv.setImageViewResource(R.id.control_pause, playing ? R.drawable.notification_pause : R.drawable.notification_play);
+ } else {
+ rv.setImageViewResource(R.id.control_previous, playing ? R.drawable.notification_pause : R.drawable.notification_play);
+ rv.setImageViewResource(R.id.control_pause, R.drawable.notification_next);
+ rv.setImageViewResource(R.id.control_next, R.drawable.notification_close);
+ }
}
// Create actions for media buttons
PendingIntent pendingIntent;
int previous = 0, pause = 0, next = 0, close = 0;
- if(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_PERSISTENT_NOTIFICATION, false)) {
+ if(persistent && !expanded) {
pause = R.id.control_previous;
next = R.id.control_pause;
close = R.id.control_next;
@@ -160,7 +165,7 @@ public final class Notifications { next = R.id.control_next;
}
- if(remote && close == 0) {
+ if((remote || persistent) && close == 0) {
close = R.id.notification_close;
rv.setViewVisibility(close, View.VISIBLE);
}
diff --git a/src/github/daneren2005/dsub/view/SongView.java b/src/github/daneren2005/dsub/view/SongView.java index 3e423877..e6156ceb 100644 --- a/src/github/daneren2005/dsub/view/SongView.java +++ b/src/github/daneren2005/dsub/view/SongView.java @@ -48,6 +48,7 @@ public class SongView extends UpdateView implements Checkable { private TextView durationTextView; private TextView statusTextView; private ImageView statusImageView; + private View bottomRowView; private DownloadService downloadService; private long revision = -1; @@ -80,6 +81,7 @@ public class SongView extends UpdateView implements Checkable { v.showContextMenu(); } }); + bottomRowView = findViewById(R.id.song_bottom); } public void setObjectImpl(Object obj1, Object obj2) { @@ -120,8 +122,9 @@ public class SongView extends UpdateView implements Checkable { } durationTextView.setText(Util.formatDuration(song.getDuration())); + bottomRowView.setVisibility(View.VISIBLE); } else { - findViewById(R.id.song_bottom).setVisibility(View.GONE); + bottomRowView.setVisibility(View.GONE); statusTextView.setText(Util.formatDuration(song.getDuration())); } |