| Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/interests/InterestsView.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/interests/InterestsView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/interests/InterestsView.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..3138ab1a3c03112aca562cf0f9c68abddb820ee6 | 
| --- /dev/null | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/interests/InterestsView.java | 
| @@ -0,0 +1,90 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.chrome.browser.ntp.interests; | 
| + | 
| +import android.content.Context; | 
| +import android.util.AttributeSet; | 
| +import android.util.LruCache; | 
| +import android.view.View; | 
| +import android.view.ViewGroup; | 
| +import android.widget.ArrayAdapter; | 
| +import android.widget.FrameLayout; | 
| +import android.widget.GridView; | 
| + | 
| +import org.chromium.chrome.R; | 
| +import org.chromium.chrome.browser.ntp.interests.InterestsItemView.DrawingData; | 
| +import org.chromium.chrome.browser.ntp.interests.InterestsItemView.ImageHolder; | 
| +import org.chromium.chrome.browser.ntp.interests.InterestsPage.InterestsClickListener; | 
| +import org.chromium.chrome.browser.ntp.interests.InterestsService.Interest; | 
| + | 
| +import java.util.List; | 
| + | 
| +/** | 
| + * Displays a user's Interests in a two column view. A user's Interests are a list of topics (eg. | 
| + * Movies, Artists, Sports Events) that Google Now Context data shows they are interested in. | 
| + */ | 
| +public class InterestsView extends FrameLayout { | 
| +    private InterestsClickListener mListener; | 
| +    private GridView mInterestsGrid; | 
| +    private final InterestsListAdapter mAdapter; | 
| + | 
| +    public InterestsView(Context context, AttributeSet attrs) { | 
| +        super(context, attrs); | 
| +        mAdapter = new InterestsListAdapter(context); | 
| +    } | 
| + | 
| +    /** | 
| +     * This must be called before {@link InterestsView setInterests}. | 
| +     * @param listener | 
| +     */ | 
| +    public void setListener(InterestsClickListener listener) { | 
| +        mListener = listener; | 
| +    } | 
| + | 
| +    /** | 
| +     * Sets the Interests to display. Must not be called before {@link InterestsView setListener}. | 
| +     * @param interests | 
| +     */ | 
| +    public void setInterests(List<Interest> interests) { | 
| +        assert mListener != null; | 
| +        mAdapter.addAll(interests); | 
| +    } | 
| + | 
| +    @Override | 
| +    protected void onFinishInflate() { | 
| +        super.onFinishInflate(); | 
| + | 
| +        mInterestsGrid = (GridView) findViewById(R.id.interests_list_view); | 
| +        mInterestsGrid.setAdapter(mAdapter); | 
| +    } | 
| + | 
| +    private class InterestsListAdapter extends ArrayAdapter<Interest> { | 
| +        private final LruCache<String, ImageHolder> mImageCache; | 
| +        private final DrawingData mDrawingData; | 
| + | 
| +        public InterestsListAdapter(Context context) { | 
| +            super(context, 0); | 
| +            mImageCache = new LruCache<>(30); | 
| +            mDrawingData = new InterestsItemView.DrawingData(getContext()); | 
| +        } | 
| + | 
| +        @Override | 
| +        public View getView(int position, View convertView, ViewGroup parent) { | 
| +            assert mListener != null; | 
| + | 
| +            Interest interest = getItem(position); | 
| + | 
| +            InterestsItemView view; | 
| +            if (convertView instanceof InterestsItemView) { | 
| +                view = (InterestsItemView) convertView; | 
| +                view.reset(interest); | 
| +            } else { | 
| +                view = new InterestsItemView(getContext(), interest, | 
| +                        mListener, mImageCache, mDrawingData); | 
| +            } | 
| +            return view; | 
| +        } | 
| +    } | 
| +} | 
|  |