/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.database.MatrixCursor; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.galaxy.meetup.client.android.common.EsCompositeCursorAdapter; import com.galaxy.meetup.client.android.content.DbDataAction; import com.galaxy.meetup.client.android.content.EsAvatarData; import com.galaxy.meetup.client.android.content.EsNotificationData; import com.galaxy.meetup.client.android.ui.view.AvatarView; import com.galaxy.meetup.server.client.domain.DataAction; import com.galaxy.meetup.server.client.domain.DataActor; import com.galaxy.meetup.server.client.domain.DataItem; /** * * @author sihai * */ public class HostNavigationBarAdapter extends EsCompositeCursorAdapter { private static final String DESTINATIONS_PROJECTION[] = { "id", "icon", "text", "gaia_id" }; private static MatrixCursor sEmptyCursor; private boolean mCollapsed; private MatrixCursor mCollapsedCursor; private int mCollapsedMenuItemCount; private int mColorRead; private int mColorUnread; private List mDestinationRows; private MatrixCursor mDestinationsCursor; private LayoutInflater mInflater; private View mNotificationProgressIndicator; private View mNotificationRefreshButton; private int mUnreadNotificationCount; public HostNavigationBarAdapter(Context context) { super(context); mDestinationRows = new ArrayList(); mCollapsed = true; mInflater = LayoutInflater.from(context); addPartition(false, false); addPartition(true, true); addPartition(false, false); Resources resources = context.getResources(); mColorRead = resources.getColor(R.color.notifications_text_color_read); mColorUnread = resources.getColor(R.color.notifications_text_color_unread); } public final void removeAllDestinations() { mDestinationsCursor = new MatrixCursor(DESTINATIONS_PROJECTION); mDestinationRows.clear(); mCollapsedCursor = null; } public final void setCollapsed(boolean flag) { if(mCollapsed != flag) { mCollapsed = flag; showDestinations(); } } public final void setCollapsedMenuItemCount(int i) { if(mCollapsedMenuItemCount != i) { mCollapsedMenuItemCount = i; mCollapsedCursor = null; showDestinations(); } } public final void setNotifications(Cursor cursor) { changeCursor(1, cursor); boolean flag; MatrixCursor matrixcursor; if(cursor == null || cursor.getCount() == 0) flag = true; else flag = false; if(flag) { if(sEmptyCursor == null) { MatrixCursor matrixcursor1 = new MatrixCursor(new String[] { "empty" }); sEmptyCursor = matrixcursor1; matrixcursor1.addRow(new Object[] { "empty" }); } matrixcursor = sEmptyCursor; } else { matrixcursor = null; } changeCursor(2, matrixcursor); mUnreadNotificationCount = 0; if(cursor != null && cursor.moveToFirst()) do if(cursor.getInt(11) != 1) mUnreadNotificationCount = 1 + mUnreadNotificationCount; while(cursor.moveToNext()); } public final void showDestinations() { if(mCollapsed && mDestinationsCursor != null && mCollapsedMenuItemCount != 0 && mDestinationsCursor.getCount() > mCollapsedMenuItemCount) { if(mCollapsedCursor == null) { mCollapsedCursor = new MatrixCursor(DESTINATIONS_PROJECTION); for(int i = 0; i < -1 + mCollapsedMenuItemCount; i++) mCollapsedCursor.addRow((Object[])mDestinationRows.get(i)); String s = getContext().getString(R.string.expand_menu_label); MatrixCursor matrixcursor = mCollapsedCursor; Object aobj[] = new Object[4]; aobj[0] = Integer.valueOf(-2); aobj[1] = Integer.valueOf(R.drawable.ic_down_white); aobj[2] = s; aobj[3] = null; matrixcursor.addRow(aobj); } changeCursor(0, mCollapsedCursor); } else { changeCursor(0, mDestinationsCursor); } } public final void showProgressIndicator() { if(mNotificationProgressIndicator != null) mNotificationProgressIndicator.setVisibility(0); if(mNotificationRefreshButton != null) mNotificationRefreshButton.setVisibility(8); } private static void bindNotificationUserAvatar(Cursor cursor, AvatarView avatarview, ImageView imageview, boolean flag) { byte abyte0[] = cursor.getBlob(6); String s = null; String s1 = null; if(abyte0 != null) { List list = DbDataAction.deserializeDataActionList(abyte0); s = null; s1 = null; if(list != null) { boolean flag1 = list.isEmpty(); s = null; s1 = null; if(!flag1) { DataAction dataaction = (DataAction)list.get(0); s = null; s1 = null; if(dataaction != null) { List list1 = dataaction.item; s = null; s1 = null; if(list1 != null) { boolean flag2 = dataaction.item.isEmpty(); s = null; s1 = null; if(!flag2) { DataItem dataitem = (DataItem)dataaction.item.get(0); s = null; s1 = null; if(dataitem != null) { DataActor dataactor = dataitem.actor; s = null; s1 = null; if(dataactor != null) { DataActor dataactor1 = dataitem.actor; s1 = dataactor1.obfuscatedGaiaId; s = EsAvatarData.uncompressAvatarUrl(dataactor1.photoUrl); } } } } } } } } avatarview.setRounded(true); avatarview.setGaiaIdAndAvatarUrl(s1, s); imageview.setVisibility(8); avatarview.setVisibility(0); avatarview.setDimmed(flag); } public final void addDestination(int i, int j, int k) { addDestination(i, j, mContext.getResources().getText(k), null); } public final void addDestination(int i, int j, CharSequence charsequence, String s) { Object aobj[] = new Object[4]; aobj[0] = Integer.valueOf(i); aobj[1] = Integer.valueOf(j); aobj[2] = charsequence; aobj[3] = s; mDestinationRows.add(((Object) (aobj))); mDestinationsCursor.addRow(aobj); } protected final void bindHeaderView(View view) { TextView textview = (TextView)view.findViewById(R.id.text); View view1 = view.findViewById(R.id.separator); mNotificationRefreshButton = view.findViewById(R.id.refresh_button); mNotificationProgressIndicator = view.findViewById(R.id.progress_indicator); Resources resources = getContext().getResources(); int i; int j; if(mUnreadNotificationCount > 0) i = R.color.notifications_header_has_messages; else i = R.color.notifications_header_no_messages; j = resources.getColor(i); textview.setTextColor(j); view1.setBackgroundColor(j); } protected final void bindView(View view, int i, Cursor cursor, int j) { int k = 1; String gaiaId; switch(i) { case 0: int k1 = cursor.getInt(k); gaiaId = cursor.getString(3); ImageView imageview1 = (ImageView)view.findViewById(R.id.icon); AvatarView avatarview1 = (AvatarView)view.findViewById(R.id.avatar); if(gaiaId != null) { avatarview1.setGaiaId(gaiaId); avatarview1.setVisibility(0); imageview1.setVisibility(8); } else { imageview1.setImageResource(k1); imageview1.setVisibility(0); avatarview1.setVisibility(8); } ((TextView)view.findViewById(R.id.text)).setText(cursor.getString(2)); break; case 1: boolean flag; ImageView imageview; AvatarView avatarview; int i1; boolean flag1; TextView textview; if(cursor.getInt(11) == k) flag = true; else flag = false; imageview = (ImageView)view.findViewById(0x1020006); avatarview = (AvatarView)view.findViewById(R.id.avatar); imageview.setVisibility(0); if(!flag) flag1 = true; else flag1 = false; imageview.setEnabled(flag1); avatarview.setVisibility(8); if(cursor.getInt(12) != k) k = 0; int l = cursor.getInt(3); i1 = cursor.getInt(15); switch(l) { case 1: if(k != 0 || EsNotificationData.isEventNotificationType(i1)) imageview.setImageResource(R.drawable.ic_notification_event); else if(EsNotificationData.isCommentNotificationType(i1)) imageview.setImageResource(R.drawable.ic_notification_comment); else imageview.setImageResource(R.drawable.ic_notification_post); break; case 2: bindNotificationUserAvatar(cursor, avatarview, imageview, flag); break; case 3: imageview.setImageResource(R.drawable.ic_notification_photo); break; case 4: imageview.setImageResource(R.drawable.ic_notification_games); break; case 5: imageview.setImageResource(R.drawable.ic_notification_alert); break; case 6: break; case 7: break; case 8: imageview.setImageResource(R.drawable.ic_notification_post); break; case 9: break; case 10: imageview.setImageResource(R.drawable.ic_notification_event); break; case 11: if(i1 == 48) { bindNotificationUserAvatar(cursor, avatarview, imageview, flag); } else { avatarview.setRounded(false); avatarview.setGaiaIdAndAvatarUrl(cursor.getString(20), EsAvatarData.uncompressAvatarUrl(cursor.getString(22))); imageview.setVisibility(8); avatarview.setVisibility(0); avatarview.setDimmed(flag); } break; default: break; } textview = (TextView)view.findViewById(0x1020014); textview.setText(cursor.getString(4)); if(flag) textview.setTextColor(mColorRead); else textview.setTextColor(mColorUnread); view.setContentDescription(textview.getText()); break; default: break; } return; } public final int getDestinationId(int i) { if (getPartitionForPosition(i) != 0) { return -1; } Cursor cursor = (Cursor) getItem(i); if (cursor == null) { return -1; } return cursor.getInt(0); } protected final int getItemViewType(int i, int j) { return i; } public final int getItemViewTypeCount() { return 3; } public final int getUnreadNotificationCount() { return mUnreadNotificationCount; } public final void hideProgressIndicator() { if(mNotificationRefreshButton != null) mNotificationRefreshButton.setVisibility(0); if(mNotificationProgressIndicator != null) mNotificationProgressIndicator.setVisibility(8); } public final boolean isCollapsed() { return mCollapsed; } public final boolean isEnabled(int i) { boolean flag; if(super.isEnabled(i)) flag = true; else flag = isNotificationHeader(i); return flag; } protected final boolean isEnabledPartition(int i) { boolean flag = true; if(i != 0 && i != 1) flag = false; return flag; } public final boolean isNotificationHeader(int i) { boolean flag = true; if(getPartitionForPosition(i) != 1 || getOffsetInPartition(i) != -1) flag = false; return flag; } @Override protected final View newHeaderView(Context context, int partion, Cursor curosr, ViewGroup viewgroup) { return mInflater.inflate(R.layout.host_notification_header, viewgroup, false); } protected final View newView(Context context, int partition, Cursor cursor, int position, ViewGroup parent) { View view = null; switch(partition) { case 0: view = mInflater.inflate(R.layout.host_navigation_item, parent, false); break; case 1: view = mInflater.inflate(R.layout.notification_row_view, parent, false); break; case 2: view = mInflater.inflate(R.layout.no_notifications, parent, false); break; default: view = null; break; } return view; } }