summaryrefslogtreecommitdiffstats
path: root/ui/src/com/android/providers/downloads/ui/DownloadItem.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/DownloadItem.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/DownloadItem.java')
-rw-r--r--ui/src/com/android/providers/downloads/ui/DownloadItem.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/ui/src/com/android/providers/downloads/ui/DownloadItem.java b/ui/src/com/android/providers/downloads/ui/DownloadItem.java
new file mode 100644
index 00000000..c462d596
--- /dev/null
+++ b/ui/src/com/android/providers/downloads/ui/DownloadItem.java
@@ -0,0 +1,116 @@
+/*
+ * 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.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.CheckBox;
+import android.widget.RelativeLayout;
+
+/**
+ * This class customizes RelativeLayout to directly handle clicks on the left part of the view and
+ * treat them at clicks on the checkbox. This makes rapid selection of many items easier. This class
+ * also keeps an ID associated with the currently displayed download and notifies a listener upon
+ * selection changes with that ID.
+ */
+public class DownloadItem extends RelativeLayout {
+ private static float CHECKMARK_AREA = -1;
+
+ private boolean mIsInDownEvent = false;
+ private CheckBox mCheckBox;
+ private long mDownloadId;
+ private DownloadSelectListener mListener;
+
+ static interface DownloadSelectListener {
+ public void onDownloadSelectionChanged(long downloadId, boolean isSelected);
+ public boolean isDownloadSelected(long id);
+ }
+
+ public DownloadItem(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ initialize();
+ }
+
+ public DownloadItem(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initialize();
+ }
+
+ public DownloadItem(Context context) {
+ super(context);
+ initialize();
+ }
+
+ private void initialize() {
+ if (CHECKMARK_AREA == -1) {
+ CHECKMARK_AREA = getResources().getDimensionPixelSize(R.dimen.checkmark_area);
+ }
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mCheckBox = (CheckBox) findViewById(R.id.download_checkbox);
+ }
+
+ public void setDownloadId(long downloadId) {
+ mDownloadId = downloadId;
+ }
+
+ public void setSelectListener(DownloadSelectListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ boolean handled = false;
+ switch(event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ if (event.getX() < CHECKMARK_AREA) {
+ mIsInDownEvent = true;
+ handled = true;
+ }
+ break;
+
+ case MotionEvent.ACTION_CANCEL:
+ mIsInDownEvent = false;
+ break;
+
+ case MotionEvent.ACTION_UP:
+ if (mIsInDownEvent && event.getX() < CHECKMARK_AREA) {
+ toggleCheckMark();
+ handled = true;
+ }
+ mIsInDownEvent = false;
+ break;
+ }
+
+ if (handled) {
+ postInvalidate();
+ } else {
+ handled = super.onTouchEvent(event);
+ }
+
+ return handled;
+ }
+
+ private void toggleCheckMark() {
+ mCheckBox.toggle();
+ mListener.onDownloadSelectionChanged(mDownloadId, mCheckBox.isChecked());
+ }
+}