From cb013cc51e87415746605748a7ca292e9e5f4498 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Sat, 20 Mar 2010 16:50:06 -0500 Subject: [PATCH] Integrate MediaView into MediaAdapter --- src/org/kreed/vanilla/MediaAdapter.java | 109 ++++++++++++++++++- src/org/kreed/vanilla/MediaView.java | 132 ------------------------ src/org/kreed/vanilla/SongSelector.java | 2 +- 3 files changed, 109 insertions(+), 134 deletions(-) delete mode 100644 src/org/kreed/vanilla/MediaView.java diff --git a/src/org/kreed/vanilla/MediaAdapter.java b/src/org/kreed/vanilla/MediaAdapter.java index ffb67455..95ccadf4 100644 --- a/src/org/kreed/vanilla/MediaAdapter.java +++ b/src/org/kreed/vanilla/MediaAdapter.java @@ -26,6 +26,13 @@ import java.util.regex.Pattern; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.TypedValue; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; @@ -76,7 +83,7 @@ public class MediaAdapter extends BaseAdapter implements Filterable { } if (view == null) - view = new MediaView(mContext, mPrimaryField, mSecondaryField, mExpanderListener != null); + view = new MediaView(mContext); view.updateMedia(get(position)); @@ -257,4 +264,104 @@ public class MediaAdapter extends BaseAdapter implements Filterable { intent.putExtra("title", song.getField(mPrimaryField)); return intent; } + + private static float mTextSize = -1; + private static Bitmap mExpander = null; + + private int mViewHeight = -1; + + public class MediaView extends View { + private SongData mData; + private boolean mExpanderPressed; + + public MediaView(Context context) + { + super(context); + + if (mExpander == null) + mExpander = BitmapFactory.decodeResource(context.getResources(), R.drawable.expander_arrow); + if (mTextSize == -1) + mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, context.getResources().getDisplayMetrics()); + if (mViewHeight == -1) + mViewHeight = measureHeight(); + } + + private int measureHeight() + { + int expanderHeight; + int textHeight; + + if (mExpanderListener != null) + expanderHeight = mExpander.getHeight() + (int)mTextSize; + else + expanderHeight = 0; + + if (mSecondaryField != -1) + textHeight = (int)(7 * mTextSize / 2); + else + textHeight = (int)(2 * mTextSize); + + return Math.max(expanderHeight, textHeight); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mViewHeight); + } + + @Override + public void onDraw(Canvas canvas) + { + if (mData == null) + return; + + int width = getWidth(); + int height = getHeight(); + float padding = mTextSize / 2; + + Paint paint = new Paint(); + paint.setTextSize(mTextSize); + paint.setAntiAlias(true); + + if (mExpanderListener != null) { + width -= padding * 3 + mExpander.getWidth(); + canvas.drawBitmap(mExpander, width + padding * 2, (height - mExpander.getHeight()) / 2, paint); + } + + canvas.clipRect(padding, 0, width - padding, height); + + float allocatedHeight; + + if (mSecondaryField != -1) { + allocatedHeight = height / 2 - padding * 3 / 2; + + paint.setColor(Color.GRAY); + canvas.drawText(mData.getField(mSecondaryField), padding, height / 2 + padding / 2 + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint); + } else { + allocatedHeight = height - padding * 2; + } + + paint.setColor(Color.WHITE); + canvas.drawText(mData.getField(mPrimaryField), padding, padding + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint); + } + + public void updateMedia(SongData data) + { + mData = data; + invalidate(); + } + + public SongData getExpanderData() + { + return mExpanderPressed ? mData : null; + } + + @Override + public boolean onTouchEvent(MotionEvent event) + { + mExpanderPressed = mExpanderListener != null && event.getX() > getWidth() - mExpander.getWidth() - 3 * mTextSize / 2; + return false; + } + } } \ No newline at end of file diff --git a/src/org/kreed/vanilla/MediaView.java b/src/org/kreed/vanilla/MediaView.java deleted file mode 100644 index 7af2c8ee..00000000 --- a/src/org/kreed/vanilla/MediaView.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2010 Christopher Eby - * - * This file is part of Vanilla Music Player. - * - * Vanilla Music Player is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Vanilla Music Player is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.kreed.vanilla; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.util.DisplayMetrics; -import android.util.TypedValue; -import android.view.MotionEvent; -import android.view.View; - -public class MediaView extends View { - private static float mTextSize = -1; - private static Bitmap mExpander = null; - - private SongData mData; - private int mPrimaryField; - private int mSecondaryField; - private boolean mHasExpander; - - private boolean mExpanderPressed; - - public MediaView(Context context, int primaryField, int secondaryField, boolean hasExpander) - { - super(context); - - if (mExpander == null) - mExpander = BitmapFactory.decodeResource(context.getResources(), R.drawable.expander_arrow); - if (mTextSize == -1) { - DisplayMetrics metrics = context.getResources().getDisplayMetrics(); - mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, metrics); - } - - mPrimaryField = primaryField; - mSecondaryField = secondaryField; - mHasExpander = hasExpander; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) - { - int expanderHeight; - int textHeight; - - if (mHasExpander) - expanderHeight = mExpander.getHeight() + (int)mTextSize; - else - expanderHeight = 0; - - if (mSecondaryField != -1) - textHeight = (int)(7 * mTextSize / 2); - else - textHeight = (int)(2 * mTextSize); - - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), - Math.max(expanderHeight, textHeight)); - } - - @Override - public void onDraw(Canvas canvas) - { - if (mData == null) - return; - - int width = getWidth(); - int height = getHeight(); - float padding = mTextSize / 2; - - Paint paint = new Paint(); - paint.setTextSize(mTextSize); - paint.setAntiAlias(true); - - if (mHasExpander) { - width -= padding * 3 + mExpander.getWidth(); - canvas.drawBitmap(mExpander, width + padding * 2, (height - mExpander.getHeight()) / 2, paint); - } - - canvas.clipRect(padding, 0, width - padding, height); - - float allocatedHeight; - - if (mSecondaryField != -1) { - allocatedHeight = height / 2 - padding * 3 / 2; - - paint.setColor(Color.GRAY); - canvas.drawText(mData.getField(mSecondaryField), padding, height / 2 + padding / 2 + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint); - } else { - allocatedHeight = height - padding * 2; - } - - paint.setColor(Color.WHITE); - canvas.drawText(mData.getField(mPrimaryField), padding, padding + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint); - } - - public void updateMedia(SongData data) - { - mData = data; - invalidate(); - } - - public SongData getExpanderData() - { - return mExpanderPressed ? mData : null; - } - - @Override - public boolean onTouchEvent(MotionEvent event) - { - mExpanderPressed = mHasExpander && event.getX() > getWidth() - mExpander.getWidth() - 3 * mTextSize / 2; - return false; - } -} \ No newline at end of file diff --git a/src/org/kreed/vanilla/SongSelector.java b/src/org/kreed/vanilla/SongSelector.java index 312a69e9..c7bf665e 100644 --- a/src/org/kreed/vanilla/SongSelector.java +++ b/src/org/kreed/vanilla/SongSelector.java @@ -168,7 +168,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick public void onItemClick(AdapterView list, View view, int pos, long id) { MediaAdapter adapter = (MediaAdapter)list.getAdapter(); - SongData data = ((MediaView)view).getExpanderData(); + SongData data = ((MediaAdapter.MediaView)view).getExpanderData(); if (data != null) { int field = adapter.getPrimaryField(); SongData.Field limiter = new SongData.Field(field, data);