Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java

Issue 2063983002: [Downloads] Fill in the drawer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@download_activity
Patch Set: Comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698