| Index: chrome/android/java/src/org/chromium/chrome/browser/download/ui/OfflineGroupHeaderView.java
 | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/OfflineGroupHeaderView.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/OfflineGroupHeaderView.java
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..7862da6412fafb6b0af5b2b7cf1ee205301e4408
 | 
| --- /dev/null
 | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/OfflineGroupHeaderView.java
 | 
| @@ -0,0 +1,70 @@
 | 
| +// Copyright 2017 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.download.ui;
 | 
| +
 | 
| +import android.content.Context;
 | 
| +import android.text.format.Formatter;
 | 
| +import android.util.AttributeSet;
 | 
| +import android.view.View;
 | 
| +import android.widget.FrameLayout;
 | 
| +import android.widget.ImageView;
 | 
| +import android.widget.TextView;
 | 
| +
 | 
| +import org.chromium.chrome.R;
 | 
| +
 | 
| +/** A header that presents users the option to view or hide the suggested offline pages. */
 | 
| +public class OfflineGroupHeaderView extends FrameLayout {
 | 
| +    private TextView mPageCountHeader;
 | 
| +    private TextView mFileSizeView;
 | 
| +    private ImageView mImageView;
 | 
| +
 | 
| +    private DownloadItemGroup mGroup;
 | 
| +    private DownloadHistoryAdapter mAdapter;
 | 
| +
 | 
| +    public OfflineGroupHeaderView(Context context, AttributeSet attrs) {
 | 
| +        super(context, attrs);
 | 
| +        setOnClickListener(new View.OnClickListener() {
 | 
| +            @Override
 | 
| +            public void onClick(View v) {
 | 
| +                if (mGroup.isSuggestedOfflinePagesSectionExpanded()) {
 | 
| +                    mAdapter.collapseSuggestedPagesHeader(mGroup);
 | 
| +                    mImageView.setImageResource(R.drawable.ic_expanded);
 | 
| +                } else {
 | 
| +                    mAdapter.expandSuggestedPagesHeader(mGroup);
 | 
| +                    mImageView.setImageResource(R.drawable.ic_collapsed);
 | 
| +                }
 | 
| +            }
 | 
| +        });
 | 
| +    }
 | 
| +
 | 
| +    @Override
 | 
| +    protected void onFinishInflate() {
 | 
| +        super.onFinishInflate();
 | 
| +        mPageCountHeader = (TextView) findViewById(R.id.page_count_text);
 | 
| +        mFileSizeView = (TextView) findViewById(R.id.filesize_view);
 | 
| +        mImageView = (ImageView) findViewById(R.id.expand_icon);
 | 
| +    }
 | 
| +
 | 
| +    /**
 | 
| +     * Associates this view with the adapter and the corresponding group.
 | 
| +     * @param group The group associated with this header.
 | 
| +     * @param adapter The adapter associated with this header.
 | 
| +     */
 | 
| +    public void bindGroupAndAdapter(DownloadItemGroup group, DownloadHistoryAdapter adapter) {
 | 
| +        mGroup = group;
 | 
| +        mAdapter = adapter;
 | 
| +        updateTitleText(group.getSuggestedOfflinePageCount());
 | 
| +        mImageView.setImageResource(mGroup.isSuggestedOfflinePagesSectionExpanded()
 | 
| +                        ? R.drawable.ic_collapsed
 | 
| +                        : R.drawable.ic_expanded);
 | 
| +    }
 | 
| +
 | 
| +    private void updateTitleText(int pageCount) {
 | 
| +        mPageCountHeader.setText(getResources().getString(
 | 
| +                R.string.download_manager_offline_header_title, pageCount));
 | 
| +        mFileSizeView.setText(
 | 
| +                Formatter.formatFileSize(getContext(), mGroup.getSuggestedOfflinePagesFileSize()));
 | 
| +    }
 | 
| +}
 | 
| 
 |