1a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood/*
2a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * Copyright (C) 2010 The Android Open Source Project
3a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
4a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * you may not use this file except in compliance with the License.
6a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * You may obtain a copy of the License at
7a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
8a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
10a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * See the License for the specific language governing permissions and
14a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * limitations under the License.
15a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood */
16a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
1700b74270c9f136a8727c5f6cda0997a3a905f385Mike Lockwoodpackage com.android.server.location;
18a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
196fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport java.io.FileDescriptor;
206fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport java.io.PrintWriter;
216fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
226fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderProperties;
236fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderRequest;
246fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
2503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwoodimport android.location.Criteria;
26a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.ILocationManager;
27a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.Location;
28a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.LocationManager;
29a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.LocationProvider;
30a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.os.Bundle;
31a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.os.RemoteException;
327e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackbornimport android.os.WorkSource;
33a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.util.Log;
34a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
356fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
36a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood/**
37a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * A passive location provider reports locations received from other providers
38a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * for clients that want to listen passively without actually triggering
39a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * location updates.
40a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
41a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * {@hide}
42a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood */
43a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodpublic class PassiveProvider implements LocationProviderInterface {
44a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    private static final String TAG = "PassiveProvider";
45a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
466fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    private static final ProviderProperties PROPERTIES = new ProviderProperties(
476fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly            false, false, false, false, false, false, false,
486fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly            Criteria.POWER_LOW, Criteria.ACCURACY_COARSE);
496fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
50a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    private final ILocationManager mLocationManager;
516fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    private boolean mReportLocation;
52a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
53a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public PassiveProvider(ILocationManager locationManager) {
54a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        mLocationManager = locationManager;
55a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
56a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
576fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
58a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public String getName() {
59a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return LocationManager.PASSIVE_PROVIDER;
60a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
61a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
626fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
636fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public ProviderProperties getProperties() {
646fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        return PROPERTIES;
65a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
66a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
676fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
68a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean isEnabled() {
69a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return true;
70a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
71a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
726fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
73a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void enable() {
74a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
75a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
766fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
77a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void disable() {
78a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
79a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
806fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
81a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public int getStatus(Bundle extras) {
826fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        if (mReportLocation) {
83a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            return LocationProvider.AVAILABLE;
84a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        } else {
85a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            return LocationProvider.TEMPORARILY_UNAVAILABLE;
86a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        }
87a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
88a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
896fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
90a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public long getStatusUpdateTime() {
91a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return -1;
92a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
93a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
946fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
956fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public void setRequest(ProviderRequest request, WorkSource source) {
966fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        mReportLocation = request.reportLocation;
97a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
98a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
99b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease    @Override
100b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease    public void switchUser(int userId) {
101b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease        // nothing to do here
102b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease    }
103b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease
104a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void updateLocation(Location location) {
1056fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        if (mReportLocation) {
106a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            try {
107a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood                // pass the location back to the location manager
108a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood                mLocationManager.reportLocation(location, true);
109a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            } catch (RemoteException e) {
110a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood                Log.e(TAG, "RemoteException calling reportLocation");
111a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            }
112a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        }
113a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
114a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
1156fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
116a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean sendExtraCommand(String command, Bundle extras) {
117a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
118a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
119a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
1206fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
1216fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
12209016ab4dd056a16809419d612cb865a14980880Victoria Lease        pw.println("mReportLocation=" + mReportLocation);
123a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
124a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood}
125