GeocoderProxy.java revision 00b74270c9f136a8727c5f6cda0997a3a905f385
1628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood/* 2628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * Copyright (C) 2010 The Android Open Source Project 3628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * 4628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 5628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * you may not use this file except in compliance with the License. 6628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * You may obtain a copy of the License at 7628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * 8628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * 10628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * Unless required by applicable law or agreed to in writing, software 11628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 12628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * See the License for the specific language governing permissions and 14628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * limitations under the License. 15628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood */ 16628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 1700b74270c9f136a8727c5f6cda0997a3a905f385Mike Lockwoodpackage com.android.server.location; 18628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 19628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.ComponentName; 20628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.Context; 21628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.Intent; 22628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.ServiceConnection; 23628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.location.Address; 24628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.location.GeocoderParams; 25628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.location.IGeocodeProvider; 26628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.os.IBinder; 27628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.os.RemoteException; 28628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.os.SystemClock; 29628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.util.Log; 30628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 31628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport java.util.List; 32628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 33628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood/** 34628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * A class for proxying IGeocodeProvider implementations. 35628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * 36628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * {@hide} 37628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood */ 38628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodpublic class GeocoderProxy { 39628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 40628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private static final String TAG = "GeocoderProxy"; 41628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 42628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private final Context mContext; 43628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private final Intent mIntent; 44628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private final Connection mServiceConnection = new Connection(); 45628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private IGeocodeProvider mProvider; 46628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 47628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public GeocoderProxy(Context context, String serviceName) { 48628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mContext = context; 49628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mIntent = new Intent(serviceName); 50628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mContext.bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE); 51628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 52628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 53628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private class Connection implements ServiceConnection { 54628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public void onServiceConnected(ComponentName className, IBinder service) { 55628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Log.d(TAG, "onServiceConnected " + className); 56628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (this) { 57628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mProvider = IGeocodeProvider.Stub.asInterface(service); 58628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 59628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 60628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 61628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public void onServiceDisconnected(ComponentName className) { 62628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Log.d(TAG, "onServiceDisconnected " + className); 63628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (this) { 64628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mProvider = null; 65628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 66628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 67628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 68628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 69628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public String getFromLocation(double latitude, double longitude, int maxResults, 70628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood GeocoderParams params, List<Address> addrs) { 71628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood IGeocodeProvider provider; 72628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 73628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 74628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 75628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 76628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 77628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return provider.getFromLocation(latitude, longitude, maxResults, 78628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood params, addrs); 79628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 80628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Log.e(TAG, "getFromLocation failed", e); 81628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 82628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 83628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return "Service not Available"; 84628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 85628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 86628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public String getFromLocationName(String locationName, 87628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood double lowerLeftLatitude, double lowerLeftLongitude, 88628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood double upperRightLatitude, double upperRightLongitude, int maxResults, 89628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood GeocoderParams params, List<Address> addrs) { 90628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood IGeocodeProvider provider; 91628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 92628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 93628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 94628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 95628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 96628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return provider.getFromLocationName(locationName, lowerLeftLatitude, 97628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood lowerLeftLongitude, upperRightLatitude, upperRightLongitude, 98628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood maxResults, params, addrs); 99628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 100628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Log.e(TAG, "getFromLocationName failed", e); 101628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 102628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 103628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return "Service not Available"; 104628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 105628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood} 106