| Index: chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
|
| index f66d7efc3dbbe40b681e9dfac136db9323c9703d..8f9b88f753589723486daf224433fbeda53af95b 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
|
| @@ -6,25 +6,41 @@ package org.chromium.chrome.browser.download.ui;
|
|
|
| import android.app.Activity;
|
| import android.content.Context;
|
| +import android.content.res.Resources;
|
| +import android.graphics.drawable.Drawable;
|
| +import android.os.AsyncTask;
|
| +import android.os.Environment;
|
| +import android.os.StatFs;
|
| import android.support.v4.widget.DrawerLayout;
|
| import android.support.v7.app.ActionBarDrawerToggle;
|
| import android.support.v7.widget.Toolbar;
|
| import android.support.v7.widget.Toolbar.OnMenuItemClickListener;
|
| +import android.text.format.Formatter;
|
| import android.util.AttributeSet;
|
| import android.view.Gravity;
|
| +import android.view.LayoutInflater;
|
| import android.view.MenuItem;
|
| import android.view.View;
|
| +import android.view.ViewGroup;
|
| +import android.widget.AdapterView;
|
| +import android.widget.BaseAdapter;
|
| +import android.widget.ListView;
|
| +import android.widget.ProgressBar;
|
| +import android.widget.TextView;
|
|
|
| import org.chromium.base.ApiCompatibilityUtils;
|
| +import org.chromium.base.Log;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.widget.FadingShadow;
|
| import org.chromium.chrome.browser.widget.FadingShadowView;
|
| +import org.chromium.chrome.browser.widget.TintedDrawable;
|
| import org.chromium.ui.base.DeviceFormFactor;
|
|
|
| /**
|
| * Displays and manages the UI for the download manager.
|
| */
|
| public class DownloadManagerUi extends DrawerLayout implements OnMenuItemClickListener {
|
| + private static final String TAG = "download_ui";
|
|
|
| /** Responds to events occurring in the DownloadManagerUi. */
|
| public interface DownloadManagerUiDelegate {
|
| @@ -32,12 +48,152 @@ public class DownloadManagerUi extends DrawerLayout implements OnMenuItemClickLi
|
| void onCloseButtonClicked(DownloadManagerUi ui);
|
| }
|
|
|
| + /** Manages the display of space used by the downloads. */
|
| + private static final class SpaceDisplay {
|
| + private final AsyncTask<Void, Void, Long> mFileSystemBytesTask;
|
| +
|
| + private TextView mSpaceUsedTextView;
|
| + private TextView mSpaceTotalTextView;
|
| + private ProgressBar mSpaceBar;
|
| + private long mFileSystemBytes = Long.MAX_VALUE;
|
| +
|
| + SpaceDisplay(final ViewGroup parent) {
|
| + mSpaceUsedTextView = (TextView) parent.findViewById(R.id.space_used_display);
|
| + mSpaceTotalTextView = (TextView) parent.findViewById(R.id.space_total_display);
|
| + mSpaceBar = (ProgressBar) parent.findViewById(R.id.space_bar);
|
| +
|
| + mFileSystemBytesTask = new AsyncTask<Void, Void, Long>() {
|
| + @Override
|
| + protected Long doInBackground(Void... params) {
|
| + StatFs statFs = new StatFs(Environment.getExternalStoragePublicDirectory(
|
| + Environment.DIRECTORY_DOWNLOADS).getPath());
|
| + long totalBlocks = ApiCompatibilityUtils.getBlockCount(statFs);
|
| + long blockSize = ApiCompatibilityUtils.getBlockSize(statFs);
|
| + long fileSystemBytes = totalBlocks * blockSize;
|
| + return fileSystemBytes;
|
| + }
|
| + };
|
| + mFileSystemBytesTask.execute();
|
| + }
|
| +
|
| + private void update(long usedBytes) {
|
| + Context context = mSpaceUsedTextView.getContext();
|
| +
|
| + if (mFileSystemBytes == Long.MAX_VALUE) {
|
| + try {
|
| + mFileSystemBytes = mFileSystemBytesTask.get();
|
| + } catch (Exception e) {
|
| + Log.e(TAG, "Failed to get file system size.");
|
| + }
|
| +
|
| + // Display how big the storage is.
|
| + String fileSystemReadable = Formatter.formatFileSize(context, mFileSystemBytes);
|
| + mSpaceTotalTextView.setText(context.getString(
|
| + R.string.download_manager_ui_space_used, fileSystemReadable));
|
| + }
|
| +
|
| + // Indicate how much space has been used by downloads.
|
| + int percentage =
|
| + mFileSystemBytes == 0 ? 0 : (int) (100.0 * usedBytes / mFileSystemBytes);
|
| + mSpaceBar.setProgress(percentage);
|
| + mSpaceUsedTextView.setText(Formatter.formatFileSize(context, usedBytes));
|
| + }
|
| + }
|
| +
|
| + /** Allows selecting an item from a list displayed in the drawer. */
|
| + private static final class FilterAdapter
|
| + extends BaseAdapter implements AdapterView.OnItemClickListener {
|
| +
|
| + /** Icons and labels for each filter in the menu. */
|
| + private static final int[][] FILTER_LIST = new int[][] {
|
| + {R.drawable.ic_get_app_white, R.string.download_manager_ui_all_downloads},
|
| + {R.drawable.ic_drive_site_white, R.string.download_manager_ui_pages},
|
| + {R.drawable.ic_music_video_white, R.string.download_manager_ui_video},
|
| + {R.drawable.ic_music_note_white, R.string.download_manager_ui_audio},
|
| + {R.drawable.ic_image_white, R.string.download_manager_ui_images},
|
| + {R.drawable.ic_drive_file_white, R.string.download_manager_ui_documents},
|
| + {R.drawable.ic_folder_white, R.string.download_manager_ui_other}
|
| + };
|
| +
|
| + private final DrawerLayout mRootLayout;
|
| + private final int mSelectedBackgroundColor;
|
| + private int mSelectedIndex;
|
| +
|
| + public FilterAdapter(DrawerLayout parent) {
|
| + mRootLayout = parent;
|
| + mSelectedBackgroundColor = ApiCompatibilityUtils.getColor(
|
| + parent.getContext().getResources(), R.color.default_primary_color);
|
| + }
|
| +
|
| + @Override
|
| + public int getCount() {
|
| + return FILTER_LIST.length;
|
| + }
|
| +
|
| + @Override
|
| + public Object getItem(int position) {
|
| + return FILTER_LIST[position];
|
| + }
|
| +
|
| + @Override
|
| + public long getItemId(int position) {
|
| + return position;
|
| + }
|
| +
|
| + @Override
|
| + public View getView(int position, View convertView, ViewGroup parent) {
|
| + Context context = mRootLayout.getContext();
|
| + Resources resources = context.getResources();
|
| +
|
| + View view = convertView;
|
| + if (view == null) {
|
| + view = LayoutInflater.from(context).inflate(
|
| + R.layout.download_manager_ui_drawer_filter, null);
|
| + }
|
| +
|
| + int iconId = FILTER_LIST[position][0];
|
| + TextView labelView = ((TextView) view.findViewById(R.id.label));
|
| + labelView.setText(FILTER_LIST[position][1]);
|
| +
|
| + Drawable iconDrawable = null;
|
| + if (position == mSelectedIndex) {
|
| + // Highlight the selected item by changing the foreground and background colors.
|
| + view.setBackgroundColor(mSelectedBackgroundColor);
|
| + iconDrawable = TintedDrawable.constructTintedDrawable(
|
| + resources, iconId, R.color.light_active_color);
|
| + labelView.setTextColor(
|
| + ApiCompatibilityUtils.getColor(resources, R.color.light_active_color));
|
| + } else {
|
| + // Draw the item normally.
|
| + view.setBackground(null);
|
| + iconDrawable = TintedDrawable.constructTintedDrawable(
|
| + resources, iconId, R.color.descriptive_text_color);
|
| + labelView.setTextColor(
|
| + ApiCompatibilityUtils.getColor(resources, R.color.default_text_color));
|
| + }
|
| +
|
| + labelView.setCompoundDrawablesWithIntrinsicBounds(iconDrawable, null, null, null);
|
| + return view;
|
| + }
|
| +
|
| + @Override
|
| + public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
| + mSelectedIndex = position;
|
| + notifyDataSetChanged();
|
| + mRootLayout.closeDrawer(Gravity.START);
|
| + }
|
| + }
|
| +
|
| + private final FilterAdapter mFilterAdapter;
|
| private DownloadManagerUiDelegate mDelegate;
|
| private ActionBarDrawerToggle mActionBarDrawerToggle;
|
| private DownloadManagerToolbar mToolbar;
|
| + private SpaceDisplay mSpaceDisplay;
|
| + private ListView mFilterView;
|
|
|
| public DownloadManagerUi(Context context, AttributeSet attrs) {
|
| super(context, attrs);
|
| + mFilterAdapter = new FilterAdapter(this);
|
| }
|
|
|
| @Override
|
| @@ -46,6 +202,11 @@ public class DownloadManagerUi extends DrawerLayout implements OnMenuItemClickLi
|
|
|
| mToolbar = (DownloadManagerToolbar) findViewById(R.id.action_bar);
|
| mToolbar.setOnMenuItemClickListener(this);
|
| +
|
| + mSpaceDisplay = new SpaceDisplay(this);
|
| + mFilterView = (ListView) findViewById(R.id.section_list);
|
| + mFilterView.setAdapter(mFilterAdapter);
|
| + mFilterView.setOnItemClickListener(mFilterAdapter);
|
| }
|
|
|
| /**
|
| @@ -84,6 +245,8 @@ public class DownloadManagerUi extends DrawerLayout implements OnMenuItemClickLi
|
| R.color.bookmark_app_bar_shadow_color), FadingShadow.POSITION_TOP);
|
| }
|
|
|
| + mSpaceDisplay.update(0);
|
| +
|
| ((Toolbar) findViewById(R.id.action_bar)).setTitle(R.string.menu_downloads);
|
| }
|
|
|
|
|