content: /*
   * Copyright (C) 2012 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 com.android.internal.location;
  
  import android.os.Parcel;
  import android.os.Parcelable;
  
  /**
   * A Parcelable containing (legacy) location provider properties.
   * This object is just used inside the framework and system services.
   * @hide
   */
  public final class ProviderProperties implements Parcelable {
      /**
       * True if provider requires access to a
       * data network (e.g., the Internet), false otherwise.
       */
      public final boolean mRequiresNetwork;
  
      /**
       * True if the provider requires access to a
       * satellite-based positioning system (e.g., GPS), false
       * otherwise.
       */
      public final boolean mRequiresSatellite;
  
      /**
       * True if the provider requires access to an appropriate
       * cellular network (e.g., to make use of cell tower IDs), false
       * otherwise.
       */
      public final boolean mRequiresCell;
  
      /**
       * True if the use of this provider may result in a
       * monetary charge to the user, false if use is free.  It is up to
       * each provider to give accurate information. Cell (network) usage
       * is not considered monetary cost.
       */
      public final boolean mHasMonetaryCost;
  
      /**
       * True if the provider is able to provide altitude
       * information, false otherwise.  A provider that reports altitude
       * under most circumstances but may occasionally not report it
       * should return true.
       */
      public final boolean mSupportsAltitude;
  
      /**
       * True if the provider is able to provide speed
       * information, false otherwise.  A provider that reports speed
       * under most circumstances but may occasionally not report it
       * should return true.
       */
      public final boolean mSupportsSpeed;
  
      /**
       * True if the provider is able to provide bearing
       * information, false otherwise.  A provider that reports bearing
       * under most circumstances but may occasionally not report it
       * should return true.
       */
      public final boolean mSupportsBearing;
  
      /**
       * Power requirement for this provider.
       *
       * @return the power requirement for this provider, as one of the
       * constants Criteria.POWER_*.
       */
      public final int mPowerRequirement;
  
      /**
       * Constant describing the horizontal accuracy returned
       * by this provider.
       *
       * @return the horizontal accuracy for this provider, as one of the
       * constants Criteria.ACCURACY_COARSE or Criteria.ACCURACY_FINE
       */
      public final int mAccuracy;
  
      public ProviderProperties(boolean mRequiresNetwork,
              boolean mRequiresSatellite, boolean mRequiresCell, boolean mHasMonetaryCost,
              boolean mSupportsAltitude, boolean mSupportsSpeed, boolean mSupportsBearing,
              int mPowerRequirement, int mAccuracy) {
          this.mRequiresNetwork = mRequiresNetwork;
          this.mRequiresSatellite = mRequiresSatellite;
          this.mRequiresCell = mRequiresCell;
          this.mHasMonetaryCost = mHasMonetaryCost;
          this.mSupportsAltitude = mSupportsAltitude;
          this.mSupportsSpeed = mSupportsSpeed;
          this.mSupportsBearing = mSupportsBearing;
          this.mPowerRequirement = mPowerRequirement;
          this.mAccuracy = mAccuracy;
      }
  
      public static final Parcelable.Creator<ProviderProperties> CREATOR =
              new Parcelable.Creator<ProviderProperties>() {
          @Override
          public ProviderProperties createFromParcel(Parcel in) {
              boolean requiresNetwork = in.readInt() == 1;
              boolean requiresSatellite = in.readInt() == 1;
              boolean requiresCell = in.readInt() == 1;
              boolean hasMonetaryCost = in.readInt() == 1;
              boolean supportsAltitude = in.readInt() == 1;
              boolean supportsSpeed = in.readInt() == 1;
              boolean supportsBearing = in.readInt() == 1;
              int powerRequirement = in.readInt();
              int accuracy = in.readInt();
              return new ProviderProperties(requiresNetwork, requiresSatellite,
                      requiresCell, hasMonetaryCost, supportsAltitude, supportsSpeed, supportsBearing,
                      powerRequirement, accuracy);
          }
          @Override
          public ProviderProperties[] newArray(int size) {
              return new ProviderProperties[size];
          }
      };
  
      @Override
      public int describeContents() {
          return 0;
      }
  
      @Override
      public void writeToParcel(Parcel parcel, int flags) {
          parcel.writeInt(mRequiresNetwork ? 1 : 0);
          parcel.writeInt(mRequiresSatellite ? 1 : 0);
          parcel.writeInt(mRequiresCell ? 1 : 0);
          parcel.writeInt(mHasMonetaryCost ? 1 : 0);
          parcel.writeInt(mSupportsAltitude ? 1 : 0);
          parcel.writeInt(mSupportsSpeed ? 1 : 0);
          parcel.writeInt(mSupportsBearing ? 1 : 0);
          parcel.writeInt(mPowerRequirement);
          parcel.writeInt(mAccuracy);
      }
  }
  