| Index: chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageStorageSpaceHeader.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageStorageSpaceHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageStorageSpaceHeader.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..8a29383db292c23e6c8b2207f441bdbd47665dda | 
| --- /dev/null | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageStorageSpaceHeader.java | 
| @@ -0,0 +1,94 @@ | 
| +// 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.offline_pages; | 
| + | 
| +import android.app.Activity; | 
| +import android.content.Context; | 
| +import android.support.v7.widget.RecyclerView.ViewHolder; | 
| +import android.text.format.Formatter; | 
| +import android.view.LayoutInflater; | 
| +import android.view.View; | 
| +import android.view.ViewGroup; | 
| +import android.widget.TextView; | 
| + | 
| +import org.chromium.chrome.R; | 
| + | 
| +import java.util.List; | 
| + | 
| +/** | 
| + * Header shown in saved pages view to inform user of total used storage and offer freeing up | 
| + * space. | 
| + */ | 
| +public class OfflinePageStorageSpaceHeader { | 
| +    /** | 
| +     * Minimal total size of all pages, before a header will be shown to offer freeing up space. | 
| +     */ | 
| +    private static final long MINIMUM_TOTAL_SIZE_BYTES = 10 * (1 << 20); // 10MB | 
| +    /** | 
| +     * Minimal size of pages to clean up, before a header will be shown to offer freeing up space. | 
| +     */ | 
| +    private static final long MINIMUM_CEALNUP_SIZE_BYTES = 5 * (1 << 20); // 5MB | 
| + | 
| +    OfflinePageBridge mOfflinePageBridge; | 
| +    Context mContext; | 
| +    OfflinePageFreeUpSpaceCallback mCallback; | 
| + | 
| +    /** | 
| +     * @param offlinePageBridge An object to access offline page functionality. | 
| +     */ | 
| +    public OfflinePageStorageSpaceHeader(Context context, OfflinePageBridge offlinePageBridge, | 
| +            OfflinePageFreeUpSpaceCallback callback) { | 
| +        assert offlinePageBridge != null; | 
| +        mOfflinePageBridge = offlinePageBridge; | 
| +        mContext = context; | 
| +        mCallback = callback; | 
| +    } | 
| + | 
| +    /** @return Whether the header should be shown. */ | 
| +    public boolean shouldShow() { | 
| +        return getSizeOfAllPages() > MINIMUM_TOTAL_SIZE_BYTES | 
| +                && getSizeOfPagesToCleanUp() > MINIMUM_CEALNUP_SIZE_BYTES; | 
| +    } | 
| + | 
| +    /** @return A view holder with the contents of the header. */ | 
| +    public ViewHolder createHolder(ViewGroup parent) { | 
| +        // TODO(fgorski): Enable recalculation in case some pages were deleted. | 
| +        ViewGroup header = (ViewGroup) LayoutInflater.from(mContext).inflate( | 
| +                R.layout.eb_offline_pages_storage_space_header, parent, false); | 
| + | 
| +        ((TextView) header.findViewById(R.id.storage_header_message)) | 
| +                .setText(mContext.getString(R.string.offline_pages_storage_space_message, | 
| +                        Formatter.formatFileSize(mContext, getSizeOfAllPages()))); | 
| + | 
| +        header.findViewById(R.id.storage_header_button) | 
| +                .setOnClickListener(new View.OnClickListener() { | 
| +                    @Override | 
| +                    public void onClick(View view) { | 
| +                        OfflinePageFreeUpSpaceDialog dialog = | 
| +                                OfflinePageFreeUpSpaceDialog.newInstance( | 
| +                                        mOfflinePageBridge, mCallback); | 
| +                        dialog.show(((Activity) mContext).getFragmentManager(), null); | 
| +                    } | 
| +                }); | 
| + | 
| +        return new ViewHolder(header) {}; | 
| +    } | 
| + | 
| +    private long getSizeOfAllPages() { | 
| +        return getTotalSize(mOfflinePageBridge.getAllPages()); | 
| +    } | 
| + | 
| +    private long getSizeOfPagesToCleanUp() { | 
| +        return getTotalSize(mOfflinePageBridge.getPagesToCleanUp()); | 
| +    } | 
| + | 
| +    private long getTotalSize(List<OfflinePageItem> offlinePages) { | 
| +        long totalSize = 0; | 
| +        for (OfflinePageItem page : offlinePages) { | 
| +            totalSize += page.getFileSize(); | 
| +        } | 
| +        return totalSize; | 
| +    } | 
| +} | 
|  |