content: /*
   * 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 @android.annotation.NonNull 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);
      }
  }
  