LocationProviderProxy.java revision fff2fda0199dedbf1079454dca98a81190dce765
1e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood/*
2e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * Copyright (C) 2009 The Android Open Source Project
3e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood *
4e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * you may not use this file except in compliance with the License.
6e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * You may obtain a copy of the License at
7e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood *
8e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood *
10e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * See the License for the specific language governing permissions and
14e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * limitations under the License.
15e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood */
16e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
17e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodpackage com.android.internal.location;
18e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
19e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.location.Address;
20e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.location.ILocationProvider;
21e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.location.Location;
22e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.location.LocationManager;
23e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.os.Bundle;
243681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwoodimport android.os.IBinder;
25e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.os.RemoteException;
26e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.util.Log;
27e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
28e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport java.util.List;
29e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
30e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood/**
31e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * A class for proxying remote ILocationProvider implementations.
32e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood *
33e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * {@hide}
34e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood */
353681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwoodpublic class LocationProviderProxy implements IBinder.DeathRecipient {
36e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
37e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    private static final String TAG = "LocationProviderProxy";
38e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
3915e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    private final String mName;
40e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    private final ILocationProvider mProvider;
4115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    private boolean mLocationTracking = false;
4215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    private long mMinTime = 0;
433681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood    private boolean mDead;
44e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
4515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    public LocationProviderProxy(String name, ILocationProvider provider) {
4615e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        mName = name;
47e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        mProvider = provider;
483681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood        try {
493681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood            provider.asBinder().linkToDeath(this, 0);
503681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood        } catch (RemoteException e) {
513681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood            Log.e(TAG, "linkToDeath failed", e);
523681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood            mDead = true;
533681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood        }
54e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
55e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
56fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu    public void unlinkProvider() {
57fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu        if (mProvider != null) {
58fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu            mProvider.asBinder().unlinkToDeath(this, 0);
59fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu        }
60fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu    }
61fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu
6215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    public String getName() {
6315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        return mName;
6415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    }
6515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood
663681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood    public boolean isDead() {
673681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood        return mDead;
683681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood    }
693681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood
70e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean requiresNetwork() {
71e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
72e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.requiresNetwork();
73e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
74e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "requiresNetwork failed", e);
75e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
76e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
77e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
78e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
79e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean requiresSatellite() {
80e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
81e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.requiresSatellite();
82e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
83e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "requiresSatellite failed", e);
84e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
85e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
86e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
87e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
88e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean requiresCell() {
89e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
90e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.requiresCell();
91e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
92e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "requiresCell failed", e);
93e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
94e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
95e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
96e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
97e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean hasMonetaryCost() {
98e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
99e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.hasMonetaryCost();
100e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
101e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "hasMonetaryCost failed", e);
102e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
103e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
104e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
105e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
106e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean supportsAltitude() {
107e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
108e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.supportsAltitude();
109e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
110e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "supportsAltitude failed", e);
111e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
112e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
113e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
114e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
115e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean supportsSpeed() {
116e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
117e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.supportsSpeed();
118e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
119e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "supportsSpeed failed", e);
120e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
121e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
122e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
123e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
12415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood     public boolean supportsBearing() {
125e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
126e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.supportsBearing();
127e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
128e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "supportsBearing failed", e);
129e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
130e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
131e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
132e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
133e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public int getPowerRequirement() {
134e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
135e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.getPowerRequirement();
136e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
137e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "getPowerRequirement failed", e);
138e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return 0;
139e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
140e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
141e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
142e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public int getAccuracy() {
143e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
144e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.getAccuracy();
145e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
146e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "getAccuracy failed", e);
147e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return 0;
148e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
149e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
150e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
151e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public void enable() {
152e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
153e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            mProvider.enable();
154e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
155e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "enable failed", e);
156e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
157e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
158e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
159e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public void disable() {
160e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
161e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            mProvider.disable();
162e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
163e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "disable failed", e);
164e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
165e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
166e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
167e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean isEnabled() {
168e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
169e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.isEnabled();
170e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
171e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "isEnabled failed", e);
172e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
173e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
174e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
175e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
176e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public int getStatus(Bundle extras) {
177e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
178e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.getStatus(extras);
179e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
180e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "getStatus failed", e);
181e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return 0;
182e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
183e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
184e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
185e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public long getStatusUpdateTime() {
186e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
187e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.getStatusUpdateTime();
188e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
189e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "getStatusUpdateTime failed", e);
190e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return 0;
191e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
192e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
193e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
19415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    public boolean isLocationTracking() {
19515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        return mLocationTracking;
19615e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    }
19715e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood
198e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public void enableLocationTracking(boolean enable) {
19915e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        mLocationTracking = enable;
200e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
201e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            mProvider.enableLocationTracking(enable);
202e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
203e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "enableLocationTracking failed", e);
204e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
205e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
206e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
20715e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    public long getMinTime() {
20815e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        return mMinTime;
20915e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    }
21015e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood
211e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public void setMinTime(long minTime) {
21215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        mMinTime = minTime;
213e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
214e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            mProvider.setMinTime(minTime);
215e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
216e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "setMinTime failed", e);
217e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
218e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
219e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
220e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public void updateNetworkState(int state) {
221e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
222e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            mProvider.updateNetworkState(state);
223e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
224e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "updateNetworkState failed", e);
225e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
226e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
227e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
228fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood    public void updateLocation(Location location) {
229fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood        try {
230fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood            mProvider.updateLocation(location);
231fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood        } catch (RemoteException e) {
232fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood            Log.e(TAG, "updateLocation failed", e);
233fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood        }
234fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood    }
235fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood
236e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    public boolean sendExtraCommand(String command, Bundle extras) {
237e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
238e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return mProvider.sendExtraCommand(command, extras);
239e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
240e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "sendExtraCommand failed", e);
241e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            return false;
242e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
243e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
244e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
2452f82c4eb0b4d315481ad79725ad6f52c5ec69685Mike Lockwood    public void addListener(int uid) {
246e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
2472f82c4eb0b4d315481ad79725ad6f52c5ec69685Mike Lockwood            mProvider.addListener(uid);
248e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
249e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "addListener failed", e);
250e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
251e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
252e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood
2532f82c4eb0b4d315481ad79725ad6f52c5ec69685Mike Lockwood    public void removeListener(int uid) {
254e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        try {
2552f82c4eb0b4d315481ad79725ad6f52c5ec69685Mike Lockwood            mProvider.removeListener(uid);
256e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        } catch (RemoteException e) {
257e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood            Log.e(TAG, "removeListener failed", e);
258e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood        }
259e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood    }
2603681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood
2613681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood    public void binderDied() {
2623681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood        Log.w(TAG, "Location Provider " + mName + " died");
2633681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood        mDead = true;
264fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu        mProvider.asBinder().unlinkToDeath(this, 0);
2653681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood    }
266e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood}
267