| 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.imageLoader); |
| 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); |
| } |
| } |
| } |