automatic playlist creation support
This commit is contained in:
parent
3746a58767
commit
9de67792c7
@ -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>
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user