summaryrefslogtreecommitdiffstats
path: root/ui/src/com/android/providers/downloads/ui/DownloadAdapter.java
diff options
context:
space:
mode:
authorSteve Howard <showard@google.com>2010-09-01 18:21:32 -0700
committerSteve Howard <showard@google.com>2010-09-08 16:18:59 -0700
commit217149efdc4a559c38442da179f548e125c0afc5 (patch)
treea7bc0486913bf0bc735d91ac073e8e32ea2c02db /ui/src/com/android/providers/downloads/ui/DownloadAdapter.java
parent6951c6304f5acad616652c0efc3f59ec4ec2a7e5 (diff)
downloadandroid_packages_providers_DownloadProvider-217149efdc4a559c38442da179f548e125c0afc5.tar.gz
android_packages_providers_DownloadProvider-217149efdc4a559c38442da179f548e125c0afc5.tar.bz2
android_packages_providers_DownloadProvider-217149efdc4a559c38442da179f548e125c0afc5.zip
First pass at new system UI for download manager.
This is the initial checkin for a new system UI for the download manager. This UI shows all entries present in the Download Manager database, sorted by either date or size. It allows the user to monitor status, open files, and delete/cancel entries. The code was initially copied from the "Downloads" page of packages/apps/Browser, since the design is based on that UI. Much of the code is changed, although DateSortedExpandableListAdapter is nearly identical. The code is not quite finished, but this is very much a working first pass. Change-Id: I7fe102e9f2998e57d893cc3c0f5f6da1cf2db549
Diffstat (limited to 'ui/src/com/android/providers/downloads/ui/DownloadAdapter.java')
-rw-r--r--ui/src/com/android/providers/downloads/ui/DownloadAdapter.java185
1 files changed, 185 insertions, 0 deletions
diff --git a/ui/src/com/android/providers/downloads/ui/DownloadAdapter.java b/ui/src/com/android/providers/downloads/ui/DownloadAdapter.java
new file mode 100644
index 00000000..a79122a4
--- /dev/null
+++ b/ui/src/com/android/providers/downloads/ui/DownloadAdapter.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.providers.downloads.ui;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.drm.mobile1.DrmRawContent;
+import android.graphics.drawable.Drawable;
+import android.net.DownloadManager;
+import android.net.Uri;
+import android.text.format.Formatter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+import android.widget.CursorAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.providers.downloads.ui.DownloadItem.DownloadSelectListener;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * List adapter for Cursors returned by {@link DownloadManager}.
+ */
+public class DownloadAdapter extends CursorAdapter {
+ private Context mContext;
+ private Cursor mCursor;
+ private DownloadSelectListener mDownloadSelectionListener;
+ private Resources mResources;
+ private DateFormat mDateFormat;
+
+ private int mTitleColumnId;
+ private int mDescriptionColumnId;
+ private int mStatusColumnId;
+ private int mTotalBytesColumnId;
+ private int mMediaTypeColumnId;
+ private int mDateColumnId;
+ private int mIdColumnId;
+
+ public DownloadAdapter(Context context, Cursor cursor,
+ DownloadSelectListener selectionListener) {
+ super(context, cursor);
+ mContext = context;
+ mCursor = cursor;
+ mResources = mContext.getResources();
+ mDownloadSelectionListener = selectionListener;
+ mDateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
+
+ mIdColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID);
+ mTitleColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_TITLE);
+ mDescriptionColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_DESCRIPTION);
+ mStatusColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS);
+ mTotalBytesColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
+ mMediaTypeColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_MEDIA_TYPE);
+ mDateColumnId =
+ cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP);
+ }
+
+ public View newView() {
+ DownloadItem view = (DownloadItem) LayoutInflater.from(mContext)
+ .inflate(R.layout.download_list_item, null);
+ view.setSelectListener(mDownloadSelectionListener);
+ return view;
+ }
+
+ public void bindView(View convertView) {
+ if (!(convertView instanceof DownloadItem)) {
+ return;
+ }
+
+ long downloadId = mCursor.getLong(mIdColumnId);
+ ((DownloadItem) convertView).setDownloadId(downloadId);
+
+ // Retrieve the icon for this download
+ retrieveAndSetIcon(convertView);
+
+ // TODO: default text for null title?
+ setTextForView(convertView, R.id.download_title, mCursor.getString(mTitleColumnId));
+ setTextForView(convertView, R.id.domain, mCursor.getString(mDescriptionColumnId));
+ setTextForView(convertView, R.id.size_text, getSizeText());
+ setTextForView(convertView, R.id.status_text, mResources.getString(getStatusStringId()));
+ setTextForView(convertView, R.id.last_modified_date, getDateString());
+
+ CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.download_checkbox);
+ checkBox.setChecked(mDownloadSelectionListener.isDownloadSelected(downloadId));
+ }
+
+ private String getDateString() {
+ Date date = new Date(mCursor.getLong(mDateColumnId));
+ return mDateFormat.format(date);
+ }
+
+ private String getSizeText() {
+ long totalBytes = mCursor.getLong(mTotalBytesColumnId);
+ String sizeText = "";
+ if (totalBytes >= 0) {
+ sizeText = Formatter.formatFileSize(mContext, totalBytes);
+ }
+ return sizeText;
+ }
+
+ private int getStatusStringId() {
+ switch (mCursor.getInt(mStatusColumnId)) {
+ case DownloadManager.STATUS_FAILED:
+ return R.string.download_error;
+
+ case DownloadManager.STATUS_SUCCESSFUL:
+ return R.string.download_success;
+
+ case DownloadManager.STATUS_PENDING:
+ return R.string.download_pending;
+
+ case DownloadManager.STATUS_RUNNING:
+ case DownloadManager.STATUS_PAUSED:
+ return R.string.download_running;
+ }
+ throw new IllegalStateException("Unknown status: " + mCursor.getInt(mStatusColumnId));
+ }
+
+ private void retrieveAndSetIcon(View convertView) {
+ String mediaType = mCursor.getString(mMediaTypeColumnId);
+ ImageView iconView = (ImageView) convertView.findViewById(R.id.download_icon);
+ iconView.setVisibility(View.INVISIBLE);
+
+ if (mediaType == null) {
+ return;
+ }
+
+ if (DrmRawContent.DRM_MIMETYPE_MESSAGE_STRING.equalsIgnoreCase(mediaType)) {
+ iconView.setImageResource(R.drawable.ic_launcher_drm_file);
+ } else {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setDataAndType(Uri.fromParts("file", "", null), mediaType);
+ PackageManager pm = mContext.getPackageManager();
+ List<ResolveInfo> list = pm.queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ if (list.size() == 0) {
+ return;
+ }
+ Drawable icon = list.get(0).activityInfo.loadIcon(pm);
+ iconView.setImageDrawable(icon);
+ }
+
+ iconView.setVisibility(View.VISIBLE);
+ }
+
+ private void setTextForView(View parent, int textViewId, String text) {
+ TextView view = (TextView) parent.findViewById(textViewId);
+ view.setText(text);
+ }
+
+ // CursorAdapter overrides
+
+ @Override
+ public View newView(Context context, Cursor cursor, ViewGroup parent) {
+ return newView();
+ }
+
+ @Override
+ public void bindView(View view, Context context, Cursor cursor) {
+ bindView(view);
+ }
+}