package com.duckduckgo.mobile.android.adapters; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Rect; import android.support.v7.view.menu.MenuBuilder; import android.view.LayoutInflater; import android.view.Menu; import android.view.TouchDelegate; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.duckduckgo.mobile.android.DDGApplication; import com.duckduckgo.mobile.android.R; import com.duckduckgo.mobile.android.bus.BusProvider; import com.duckduckgo.mobile.android.download.AsyncImageView; import com.duckduckgo.mobile.android.events.feedEvents.MainFeedItemSelectedEvent; import com.duckduckgo.mobile.android.objects.FeedObject; import com.duckduckgo.mobile.android.util.DDGConstants; import com.duckduckgo.mobile.android.util.DDGControlVar; import com.duckduckgo.mobile.android.util.DDGUtils; import com.duckduckgo.mobile.android.views.DDGOverflowMenu; import com.squareup.picasso.Picasso; public class FavoriteFeedCursorAdapter extends CursorAdapter { private DDGOverflowMenu feedMenu = null; private Menu menu = null; public FavoriteFeedCursorAdapter(Activity activity, Context context, Cursor c) { super(context, c); menu = new MenuBuilder(context); activity.getMenuInflater().inflate(R.menu.feed, menu); menu.findItem(R.id.action_add_favorite).setVisible(false); feedMenu = new DDGOverflowMenu(context); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { // when the view will be created for first time, // we need to tell the adapters, how each item will look LayoutInflater inflater = LayoutInflater.from(parent.getContext()); View retView = inflater.inflate(R.layout.item_main_feed, parent, false); return retView; } @Override public void bindView(View view, Context context, final Cursor cursor) { // here we are setting our data // that means, take the data from the cursor and put it in views final String feedId = cursor.getString(cursor.getColumnIndex("_id")); final String title = cursor.getString(cursor.getColumnIndex("title")); final String feedType = cursor.getString(cursor.getColumnIndex("type")); final String imageUrl = cursor.getString(cursor.getColumnIndex("imageurl")); final String feedContent = cursor.getString(cursor.getColumnIndex("feed")); final String category = cursor.getString(cursor.getColumnIndex("category")); final TextView textViewTitle = (TextView) view.findViewById(R.id.feedTitleTextView); final TextView textViewCategory = (TextView) view.findViewById(R.id.feedCategoryTextView); final FrameLayout frameMenuContainer = (FrameLayout) view.findViewById(R.id.feedMenuContainer); final ImageView imageViewMenu = (ImageView) view.findViewById(R.id.feedMenuImage); final AsyncImageView imageViewBackground = (AsyncImageView) view.findViewById(R.id.feedItemBackground); final AsyncImageView imageViewFeedIcon = (AsyncImageView) view.findViewById(R.id.feedItemSourceIcon); URL feedUrl = null; //Download the background image if (imageUrl != null && !imageUrl.equals("null")) { Picasso.with(context) .load(imageUrl) .resize(DDGUtils.displayStats.feedItemWidth, DDGUtils.displayStats.feedItemHeight) .centerCrop() .placeholder(android.R.color.transparent) .into(imageViewBackground); } imageViewFeedIcon.setType(feedType); // stored source id in imageview final View iconParent = (View) imageViewBackground.getParent();//view.findViewById(R.id.feedWrapper); iconParent.post(new Runnable() { public void run() { // Post in the parent's message queue to make sure the parent // lays out its children before we call getHitRect() Rect delegateArea = new Rect(); AsyncImageView delegate = imageViewFeedIcon; delegate.getHitRect(delegateArea); delegateArea.top = 0; delegateArea.bottom = iconParent.getBottom(); delegateArea.left = 0; // right side limit also considers the space that is available from TextView, without text displayed // in TextView padding area on the left delegateArea.right = textViewTitle.getLeft() + textViewTitle.getPaddingLeft(); TouchDelegate expandedArea = new TouchDelegate(delegateArea, delegate); // give the delegate to an ancestor of the view we're delegating the area to if (View.class.isInstance(delegate.getParent())) { ((View) delegate.getParent()) .setTouchDelegate(expandedArea); } }; }); //Set the Title textViewTitle.setText(title); //Set the Category textViewCategory.setText(category.toUpperCase()); if(DDGControlVar.readArticles.contains(feedId)){ textViewTitle.setTextColor(Color.GRAY); } if (feedContent != null && !feedContent.equals("null")) { try { feedUrl = new URL(feedContent); } catch (MalformedURLException e) { e.printStackTrace(); } if (feedUrl != null) { String host = feedUrl.getHost(); if (host.indexOf(".") != host.lastIndexOf(".")) { //Cut off the beginning, because we don't want/need it host = host.substring(host.indexOf(".")+1); } Bitmap bitmap = DDGApplication.getImageCache().getBitmapFromCache("DUCKDUCKICO--" + feedType, false); if(bitmap != null){ imageViewFeedIcon.setBitmap(bitmap); } else { Picasso.with(context) .load(DDGConstants.ICON_LOOKUP_URL + host + ".ico") .placeholder(android.R.color.transparent) .into(imageViewFeedIcon); } } } final String url; if(feedUrl==null) { url = null; } else { url = feedUrl.toString(); } frameMenuContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(feedMenu.isShowing()) { return; } else { feedMenu.setFeed(DDGApplication.getDB().selectFeedById(feedId)); feedMenu.setMenu(menu); feedMenu.showFeedMenu(imageViewMenu); } } }); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { BusProvider.getInstance().post(new MainFeedItemSelectedEvent(new FeedObject((SQLiteCursor)cursor))); } }); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if(!feedMenu.isShowing()) { feedMenu.setFeed(new FeedObject((SQLiteCursor)cursor)); feedMenu.setMenu(menu); feedMenu.showFeedMenu(imageViewMenu); return true; } return false; } }); } }