aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserAdapter.java
diff options
context:
space:
mode:
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.java205
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);
+ }
+ }
+}