OSDN Git Service

theme engine fixes
[android-x86/packages-apps-Eleven.git] / src / com / android / music / MediaAppWidgetProvider4x2.java
index 8dd335d..21c4420 100644 (file)
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.music;
-
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.net.Uri;
-import android.os.Environment;
-import android.preference.PreferenceManager;
-import android.view.View;
-import android.widget.RemoteViews;
-
-/**
- * Simple widget to show currently playing album art along with play/pause and
- * next track buttons.
- */
-public class MediaAppWidgetProvider4x2 extends AppWidgetProvider {
-       static final String TAG = "MusicAppWidgetProvider4x2";
-
-       public static final String CMDAPPWIDGETUPDATE = "appwidgetupdate4x2";
-
-       // ADW Theme constants
-       public static final int THEME_ITEM_BACKGROUND = 0;
-       public static final int THEME_ITEM_FOREGROUND = 1;
-       private static MediaAppWidgetProvider4x2 sInstance;
-
-       static synchronized MediaAppWidgetProvider4x2 getInstance() {
-               if (sInstance == null) {
-                       sInstance = new MediaAppWidgetProvider4x2();
-               }
-               return sInstance;
-       }
-
-       @Override
-       public void onUpdate(Context context, AppWidgetManager appWidgetManager,
-                       int[] appWidgetIds) {
-               defaultAppWidget(context, appWidgetIds);
-
-               // Send broadcast intent to any running MediaPlaybackService so it can
-               // wrap around with an immediate update.
-               Intent updateIntent = new Intent(MediaPlaybackService.SERVICECMD);
-               updateIntent.putExtra(MediaPlaybackService.CMDNAME,
-                               MediaAppWidgetProvider4x2.CMDAPPWIDGETUPDATE);
-               updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
-                               appWidgetIds);
-               updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-               context.sendBroadcast(updateIntent);
-       }
-
-       /**
-        * Initialize given widgets to default state, where we launch Music on
-        * default click and hide actions if service not running.
-        */
-       private void defaultAppWidget(Context context, int[] appWidgetIds) {
-               final Resources res = context.getResources();
-               final RemoteViews views = new RemoteViews(context.getPackageName(),
-                               R.layout.album_appwidget4x2);
-
-               views.setViewVisibility(R.id.albumname, View.GONE);
-               views.setViewVisibility(R.id.trackname, View.GONE);
-               views.setTextViewText(R.id.artistname,
-                               res.getText(R.string.widget_initial_text));
-               views.setImageViewResource(R.id.albumart,
-                               R.drawable.albumart_mp_unknown);
-
-               linkButtons(context, views, false /* not playing */);
-               pushUpdate(context, appWidgetIds, views);
-       }
-
-       private void pushUpdate(Context context, int[] appWidgetIds,
-                       RemoteViews views) {
-               // Update specific list of appWidgetIds if given, otherwise default to
-               // all
-               final AppWidgetManager gm = AppWidgetManager.getInstance(context);
-               if (appWidgetIds != null) {
-                       gm.updateAppWidget(appWidgetIds, views);
-               } else {
-                       gm.updateAppWidget(new ComponentName(context, this.getClass()),
-                                       views);
-               }
-       }
-
-       /**
-        * Check against {@link AppWidgetManager} if there are any instances of this
-        * widget.
-        */
-       private boolean hasInstances(Context context) {
-               AppWidgetManager appWidgetManager = AppWidgetManager
-                               .getInstance(context);
-               int[] appWidgetIds = appWidgetManager
-                               .getAppWidgetIds(new ComponentName(context, this.getClass()));
-               return (appWidgetIds.length > 0);
-       }
-
-       /**
-        * Handle a change notification coming over from
-        * {@link MediaPlaybackService}
-        */
-       void notifyChange(MediaPlaybackService service, String what) {
-               if (hasInstances(service)) {
-                       if (MediaPlaybackService.META_CHANGED.equals(what)
-                                       || MediaPlaybackService.PROGRESSBAR_CHANGED.equals(what)
-                                       || MediaPlaybackService.PLAYSTATE_CHANGED.equals(what)
-                                       || MediaPlaybackService.REPEATMODE_CHANGED.equals(what)
-                                       || MediaPlaybackService.SHUFFLEMODE_CHANGED.equals(what)) {
-                               performUpdate(service, null);
-                       }
-               }
-       }
-
-       /**
-        * Update all active widget instances by pushing changes
-        */
-       void performUpdate(MediaPlaybackService service, int[] appWidgetIds) {
-               final Resources res = service.getResources();
-               final RemoteViews views = new RemoteViews(service.getPackageName(),
-                               R.layout.album_appwidget4x2);
-
-               CharSequence artistName = service.getArtistName();
-               CharSequence albumName = service.getAlbumName();
-               CharSequence trackName = service.getTrackName();
-               long albumId = service.getAlbumId();
-               long songId = service.getAudioId();
-               long pos = service.position();
-               long dur = service.duration();
-               CharSequence errorState = null;
-
-               // Format title string with track number, or show SD card message
-               String status = Environment.getExternalStorageState();
-               if (status.equals(Environment.MEDIA_SHARED)
-                               || status.equals(Environment.MEDIA_UNMOUNTED)) {
-                       if (android.os.Environment.isExternalStorageRemovable()) {
-                               errorState = res.getText(R.string.sdcard_busy_title);
-                       } else {
-                               errorState = res.getText(R.string.sdcard_busy_title_nosdcard);
-                       }
-               } else if (status.equals(Environment.MEDIA_REMOVED)) {
-                       if (android.os.Environment.isExternalStorageRemovable()) {
-                               errorState = res.getText(R.string.sdcard_missing_title);
-                       } else {
-                               errorState = res
-                                               .getText(R.string.sdcard_missing_title_nosdcard);
-                       }
-               } else if (trackName == null) {
-                       errorState = res.getText(R.string.emptyplaylist);
-               }
-               SharedPreferences mPrefs = PreferenceManager
-                               .getDefaultSharedPreferences(service);
-               int aColor = new Integer(mPrefs.getInt(null,
-                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_ALPHA));
-               int rColor = new Integer(mPrefs.getInt(null,
-                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_RED));
-               int gColor = new Integer(mPrefs.getInt(null,
-                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_GREEN));
-               int bColor = new Integer(mPrefs.getInt(null,
-                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_BLUE));
-               int SCREEN_SAVER_COLOR_DIM = Color.argb(aColor, rColor, gColor, bColor);
-
-               if (errorState != null) {
-                       // Show error state to user
-                       views.setViewVisibility(R.id.albumname, View.GONE);
-                       views.setViewVisibility(R.id.trackname, View.GONE);
-                       views.setTextViewText(R.id.artistname, errorState);
-                       views.setImageViewResource(R.id.albumart,
-                                       R.drawable.albumart_mp_unknown);
-               } else {
-                       // No error, so show normal titles and artwork
-                       views.setViewVisibility(R.id.albumname, View.VISIBLE);
-                       views.setViewVisibility(R.id.trackname, View.VISIBLE);
-                       views.setTextViewText(R.id.artistname, "  " + artistName);
-                       views.setTextViewText(R.id.albumname, "  " + albumName);
-                       views.setTextViewText(R.id.trackname, "  " + trackName);
-                       views.setTextColor(R.id.artistname, SCREEN_SAVER_COLOR_DIM);
-                       views.setTextColor(R.id.albumname, SCREEN_SAVER_COLOR_DIM);
-                       views.setTextColor(R.id.trackname, SCREEN_SAVER_COLOR_DIM);
-                       views.setProgressBar(R.id.progress, 1000, (int) (1000 * pos / dur),
-                                       false);
-
-                       // Set album art
-                       Uri uri = MusicUtils.getArtworkUri(service, songId, albumId);
-                       if (uri != null) {
-                               views.setImageViewUri(R.id.albumart, uri);
-                       } else {
-                               views.setImageViewResource(R.id.albumart,
-                                               R.drawable.albumart_mp_unknown);
-                       }
-               }
-
-               // Set correct drawable for pause state
-               final boolean playing = service.isPlaying();
-               if (playing) {
-                       views.setImageViewResource(R.id.control_play,
-                                       R.drawable.ic_media_pause);
-               } else {
-                       views.setImageViewResource(R.id.control_play,
-                                       R.drawable.ic_appwidget_music_play);
-               }
-
-               // Set correct drawable for repeat state
-               switch (service.getRepeatMode()) {
-               case MediaPlaybackService.REPEAT_ALL:
-                       views.setImageViewResource(R.id.control_repeat,
-                                       R.drawable.ic_mp_repeat_all_btn);
-                       break;
-               case MediaPlaybackService.REPEAT_CURRENT:
-                       views.setImageViewResource(R.id.control_repeat,
-                                       R.drawable.ic_mp_repeat_once_btn);
-                       break;
-               default:
-                       views.setImageViewResource(R.id.control_repeat,
-                                       R.drawable.ic_mp_repeat_off_btn);
-                       break;
-               }
-
-               // Set correct drawable for shuffle state
-               switch (service.getShuffleMode()) {
-               case MediaPlaybackService.SHUFFLE_NONE:
-                       views.setImageViewResource(R.id.control_shuffle,
-                                       R.drawable.ic_mp_shuffle_off_btn);
-                       break;
-               case MediaPlaybackService.SHUFFLE_AUTO:
-                       views.setImageViewResource(R.id.control_shuffle,
-                                       R.drawable.ic_mp_partyshuffle_on_btn);
-                       break;
-               default:
-                       views.setImageViewResource(R.id.control_shuffle,
-                                       R.drawable.ic_mp_shuffle_on_btn);
-                       break;
-               }
-               // Link actions buttons to intents
-               linkButtons(service, views, playing);
-
-               pushUpdate(service, appWidgetIds, views);
-
-       }
-
-       /**
-        * Link up various button actions using {@link PendingIntents}.
-        * 
-        * @param playerActive
-        *            True if player is active in background, which means widget
-        *            click will launch {@link MediaPlaybackActivity}, otherwise we
-        *            launch {@link MusicBrowserActivity}.
-        */
-       private void linkButtons(Context context, RemoteViews views,
-                       boolean playerActive) {
-
-               // ADW: Load the specified theme
-               String themePackage = MusicUtils.getThemePackageName(context,
-                               MusicSettingsActivity.THEME_DEFAULT);
-               PackageManager pm = context.getPackageManager();
-               Resources themeResources = null;
-               if (!themePackage.equals(MusicSettingsActivity.THEME_DEFAULT)) {
-                       try {
-                               themeResources = pm.getResourcesForApplication(themePackage);
-                       } catch (NameNotFoundException e) {
-                               // ADW The saved theme was uninstalled so we save the
-                               // default one
-                               MusicUtils.setThemePackageName(context,
-                                               MusicSettingsActivity.THEME_DEFAULT);
-                       }
-                       int albumName = themeResources.getIdentifier(
-                                       "four_by_two_album_name", "color", themePackage);
-                       if (albumName != 0) {
-                               views.setTextColor(R.id.albumname,
-                                               themeResources.getColor(albumName));
-                       }
-                       int trackName = themeResources.getIdentifier(
-                                       "four_by_two_track_name", "color", themePackage);
-                       if (trackName != 0) {
-                               views.setTextColor(R.id.trackname,
-                                               themeResources.getColor(trackName));
-                       }
-                       int artistName = themeResources.getIdentifier(
-                                       "four_by_two_artist_name", "color", themePackage);
-                       if (artistName != 0) {
-                               views.setTextColor(R.id.artistname,
-                                               themeResources.getColor(artistName));
-                       }
-               }
-
-               // Connect up various buttons and touch events
-               Intent intent;
-               PendingIntent pendingIntent;
-
-               final ComponentName serviceName = new ComponentName(context,
-                               MediaPlaybackService.class);
-
-               if (playerActive) {
-                       intent = new Intent(context, MediaPlaybackActivity.class);
-                       pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
-                       views.setOnClickPendingIntent(R.id.albumart, pendingIntent);
-                       views.setOnClickPendingIntent(R.id.info, pendingIntent);
-               } else {
-                       intent = new Intent(context, MusicBrowserActivity.class);
-                       pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
-                       views.setOnClickPendingIntent(R.id.albumart, pendingIntent);
-                       views.setOnClickPendingIntent(R.id.info, pendingIntent);
-               }
-
-               intent = new Intent(MediaPlaybackService.TOGGLEPAUSE_ACTION);
-               intent.setComponent(serviceName);
-               pendingIntent = PendingIntent.getService(context, 0, intent, 0);
-               views.setOnClickPendingIntent(R.id.control_play, pendingIntent);
-
-               intent = new Intent(MediaPlaybackService.NEXT_ACTION);
-               intent.setComponent(serviceName);
-               pendingIntent = PendingIntent.getService(context, 0, intent, 0);
-               views.setOnClickPendingIntent(R.id.control_next, pendingIntent);
-
-               intent = new Intent(MediaPlaybackService.PREVIOUS_ACTION);
-               intent.setComponent(serviceName);
-               pendingIntent = PendingIntent.getService(context, 0, intent, 0);
-               views.setOnClickPendingIntent(R.id.control_prev, pendingIntent);
-
-               intent = new Intent(MediaPlaybackService.CYCLEREPEAT_ACTION);
-               intent.setComponent(serviceName);
-               pendingIntent = PendingIntent.getService(context, 0, intent, 0);
-               views.setOnClickPendingIntent(R.id.control_repeat, pendingIntent);
-
-               intent = new Intent(MediaPlaybackService.TOGGLESHUFFLE_ACTION);
-               intent.setComponent(serviceName);
-               pendingIntent = PendingIntent.getService(context, 0, intent, 0);
-               views.setOnClickPendingIntent(R.id.control_shuffle, pendingIntent);
-       }
-}
+/*\r
+ * Copyright (C) 2009 The Android Open Source Project\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package com.android.music;\r
+\r
+import android.app.PendingIntent;\r
+import android.appwidget.AppWidgetManager;\r
+import android.appwidget.AppWidgetProvider;\r
+import android.content.ComponentName;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.content.SharedPreferences;\r
+import android.content.pm.PackageManager;\r
+import android.content.pm.PackageManager.NameNotFoundException;\r
+import android.content.res.Resources;\r
+import android.graphics.Color;\r
+import android.net.Uri;\r
+import android.os.Environment;\r
+import android.preference.PreferenceManager;\r
+import android.view.View;\r
+import android.widget.RemoteViews;\r
+\r
+/**\r
+ * Simple widget to show currently playing album art along with play/pause and\r
+ * next track buttons.\r
+ */\r
+public class MediaAppWidgetProvider4x2 extends AppWidgetProvider {\r
+       static final String TAG = "MusicAppWidgetProvider4x2";\r
+\r
+       public static final String CMDAPPWIDGETUPDATE = "appwidgetupdate4x2";\r
+\r
+       // ADW Theme constants\r
+       public static final int THEME_ITEM_BACKGROUND = 0;\r
+       public static final int THEME_ITEM_FOREGROUND = 1;\r
+       private static MediaAppWidgetProvider4x2 sInstance;\r
+\r
+       static synchronized MediaAppWidgetProvider4x2 getInstance() {\r
+               if (sInstance == null) {\r
+                       sInstance = new MediaAppWidgetProvider4x2();\r
+               }\r
+               return sInstance;\r
+       }\r
+\r
+       @Override\r
+       public void onUpdate(Context context, AppWidgetManager appWidgetManager,\r
+                       int[] appWidgetIds) {\r
+               defaultAppWidget(context, appWidgetIds);\r
+\r
+               // Send broadcast intent to any running MediaPlaybackService so it can\r
+               // wrap around with an immediate update.\r
+               Intent updateIntent = new Intent(MediaPlaybackService.SERVICECMD);\r
+               updateIntent.putExtra(MediaPlaybackService.CMDNAME,\r
+                               MediaAppWidgetProvider4x2.CMDAPPWIDGETUPDATE);\r
+               updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,\r
+                               appWidgetIds);\r
+               updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);\r
+               context.sendBroadcast(updateIntent);\r
+       }\r
+\r
+       /**\r
+        * Initialize given widgets to default state, where we launch Music on\r
+        * default click and hide actions if service not running.\r
+        */\r
+       private void defaultAppWidget(Context context, int[] appWidgetIds) {\r
+               final Resources res = context.getResources();\r
+               final RemoteViews views = new RemoteViews(context.getPackageName(),\r
+                               R.layout.album_appwidget4x2);\r
+\r
+               views.setViewVisibility(R.id.albumname, View.GONE);\r
+               views.setViewVisibility(R.id.trackname, View.GONE);\r
+               views.setTextViewText(R.id.artistname,\r
+                               res.getText(R.string.widget_initial_text));\r
+               views.setImageViewResource(R.id.albumart,\r
+                               R.drawable.albumart_mp_unknown);\r
+\r
+               linkButtons(context, views, false /* not playing */);\r
+               pushUpdate(context, appWidgetIds, views);\r
+       }\r
+\r
+       private void pushUpdate(Context context, int[] appWidgetIds,\r
+                       RemoteViews views) {\r
+               // Update specific list of appWidgetIds if given, otherwise default to\r
+               // all\r
+               final AppWidgetManager gm = AppWidgetManager.getInstance(context);\r
+               if (appWidgetIds != null) {\r
+                       gm.updateAppWidget(appWidgetIds, views);\r
+               } else {\r
+                       gm.updateAppWidget(new ComponentName(context, this.getClass()),\r
+                                       views);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Check against {@link AppWidgetManager} if there are any instances of this\r
+        * widget.\r
+        */\r
+       private boolean hasInstances(Context context) {\r
+               AppWidgetManager appWidgetManager = AppWidgetManager\r
+                               .getInstance(context);\r
+               int[] appWidgetIds = appWidgetManager\r
+                               .getAppWidgetIds(new ComponentName(context, this.getClass()));\r
+               return (appWidgetIds.length > 0);\r
+       }\r
+\r
+       /**\r
+        * Handle a change notification coming over from\r
+        * {@link MediaPlaybackService}\r
+        */\r
+       void notifyChange(MediaPlaybackService service, String what) {\r
+               if (hasInstances(service)) {\r
+                       if (MediaPlaybackService.META_CHANGED.equals(what)\r
+                                       || MediaPlaybackService.PROGRESSBAR_CHANGED.equals(what)\r
+                                       || MediaPlaybackService.PLAYSTATE_CHANGED.equals(what)\r
+                                       || MediaPlaybackService.REPEATMODE_CHANGED.equals(what)\r
+                                       || MediaPlaybackService.SHUFFLEMODE_CHANGED.equals(what)) {\r
+                               performUpdate(service, null);\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Update all active widget instances by pushing changes\r
+        */\r
+       void performUpdate(MediaPlaybackService service, int[] appWidgetIds) {\r
+               final Resources res = service.getResources();\r
+               final RemoteViews views = new RemoteViews(service.getPackageName(),\r
+                               R.layout.album_appwidget4x2);\r
+\r
+               CharSequence artistName = service.getArtistName();\r
+               CharSequence albumName = service.getAlbumName();\r
+               CharSequence trackName = service.getTrackName();\r
+               long albumId = service.getAlbumId();\r
+               long songId = service.getAudioId();\r
+               long pos = service.position();\r
+               long dur = service.duration();\r
+               CharSequence errorState = null;\r
+\r
+               // Format title string with track number, or show SD card message\r
+               String status = Environment.getExternalStorageState();\r
+               if (status.equals(Environment.MEDIA_SHARED)\r
+                               || status.equals(Environment.MEDIA_UNMOUNTED)) {\r
+                       if (android.os.Environment.isExternalStorageRemovable()) {\r
+                               errorState = res.getText(R.string.sdcard_busy_title);\r
+                       } else {\r
+                               errorState = res.getText(R.string.sdcard_busy_title_nosdcard);\r
+                       }\r
+               } else if (status.equals(Environment.MEDIA_REMOVED)) {\r
+                       if (android.os.Environment.isExternalStorageRemovable()) {\r
+                               errorState = res.getText(R.string.sdcard_missing_title);\r
+                       } else {\r
+                               errorState = res\r
+                                               .getText(R.string.sdcard_missing_title_nosdcard);\r
+                       }\r
+               } else if (trackName == null) {\r
+                       errorState = res.getText(R.string.emptyplaylist);\r
+               }\r
+               SharedPreferences mPrefs = PreferenceManager\r
+                               .getDefaultSharedPreferences(service);\r
+               int aColor = new Integer(mPrefs.getInt(null,\r
+                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_ALPHA));\r
+               int rColor = new Integer(mPrefs.getInt(null,\r
+                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_RED));\r
+               int gColor = new Integer(mPrefs.getInt(null,\r
+                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_GREEN));\r
+               int bColor = new Integer(mPrefs.getInt(null,\r
+                               MusicSettingsActivity.DEFAULT_SCREENSAVER_COLOR_BLUE));\r
+               int SCREEN_SAVER_COLOR_DIM = Color.argb(aColor, rColor, gColor, bColor);\r
+\r
+               if (errorState != null) {\r
+                       // Show error state to user\r
+                       views.setViewVisibility(R.id.albumname, View.GONE);\r
+                       views.setViewVisibility(R.id.trackname, View.GONE);\r
+                       views.setTextViewText(R.id.artistname, errorState);\r
+                       views.setImageViewResource(R.id.albumart,\r
+                                       R.drawable.albumart_mp_unknown);\r
+               } else {\r
+                       // No error, so show normal titles and artwork\r
+                       views.setViewVisibility(R.id.albumname, View.VISIBLE);\r
+                       views.setViewVisibility(R.id.trackname, View.VISIBLE);\r
+                       views.setTextViewText(R.id.artistname, "  " + artistName);\r
+                       views.setTextViewText(R.id.albumname, "  " + albumName);\r
+                       views.setTextViewText(R.id.trackname, "  " + trackName);\r
+                       views.setTextColor(R.id.artistname, SCREEN_SAVER_COLOR_DIM);\r
+                       views.setTextColor(R.id.albumname, SCREEN_SAVER_COLOR_DIM);\r
+                       views.setTextColor(R.id.trackname, SCREEN_SAVER_COLOR_DIM);\r
+                       views.setProgressBar(R.id.progress, 1000, (int) (1000 * pos / dur),\r
+                                       false);\r
+\r
+                       // Set album art\r
+                       Uri uri = MusicUtils.getArtworkUri(service, songId, albumId);\r
+                       if (uri != null) {\r
+                               views.setImageViewUri(R.id.albumart, uri);\r
+                       } else {\r
+                               views.setImageViewResource(R.id.albumart,\r
+                                               R.drawable.albumart_mp_unknown);\r
+                       }\r
+               }\r
+\r
+               // Set correct drawable for pause state\r
+               final boolean playing = service.isPlaying();\r
+               if (playing) {\r
+                       views.setImageViewResource(R.id.control_play,\r
+                                       R.drawable.ic_media_pause);\r
+               } else {\r
+                       views.setImageViewResource(R.id.control_play,\r
+                                       R.drawable.ic_appwidget_music_play);\r
+               }\r
+\r
+               // Set correct drawable for repeat state\r
+               switch (service.getRepeatMode()) {\r
+               case MediaPlaybackService.REPEAT_ALL:\r
+                       views.setImageViewResource(R.id.control_repeat,\r
+                                       R.drawable.ic_mp_repeat_all_btn);\r
+                       break;\r
+               case MediaPlaybackService.REPEAT_CURRENT:\r
+                       views.setImageViewResource(R.id.control_repeat,\r
+                                       R.drawable.ic_mp_repeat_once_btn);\r
+                       break;\r
+               default:\r
+                       views.setImageViewResource(R.id.control_repeat,\r
+                                       R.drawable.ic_mp_repeat_off_btn);\r
+                       break;\r
+               }\r
+\r
+               // Set correct drawable for shuffle state\r
+               switch (service.getShuffleMode()) {\r
+               case MediaPlaybackService.SHUFFLE_NONE:\r
+                       views.setImageViewResource(R.id.control_shuffle,\r
+                                       R.drawable.ic_mp_shuffle_off_btn);\r
+                       break;\r
+               case MediaPlaybackService.SHUFFLE_AUTO:\r
+                       views.setImageViewResource(R.id.control_shuffle,\r
+                                       R.drawable.ic_mp_partyshuffle_on_btn);\r
+                       break;\r
+               default:\r
+                       views.setImageViewResource(R.id.control_shuffle,\r
+                                       R.drawable.ic_mp_shuffle_on_btn);\r
+                       break;\r
+               }\r
+               // Link actions buttons to intents\r
+               linkButtons(service, views, playing);\r
+\r
+               pushUpdate(service, appWidgetIds, views);\r
+\r
+       }\r
+\r
+       /**\r
+        * Link up various button actions using {@link PendingIntents}.\r
+        * \r
+        * @param playerActive\r
+        *            True if player is active in background, which means widget\r
+        *            click will launch {@link MediaPlaybackActivity}, otherwise we\r
+        *            launch {@link MusicBrowserActivity}.\r
+        */\r
+       private void linkButtons(Context context, RemoteViews views,\r
+                       boolean playerActive) {\r
+\r
+               // ADW: Load the specified theme\r
+               String themePackage = MusicUtils.getThemePackageName(context,\r
+                               MusicSettingsActivity.THEME_DEFAULT);\r
+               PackageManager pm = context.getPackageManager();\r
+               Resources themeResources = null;\r
+               if (!themePackage.equals(MusicSettingsActivity.THEME_DEFAULT)) {\r
+                       try {\r
+                               themeResources = pm.getResourcesForApplication(themePackage);\r
+                       } catch (NameNotFoundException e) {\r
+                               // ADW The saved theme was uninstalled so we save the\r
+                               // default one\r
+                               MusicUtils.setThemePackageName(context,\r
+                                               MusicSettingsActivity.THEME_DEFAULT);\r
+                       }\r
+                       int albumName = themeResources.getIdentifier(\r
+                                       "four_by_two_album_name", "color", themePackage);\r
+                       if (albumName != 0) {\r
+                               views.setTextColor(R.id.albumname,\r
+                                               themeResources.getColor(albumName));\r
+                       }\r
+                       int trackName = themeResources.getIdentifier(\r
+                                       "four_by_two_track_name", "color", themePackage);\r
+                       if (trackName != 0) {\r
+                               views.setTextColor(R.id.trackname,\r
+                                               themeResources.getColor(trackName));\r
+                       }\r
+                       int artistName = themeResources.getIdentifier(\r
+                                       "four_by_two_artist_name", "color", themePackage);\r
+                       if (artistName != 0) {\r
+                               views.setTextColor(R.id.artistname,\r
+                                               themeResources.getColor(artistName));\r
+                       }\r
+               }\r
+\r
+               // Connect up various buttons and touch events\r
+               Intent intent;\r
+               PendingIntent pendingIntent;\r
+\r
+               final ComponentName serviceName = new ComponentName(context,\r
+                               MediaPlaybackService.class);\r
+\r
+               if (playerActive) {\r
+                       intent = new Intent(context, MediaPlaybackActivity.class);\r
+                       pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);\r
+                       views.setOnClickPendingIntent(R.id.albumart, pendingIntent);\r
+                       views.setOnClickPendingIntent(R.id.info, pendingIntent);\r
+               } else {\r
+                       intent = new Intent(context, MusicBrowserActivity.class);\r
+                       pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);\r
+                       views.setOnClickPendingIntent(R.id.albumart, pendingIntent);\r
+                       views.setOnClickPendingIntent(R.id.info, pendingIntent);\r
+               }\r
+\r
+               intent = new Intent(MediaPlaybackService.TOGGLEPAUSE_ACTION);\r
+               intent.setComponent(serviceName);\r
+               pendingIntent = PendingIntent.getService(context, 0, intent, 0);\r
+               views.setOnClickPendingIntent(R.id.control_play, pendingIntent);\r
+\r
+               intent = new Intent(MediaPlaybackService.NEXT_ACTION);\r
+               intent.setComponent(serviceName);\r
+               pendingIntent = PendingIntent.getService(context, 0, intent, 0);\r
+               views.setOnClickPendingIntent(R.id.control_next, pendingIntent);\r
+\r
+               intent = new Intent(MediaPlaybackService.PREVIOUS_ACTION);\r
+               intent.setComponent(serviceName);\r
+               pendingIntent = PendingIntent.getService(context, 0, intent, 0);\r
+               views.setOnClickPendingIntent(R.id.control_prev, pendingIntent);\r
+\r
+               intent = new Intent(MediaPlaybackService.CYCLEREPEAT_ACTION);\r
+               intent.setComponent(serviceName);\r
+               pendingIntent = PendingIntent.getService(context, 0, intent, 0);\r
+               views.setOnClickPendingIntent(R.id.control_repeat, pendingIntent);\r
+\r
+               intent = new Intent(MediaPlaybackService.TOGGLESHUFFLE_ACTION);\r
+               intent.setComponent(serviceName);\r
+               pendingIntent = PendingIntent.getService(context, 0, intent, 0);\r
+               views.setOnClickPendingIntent(R.id.control_shuffle, pendingIntent);\r
+       }\r
+}\r