-/*
- * 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