Attachment.java revision f944e9655562e321aff52fe5f437e1d2fa2950a9
17b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira/**
27b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * Copyright (c) 2011, Google Inc.
37b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira *
47b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
57b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * you may not use this file except in compliance with the License.
67b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * You may obtain a copy of the License at
77b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira *
87b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira *     http://www.apache.org/licenses/LICENSE-2.0
97b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira *
107b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * Unless required by applicable law or agreed to in writing, software
117b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
127b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * See the License for the specific language governing permissions and
147b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira * limitations under the License.
157b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira */
1630e2c24b056542f3b1b438aeb798305d1226d0c8Andy Huangpackage com.android.mail.providers;
177b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
187aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereiraimport android.os.Parcel;
197aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereiraimport android.os.Parcelable;
20f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereiraimport android.text.TextUtils;
21f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
22f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereiraimport com.google.common.collect.Lists;
237b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
247aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereirapublic class Attachment implements Parcelable {
25f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public static final int SERVER_ATTACHMENT = 0;
26f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    /** Extras are "<path>". */
27f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public static final int  LOCAL_FILE = 1;
28f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
297aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
307aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * Attachment name.
317aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
327aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public String name;
33f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
34f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public int origin;
35f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
367aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
377aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * Attachment origin info.
387aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * TODO: do we want this? Or location?
397aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
407aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public String originExtras;
417aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
427aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * Mime type of the file.
437aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
447aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public String mimeType;
457aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
467aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * Content uri location of the attachment.
477aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
487aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public String contentUri;
497aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
507aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * Part id of the attachment.
517aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
527aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public String partId;
537aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
547aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * isSynced is true if the attachment is available locally on the device.
557aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
567aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public boolean isSynced;
577aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    /**
587aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     * Attachment size in kb.
597aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira     */
607aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public long size;
617b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
627aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public Attachment(Parcel in) {
637aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        name = in.readString();
647aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        originExtras = in.readString();
657aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        mimeType = in.readString();
667aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        contentUri = in.readString();
677aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        partId = in.readString();
687a07fb4955e34250225287212b07d1b6f12bf671Mindy Pereira        isSynced = in.readInt() == 1;
697aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        size = in.readLong();
70f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        origin = in.readInt();
717aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    }
727b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
737aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public Attachment() {
747aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    }
757b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
76f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public Attachment(String attachmentString) {
77f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        String[] attachmentValues = attachmentString.split("\\|");
78f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        if (attachmentValues != null) {
79f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            partId = attachmentValues[0];
80f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            name = attachmentValues[1];
81f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            mimeType = attachmentValues[2];
82f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            try {
83f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                size = Long.parseLong(attachmentValues[3]);
84f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            } catch (NumberFormatException e) {
85f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                size = 0;
86f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            }
87f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            mimeType = attachmentValues[4];
88f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            origin = Integer.parseInt(attachmentValues[5]);
89f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            contentUri = attachmentValues[6];
90f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            originExtras = attachmentValues[7];
91f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        }
92f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    }
93f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
947aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    @Override
957aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public int describeContents() {
967aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        return 0;
977aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    }
987b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
997aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    @Override
1007aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public void writeToParcel(Parcel dest, int flags) {
1017aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeString(name);
1027aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeString(originExtras);
1037aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeString(mimeType);
1047aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeString(contentUri);
1057aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeString(partId);
1067aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeInt(isSynced? 1 : 0);
1077aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        dest.writeLong(size);
108f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        dest.writeInt(origin);
1097aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    }
1107b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
1117aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    public static final Creator<Attachment> CREATOR = new Creator<Attachment>() {
1127aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        @Override
1137aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        public Attachment createFromParcel(Parcel source) {
1147aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira            return new Attachment(source);
1157aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        }
1167b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira
1177aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        @Override
1187aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        public Attachment[] newArray(int size) {
1197aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira            return new Attachment[size];
1207aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira        }
1217aee8f75f07eb39ecacdf0630d2199211aea5718Mindy Pereira    };
122f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
123f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
124f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public String toJoinedString() {
125f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        return TextUtils.join("|", Lists.newArrayList(partId == null ? "" : partId,
126f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                name == null ? "" : name.replaceAll("[|\n]", ""), mimeType, size, mimeType,
127f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                origin + "", contentUri, TextUtils.isEmpty(originExtras) ? contentUri
128f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                        : originExtras, ""));
129f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    }
130f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
131f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public boolean isImage() {
132f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        return mimeType.startsWith("image");
133f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    }
1347b56a61174eeb202eea468b7f68b79729737ded2Mindy Pereira}
135