Listen for song change in AppWidgetProvider
This commit is contained in:
parent
4acc55f25b
commit
11d175cb94
@ -20,6 +20,7 @@
|
|||||||
android:label="Vanilla Music 1x1">
|
android:label="Vanilla Music 1x1">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
|
<action android:name="org.kreed.vanilla.event.CHANGED" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.appwidget.provider"
|
android:name="android.appwidget.provider"
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 4.8 KiB |
@ -1,10 +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/icon_selected" />
|
|
||||||
<item
|
|
||||||
android:state_focused="true"
|
|
||||||
android:drawable="@drawable/icon_selected" />
|
|
||||||
<item android:drawable="@drawable/icon" />
|
|
||||||
</selector>
|
|
@ -1,9 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<ImageButton
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/stopped_text"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:background="@null"
|
|
||||||
android:src="@drawable/icon_variable" />
|
|
@ -2,5 +2,5 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:minWidth="72dip"
|
android:minWidth="72dip"
|
||||||
android:minHeight="72dip"
|
android:minHeight="72dip"
|
||||||
android:initialLayout="@layout/default_widget"
|
android:initialLayout="@layout/one_cell_widget"
|
||||||
/>
|
/>
|
@ -6,6 +6,7 @@ import android.appwidget.AppWidgetProvider;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.widget.RemoteViews;
|
import android.widget.RemoteViews;
|
||||||
|
|
||||||
@ -13,34 +14,34 @@ public class OneCellWidget extends AppWidgetProvider {
|
|||||||
@Override
|
@Override
|
||||||
public void onUpdate(Context context, AppWidgetManager manager, int[] ids)
|
public void onUpdate(Context context, AppWidgetManager manager, int[] ids)
|
||||||
{
|
{
|
||||||
reset(context);
|
Log.i("VanillaMusic", "initial update");
|
||||||
context.sendBroadcast(new Intent(PlaybackService.APPWIDGET_SMALL_UPDATE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void sendUpdate(Context context, RemoteViews views)
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent)
|
||||||
{
|
{
|
||||||
AppWidgetManager manager = AppWidgetManager.getInstance(context);
|
if (PlaybackService.EVENT_CHANGED.equals(intent.getAction())) {
|
||||||
ComponentName widget = new ComponentName(context, OneCellWidget.class);
|
Song song = intent.getParcelableExtra("song");
|
||||||
manager.updateAppWidget(widget, views);
|
boolean playing = intent.getIntExtra("newState", 0) == PlaybackService.STATE_PLAYING;
|
||||||
|
update(context, song, playing);
|
||||||
|
} else {
|
||||||
|
super.onReceive(context, intent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void update(Context context, Song song)
|
public static void update(Context context, Song song, boolean playing)
|
||||||
{
|
{
|
||||||
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.one_cell_widget);
|
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.one_cell_widget);
|
||||||
|
ComponentName widget = new ComponentName(context, OneCellWidget.class);
|
||||||
|
|
||||||
views.setOnClickPendingIntent(R.id.play_pause, PendingIntent.getBroadcast(context, 0, new Intent(PlaybackService.TOGGLE_PLAYBACK), 0));
|
views.setOnClickPendingIntent(R.id.play_pause, PendingIntent.getBroadcast(context, 0, new Intent(PlaybackService.TOGGLE_PLAYBACK), 0));
|
||||||
views.setOnClickPendingIntent(R.id.next, PendingIntent.getBroadcast(context, 0, new Intent(PlaybackService.NEXT_SONG), 0));
|
views.setOnClickPendingIntent(R.id.next, PendingIntent.getBroadcast(context, 0, new Intent(PlaybackService.NEXT_SONG), 0));
|
||||||
|
|
||||||
if (song != null) {
|
if (song != null) {
|
||||||
int size = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 72, context.getResources().getDisplayMetrics());
|
int size = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 72, context.getResources().getDisplayMetrics());
|
||||||
views.setImageViewBitmap(R.id.cover_view, CoverView.createMiniBitmap(song, size, size));
|
views.setImageViewBitmap(R.id.cover_view, CoverView.createMiniBitmap(song, size, size));
|
||||||
}
|
}
|
||||||
|
|
||||||
sendUpdate(context, views);
|
AppWidgetManager.getInstance(context).updateAppWidget(widget, views);
|
||||||
}
|
|
||||||
|
|
||||||
public static void reset(Context context)
|
|
||||||
{
|
|
||||||
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.default_widget);
|
|
||||||
views.setOnClickPendingIntent(R.id.stopped_text, PendingIntent.getService(context, 0, new Intent(context, PlaybackService.class), 0));
|
|
||||||
sendUpdate(context, views);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -54,7 +54,6 @@ import android.util.Log;
|
|||||||
public class PlaybackService extends Service implements Runnable, MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, SharedPreferences.OnSharedPreferenceChangeListener {
|
public class PlaybackService extends Service implements Runnable, MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
private static final int NOTIFICATION_ID = 2;
|
private static final int NOTIFICATION_ID = 2;
|
||||||
|
|
||||||
public static final String APPWIDGET_SMALL_UPDATE = "org.kreed.vanilla.action.APPWIDGET_SMALL_UPDATE";
|
|
||||||
public static final String TOGGLE_PLAYBACK = "org.kreed.vanilla.action.TOGGLE_PLAYBACK";
|
public static final String TOGGLE_PLAYBACK = "org.kreed.vanilla.action.TOGGLE_PLAYBACK";
|
||||||
public static final String NEXT_SONG = "org.kreed.vanilla.action.NEXT_SONG";
|
public static final String NEXT_SONG = "org.kreed.vanilla.action.NEXT_SONG";
|
||||||
|
|
||||||
@ -172,8 +171,6 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
}
|
}
|
||||||
mNotificationManager.cancel(NOTIFICATION_ID);
|
mNotificationManager.cancel(NOTIFICATION_ID);
|
||||||
|
|
||||||
resetWidgets();
|
|
||||||
|
|
||||||
if (mWakeLock != null && mWakeLock.isHeld())
|
if (mWakeLock != null && mWakeLock.isHeld())
|
||||||
mWakeLock.release();
|
mWakeLock.release();
|
||||||
}
|
}
|
||||||
@ -240,9 +237,6 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
go(0);
|
go(0);
|
||||||
} else if (NEXT_SONG.equals(action)) {
|
} else if (NEXT_SONG.equals(action)) {
|
||||||
go(1);
|
go(1);
|
||||||
} else if (APPWIDGET_SMALL_UPDATE.equals(intent.getAction())) {
|
|
||||||
OneCellWidget.update(PlaybackService.this, getSong(0));
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -336,12 +330,11 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
|
|
||||||
Song song = new Song(ids[mCurrentSong]);
|
Song song = new Song(ids[mCurrentSong]);
|
||||||
song.populate();
|
song.populate();
|
||||||
if (song.path == null) {
|
if (song.path == null)
|
||||||
stateLoaded = false;
|
stateLoaded = false;
|
||||||
} else {
|
else
|
||||||
broadcastChange(mState, mState, song);
|
broadcastChange(mState, mState, song);
|
||||||
updateWidgets(song);
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<Song> timeline = new ArrayList<Song>(n);
|
ArrayList<Song> timeline = new ArrayList<Song>(n);
|
||||||
for (int i = 0; i != n; ++i)
|
for (int i = 0; i != n; ++i)
|
||||||
@ -361,9 +354,7 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
if (!stateLoaded) {
|
if (!stateLoaded) {
|
||||||
retrieveSongs();
|
retrieveSongs();
|
||||||
mSongTimeline = new ArrayList<Song>();
|
mSongTimeline = new ArrayList<Song>();
|
||||||
Song song = getSong(0);
|
broadcastChange(mState, mState, getSong(0));
|
||||||
broadcastChange(mState, mState, song);
|
|
||||||
updateWidgets(song);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stateLoaded)
|
if (stateLoaded)
|
||||||
@ -418,7 +409,6 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
filter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
|
filter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
|
||||||
filter.addAction(TOGGLE_PLAYBACK);
|
filter.addAction(TOGGLE_PLAYBACK);
|
||||||
filter.addAction(NEXT_SONG);
|
filter.addAction(NEXT_SONG);
|
||||||
filter.addAction(APPWIDGET_SMALL_UPDATE);
|
|
||||||
registerReceiver(mReceiver, filter);
|
registerReceiver(mReceiver, filter);
|
||||||
|
|
||||||
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
@ -477,7 +467,6 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
broadcastChange(oldState, state, song);
|
broadcastChange(oldState, state, song);
|
||||||
|
|
||||||
boolean cancelNotification = updateNotification();
|
boolean cancelNotification = updateNotification();
|
||||||
updateWidgets(song);
|
|
||||||
|
|
||||||
if (mState != oldState) {
|
if (mState != oldState) {
|
||||||
if (mState == STATE_PLAYING)
|
if (mState == STATE_PLAYING)
|
||||||
@ -650,16 +639,6 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On
|
|||||||
return song;
|
return song;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateWidgets(Song song)
|
|
||||||
{
|
|
||||||
OneCellWidget.update(this, song);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resetWidgets()
|
|
||||||
{
|
|
||||||
OneCellWidget.reset(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String STATE_FILE = "state";
|
private static final String STATE_FILE = "state";
|
||||||
private static final long STATE_FILE_MAGIC = 0x8a9d3f9fca31L;
|
private static final long STATE_FILE_MAGIC = 0x8a9d3f9fca31L;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user