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