import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
-import android.media.MediaFile;
import android.net.Uri;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
-import android.widget.LinearLayout;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.Toast;
private static String mLastSdStatus;
public static void displayDatabaseError(Activity a) {
+ if (a.isFinishing()) {
+ // When switching tabs really fast, we can end up with a null
+ // cursor (not sure why), which will bring us here.
+ // Don't bother showing an error message in that case.
+ return;
+ }
+
String status = Environment.getExternalStorageState();
int title = R.string.sdcard_error_title;
int message = R.string.sdcard_error_message;
if (v != null) {
v.setVisibility(View.GONE);
}
+ v = a.findViewById(R.id.buttonbar);
+ if (v != null) {
+ v.setVisibility(View.GONE);
+ }
TextView tv = (TextView) a.findViewById(R.id.sd_message);
tv.setText(message);
}
}
return null;
}
-
+
/** Get album art for specified album. You should not pass in the album id
* for the "unknown" album here (use -1 instead)
+ * This method always returns the default album art icon when no album art is found.
*/
public static Bitmap getArtwork(Context context, long song_id, long album_id) {
+ return getArtwork(context, song_id, album_id, true);
+ }
+
+ /** Get album art for specified album. You should not pass in the album id
+ * for the "unknown" album here (use -1 instead)
+ */
+ public static Bitmap getArtwork(Context context, long song_id, long album_id,
+ boolean allowdefault) {
if (album_id < 0) {
// This is something that is not in the database, so get the album art directly
return bm;
}
}
- return getDefaultArtwork(context);
+ if (allowdefault) {
+ return getDefaultArtwork(context);
+ }
+ return null;
}
ContentResolver res = context.getContentResolver();
if (bm != null) {
if (bm.getConfig() == null) {
bm = bm.copy(Bitmap.Config.RGB_565, false);
- if (bm == null) {
+ if (bm == null && allowdefault) {
return getDefaultArtwork(context);
}
}
- } else {
+ } else if (allowdefault) {
bm = getDefaultArtwork(context);
}
return bm;
static int sActiveTabIndex = -1;
- static void updateButtonBar(Activity a, int highlight) {
+ static boolean updateButtonBar(Activity a, int highlight) {
final TabWidget ll = (TabWidget) a.findViewById(R.id.buttonbar);
boolean withtabs = false;
Intent intent = a.getIntent();
if (highlight == 0 || !withtabs) {
ll.setVisibility(View.GONE);
- return;
+ return withtabs;
} else if (withtabs) {
ll.setVisibility(View.VISIBLE);
}
ll.setCurrentTab(i);
sActiveTabIndex = i;
}
+ v.setTag(i);
v.setOnFocusChangeListener(new View.OnFocusChangeListener() {
- @Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
for (int i = 0; i < ll.getTabCount(); i++) {
v.setOnClickListener(new View.OnClickListener() {
- @Override
public void onClick(View v) {
processTabClick((Activity)ll.getContext(), v, ll.getChildAt(sActiveTabIndex).getId());
-
}});
}
+ return withtabs;
}
static void processTabClick(Activity a, View v, int current) {
if (id == current) {
return;
}
+
+ final TabWidget ll = (TabWidget) a.findViewById(R.id.buttonbar);
+ ll.setCurrentTab((Integer) v.getTag());
+
activateTab(a, id);
if (id != R.id.nowplayingtab) {
setIntPref(a, "activetab", id);
TextView artist = (TextView) nowPlayingView.findViewById(R.id.artist);
title.setText(MusicUtils.sService.getTrackName());
String artistName = MusicUtils.sService.getArtistName();
- if (MediaFile.UNKNOWN_STRING.equals(artistName)) {
+ if (MediaStore.UNKNOWN_STRING.equals(artistName)) {
artistName = a.getString(R.string.unknown_artist_name);
}
artist.setText(artistName);
nowPlayingView.setVisibility(View.VISIBLE);
nowPlayingView.setOnClickListener(new View.OnClickListener() {
- @Override
public void onClick(View v) {
Context c = v.getContext();
c.startActivity(new Intent(c, MediaPlaybackActivity.class));
nowPlayingView.setVisibility(View.GONE);
}
+ static void setBackground(View v, Bitmap bm) {
+
+ if (bm == null) {
+ v.setBackgroundResource(0);
+ return;
+ }
+
+ int vwidth = v.getWidth();
+ int vheight = v.getHeight();
+ int bwidth = bm.getWidth();
+ int bheight = bm.getHeight();
+ float scalex = (float) vwidth / bwidth;
+ float scaley = (float) vheight / bheight;
+ float scale = Math.max(scalex, scaley) * 1.3f;
+
+ Bitmap.Config config = Bitmap.Config.ARGB_8888;
+ Bitmap bg = Bitmap.createBitmap(vwidth, vheight, config);
+ Canvas c = new Canvas(bg);
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setFilterBitmap(true);
+ ColorMatrix greymatrix = new ColorMatrix();
+ greymatrix.setSaturation(0);
+ ColorMatrix darkmatrix = new ColorMatrix();
+ darkmatrix.setScale(.3f, .3f, .3f, 1.0f);
+ greymatrix.postConcat(darkmatrix);
+ ColorFilter filter = new ColorMatrixColorFilter(greymatrix);
+ paint.setColorFilter(filter);
+ Matrix matrix = new Matrix();
+ matrix.setTranslate(-bwidth/2, -bheight/2); // move bitmap center to origin
+ matrix.postRotate(10);
+ matrix.postScale(scale, scale);
+ matrix.postTranslate(vwidth/2, vheight/2); // Move bitmap center to view center
+ c.drawBitmap(bm, matrix, paint);
+ v.setBackgroundDrawable(new BitmapDrawable(bg));
+ }
+
+ static int getCardId(Context context) {
+ ContentResolver res = context.getContentResolver();
+ Cursor c = res.query(Uri.parse("content://media/external/fs_id"), null, null, null, null);
+ int id = -1;
+ if (c != null) {
+ c.moveToFirst();
+ id = c.getInt(0);
+ c.close();
+ }
+ return id;
+ }
}