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="filebrowser_start">Filebrowser home</string>
|
||||||
<string name="customize_filebrowser_start">Filebrowser starts at this directory</string>
|
<string name="customize_filebrowser_start">Filebrowser starts at this directory</string>
|
||||||
<string name="select">Select</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>
|
</resources>
|
||||||
|
@ -22,6 +22,7 @@ THE SOFTWARE.
|
|||||||
-->
|
-->
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:vanilla="http://schemas.android.com/apk/res/ch.blinkenlights.android.vanilla"
|
||||||
android:persistent="true">
|
android:persistent="true">
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="disable_lockscreen"
|
android:key="disable_lockscreen"
|
||||||
@ -43,6 +44,17 @@ THE SOFTWARE.
|
|||||||
android:title="@string/double_tap_title"
|
android:title="@string/double_tap_title"
|
||||||
android:summary="@string/double_tap_summary"
|
android:summary="@string/double_tap_summary"
|
||||||
android:defaultValue="false" />
|
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
|
<CheckBoxPreference
|
||||||
android:key="scrobble"
|
android:key="scrobble"
|
||||||
android:title="@string/scrobble_title"
|
android:title="@string/scrobble_title"
|
||||||
|
@ -59,6 +59,7 @@ import android.provider.MediaStore;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.RemoteViews;
|
import android.widget.RemoteViews;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
import java.lang.Math;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
@ -388,6 +389,10 @@ public final class PlaybackService extends Service
|
|||||||
* of user settings.
|
* of user settings.
|
||||||
*/
|
*/
|
||||||
private boolean mForceNotificationVisible;
|
private boolean mForceNotificationVisible;
|
||||||
|
/**
|
||||||
|
* Amount of songs included in our auto playlist
|
||||||
|
*/
|
||||||
|
private int mAutoPlPlaycounts;
|
||||||
/**
|
/**
|
||||||
* Enables or disables Replay Gain
|
* Enables or disables Replay Gain
|
||||||
*/
|
*/
|
||||||
@ -469,6 +474,8 @@ public final class PlaybackService extends Service
|
|||||||
|
|
||||||
mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false);
|
mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false);
|
||||||
|
|
||||||
|
mAutoPlPlaycounts = settings.getInt(PrefKeys.AUTOPLAYLIST_PLAYCOUNTS, 0);
|
||||||
|
|
||||||
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
|
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
|
||||||
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VanillaMusicLock");
|
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VanillaMusicLock");
|
||||||
|
|
||||||
@ -871,6 +878,8 @@ public final class PlaybackService extends Service
|
|||||||
refreshDuckingValues();
|
refreshDuckingValues();
|
||||||
} else if (PrefKeys.ENABLE_READAHEAD.equals(key)) {
|
} else if (PrefKeys.ENABLE_READAHEAD.equals(key)) {
|
||||||
mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false);
|
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)) {
|
} else if (PrefKeys.USE_DARK_THEME.equals(key)) {
|
||||||
// Theme changed: trigger a restart of all registered activites
|
// Theme changed: trigger a restart of all registered activites
|
||||||
ArrayList<PlaybackActivity> list = sActivities;
|
ArrayList<PlaybackActivity> list = sActivities;
|
||||||
@ -1362,10 +1371,10 @@ public final class PlaybackService extends Service
|
|||||||
public void onCompletion(MediaPlayer player)
|
public void onCompletion(MediaPlayer player)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Count this song as played
|
|
||||||
Song song = mTimeline.getSong(0);
|
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) {
|
if (finishAction(mState) == SongTimeline.FINISH_REPEAT_CURRENT) {
|
||||||
setCurrentSong(0);
|
setCurrentSong(0);
|
||||||
@ -1545,6 +1554,18 @@ public final class PlaybackService extends Service
|
|||||||
case MSG_UPDATE_PLAYCOUNTS:
|
case MSG_UPDATE_PLAYCOUNTS:
|
||||||
Song song = (Song)message.obj;
|
Song song = (Song)message.obj;
|
||||||
mPlayCounts.countSong(song);
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -67,4 +67,5 @@ public class PrefKeys {
|
|||||||
public static final String USE_DARK_THEME = "use_dark_theme";
|
public static final String USE_DARK_THEME = "use_dark_theme";
|
||||||
public static final String FILESYSTEM_BROWSE_START = "filesystem_browse_start";
|
public static final String FILESYSTEM_BROWSE_START = "filesystem_browse_start";
|
||||||
public static final String VOLUME_DURING_DUCKING = "volume_during_ducking";
|
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