1e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/*
2e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Copyright (C) 2012 The Android Open Source Project
3e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
4e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * you may not use this file except in compliance with the License.
6e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * You may obtain a copy of the License at
7e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
8e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
10e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Unless required by applicable law or agreed to in writing, software
11e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * See the License for the specific language governing permissions and
14e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * limitations under the License.
15e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */
16e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy
17a1db574036c9bc2d397b69f8200594027e1fff16Romain Guypackage com.android.internal.location;
18a1db574036c9bc2d397b69f8200594027e1fff16Romain Guy
197d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyimport java.util.ArrayList;
207d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyimport java.util.List;
21e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy
22e4ac2d6b5723c95e648c489b187ddde449452c13Patrick Dubroyimport android.location.LocationRequest;
23e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.os.Parcel;
24e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.os.Parcelable;
25e5e0c50f7dfaccc220725c5595080e921ffda1e4Romain Guyimport android.util.TimeUtils;
264406345cd62d3687ce590c357854472f7f906e6cJesse Hall
27deba785f122a47915756ffd991f5540d952cf937Romain Guy/** @hide */
28e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guypublic final class ProviderRequest implements Parcelable {
298f0095cd33558e9cc8a440047908e53b68906f5fRomain Guy    /** Location reporting is requested (true) */
308f0095cd33558e9cc8a440047908e53b68906f5fRomain Guy    public boolean reportLocation = false;
31ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
32c7d53494f1fbd9f9d74af89053ff9fdb1ccbac6cRomain Guy    /** The smallest requested interval */
33f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    public long interval = Long.MAX_VALUE;
34c7d53494f1fbd9f9d74af89053ff9fdb1ccbac6cRomain Guy
35079ba2c85b15e882629b8d188f5fbdb42f7f8eeaRomain Guy    /**
36a1db574036c9bc2d397b69f8200594027e1fff16Romain Guy     * A more detailed set of requests.
3761c8c9c5b2006d18e9310b6521c65b36ffe75ce4Romain Guy     * <p>Location Providers can optionally use this to
3885bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy     * fine tune location updates, for example when there
39e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy     * is a high power slow interval request and a
40b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     * low power fast interval request.
416c319ca1275c8db892c39b48fc54864c949f9171Romain Guy     */
4285bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy    public List<LocationRequest> locationRequests = new ArrayList<LocationRequest>();
4306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy
44db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy    public ProviderRequest() { }
459d5316e3f56d138504565ff311145ac01621dff4Romain Guy
4685bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy    public static final Parcelable.Creator<ProviderRequest> CREATOR =
47b02d0ca5553300063e4332192632312600caf4b9Fabrice Di Meglio            new Parcelable.Creator<ProviderRequest>() {
48e8e62a4a032a80409114a37908b5f18ab0080848Romain Guy        @Override
49e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy        public ProviderRequest createFromParcel(Parcel in) {
50e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy            ProviderRequest request = new ProviderRequest();
519d5316e3f56d138504565ff311145ac01621dff4Romain Guy            request.reportLocation = in.readInt() == 1;
529d5316e3f56d138504565ff311145ac01621dff4Romain Guy            request.interval = in.readLong();
53163935113919a184122b8b3bd672ef08c8df65dcRomain Guy            int count = in.readInt();
54163935113919a184122b8b3bd672ef08c8df65dcRomain Guy            for (int i = 0; i < count; i++) {
55163935113919a184122b8b3bd672ef08c8df65dcRomain Guy                request.locationRequests.add(LocationRequest.CREATOR.createFromParcel(in));
56163935113919a184122b8b3bd672ef08c8df65dcRomain Guy            }
57163935113919a184122b8b3bd672ef08c8df65dcRomain Guy            return request;
58163935113919a184122b8b3bd672ef08c8df65dcRomain Guy        }
59163935113919a184122b8b3bd672ef08c8df65dcRomain Guy        @Override
60bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy        public ProviderRequest[] newArray(int size) {
61bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy            return new ProviderRequest[size];
62bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy        }
63bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy    };
64bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy
65e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy    @Override
66bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy    public int describeContents() {
67bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy        return 0;
68bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy    }
695baa3a62a97544669fba6d65a11c07f252e654ddSteve Block
70bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy    @Override
71bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy    public void writeToParcel(Parcel parcel, int flags) {
72bdb801ca993bcccbf2a4c2401d1720c3fa523777Romain Guy        parcel.writeInt(reportLocation ? 1 : 0);
73e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy        parcel.writeLong(interval);
74a168d7372132d6c87835878794b6ed43d0d282fdRomain Guy        parcel.writeInt(locationRequests.size());
75a168d7372132d6c87835878794b6ed43d0d282fdRomain Guy        for (LocationRequest request : locationRequests) {
76a168d7372132d6c87835878794b6ed43d0d282fdRomain Guy            request.writeToParcel(parcel, flags);
77a168d7372132d6c87835878794b6ed43d0d282fdRomain Guy        }
789d5316e3f56d138504565ff311145ac01621dff4Romain Guy    }
799d5316e3f56d138504565ff311145ac01621dff4Romain Guy
809d5316e3f56d138504565ff311145ac01621dff4Romain Guy    @Override
817ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy    public String toString() {
829d5316e3f56d138504565ff311145ac01621dff4Romain Guy        StringBuilder s = new StringBuilder();
839d5316e3f56d138504565ff311145ac01621dff4Romain Guy        s.append("ProviderRequest[");
84e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy        if (reportLocation) {
857d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy            s.append("ON");
867d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy            s.append(" interval=");
877d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy            TimeUtils.formatDuration(interval, s);
887d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy        } else {
897d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy            s.append("OFF");
907d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy        }
917d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy        s.append(']');
927d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy        return s.toString();
937d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy    }
947d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy}
957d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy