2ab38ff5448cce42c8db9ff260cda17eac950676
[android/platform/packages/providers/DownloadProvider.git] / ui / src / com / android / providers / downloads / ui / DownloadItem.java
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.providers.downloads.ui;
18
19 import android.content.Context;
20 import android.util.AttributeSet;
21 import android.view.MotionEvent;
22 import android.widget.CheckBox;
23 import android.widget.Checkable;
24 import android.widget.RelativeLayout;
25
26 /**
27  * This class customizes RelativeLayout to directly handle clicks on the left part of the view and
28  * treat them at clicks on the checkbox. This makes rapid selection of many items easier. This class
29  * also keeps an ID associated with the currently displayed download and notifies a listener upon
30  * selection changes with that ID.
31  */
32 public class DownloadItem extends RelativeLayout implements Checkable {
33     private static float CHECKMARK_AREA = -1;
34
35     private boolean mIsInDownEvent = false;
36     private CheckBox mCheckBox;
37     private long mDownloadId;
38     private String mFileName;
39     private String mMimeType;
40     private DownloadList mDownloadList;
41     private int mPosition;
42
43     public DownloadItem(Context context, AttributeSet attrs, int defStyle) {
44         super(context, attrs, defStyle);
45         initialize();
46     }
47
48     public DownloadItem(Context context, AttributeSet attrs) {
49         super(context, attrs);
50         initialize();
51     }
52
53     public DownloadItem(Context context) {
54         super(context);
55         initialize();
56     }
57
58     private void initialize() {
59         if (CHECKMARK_AREA == -1) {
60             CHECKMARK_AREA = getResources().getDimensionPixelSize(R.dimen.checkmark_area);
61         }
62     }
63
64     @Override
65     protected void onFinishInflate() {
66         super.onFinishInflate();
67         mCheckBox = (CheckBox) findViewById(R.id.download_checkbox);
68     }
69
70     public void setData(long downloadId, int position, String fileName, String mimeType) {
71         mDownloadId = downloadId;
72         mPosition = position;
73         mFileName = fileName;
74         mMimeType = mimeType;
75     }
76
77     public void setDownloadListObj(DownloadList downloadList) {
78         mDownloadList = downloadList;
79     }
80
81     @Override
82     public boolean onTouchEvent(MotionEvent event) {
83         boolean handled = false;
84         switch(event.getAction()) {
85             case MotionEvent.ACTION_DOWN:
86                 if (event.getX() < CHECKMARK_AREA) {
87                     mIsInDownEvent = true;
88                     handled = true;
89                 }
90                 break;
91
92             case MotionEvent.ACTION_CANCEL:
93                 mIsInDownEvent = false;
94                 break;
95
96             case MotionEvent.ACTION_UP:
97                 if (mIsInDownEvent && event.getX() < CHECKMARK_AREA) {
98                     toggle();
99                     handled = true;
100                 }
101                 mIsInDownEvent = false;
102                 break;
103         }
104
105         if (handled) {
106             postInvalidate();
107         } else {
108             handled = super.onTouchEvent(event);
109         }
110
111         return handled;
112     }
113
114     @Override
115     public boolean isChecked() {
116         return mCheckBox.isChecked();
117     }
118
119     @Override
120     public void setChecked(boolean checked) {
121         mCheckBox.setChecked(checked);
122         mDownloadList.onDownloadSelectionChanged(mDownloadId, mCheckBox.isChecked(),
123                 mFileName, mMimeType);
124         mDownloadList.getCurrentView().setItemChecked(mPosition, mCheckBox.isChecked());
125     }
126
127     @Override
128     public void toggle() {
129         setChecked(!isChecked());
130     }
131
132     public CheckBox getCheckBox() {
133         return this.mCheckBox;
134     }
135
136     public String getFileName() {
137         return mFileName;
138     }
139
140     public String getMimeType() {
141         return mMimeType;
142     }
143 }