LocationProviderProxy.java revision 628fd6d9c11ed9806abebf34bc986247c106328f
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 19628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.ComponentName; 20628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.Context; 21628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.Intent; 22628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.content.ServiceConnection; 23e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.location.ILocationProvider; 24e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.location.Location; 2503d246779ea65fc2bd10d0b4f32620f45211133aMike Lockwoodimport android.net.NetworkInfo; 26e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.os.Bundle; 27628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.os.Handler; 283681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwoodimport android.os.IBinder; 29e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.os.RemoteException; 30628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodimport android.os.SystemClock; 31e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwoodimport android.util.Log; 32e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 33e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood/** 34628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood * A class for proxying ILocationProvider implementations. 35e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * 36e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood * {@hide} 37e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood */ 38628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwoodpublic class LocationProviderProxy { 39e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 40e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood private static final String TAG = "LocationProviderProxy"; 41e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 42628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private final Context mContext; 4315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood private final String mName; 44628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private ILocationProvider mProvider; 45628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private Intent mIntent; 46628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private Handler mHandler; 47628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private final Connection mServiceConnection = new Connection(); 48628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 49628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood // cached values set by the location manager 5015e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood private boolean mLocationTracking = false; 512cd543aad5cc38fb3e7158f1cc5080c7e9ff5d24Mike Lockwood private boolean mEnabled = false; 52628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private long mMinTime = -1; 53628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private int mNetworkState; 54628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private NetworkInfo mNetworkInfo; 55e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 56628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood // for caching requiresNetwork, requiresSatellite, etc. 57628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private DummyLocationProvider mCachedAttributes; 58628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 59628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood // constructor for proxying built-in location providers 60628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public LocationProviderProxy(Context context, String name, ILocationProvider provider) { 61628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mContext = context; 6215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood mName = name; 63e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood mProvider = provider; 64e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 65e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 66628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood // constructor for proxying location providers implemented in a separate service 67628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public LocationProviderProxy(Context context, String name, String serviceName, 68628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Handler handler) { 69628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mContext = context; 70628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mName = name; 71628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mIntent = new Intent(serviceName); 72628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mHandler = handler; 73628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mContext.bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE); 74628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 75628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 76628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private class Connection implements ServiceConnection { 77628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public void onServiceConnected(ComponentName className, IBinder service) { 78628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Log.d(TAG, "LocationProviderProxy.onServiceConnected " + className); 79628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (this) { 80628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mProvider = ILocationProvider.Stub.asInterface(service); 81628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mProvider != null) { 82628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mHandler.post(mServiceConnectedTask); 83628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 84628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 85628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 86628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 87628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public void onServiceDisconnected(ComponentName className) { 88628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood Log.d(TAG, "LocationProviderProxy.onServiceDisconnected " + className); 89628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (this) { 90628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mProvider = null; 91628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 92fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu } 93fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu } 94fff2fda0199dedbf1079454dca98a81190dce765Suchi Amalapurapu 95628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood private Runnable mServiceConnectedTask = new Runnable() { 96628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood public void run() { 97628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 98628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 99628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 100628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider == null) { 101628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return; 102628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 103628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 104628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 105628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes == null) { 106628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 107628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes = new DummyLocationProvider(mName); 108628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setRequiresNetwork(provider.requiresNetwork()); 109628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setRequiresSatellite(provider.requiresSatellite()); 110628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setRequiresCell(provider.requiresCell()); 111628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setHasMonetaryCost(provider.hasMonetaryCost()); 112628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setSupportsAltitude(provider.supportsAltitude()); 113628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setSupportsSpeed(provider.supportsSpeed()); 114628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setSupportsBearing(provider.supportsBearing()); 115628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setPowerRequirement(provider.getPowerRequirement()); 116628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes.setAccuracy(provider.getAccuracy()); 117628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 118628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mCachedAttributes = null; 119628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 120628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 121628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 122628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood // resend previous values from the location manager if the service has restarted 123628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 124628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mEnabled) { 125628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.enable(); 126628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 127628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mLocationTracking) { 128628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.enableLocationTracking(true); 129628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 130628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mMinTime >= 0) { 131628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.setMinTime(mMinTime); 132628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 133628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mNetworkInfo != null) { 134628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.updateNetworkState(mNetworkState, mNetworkInfo); 135628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 136628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 137628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 138628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 139628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood }; 140628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood 14115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood public String getName() { 14215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood return mName; 14315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood } 14415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood 145e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean requiresNetwork() { 146628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 147628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.requiresNetwork(); 148628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 149e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 150e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 151e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 152e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 153e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean requiresSatellite() { 154628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 155628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.requiresSatellite(); 156628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 157e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 158e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 159e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 160e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 161e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean requiresCell() { 162628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 163628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.requiresCell(); 164628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 165e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 166e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 167e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 168e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 169e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean hasMonetaryCost() { 170628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 171628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.hasMonetaryCost(); 172628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 173e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 174e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 175e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 176e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 177e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean supportsAltitude() { 178628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 179628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.supportsAltitude(); 180628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 181e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 182e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 183e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 184e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 185e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean supportsSpeed() { 186628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 187628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.supportsSpeed(); 188628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 189e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 190e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 191e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 192e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 19315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood public boolean supportsBearing() { 194628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 195628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.supportsBearing(); 196628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 197e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood return false; 198e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 199e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 200e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 201e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public int getPowerRequirement() { 202628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 203628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.getPowerRequirement(); 204628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 205628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return -1; 206e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 207e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 208e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 209e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public int getAccuracy() { 210628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (mCachedAttributes != null) { 211628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return mCachedAttributes.getAccuracy(); 212628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } else { 213628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return -1; 214e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 215e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 216e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 217e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public void enable() { 218628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mEnabled = true; 219628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 220628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 221628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 222628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 223628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 224628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 225628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.enable(); 226628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 227628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 228e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 229e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 230e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 231e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public void disable() { 232628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mEnabled = false; 233628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 234628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 235628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 236628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 237628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 238628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 239628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.disable(); 240628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 241628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 242e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 243e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 244e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 245e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean isEnabled() { 2462cd543aad5cc38fb3e7158f1cc5080c7e9ff5d24Mike Lockwood return mEnabled; 247e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 248e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 249e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public int getStatus(Bundle extras) { 250628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 251628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 252628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 253e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 254628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 255628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 256628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return provider.getStatus(extras); 257628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 258628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 259628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 260628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return 0; 261e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 262e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 263e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public long getStatusUpdateTime() { 264628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 265628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 266628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 267e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 268628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 269628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 270628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return provider.getStatusUpdateTime(); 271628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 272628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 273628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 274628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return 0; 275628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 276e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 27715e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood public boolean isLocationTracking() { 27815e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood return mLocationTracking; 27915e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood } 28015e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood 281e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public void enableLocationTracking(boolean enable) { 28215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood mLocationTracking = enable; 283628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (!enable) { 284628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mMinTime = -1; 285628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 286628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 287628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 288628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 289628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 290628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 291628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 292628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.enableLocationTracking(enable); 293628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 294628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 295e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 296e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 297e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 29815e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood public long getMinTime() { 29915e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood return mMinTime; 30015e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood } 30115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood 302e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public void setMinTime(long minTime) { 303628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mMinTime = minTime; 304628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 305628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 306628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 307628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 308628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 309628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 310628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.setMinTime(minTime); 311628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 312628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 313e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 314e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 315e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 31603d246779ea65fc2bd10d0b4f32620f45211133aMike Lockwood public void updateNetworkState(int state, NetworkInfo info) { 317628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mNetworkState = state; 318628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood mNetworkInfo = info; 319628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 320628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 321628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 322628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 323628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 324628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 325628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.updateNetworkState(state, info); 326628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 327628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 328e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 329e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 330e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 331fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood public void updateLocation(Location location) { 332628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 333628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 334628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 335628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 336628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 337628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 338628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.updateLocation(location); 339628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 340628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 341fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood } 342fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood } 343fd6e5f0dda50e113db4ccc55338b6c4f09da37a4Mike Lockwood 344e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood public boolean sendExtraCommand(String command, Bundle extras) { 345628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 346628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 347628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 348e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 349628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 350628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 351628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.sendExtraCommand(command, extras); 352628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 353628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 354628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 355628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood return false; 356e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 357e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 3582f82c4eb0b4d315481ad79725ad6f52c5ec69685Mike Lockwood public void addListener(int uid) { 359628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 360628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 361628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 362628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 363628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 364628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 365628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.addListener(uid); 366628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 367628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 368e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 369e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 370e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood 3712f82c4eb0b4d315481ad79725ad6f52c5ec69685Mike Lockwood public void removeListener(int uid) { 372628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood ILocationProvider provider; 373628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood synchronized (mServiceConnection) { 374628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider = mProvider; 375628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 376628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood if (provider != null) { 377628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood try { 378628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood provider.removeListener(uid); 379628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } catch (RemoteException e) { 380628fd6d9c11ed9806abebf34bc986247c106328fMike Lockwood } 381e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood } 3823681f2614fa8c10560c790f6b4287f65d6fd2663Mike Lockwood } 383e932f7f2a47b770c636443d411436bd29cc4bb43Mike Lockwood} 384