blob: 7b04d7c6f603ff56f2ad3b9d525543f614a4d904 [file] [log] [blame]
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);
}
}
}