Added sort options to albumlistfragment (#309)
List is sorted by default on album title. User can change this to artist or artist/year.
This commit is contained in:
parent
11b8d12b31
commit
49a253af34
|
@ -45,7 +45,10 @@ public class Settings {
|
||||||
SORT_BY_DATE_ADDED = 1,
|
SORT_BY_DATE_ADDED = 1,
|
||||||
SORT_BY_RATING = 2,
|
SORT_BY_RATING = 2,
|
||||||
SORT_BY_YEAR = 3,
|
SORT_BY_YEAR = 3,
|
||||||
SORT_BY_LENGTH = 4;
|
SORT_BY_LENGTH = 4,
|
||||||
|
SORT_BY_ALBUM = 5,
|
||||||
|
SORT_BY_ARTIST = 6,
|
||||||
|
SORT_BY_ARTIST_YEAR = 7 ;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preferences keys.
|
* Preferences keys.
|
||||||
|
@ -88,6 +91,10 @@ public class Settings {
|
||||||
public static final String KEY_PREF_MOVIES_SORT_ORDER = "movies_sort_order";
|
public static final String KEY_PREF_MOVIES_SORT_ORDER = "movies_sort_order";
|
||||||
public static final int DEFAULT_PREF_MOVIES_SORT_ORDER = SORT_BY_NAME;
|
public static final int DEFAULT_PREF_MOVIES_SORT_ORDER = SORT_BY_NAME;
|
||||||
|
|
||||||
|
// Sort order on albums
|
||||||
|
public static final String KEY_PREF_ALBUMS_SORT_ORDER = "albums_sort_order";
|
||||||
|
public static final int DEFAULT_PREF_ALBUMS_SORT_ORDER = SORT_BY_ALBUM;
|
||||||
|
|
||||||
// Ignore articles on movie sorting
|
// Ignore articles on movie sorting
|
||||||
public static final String KEY_PREF_MOVIES_IGNORE_PREFIXES = "movies_ignore_prefixes";
|
public static final String KEY_PREF_MOVIES_IGNORE_PREFIXES = "movies_ignore_prefixes";
|
||||||
public static final boolean DEFAULT_PREF_MOVIES_IGNORE_PREFIXES = false;
|
public static final boolean DEFAULT_PREF_MOVIES_IGNORE_PREFIXES = false;
|
||||||
|
|
|
@ -18,14 +18,18 @@ package org.xbmc.kore.ui;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.provider.BaseColumns;
|
import android.provider.BaseColumns;
|
||||||
import android.support.v4.content.CursorLoader;
|
import android.support.v4.content.CursorLoader;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -35,6 +39,7 @@ import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
|
import org.xbmc.kore.Settings;
|
||||||
import org.xbmc.kore.host.HostInfo;
|
import org.xbmc.kore.host.HostInfo;
|
||||||
import org.xbmc.kore.host.HostManager;
|
import org.xbmc.kore.host.HostManager;
|
||||||
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
||||||
|
@ -92,6 +97,64 @@ public class AlbumListFragment extends AbstractCursorListFragment {
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
inflater.inflate(R.menu.album_list, menu);
|
||||||
|
|
||||||
|
MenuItem sortByAlbum = menu.findItem(R.id.action_sort_by_album),
|
||||||
|
sortByArtist = menu.findItem(R.id.action_sort_by_artist),
|
||||||
|
sortByArtistYear = menu.findItem(R.id.action_sort_by_artist_year);
|
||||||
|
|
||||||
|
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
|
||||||
|
int sortOrder = preferences.getInt(Settings.KEY_PREF_ALBUMS_SORT_ORDER, Settings.DEFAULT_PREF_ALBUMS_SORT_ORDER);
|
||||||
|
switch (sortOrder) {
|
||||||
|
case Settings.SORT_BY_ALBUM:
|
||||||
|
sortByAlbum.setChecked(true);
|
||||||
|
break;
|
||||||
|
case Settings.SORT_BY_ARTIST:
|
||||||
|
sortByArtist.setChecked(true);
|
||||||
|
break;
|
||||||
|
case Settings.SORT_BY_ARTIST_YEAR:
|
||||||
|
sortByArtistYear.setChecked(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.action_sort_by_album:
|
||||||
|
item.setChecked(!item.isChecked());
|
||||||
|
preferences.edit()
|
||||||
|
.putInt(Settings.KEY_PREF_ALBUMS_SORT_ORDER, Settings.SORT_BY_ALBUM)
|
||||||
|
.apply();
|
||||||
|
refreshList();
|
||||||
|
break;
|
||||||
|
case R.id.action_sort_by_artist:
|
||||||
|
item.setChecked(!item.isChecked());
|
||||||
|
preferences.edit()
|
||||||
|
.putInt(Settings.KEY_PREF_ALBUMS_SORT_ORDER, Settings.SORT_BY_ARTIST)
|
||||||
|
.apply();
|
||||||
|
refreshList();
|
||||||
|
break;
|
||||||
|
case R.id.action_sort_by_artist_year:
|
||||||
|
item.setChecked(!item.isChecked());
|
||||||
|
preferences.edit()
|
||||||
|
.putInt(Settings.KEY_PREF_ALBUMS_SORT_ORDER, Settings.SORT_BY_ARTIST_YEAR)
|
||||||
|
.apply();
|
||||||
|
refreshList();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onListItemClicked(View view) {
|
protected void onListItemClicked(View view) {
|
||||||
// Get the movie id from the tag
|
// Get the movie id from the tag
|
||||||
|
@ -127,8 +190,20 @@ public class AlbumListFragment extends AbstractCursorListFragment {
|
||||||
selectionArgs = new String[] {"%" + searchFilter + "%"};
|
selectionArgs = new String[] {"%" + searchFilter + "%"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
|
||||||
|
String sortOrderStr;
|
||||||
|
int sortOrder = preferences.getInt(Settings.KEY_PREF_ALBUMS_SORT_ORDER, Settings.DEFAULT_PREF_ALBUMS_SORT_ORDER);
|
||||||
|
if (sortOrder == Settings.SORT_BY_ARTIST) {
|
||||||
|
sortOrderStr = AlbumListQuery.SORT_BY_ARTIST;
|
||||||
|
} else if (sortOrder == Settings.SORT_BY_ARTIST_YEAR) {
|
||||||
|
sortOrderStr = AlbumListQuery.SORT_BY_ARTIST_YEAR;
|
||||||
|
} else {
|
||||||
|
sortOrderStr = AlbumListQuery.SORT_BY_ALBUM;
|
||||||
|
}
|
||||||
|
|
||||||
return new CursorLoader(getActivity(), uri,
|
return new CursorLoader(getActivity(), uri,
|
||||||
AlbumListQuery.PROJECTION, selection, selectionArgs, AlbumListQuery.SORT);
|
AlbumListQuery.PROJECTION, selection, selectionArgs, sortOrderStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -175,7 +250,10 @@ public class AlbumListFragment extends AbstractCursorListFragment {
|
||||||
MediaContract.Albums.RATING,
|
MediaContract.Albums.RATING,
|
||||||
};
|
};
|
||||||
|
|
||||||
String SORT = MediaDatabase.sortCommonTokens(MediaContract.Albums.TITLE) + " ASC";
|
String SORT_BY_ALBUM = MediaDatabase.sortCommonTokens(MediaContract.Albums.TITLE) + " ASC";
|
||||||
|
String SORT_BY_ARTIST = MediaDatabase.sortCommonTokens(MediaContract.Albums.DISPLAYARTIST) + " ASC";
|
||||||
|
String SORT_BY_ARTIST_YEAR = MediaDatabase.sortCommonTokens(MediaContract.Albums.DISPLAYARTIST)
|
||||||
|
+ " ASC, " + MediaContract.Albums.YEAR + " ASC";
|
||||||
|
|
||||||
final int ID = 0;
|
final int ID = 0;
|
||||||
final int ALBUMID = 1;
|
final int ALBUMID = 1;
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2015 Synced Synapse. All rights reserved.
|
||||||
|
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<menu
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item android:id="@+id/action_sort_criteria"
|
||||||
|
android:title="@string/sort_order"
|
||||||
|
app:showAsAction="never">
|
||||||
|
<menu>
|
||||||
|
<group android:checkableBehavior="single"
|
||||||
|
android:menuCategory="alternative">
|
||||||
|
<item android:id="@+id/action_sort_by_album"
|
||||||
|
android:title="@string/by_album"/>
|
||||||
|
<item android:id="@+id/action_sort_by_artist"
|
||||||
|
android:title="@string/by_artist"/>
|
||||||
|
<item android:id="@+id/action_sort_by_artist_year"
|
||||||
|
android:title="@string/by_artist_and_year"/>
|
||||||
|
</group>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
|
</menu>
|
|
@ -388,5 +388,8 @@
|
||||||
<string name="write_storage_permission_denied">Permission denied. Won\'t be able to download files.</string>
|
<string name="write_storage_permission_denied">Permission denied. Won\'t be able to download files.</string>
|
||||||
|
|
||||||
<string name="no_songs_to_download">No songs to download</string>
|
<string name="no_songs_to_download">No songs to download</string>
|
||||||
|
<string name="by_album">By album</string>
|
||||||
|
<string name="by_artist">By artist</string>
|
||||||
|
<string name="by_artist_and_year">By artist and year</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue