• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.mail.bitmap;
2 
3 import android.content.ContentResolver;
4 import android.content.Context;
5 import android.content.res.AssetFileDescriptor;
6 import android.database.Cursor;
7 import android.net.Uri;
8 import android.text.TextUtils;
9 
10 import com.android.bitmap.DecodeTask;
11 import com.android.mail.providers.Attachment;
12 import com.android.mail.providers.UIProvider;
13 
14 import java.io.IOException;
15 import java.io.InputStream;
16 
17 /**
18  * A request object for image attachment previews.
19  * <p>
20  * All requests are the same size to promote bitmap reuse.
21  */
22 public class ImageAttachmentRequest implements DecodeTask.Request {
23     private final Context mContext;
24     private final String mLookupUri;
25     private final int mRendition;
26     public final int mDestW;
27 
ImageAttachmentRequest(final Context context, final String lookupUri, final int rendition, final int destW)28     public ImageAttachmentRequest(final Context context, final String lookupUri,
29             final int rendition, final int destW) {
30         mContext = context;
31         mLookupUri = lookupUri;
32         mRendition = rendition;
33         mDestW = destW;
34     }
35 
36     @Override
equals(Object o)37     public boolean equals(Object o) {
38         if (o == null || !(o instanceof ImageAttachmentRequest)) {
39             return false;
40         }
41         final ImageAttachmentRequest other = (ImageAttachmentRequest) o;
42         return TextUtils.equals(mLookupUri, other.mLookupUri) && mRendition == other.mRendition
43                 && mDestW == other.mDestW;
44     }
45 
46     @Override
hashCode()47     public int hashCode() {
48         int hash = 17;
49         hash += 31 * hash + mLookupUri.hashCode();
50         hash += 31 * hash + mRendition;
51         hash += 31 * hash + mDestW;
52         return hash;
53     }
54 
55     @Override
toString()56     public String toString() {
57         final StringBuilder sb = new StringBuilder("[");
58         sb.append(super.toString());
59         sb.append(" uri=");
60         sb.append(mLookupUri);
61         sb.append(" rendition=");
62         sb.append(mRendition);
63         sb.append(" w=");
64         sb.append(mDestW);
65         sb.append("]");
66         return sb.toString();
67     }
68 
69     /**
70      * Returns true iff the other request is for the same attachment, and differs only in which
71      * rendition is being requested.
72      *
73      */
matches(ImageAttachmentRequest other)74     public boolean matches(ImageAttachmentRequest other) {
75         return other != null && TextUtils.equals(mLookupUri, other.mLookupUri)
76                 && mDestW == other.mDestW;
77     }
78 
79     @Override
createFd()80     public AssetFileDescriptor createFd() throws IOException {
81         AssetFileDescriptor result = null;
82         Cursor cursor = null;
83         final ContentResolver cr = mContext.getContentResolver();
84         try {
85             cursor = cr.query(Uri.parse(mLookupUri), UIProvider.ATTACHMENT_PROJECTION, null, null,
86                     null);
87             if (cursor != null && cursor.moveToFirst()) {
88                 final Attachment a = new Attachment(cursor);
89                 result = cr.openAssetFileDescriptor(a.getUriForRendition(mRendition), "r");
90             }
91         } finally {
92             if (cursor != null) {
93                 cursor.close();
94             }
95         }
96         return result;
97     }
98 
99     @Override
createInputStream()100     public InputStream createInputStream() throws IOException {
101         return null;
102     }
103 }
104