package me.ccrama.redditslide.Adapters; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.support.v4.content.ContextCompat; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import me.ccrama.redditslide.Activities.OpenContent; import me.ccrama.redditslide.Activities.SetupWidget; import me.ccrama.redditslide.Activities.Shortcut; import me.ccrama.redditslide.R; import me.ccrama.redditslide.Visuals.Palette; import me.ccrama.redditslide.Widget.SubredditWidgetProvider; import me.ccrama.redditslide.util.ImageUtil; import me.ccrama.redditslide.util.LogUtil; /** * Created by ccrama on 8/17/2015. */ public class SubChooseAdapter extends ArrayAdapter<String> { private final List<String> objects; private Filter filter; public ArrayList<String> baseItems; public ArrayList<String> fitems; public boolean openInSubView = true; public SubChooseAdapter(Context context, ArrayList<String> objects, ArrayList<String> allSubreddits) { super(context, 0, objects); this.objects = new ArrayList<>(allSubreddits); filter = new SubFilter(); fitems = new ArrayList<>(objects); baseItems = new ArrayList<>(objects); } @Override public boolean isEnabled(int position) { return false; } @Override public boolean areAllItemsEnabled() { return false; } @Override public Filter getFilter() { if (filter == null) { filter = new SubFilter(); } return filter; } private static class ViewHolderItem { private TextView t; ViewHolderItem(TextView t){ this.t = t; } } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolderItem viewHolderItem; if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.subforsublist, parent, false); viewHolderItem = new ViewHolderItem((TextView) convertView.findViewById(R.id.name)); convertView.setTag(viewHolderItem); } else { viewHolderItem = (ViewHolderItem) convertView.getTag(); } final TextView t = viewHolderItem.t; t.setText(fitems.get(position)); final String subreddit = fitems.get(position); convertView.findViewById(R.id.color).setBackgroundResource(R.drawable.circle); convertView.findViewById(R.id.color).getBackground().setColorFilter(Palette.getColor(subreddit), PorterDuff.Mode.MULTIPLY); if(getContext() instanceof SetupWidget){ convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((SetupWidget)getContext()).name = subreddit; SubredditWidgetProvider.lastDone = subreddit; ((SetupWidget)getContext()).startWidget(); } }); } else if(getContext()instanceof Shortcut){ convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Bitmap src; final Bitmap bm2; Intent shortcutIntent = new Intent(getContext(), OpenContent.class); if (subreddit.toLowerCase().equals("androidcirclejerk")) { bm2 = Shortcut.drawableToBitmap(ContextCompat.getDrawable(getContext(), R.drawable.matiasduarte)); Log.v(LogUtil.getTag(), "NULL IS " + (bm2 == null)); } else { src = Shortcut.drawableToBitmap(ContextCompat.getDrawable(getContext(), R.drawable.blackandwhite)); final int overlayColor = Palette.getColor(subreddit); final Paint paint = new Paint(); Canvas c; final Bitmap bm1 = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888); c = new Canvas(bm1); paint.setColorFilter(new PorterDuffColorFilter(overlayColor, PorterDuff.Mode.OVERLAY)); c.drawBitmap(src, 0, 0, paint); bm2 = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888); c = new Canvas(bm2); paint.setColorFilter(new PorterDuffColorFilter(overlayColor, PorterDuff.Mode.SRC_ATOP)); c.drawBitmap(src, 0, 0, paint); //paint.setColorFilter(null); //paint.setXfermode(new AvoidXfermode(overlayColor, 0, AvoidXfermode.Mode.TARGET)); //c.drawBitmap(bm1, 0, 0, paint); ImageUtil.drawWithTargetColor(bm2, bm1, overlayColor, 0); } final float scale = ((Shortcut)getContext()).getResources().getDisplayMetrics().density; int p = (int) (50 * scale + 0.5f); shortcutIntent.putExtra(OpenContent.EXTRA_URL, "reddit.com/r/" + subreddit); Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "/r/" + subreddit); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, Bitmap.createScaledBitmap(bm2, p, p, false)); ((Shortcut)getContext()).setResult(Activity.RESULT_OK, intent); ((Shortcut)getContext()).finish(); } }); } return convertView; } @Override public int getCount() { return fitems.size(); } private class SubFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); String prefix = constraint.toString().toLowerCase(); if (prefix == null || prefix.length() == 0) { ArrayList<String> list = new ArrayList<>(baseItems); results.values = list; results.count = list.size(); } else { openInSubView = true; final ArrayList<String> list = new ArrayList<>(objects); final ArrayList<String> nlist = new ArrayList<>(); for (String sub : list) { if (sub.contains(prefix)) nlist.add(sub); if (sub.equals(prefix)) openInSubView = false; } if (openInSubView) { nlist.add(prefix); } results.values = nlist; results.count = nlist.size(); } return results; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { fitems = (ArrayList<String>) results.values; clear(); if (fitems != null) { addAll(fitems); notifyDataSetChanged(); } } } }