VCardService.java revision d8fb81a0024d30c027ea6ebf57d29d3ff10453fb
1f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa/*
2f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * Copyright (C) 2010 The Android Open Source Project
3f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa *
4f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
5f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * you may not use this file except in compliance with the License.
6f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * You may obtain a copy of the License at
7f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa *
8f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
9f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa *
10f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
11f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
12f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * See the License for the specific language governing permissions and
14f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * limitations under the License.
15f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa */
161b918e58f4a3ae8d32af83f6f69bbf2de57a94f9Daisuke Miyakawapackage com.android.contacts.vcard;
17f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
18f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawaimport android.app.Service;
19f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawaimport android.content.Intent;
20476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawaimport android.os.Handler;
21f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawaimport android.os.IBinder;
22476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawaimport android.os.Message;
23476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawaimport android.os.Messenger;
24f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawaimport android.util.Log;
25f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawaimport android.widget.Toast;
26f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
271b918e58f4a3ae8d32af83f6f69bbf2de57a94f9Daisuke Miyakawaimport com.android.contacts.R;
281b918e58f4a3ae8d32af83f6f69bbf2de57a94f9Daisuke Miyakawa
29f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa/**
30f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * The class responsible for importing vCard from one ore multiple Uris.
31f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa */
32d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawapublic class VCardService extends Service {
33f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    private final static String LOG_TAG = "ImportVCardService";
34f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
35ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /* package */ static final int MSG_IMPORT_REQUEST = 1;
36d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa    /* package */ static final int MSG_EXPORT_REQUEST = 2;
37f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
38d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa    /* package */ static final int IMPORT_NOTIFICATION_ID = 1000;
39d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa    /* package */ static final int EXPORT_NOTIFICATION_ID = 1001;
40f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
41476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    /**
42ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * Small vCard file is imported soon, so any meassage saying "vCard import started" is
43ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * not needed. We show the message when the size of vCard is larger than this constant.
44476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa     */
45d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa    private static final int IMPORT_NOTIFICATION_THRESHOLD = 10;
46f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
47476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    public class ImportRequestHandler extends Handler {
48d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa        private final ImportProcessor mImportProcessor =
49d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                new ImportProcessor(VCardService.this);
50d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa        private final ExportProcessor mExportProcessor =
51d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                new ExportProcessor(VCardService.this);
52476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        @Override
53476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        public void handleMessage(Message msg) {
54476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa            switch (msg.what) {
55ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                case MSG_IMPORT_REQUEST: {
56ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                    final ImportRequest parameter = (ImportRequest)msg.obj;
57d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                    mImportProcessor.pushRequest(parameter);
58ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                    if (parameter.entryCount > IMPORT_NOTIFICATION_THRESHOLD) {
59d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                        Toast.makeText(VCardService.this,
60ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                                getString(R.string.vcard_importer_start_message),
61ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                                Toast.LENGTH_LONG).show();
62476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    }
63476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    break;
64915723665339c73c9bdebc7bf8ef56c414602c2cDaisuke Miyakawa                }
65d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                case MSG_EXPORT_REQUEST: {
66d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                    final ExportRequest parameter = (ExportRequest)msg.obj;
67d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                    mExportProcessor.pushRequest(parameter);
68d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                    Toast.makeText(VCardService.this,
69d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                            getString(R.string.vcard_exporter_start_message),
70d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                            Toast.LENGTH_LONG).show();
71d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                    break;
72d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                }
73d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                default: {
74476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    Log.e(LOG_TAG, "Unknown request type: " + msg.what);
75476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    super.hasMessages(msg.what);
76d8fb81a0024d30c027ea6ebf57d29d3ff10453fbDaisuke Miyakawa                }
77476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa            }
78f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa        }
79476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    }
80f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
81476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    private Messenger mMessenger = new Messenger(new ImportRequestHandler());
82476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa
83476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    @Override
84476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    public int onStartCommand(Intent intent, int flags, int id) {
85476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        return START_STICKY;
86f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    }
87f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
88f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    @Override
89f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    public IBinder onBind(Intent intent) {
90476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        return mMessenger.getBinder();
91f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    }
92f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa}
93