diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index faf404fb14..c32f76c0d0 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -23,6 +23,7 @@ + diff --git a/android/src/org/rockbox/Helper/RunForegroundManager.java b/android/src/org/rockbox/Helper/RunForegroundManager.java index c08e742aba..6ecb16a408 100644 --- a/android/src/org/rockbox/Helper/RunForegroundManager.java +++ b/android/src/org/rockbox/Helper/RunForegroundManager.java @@ -23,6 +23,7 @@ public class RunForegroundManager private NotificationManager mNM; private IRunForeground api; private Service mCurrentService; + private Intent mWidgetUpdate; public RunForegroundManager(Service service) { @@ -48,10 +49,12 @@ public class RunForegroundManager api = new oldForegroundApi(); } } + private void LOG(CharSequence text) { Log.d("Rockbox", (String)text); } + private void LOG(CharSequence text, Throwable tr) { Log.d("Rockbox", (String)text, tr); @@ -80,6 +83,7 @@ public class RunForegroundManager */ mNM.cancel(R.string.notification); api.stopForeground(); + mWidgetUpdate = null; } public void updateNotification(String title, String artist, String album, String albumart) @@ -93,12 +97,18 @@ public class RunForegroundManager mNotification.tickerText = title+" - "+artist; mNM.notify(R.string.notification, mNotification); - Intent widgetUpdate = new Intent("org.rockbox.TrackUpdateInfo"); - widgetUpdate.putExtra("title", title); - widgetUpdate.putExtra("artist", artist); - widgetUpdate.putExtra("album", album); - widgetUpdate.putExtra("albumart", albumart); - mCurrentService.sendBroadcast(widgetUpdate); + mWidgetUpdate = new Intent("org.rockbox.TrackUpdateInfo"); + mWidgetUpdate.putExtra("title", title); + mWidgetUpdate.putExtra("artist", artist); + mWidgetUpdate.putExtra("album", album); + mWidgetUpdate.putExtra("albumart", albumart); + mCurrentService.sendBroadcast(mWidgetUpdate); + } + + public void resendUpdateNotification() + { + if (mWidgetUpdate != null) + mCurrentService.sendBroadcast(mWidgetUpdate); } public void finishNotification() diff --git a/android/src/org/rockbox/RockboxService.java b/android/src/org/rockbox/RockboxService.java index d198cb37b7..fb7c0437fc 100644 --- a/android/src/org/rockbox/RockboxService.java +++ b/android/src/org/rockbox/RockboxService.java @@ -106,6 +106,14 @@ public class RockboxService extends Service private void do_start(Intent intent) { LOG("Start RockboxService (Intent: " + intent.getAction() + ")"); + + if (intent.getAction().equals("org.rockbox.ResendTrackUpdateInfo")) + { + if (rockbox_running) + fg_runner.resendUpdateNotification(); + return; + } + if (intent.hasExtra("callback")) resultReceiver = (ResultReceiver) intent.getParcelableExtra("callback"); diff --git a/android/src/org/rockbox/widgets/RockboxWidgetConfigure.java b/android/src/org/rockbox/widgets/RockboxWidgetConfigure.java index 700fc2fa1a..82cfc1553f 100644 --- a/android/src/org/rockbox/widgets/RockboxWidgetConfigure.java +++ b/android/src/org/rockbox/widgets/RockboxWidgetConfigure.java @@ -22,17 +22,18 @@ package org.rockbox.widgets; import org.rockbox.R; +import org.rockbox.RockboxService; import android.app.Activity; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; - public class RockboxWidgetConfigure extends Activity { int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; @@ -84,6 +85,11 @@ public class RockboxWidgetConfigure extends Activity AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RockboxWidgetProvider.getInstance().updateAppWidget(context, appWidgetManager, mAppWidgetId, null); + /* Ask for track information so that new widgets display properly + * if rockbox was already playing */ + context.startService(new Intent("org.rockbox.ResendTrackUpdateInfo", + Uri.EMPTY, context, RockboxService.class)); + Intent result = new Intent(); result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, result); diff --git a/android/src/org/rockbox/widgets/RockboxWidgetProvider.java b/android/src/org/rockbox/widgets/RockboxWidgetProvider.java index 4a012c7124..beeb81c13b 100644 --- a/android/src/org/rockbox/widgets/RockboxWidgetProvider.java +++ b/android/src/org/rockbox/widgets/RockboxWidgetProvider.java @@ -45,6 +45,7 @@ public class RockboxWidgetProvider extends AppWidgetProvider super(); mInstance = this; } + @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {