automatic playlist creation support

This commit is contained in:
Adrian Ulrich 2015-10-05 21:27:59 +02:00
parent 3746a58767
commit 9de67792c7
4 changed files with 44 additions and 2 deletions

View File

@ -299,4 +299,12 @@ THE SOFTWARE.
<string name="filebrowser_start">Filebrowser home</string>
<string name="customize_filebrowser_start">Filebrowser starts at this directory</string>
<string name="select">Select</string>
<string name="autoplaylist_playcounts_title">Automatic playlist creation</string>
<string name="autoplaylist_playcounts_summary">Automatically create a</string>
<string name="autoplaylist_playcounts_fmt" formatted="false">%s \'Top %.0f\' playlist</string>
<string name="autoplaylist_playcounts_disabled">Do not create an automatic playlist</string>
<string name="autoplaylist_playcounts_name" formatted="false">Top %d</string>
</resources>

View File

@ -22,6 +22,7 @@ THE SOFTWARE.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:vanilla="http://schemas.android.com/apk/res/ch.blinkenlights.android.vanilla"
android:persistent="true">
<CheckBoxPreference
android:key="disable_lockscreen"
@ -43,6 +44,17 @@ THE SOFTWARE.
android:title="@string/double_tap_title"
android:summary="@string/double_tap_summary"
android:defaultValue="false" />
<ch.blinkenlights.android.vanilla.SeekBarPreference
android:key="playcounts_autoplaylist"
android:negativeButtonText="@null"
android:dialogLayout="@layout/seekbar_pref"
android:title="@string/autoplaylist_playcounts_title"
android:defaultValue="0"
vanilla:sbpMaxValue="100"
vanilla:sbpSteps="25"
vanilla:sbpSummaryText="@string/autoplaylist_playcounts_summary"
vanilla:sbpSummaryFormat="@string/autoplaylist_playcounts_fmt"
vanilla:sbpSummaryZeroText="@string/autoplaylist_playcounts_disabled"/>
<CheckBoxPreference
android:key="scrobble"
android:title="@string/scrobble_title"

View File

@ -59,6 +59,7 @@ import android.provider.MediaStore;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
import java.lang.Math;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
@ -388,6 +389,10 @@ public final class PlaybackService extends Service
* of user settings.
*/
private boolean mForceNotificationVisible;
/**
* Amount of songs included in our auto playlist
*/
private int mAutoPlPlaycounts;
/**
* Enables or disables Replay Gain
*/
@ -469,6 +474,8 @@ public final class PlaybackService extends Service
mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false);
mAutoPlPlaycounts = settings.getInt(PrefKeys.AUTOPLAYLIST_PLAYCOUNTS, 0);
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VanillaMusicLock");
@ -871,6 +878,8 @@ public final class PlaybackService extends Service
refreshDuckingValues();
} else if (PrefKeys.ENABLE_READAHEAD.equals(key)) {
mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false);
} else if (PrefKeys.AUTOPLAYLIST_PLAYCOUNTS.equals(key)) {
mAutoPlPlaycounts = settings.getInt(PrefKeys.AUTOPLAYLIST_PLAYCOUNTS, 0);
} else if (PrefKeys.USE_DARK_THEME.equals(key)) {
// Theme changed: trigger a restart of all registered activites
ArrayList<PlaybackActivity> list = sActivities;
@ -1362,10 +1371,10 @@ public final class PlaybackService extends Service
public void onCompletion(MediaPlayer player)
{
// Count this song as played
Song song = mTimeline.getSong(0);
mHandler.sendMessage(mHandler.obtainMessage(MSG_UPDATE_PLAYCOUNTS, song));
// Count this song as played
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_UPDATE_PLAYCOUNTS, song), 2500);
if (finishAction(mState) == SongTimeline.FINISH_REPEAT_CURRENT) {
setCurrentSong(0);
@ -1545,6 +1554,18 @@ public final class PlaybackService extends Service
case MSG_UPDATE_PLAYCOUNTS:
Song song = (Song)message.obj;
mPlayCounts.countSong(song);
// Update the playcounts playlist in ~20% of all cases if enabled
if (mAutoPlPlaycounts > 0 && Math.random() > 0.8) {
ContentResolver resolver = getContentResolver();
// Add an invisible whitespace to adjust our sorting
String playlistName = "\u200B"+getString(R.string.autoplaylist_playcounts_name, mAutoPlPlaycounts);
long id = Playlist.createPlaylist(resolver, playlistName);
ArrayList<Long> items = mPlayCounts.getTopSongs(mAutoPlPlaycounts);
Playlist.addToPlaylist(resolver, id, items);
}
break;
default:
return false;

View File

@ -67,4 +67,5 @@ public class PrefKeys {
public static final String USE_DARK_THEME = "use_dark_theme";
public static final String FILESYSTEM_BROWSE_START = "filesystem_browse_start";
public static final String VOLUME_DURING_DUCKING = "volume_during_ducking";
public static final String AUTOPLAYLIST_PLAYCOUNTS = "playcounts_autoplaylist";
}