package org.wordpress.android.ui.themes; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.support.v7.widget.CardView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.PopupMenu; import android.widget.RelativeLayout; import android.widget.TextView; import com.android.volley.toolbox.NetworkImageView; import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.models.Theme; import org.wordpress.android.ui.prefs.AppPrefs; import org.wordpress.android.widgets.HeaderGridView; /** * Adapter for the {@link ThemeBrowserFragment}'s listview * */ public class ThemeBrowserAdapter extends CursorAdapter { private static final String THEME_IMAGE_PARAMETER = "?w="; private final LayoutInflater mInflater; private final ThemeBrowserFragment.ThemeBrowserFragmentCallback mCallback; private int mViewWidth; public ThemeBrowserAdapter(Context context, Cursor c, boolean autoRequery, ThemeBrowserFragment.ThemeBrowserFragmentCallback callback) { super(context, c, autoRequery); mInflater = LayoutInflater.from(context); mCallback = callback; mViewWidth = AppPrefs.getThemeImageSizeWidth(); } private static class ThemeViewHolder { private final CardView cardView; private final NetworkImageView imageView; private final TextView nameView; private final TextView activeView; private final TextView priceView; private final ImageButton imageButton; private final FrameLayout frameLayout; private final RelativeLayout detailsView; ThemeViewHolder(View view) { cardView = (CardView) view.findViewById(R.id.theme_grid_card); imageView = (NetworkImageView) view.findViewById(R.id.theme_grid_item_image); nameView = (TextView) view.findViewById(R.id.theme_grid_item_name); priceView = (TextView) view.findViewById(R.id.theme_grid_item_price); activeView = (TextView) view.findViewById(R.id.theme_grid_item_active); imageButton = (ImageButton) view.findViewById(R.id.theme_grid_item_image_button); frameLayout = (FrameLayout) view.findViewById(R.id.theme_grid_item_image_layout); detailsView = (RelativeLayout) view.findViewById(R.id.theme_grid_item_details); } } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = mInflater.inflate(R.layout.theme_grid_item, parent, false); configureThemeImageSize(parent); ThemeViewHolder themeViewHolder = new ThemeViewHolder(view); view.setTag(themeViewHolder); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { final ThemeViewHolder themeViewHolder = (ThemeViewHolder) view.getTag(); final String screenshotURL = cursor.getString(cursor.getColumnIndex(Theme.SCREENSHOT)); final String name = cursor.getString(cursor.getColumnIndex(Theme.NAME)); final String price = cursor.getString(cursor.getColumnIndex(Theme.PRICE)); final String themeId = cursor.getString(cursor.getColumnIndex(Theme.ID)); final boolean isCurrent = cursor.getInt(cursor.getColumnIndex(Theme.IS_CURRENT)) == 1; final boolean isPremium = !price.isEmpty(); themeViewHolder.nameView.setText(name); themeViewHolder.priceView.setText(price); configureImageView(themeViewHolder, screenshotURL, themeId, isCurrent); configureImageButton(context, themeViewHolder, themeId, isPremium, isCurrent); configureCardView(context, themeViewHolder, isCurrent); } private void configureCardView(Context context, ThemeViewHolder themeViewHolder, boolean isCurrent) { Resources resources = context.getResources(); if (isCurrent) { themeViewHolder.detailsView.setBackgroundColor(resources.getColor(R.color.blue_wordpress)); themeViewHolder.nameView.setTextColor(resources.getColor(R.color.white)); themeViewHolder.activeView.setVisibility(View.VISIBLE); themeViewHolder.cardView.setCardBackgroundColor(resources.getColor(R.color.blue_wordpress)); } else { themeViewHolder.detailsView.setBackgroundColor(resources.getColor( android.support.v7.cardview.R.color.cardview_light_background)); themeViewHolder.nameView.setTextColor(resources.getColor(R.color.black)); themeViewHolder.activeView.setVisibility(View.GONE); themeViewHolder.cardView.setCardBackgroundColor(resources.getColor( android.support.v7.cardview.R.color.cardview_light_background)); } } private void configureImageView(ThemeViewHolder themeViewHolder, String screenshotURL, final String themeId, final boolean isCurrent) { String requestURL = (String) themeViewHolder.imageView.getTag(); if (requestURL == null) { requestURL = screenshotURL; themeViewHolder.imageView.setDefaultImageResId(R.drawable.theme_loading); themeViewHolder.imageView.setTag(requestURL); } if (!requestURL.equals(screenshotURL)) { requestURL = screenshotURL; } themeViewHolder.imageView.setImageUrl(requestURL + THEME_IMAGE_PARAMETER + mViewWidth, WordPress.sImageLoader); themeViewHolder.frameLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isCurrent) { mCallback.onTryAndCustomizeSelected(themeId); } else { mCallback.onViewSelected(themeId); } } }); } private void configureImageButton(Context context, ThemeViewHolder themeViewHolder, final String themeId, final boolean isPremium, boolean isCurrent) { final PopupMenu popupMenu = new PopupMenu(context, themeViewHolder.imageButton); popupMenu.getMenuInflater().inflate(R.menu.theme_more, popupMenu.getMenu()); configureMenuForTheme(popupMenu.getMenu(), isCurrent); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { int i = item.getItemId(); if (i == R.id.menu_activate) { if (isPremium) { mCallback.onDetailsSelected(themeId); } else { mCallback.onActivateSelected(themeId); } } else if (i == R.id.menu_try_and_customize) { mCallback.onTryAndCustomizeSelected(themeId); } else if (i == R.id.menu_view) { mCallback.onViewSelected(themeId); } else if (i == R.id.menu_details) { mCallback.onDetailsSelected(themeId); } else { mCallback.onSupportSelected(themeId); } return true; } }); themeViewHolder.imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupMenu.show(); } }); } private void configureMenuForTheme(Menu menu, boolean isCurrent) { MenuItem activate = menu.findItem(R.id.menu_activate); MenuItem customize = menu.findItem(R.id.menu_try_and_customize); MenuItem view = menu.findItem(R.id.menu_view); if (activate != null) { activate.setVisible(!isCurrent); } if (customize != null) { if (isCurrent) { customize.setTitle(R.string.customize); } else { customize.setTitle(R.string.theme_try_and_customize); } } if (view != null) { view.setVisible(!isCurrent); } } private void configureThemeImageSize(ViewGroup parent) { HeaderGridView gridView = (HeaderGridView) parent.findViewById(R.id.theme_listview); int numColumns = gridView.getNumColumns(); int screenWidth = gridView.getWidth(); int imageWidth = screenWidth / numColumns; if (imageWidth > mViewWidth) { mViewWidth = imageWidth; AppPrefs.setThemeImageSizeWidth(mViewWidth); } } }