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