VCardService.java revision ef41f8866e8e7d52e04907f7282adcf5f4749f25
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 */
16f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawapackage com.android.contacts;
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
27f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa/**
28f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa * The class responsible for importing vCard from one ore multiple Uris.
29f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa */
30f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawapublic class ImportVCardService extends Service {
31f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    private final static String LOG_TAG = "ImportVCardService";
32f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
33ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /* package */ static final int MSG_IMPORT_REQUEST = 1;
34f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
35ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    /* package */ static final int NOTIFICATION_ID = 1000;
36f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
37476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    /**
38ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * Small vCard file is imported soon, so any meassage saying "vCard import started" is
39ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa     * not needed. We show the message when the size of vCard is larger than this constant.
40476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa     */
41ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa    private static final int IMPORT_NOTIFICATION_THRESHOLD = 10;
42f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
43476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    public class ImportRequestHandler extends Handler {
44ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa        private final ImportRequestProcessor mRequestProcessor =
45ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                new ImportRequestProcessor(ImportVCardService.this);
46476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        @Override
47476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        public void handleMessage(Message msg) {
48476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa            switch (msg.what) {
49ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                case MSG_IMPORT_REQUEST: {
50ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                    final ImportRequest parameter = (ImportRequest)msg.obj;
51ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                    if (parameter.entryCount > IMPORT_NOTIFICATION_THRESHOLD) {
52ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                        Toast.makeText(ImportVCardService.this,
53ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                                getString(R.string.vcard_importer_start_message),
54ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                                Toast.LENGTH_LONG).show();
55476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    }
56ef41f8866e8e7d52e04907f7282adcf5f4749f25Daisuke Miyakawa                    mRequestProcessor.pushRequest(parameter);
57476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    break;
58915723665339c73c9bdebc7bf8ef56c414602c2cDaisuke Miyakawa                }
59476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                default:
60476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    Log.e(LOG_TAG, "Unknown request type: " + msg.what);
61476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa                    super.hasMessages(msg.what);
62476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa            }
63f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa        }
64476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    }
65f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
66476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    private Messenger mMessenger = new Messenger(new ImportRequestHandler());
67476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa
68476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    @Override
69476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa    public int onStartCommand(Intent intent, int flags, int id) {
70476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        return START_STICKY;
71f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    }
72f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa
73f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    @Override
74f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    public IBinder onBind(Intent intent) {
75476004be0c4907b462b3d699671d9e1cff1a7bd7Daisuke Miyakawa        return mMessenger.getBinder();
76f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa    }
77f21bf27c13dacec9b4ed74cba9046a64948e97fbDaisuke Miyakawa}
78