/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.location;
import android.os.Parcel;
import android.os.Parcelable;
/**
* A data class representing a set of options to configure batching sessions.
* @hide
*/
public class FusedBatchOptions implements Parcelable {
private volatile long mPeriodInNS = 0;
private volatile int mSourcesToUse = 0;
private volatile int mFlags = 0;
// the default value is set to request fixes at no cost
private volatile double mMaxPowerAllocationInMW = 0;
// If non-zero can be used for power savings by throttling location when device hasn't moved.
private volatile float mSmallestDisplacementMeters = 0;
/*
* Getters and setters for properties needed to hold the options.
*/
public void setMaxPowerAllocationInMW(double value) {
mMaxPowerAllocationInMW = value;
}
public double getMaxPowerAllocationInMW() {
return mMaxPowerAllocationInMW;
}
public void setPeriodInNS(long value) {
mPeriodInNS = value;
}
public long getPeriodInNS() {
return mPeriodInNS;
}
public void setSmallestDisplacementMeters(float value) {
mSmallestDisplacementMeters = value;
}
public float getSmallestDisplacementMeters() {
return mSmallestDisplacementMeters;
}
public void setSourceToUse(int source) {
mSourcesToUse |= source;
}
public void resetSourceToUse(int source) {
mSourcesToUse &= ~source;
}
public boolean isSourceToUseSet(int source) {
return (mSourcesToUse & source) != 0;
}
public int getSourcesToUse() {
return mSourcesToUse;
}
public void setFlag(int flag) {
mFlags |= flag;
}
public void resetFlag(int flag) {
mFlags &= ~flag;
}
public boolean isFlagSet(int flag) {
return (mFlags & flag) != 0;
}
public int getFlags() {
return mFlags;
}
/**
* Definition of enum flag sets needed by this class.
* Such values need to be kept in sync with the ones in fused_location.h
*/
public static final class SourceTechnologies {
public static int GNSS = 1<<0;
public static int WIFI = 1<<1;
public static int SENSORS = 1<<2;
public static int CELL = 1<<3;
public static int BLUETOOTH = 1<<4;
}
public static final class BatchFlags {
// follow the definitions to the letter in fused_location.h
public static int WAKEUP_ON_FIFO_FULL = 0x0000001;
public static int CALLBACK_ON_LOCATION_FIX =0x0000002;
}
/*
* Method definitions to support Parcelable operations.
*/
public static final Parcelable.Creator<FusedBatchOptions> CREATOR =
new Parcelable.Creator<FusedBatchOptions>() {
@Override
public FusedBatchOptions createFromParcel(Parcel parcel) {
FusedBatchOptions options = new FusedBatchOptions();
options.setMaxPowerAllocationInMW(parcel.readDouble());
options.setPeriodInNS(parcel.readLong());
options.setSourceToUse(parcel.readInt());
options.setFlag(parcel.readInt());
options.setSmallestDisplacementMeters(parcel.readFloat());
return options;
}
@Override
public FusedBatchOptions[] newArray(int size) {
return new FusedBatchOptions[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeDouble(mMaxPowerAllocationInMW);
parcel.writeLong(mPeriodInNS);
parcel.writeInt(mSourcesToUse);
parcel.writeInt(mFlags);
parcel.writeFloat(mSmallestDisplacementMeters);
}
}