package com.aptoide.amethyst.adapter;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.aptoide.amethyst.Aptoide;
import com.aptoide.amethyst.R;
import com.aptoide.amethyst.analytics.Analytics;
import com.aptoide.amethyst.database.AptoideDatabase;
import com.aptoide.amethyst.models.EnumStoreTheme;
import com.aptoide.models.displayables.SearchApk;
import com.aptoide.amethyst.utils.AptoideUtils;
import com.aptoide.amethyst.utils.Logger;
import com.aptoide.dataprovider.webservices.models.Constants;
import com.aptoide.models.displayables.Displayable;
import com.aptoide.models.displayables.HeaderRow;
import com.aptoide.models.displayables.ProgressBarRow;
import com.aptoide.models.displayables.SearchMoreHeader;
import com.aptoide.models.displayables.SuggestedAppDisplayable;
import com.bumptech.glide.Glide;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import com.aptoide.amethyst.AppViewActivity;
import com.aptoide.amethyst.MoreSearchActivity;
import com.aptoide.amethyst.StoresActivity;
import com.aptoide.amethyst.ui.MoreVersionsActivity;
import com.aptoide.amethyst.viewholders.BaseViewHolder;
import com.aptoide.amethyst.viewholders.DummyBaseViewHolder;
import com.aptoide.amethyst.viewholders.ProgressBarRowViewHolder;
import com.aptoide.amethyst.viewholders.SearchAppViewHolder;
import com.aptoide.amethyst.viewholders.SuggestedAppViewHolder;
import com.aptoide.amethyst.viewholders.main.HeaderViewHolder;
/**
* Created by rmateus on 12/06/15.
*/
public class SearchAdapter extends RecyclerView.Adapter<BaseViewHolder> {
private final ArrayList<Displayable> list;
private String query;
private final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
public SearchAdapter(ArrayList<Displayable> list) {
this.list = list;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
if (viewType == R.layout.search_app_row) {
return new SearchAppViewHolder(view, viewType);
} else if (viewType == R.layout.layout_header) {
return new HeaderViewHolder(view, viewType, EnumStoreTheme.APTOIDE_STORE_THEME_DEFAULT);
} else if (viewType == R.layout.search_more_results) {
return new DummyBaseViewHolder(view, viewType);
} else if (viewType == R.layout.suggested_app_search) {
return new SuggestedAppViewHolder(view, viewType);
} else if (viewType == R.layout.row_progress_bar) {
return new ProgressBarRowViewHolder(view, viewType);
} else {
throw new IllegalStateException(("This adapter doesn't know how to show viewtype " + viewType));
}
}
@Override
public void onBindViewHolder(final BaseViewHolder viewHolder, int position) {
if (viewHolder.viewType == R.layout.layout_header) {
HeaderViewHolder headerViewHolder = (HeaderViewHolder) viewHolder;
HeaderRow row = (HeaderRow) list.get(position);
headerViewHolder.title.setText(row.getLabel());
if (!row.isHasMore()) {
headerViewHolder.more.setVisibility(View.GONE);
}
} else if (viewHolder.viewType == R.layout.search_app_row) {
final SearchAppViewHolder item = (SearchAppViewHolder) viewHolder;
final SearchApk appItem = (SearchApk) list.get(position);
item.overflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final PopupMenu popup = new PopupMenu(view.getContext(), view);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_search_item, popup.getMenu());
MenuItem menuItem = popup.getMenu().findItem(R.id.versions);
menuItem.setVisible(appItem.hasOtherVersions);
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
Intent intent = new Intent(item.itemView.getContext(), MoreVersionsActivity.class);
intent.putExtra(Constants.PACKAGENAME_KEY, appItem.packageName);
intent.putExtra(Constants.EVENT_LABEL, appItem.name);
item.itemView.getContext().startActivity(intent);
return true;
}
});
menuItem = popup.getMenu().findItem(R.id.go_to_store);
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
Intent intent = new Intent(item.itemView.getContext(), StoresActivity.class);
intent.putExtra(Constants.STORENAME_KEY, appItem.repo);
intent.putExtra(Constants.STOREAVATAR_KEY, appItem.icon);
intent.putExtra(Constants.THEME_KEY, appItem.repo_theme);
intent.putExtra(Constants.DOWNLOAD_FROM_KEY, "store");
boolean subscribed = new AptoideDatabase(Aptoide.getDb()).existsStore(appItem.repo);
intent.putExtra(Constants.STORE_SUBSCRIBED_KEY, subscribed);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
item.itemView.getContext().startActivity(intent);
return true;
}
});
popup.show();
}
});
item.name.setText(appItem.name);
String downloadNumber = AptoideUtils.StringUtils.withSuffix(appItem.downloads) + " " + item.bottomView.getContext().getString(R.string.downloads);
item.downloads.setText(downloadNumber);
if (appItem.stars.floatValue() <= 0) {
item.ratingBar.setVisibility(View.GONE);
} else {
item.ratingBar.setVisibility(View.VISIBLE);
item.ratingBar.setRating(appItem.stars.floatValue());
}
Date modified = null;
try {
modified = dateFormatter.parse(appItem.timestamp);
} catch (ParseException e) {
Logger.printException(e);
} finally {
if (modified != null) {
String timeSinceUpdate = AptoideUtils.DateTimeUtils.getInstance(item.itemView.getContext()).getTimeDiffAll(item.itemView.getContext(),
modified.getTime());
if (timeSinceUpdate != null && !timeSinceUpdate.equals("")) {
item.time.setText(timeSinceUpdate);
}
}
}
final EnumStoreTheme theme = EnumStoreTheme.get(appItem.repo_theme);
Drawable background = item.bottomView.getBackground();
if (background instanceof ShapeDrawable) {
((ShapeDrawable) background).getPaint().setColor(item.itemView.getContext().getResources().getColor(theme.getColor700tint()));
} else if (background instanceof GradientDrawable) {
((GradientDrawable) background).setColor(item.itemView.getContext().getResources().getColor(theme.getColor700tint()));
}
background = item.store.getBackground();
if (background instanceof ShapeDrawable) {
((ShapeDrawable) background).getPaint().setColor(item.itemView.getContext().getResources().getColor(theme.getColor700tint()));
} else if (background instanceof GradientDrawable) {
((GradientDrawable) background).setColor(item.itemView.getContext().getResources().getColor(theme.getColor700tint()));
}
item.store.setText(appItem.repo);
Glide.with(viewHolder.itemView.getContext()).load(appItem.iconHd != null ? appItem.iconHd : appItem.icon).into(item.icon);
if (appItem.malrank == 2) {
item.icTrusted.setVisibility(View.VISIBLE);
} else {
item.icTrusted.setVisibility(View.GONE);
}
item.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), AppViewActivity.class);
intent.putExtra(Constants.SEARCH_FROM_KEY, true);
intent.putExtra(Constants.MD5SUM_KEY, appItem.md5sum);
intent.putExtra(Constants.APPNAME_KEY, appItem.name);
intent.putExtra(Constants.PACKAGENAME_KEY, appItem.packageName);
intent.putExtra(Constants.STORENAME_KEY, appItem.repo);
Analytics.Search.searchPosition(appItem.position, appItem.fromSubscribedStore, appItem.repo);
v.getContext().startActivity(intent);
}
});
} else if (viewHolder.viewType == R.layout.search_more_results) {
viewHolder.itemView.findViewById(R.id.more).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(viewHolder.itemView.getContext(), MoreSearchActivity.class);
i.putExtra(MoreSearchActivity.QUERY_BUNDLE_KEY, query);
viewHolder.itemView.getContext().startActivity(i);
}
});
} else if (viewHolder.viewType == R.layout.suggested_app_search) {
viewHolder.populateView(list.get(position));
} else if (viewHolder.viewType == R.layout.row_progress_bar) {
viewHolder.populateView(list.get(position));
}
}
@Override
public int getItemViewType(int position) {
if (list.get(position) instanceof HeaderRow) {
return R.layout.layout_header;
} else if (list.get(position) instanceof SearchApk) {
return R.layout.search_app_row;
} else if (list.get(position) instanceof SearchMoreHeader) {
return R.layout.search_more_results;
} else if (list.get(position) instanceof SuggestedAppDisplayable) {
return R.layout.suggested_app_search;
} else if (list.get(position) instanceof ProgressBarRow) {
return R.layout.row_progress_bar;
} else {
throw new IllegalStateException("This adapter doesn't know how to show " + list.get(position).getClass().getName());
}
}
public void setQuery(String query) {
this.query = query;
}
@Override
public int getItemCount() {
return list.size();
}
}