/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android; import java.util.HashSet; import java.util.Set; import WriteReviewOperation.MediaRef; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import com.galaxy.meetup.client.android.ui.view.AlbumColumnGridItemView; import com.galaxy.meetup.client.android.ui.view.ColumnGridView; import com.galaxy.meetup.client.android.ui.view.ImageResourceView; import com.galaxy.meetup.client.util.EsLog; /** * * @author sihai * */ public class AlbumGridViewAdapter extends EsCursorAdapter { private static StateFilter sDefaultFilter = new StateFilter() { public final int getState(int i) { return 0; } }; private final String mAlbumType; private final android.view.View.OnClickListener mClickListener; private StateFilter mFilter; private final ColumnGridView mGridView; private Handler mHandler; private Boolean mHasDisabledPhotos; private final boolean mLandscape; private final android.view.View.OnLongClickListener mLongClickListener; private Set mSelectedMediaRefs; private final ViewUseListener mViewUseListener; public AlbumGridViewAdapter(Context context, Cursor cursor, String s, ColumnGridView columngridview, View.OnClickListener onclicklistener, View.OnLongClickListener onlongclicklistener, ViewUseListener viewuselistener) { super(context, null); int i = 1; mHandler = new Handler(Looper.getMainLooper()); mFilter = sDefaultFilter; boolean flag; ColumnGridView columngridview1; Resources resources; int j; int k; DisplayMetrics displaymetrics; int l; int i1; int j1; int k1; int l1; int i2; int j2; if(context.getResources().getConfiguration().orientation == 2) flag = true; else flag = false; mLandscape = flag; if(!mLandscape) i = 2; columngridview.setOrientation(i); mViewUseListener = viewuselistener; mClickListener = onclicklistener; mLongClickListener = onlongclicklistener; mGridView = columngridview; mAlbumType = s; columngridview1 = mGridView; resources = context.getResources(); j = resources.getDimensionPixelOffset(R.dimen.album_photo_grid_width); k = resources.getDimensionPixelOffset(R.dimen.album_photo_grid_spacing); columngridview1.setPadding(k, k, k, k); columngridview1.setItemMargin(k); displaymetrics = new DisplayMetrics(); ((WindowManager)context.getSystemService("window")).getDefaultDisplay().getMetrics(displaymetrics); l = displaymetrics.widthPixels; i1 = displaymetrics.heightPixels; j1 = l - k * (-1 + l / j); k1 = j1 / (j1 / j); l1 = i1 - k * (-1 + i1 / j); i2 = Math.max(k1, l1 / (l1 / j)); j2 = Math.min(l, i1) / i2; if(EsLog.isLoggable("AlbumGridViewAdapter", 3)) { Log.d("AlbumGridViewAdapter", (new StringBuilder("Usable width: ")).append(l).append(", usable height: ").append(i1).toString()); Log.d("AlbumGridViewAdapter", (new StringBuilder("Thumbnail size: ")).append(i2).append(", columns: ").append(j2).toString()); } columngridview1.setColumnCount(j2); columngridview.setRecyclerListener(new ColumnGridView.RecyclerListener() { public final void onMovedToScrapHeap(View view) { ImageResourceView imageresourceview = (ImageResourceView)view; if(imageresourceview != null) { imageresourceview.onRecycle(); imageresourceview.setTag(null); imageresourceview.setOnClickListener(null); imageresourceview.setOnLongClickListener(null); } } }); } private MediaRef createMediaRef(String s, long l, MediaRef.MediaType mediatype, String s1) { MediaRef mediaref; if(TextUtils.equals(mAlbumType, "camera_photos")) mediaref = new MediaRef(s, 0L, null, Uri.parse(s1), mediatype); else mediaref = new MediaRef(s, l, s1, null, mediatype); return mediaref; } private static MediaRef.MediaType getMediaTypeForRow(Cursor cursor) { MediaRef.MediaType mediatype; if(!cursor.isNull(11)) mediatype = MediaRef.MediaType.VIDEO; else if(cursor.getInt(12) != 0) mediatype = MediaRef.MediaType.PANORAMA; else mediatype = MediaRef.MediaType.IMAGE; return mediatype; } public final void bindView(View view, Context context, Cursor cursor) { AlbumColumnGridItemView albumcolumngriditemview; int i; albumcolumngriditemview = (AlbumColumnGridItemView)view; i = cursor.getInt(14); int state = mFilter.getState(i); if(0 == state) { albumcolumngriditemview.setOnClickListener(mClickListener); albumcolumngriditemview.setOnLongClickListener(mLongClickListener); albumcolumngriditemview.setEnabled(true); } else if(1 == state) { albumcolumngriditemview.setOnClickListener(null); albumcolumngriditemview.setOnLongClickListener(null); albumcolumngriditemview.setEnabled(false); } final int cursorPosition = cursor.getPosition(); int j = R.string.photo_in_list_count; Object aobj[] = new Object[2]; aobj[0] = Integer.valueOf(cursorPosition + 1); aobj[1] = Integer.valueOf(cursor.getCount()); albumcolumngriditemview.setContentDescription(context.getString(j, aobj)); albumcolumngriditemview.setTag(R.id.tag_position, Integer.valueOf(cursorPosition)); int k; if(!cursor.isNull(9)) { String s = cursor.getString(5); long l = cursor.getLong(8); String s1 = cursor.getString(9); MediaRef mediaref = createMediaRef(s, l, getMediaTypeForRow(cursor), s1); albumcolumngriditemview.setMediaRef(mediaref); albumcolumngriditemview.setTag(mediaref); int i1; int j1; boolean flag; if(cursor.isNull(4)) i1 = 0; else i1 = cursor.getInt(4); if(i1 > 0) albumcolumngriditemview.setPlusOneCount(Integer.valueOf(i1)); else albumcolumngriditemview.setPlusOneCount(null); if(cursor.isNull(2)) j1 = 0; else j1 = cursor.getInt(2); if(j1 > 0) albumcolumngriditemview.setCommentCount(Integer.valueOf(j1)); else albumcolumngriditemview.setCommentCount(null); if(!cursor.isNull(10)) flag = true; else flag = false; albumcolumngriditemview.setNotification(flag); if(mSelectedMediaRefs != null && mSelectedMediaRefs.contains(mediaref)) mGridView.select(cursorPosition); else mGridView.deselect(cursorPosition); } else { albumcolumngriditemview.setMediaRef(null); } if(mLandscape) k = 1; else k = 2; view.setLayoutParams(new ColumnGridView.LayoutParams(k, -3)); if(mViewUseListener != null && cursorPosition < getCount()) mHandler.post(new Runnable() { public final void run() { mViewUseListener.onViewUsed(cursorPosition); } }); } public final MediaRef getMediaRefForItem(int i) { Cursor cursor = getCursor(); MediaRef mediaref; if(cursor != null && cursor.moveToPosition(i)) mediaref = createMediaRef(cursor.getString(5), cursor.getLong(8), getMediaTypeForRow(cursor), cursor.getString(9)); else mediaref = null; return mediaref; } public final long getTimestampForItem(int i) { Cursor cursor = getCursor(); long l; if(cursor != null && cursor.moveToPosition(i) && !cursor.isNull(13)) l = cursor.getLong(13); else l = 0L; return l; } public final boolean hasStableIds() { return false; } public final boolean isAnyPhotoDisabled() { if(mHasDisabledPhotos != null) return mHasDisabledPhotos.booleanValue(); else { mHasDisabledPhotos = Boolean.valueOf(false); while(mCursor.moveToNext()) { int i = mCursor.getInt(14); if(mFilter.getState(i) == 1) { mHasDisabledPhotos = Boolean.valueOf(true); } } } return mHasDisabledPhotos.booleanValue(); } public final View newView(Context context, Cursor cursor, ViewGroup viewgroup) { return LayoutInflater.from(context).inflate(R.layout.album_column_grid_view_item, null); } public final void onResume() { super.onResume(); if(mGridView != null) { int i = 0; for(int j = mGridView.getChildCount(); i < j; i++) ((ImageResourceView)mGridView.getChildAt(i)).onResume(); mGridView.onResume(); } } public final void onStop() { super.onStop(); int i = 0; for(int j = mGridView.getChildCount(); i < j; i++) ((ImageResourceView)mGridView.getChildAt(i)).onStop(); } public final void setSelectedMediaRefs(HashSet hashset) { mSelectedMediaRefs = hashset; } public final void setStateFilter(StateFilter statefilter) { if(statefilter == null) mFilter = sDefaultFilter; else mFilter = statefilter; } public final Cursor swapCursor(Cursor cursor) { mHasDisabledPhotos = null; return super.swapCursor(cursor); } public static interface StateFilter { public abstract int getState(int i); } public static interface ViewUseListener { public abstract void onViewUsed(int i); } }