1ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa/*
2ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * Copyright (C) 2010 The Android Open Source Project
3ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa *
4ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
5ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * you may not use this file except in compliance with the License.
6ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * You may obtain a copy of the License at
7ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa *
8ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
9ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa *
10ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
11ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
12ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * See the License for the specific language governing permissions and
14ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * limitations under the License.
15ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa */
161b918e58f4a3ae8d32af83f6f69bbf2de57a94f9Daisuke Miyakawapackage com.android.contacts.vcard;
17ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa
18ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawaimport android.accounts.Account;
19ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawaimport android.net.Uri;
20ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa
21ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawaimport com.android.vcard.VCardSourceDetector;
22ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa
23ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa/**
24d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa * Class representing one request for importing vCard (given as a Uri).
25ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa *
26d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa * Mainly used when {@link ImportVCardActivity} requests {@link VCardService}
27ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * to import some specific Uri.
28ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa *
29ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * Note: This object's accepting only One Uri does NOT mean that
30ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * there's only one vCard entry inside the instance, as one Uri often has multiple
31ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa * vCard entries inside it.
32ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa */
33ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawapublic class ImportRequest {
34ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /**
35ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * Can be null (typically when there's no Account available in the system).
36ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     */
37ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public final Account account;
38e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton
39ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa    /**
40ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa     * Uri to be imported. May have different content than originally given from users, so
41ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa     * when displaying user-friendly information (e.g. "importing xxx.vcf"), use
42e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton     * {@link #displayName} instead.
43e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton     *
44e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton     * If this is null {@link #data} contains the byte stream of the vcard.
45ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa     */
46ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public final Uri uri;
47ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa
48ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa    /**
49e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton     * Holds the byte stream of the vcard, if {@link #uri} is null.
50ab59660a17e896593f2a07c2e1191c2c23e3e353Daisuke Miyakawa     */
51e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton    public final byte[] data;
52e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton
53e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton    /**
54e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton     * String to be displayed to the user to indicate the source of the VCARD.
55e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton     */
56e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton    public final String displayName;
57e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton
58e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton    /**
59ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * Can be {@link VCardSourceDetector#PARSE_TYPE_UNKNOWN}.
60ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     */
61ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public final int estimatedVCardType;
62e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton
63ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /**
64ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * Can be null, meaning no preferable charset is available.
65ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     */
66ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public final String estimatedCharset;
67e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton
68ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /**
69ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * Assumes that one Uri contains only one version, while there's a (tiny) possibility
70ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * we may have two types in one vCard.
71ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     *
72ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * e.g.
73ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * BEGIN:VCARD
74ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * VERSION:2.1
75ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * ...
76ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * END:VCARD
77ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * BEGIN:VCARD
78ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * VERSION:3.0
79ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * ...
80ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * END:VCARD
81ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     *
82ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * We've never seen this kind of a file, but we may have to cope with it in the future.
83ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     */
84ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public final int vcardVersion;
85ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa
86ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /**
87ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * The count of vCard entries in {@link #uri}. A receiver of this object can use it
88ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * when showing the progress of import. Thus a receiver must be able to torelate this
89ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * variable being invalid because of vCard's limitation.
90ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     *
91ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * vCard does not let us know this count without looking over a whole file content,
92ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * which means we have to open and scan over {@link #uri} to know this value, while
93ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * it may not be opened more than once (Uri does not require it to be opened multiple times
94ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * and may become invalid after its close() request).
95ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     */
96ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public final int entryCount;
97e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton
98ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    public ImportRequest(Account account,
99e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton            byte[] data, Uri uri, String displayName, int estimatedType, String estimatedCharset,
1001167da421b68952a590b050c32def7e0eff7cca6Jeff Hamilton            int vcardVersion, int entryCount) {
101ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        this.account = account;
102e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton        this.data = data;
103ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        this.uri = uri;
104e967f7cb12e02f7c852670c315a284aed1310dc1Jeff Hamilton        this.displayName = displayName;
105ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        this.estimatedVCardType = estimatedType;
106ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        this.estimatedCharset = estimatedCharset;
107ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        this.vcardVersion = vcardVersion;
108ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        this.entryCount = entryCount;
109ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    }
110ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa}
111