diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserAdapter.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserAdapter.java | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserAdapter.java new file mode 100644 index 000000000..7b04d7c6f --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserAdapter.java @@ -0,0 +1,205 @@ +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); + } + } +} |