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.Context; 20628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.location.Address; 21628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.location.GeocoderParams; 22628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.location.IGeocodeProvider; 235cd731a2333479d85b1bdf6dbf8a185df2877146Victoria Leaseimport android.os.Handler; 24628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.os.RemoteException; 25628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.util.Log; 26628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 276fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.server.ServiceWatcher; 28628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport java.util.List; 29628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 30628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood/** 316fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly * Proxy for IGeocodeProvider implementations. 32628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood */ 33628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodpublic class GeocoderProxy { 34628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private static final String TAG = "GeocoderProxy"; 35628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 366fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private static final String SERVICE_ACTION = "com.android.location.service.GeocodeProvider"; 3700355d5a592533a3ecb0a5a74aef8e69dd16902aNick Pelly 38628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private final Context mContext; 396fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private final ServiceWatcher mServiceWatcher; 406fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 416fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public static GeocoderProxy createAndBind(Context context, 42c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun int overlaySwitchResId, int defaultServicePackageNameResId, 43c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun int initialPackageNamesResId, Handler handler) { 44c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun GeocoderProxy proxy = new GeocoderProxy(context, overlaySwitchResId, 45c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun defaultServicePackageNameResId, initialPackageNamesResId, handler); 466fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly if (proxy.bind()) { 476fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return proxy; 486fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } else { 496fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return null; 50e97ae40dffe7d7f8917c51c4f3f6c1b18c238565Mike Lockwood } 51e97ae40dffe7d7f8917c51c4f3f6c1b18c238565Mike Lockwood } 52e97ae40dffe7d7f8917c51c4f3f6c1b18c238565Mike Lockwood 53c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun private GeocoderProxy(Context context, 54c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun int overlaySwitchResId, int defaultServicePackageNameResId, 55c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun int initialPackageNamesResId, Handler handler) { 566fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly mContext = context; 578863c43d9efda108c880814b0a18688b75d70153Mark Vandevoorde 58c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun mServiceWatcher = new ServiceWatcher(mContext, TAG, SERVICE_ACTION, overlaySwitchResId, 59c5fc9988f11acc58229fb6ae80d346277318ada4Zhentao Sun defaultServicePackageNameResId, initialPackageNamesResId, null, handler); 606fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } 618863c43d9efda108c880814b0a18688b75d70153Mark Vandevoorde 626fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private boolean bind () { 636fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return mServiceWatcher.start(); 646fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } 65628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 666fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private IGeocodeProvider getService() { 676fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return IGeocodeProvider.Stub.asInterface(mServiceWatcher.getBinder()); 686fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } 698863c43d9efda108c880814b0a18688b75d70153Mark Vandevoorde 706fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public String getConnectedPackageName() { 716fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return mServiceWatcher.getBestPackageName(); 72628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 73628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 74628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public String getFromLocation(double latitude, double longitude, int maxResults, 75628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood GeocoderParams params, List<Address> addrs) { 766fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly IGeocodeProvider provider = getService(); 77628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 78628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 796fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return provider.getFromLocation(latitude, longitude, maxResults, params, addrs); 80628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 816fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly Log.w(TAG, e); 82628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 83628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 84628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return "Service not Available"; 85628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 86628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 87628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public String getFromLocationName(String locationName, 88628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood double lowerLeftLatitude, double lowerLeftLongitude, 89628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood double upperRightLatitude, double upperRightLongitude, int maxResults, 90628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood GeocoderParams params, List<Address> addrs) { 916fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly IGeocodeProvider provider = getService(); 92628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 93628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 94628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return provider.getFromLocationName(locationName, lowerLeftLatitude, 95628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood lowerLeftLongitude, upperRightLatitude, upperRightLongitude, 96628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood maxResults, params, addrs); 97628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 986fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly Log.w(TAG, e); 99628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 100628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 101628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return "Service not Available"; 102628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 1036fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 104628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood} 105