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