17ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood/*
27ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * Copyright (C) 2009 The Android Open Source Project
37ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood *
47ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
57ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * you may not use this file except in compliance with the License.
67ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * You may obtain a copy of the License at
77ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood *
87ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
97ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood *
107ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * Unless required by applicable law or agreed to in writing, software
117ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
127ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * See the License for the specific language governing permissions and
147ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * limitations under the License.
157ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood */
167ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
1700b74270c9f136a8727c5f6cda0997a3a905f385Mike Lockwoodpackage com.android.server.location;
187ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
194e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwoodimport android.location.ILocationManager;
207ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport android.location.Location;
2115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwoodimport android.location.LocationProvider;
227ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport android.os.Bundle;
2315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwoodimport android.os.RemoteException;
247e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackbornimport android.os.WorkSource;
2515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwoodimport android.util.Log;
267ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport android.util.PrintWriterPrinter;
277ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
286fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
296fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport java.io.FileDescriptor;
307ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport java.io.PrintWriter;
317ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
326fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderProperties;
336fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderRequest;
346fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
357ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood/**
367ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * A mock location provider used by LocationManagerService to implement test providers.
377ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood *
387ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * {@hide}
397ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood */
40d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwoodpublic class MockProvider implements LocationProviderInterface {
4115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    private final String mName;
426fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    private final ProviderProperties mProperties;
4315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    private final ILocationManager mLocationManager;
446fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
457ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    private final Location mLocation;
466fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    private final Bundle mExtras = new Bundle();
476fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
487ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    private int mStatus;
497ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    private long mStatusUpdateTime;
507ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    private boolean mHasLocation;
517ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    private boolean mHasStatus;
527ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    private boolean mEnabled;
537ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
5415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    private static final String TAG = "MockProvider";
5515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood
566fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public MockProvider(String name, ILocationManager locationManager,
576fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly            ProviderProperties properties) {
586fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        if (properties == null) throw new NullPointerException("properties is null");
596fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
6015e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        mName = name;
6115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        mLocationManager = locationManager;
626fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        mProperties = properties;
637ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mLocation = new Location(name);
647ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
657ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
666fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
67d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood    public String getName() {
68d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood        return mName;
69d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood    }
70d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood
716fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
726fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public ProviderProperties getProperties() {
736fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        return mProperties;
746fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    }
756fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
766fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
777ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void disable() {
787ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mEnabled = false;
797ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
807ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
816fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
827ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void enable() {
837ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mEnabled = true;
847ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
857ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
866fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
87d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood    public boolean isEnabled() {
88d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood        return mEnabled;
89d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood    }
90d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood
916fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
927ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public int getStatus(Bundle extras) {
937ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        if (mHasStatus) {
947ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood            extras.clear();
957ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood            extras.putAll(mExtras);
967ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood            return mStatus;
977ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        } else {
9815e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood            return LocationProvider.AVAILABLE;
997ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        }
1007ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
1017ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
1026fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
1034e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood    public long getStatusUpdateTime() {
1044e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood        return mStatusUpdateTime;
1054e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood    }
1064e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood
1077ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void setLocation(Location l) {
1087ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mLocation.set(l);
1097ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mHasLocation = true;
1106fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        if (mEnabled) {
1116fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly            try {
1126fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly                mLocationManager.reportLocation(mLocation, false);
1136fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly            } catch (RemoteException e) {
1146fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly                Log.e(TAG, "RemoteException calling reportLocation");
1156fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly            }
11615e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        }
1177ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
1187ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
1197ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void clearLocation() {
1207ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mHasLocation = false;
1217ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
1227ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
1237ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void setStatus(int status, Bundle extras, long updateTime) {
1247ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mStatus = status;
1257ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mStatusUpdateTime = updateTime;
1267ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mExtras.clear();
1277ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        if (extras != null) {
1287ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood            mExtras.putAll(extras);
1297ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        }
1307ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mHasStatus = true;
1317ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
1327ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
1337ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void clearStatus() {
1347ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mHasStatus = false;
1354e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood        mStatusUpdateTime = 0;
1367ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
1377ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood
1386fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
1396fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
1406fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        dump(pw, "");
14115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood    }
14215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood
1437ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    public void dump(PrintWriter pw, String prefix) {
14415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood        pw.println(prefix + mName);
1457ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        pw.println(prefix + "mHasLocation=" + mHasLocation);
1467ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        pw.println(prefix + "mLocation:");
1477ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        mLocation.dump(new PrintWriterPrinter(pw), prefix + "  ");
1487ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        pw.println(prefix + "mHasStatus=" + mHasStatus);
1497ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        pw.println(prefix + "mStatus=" + mStatus);
1507ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        pw.println(prefix + "mStatusUpdateTime=" + mStatusUpdateTime);
1517ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood        pw.println(prefix + "mExtras=" + mExtras);
1527ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood    }
1536fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
1546fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
1556fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public void setRequest(ProviderRequest request, WorkSource source) { }
1566fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly
1576fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    @Override
1586fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    public boolean sendExtraCommand(String command, Bundle extras) {
1596fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly        return false;
1606fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly    }
1617ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood}
162