content: /*
   * Copyright (C) 2016 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.os.health;
  
  import android.annotation.TestApi;
  import android.os.Parcel;
  import android.os.Parcelable;
  import android.util.ArrayMap;
  
  import java.util.Arrays;
  import java.util.Map;
  
  /**
   * Class to allow sending the HealthStats through aidl generated glue.
   *
   * The alternative would be to send a HealthStats object, which would
   * require constructing one, and then immediately flattening it. This
   * saves that step at the cost of doing the extra flattening when
   * accessed in the same process as the writer.
   *
   * The HealthStatsWriter passed in the constructor is retained, so don't
   * reuse them.
   * @hide
   */
  @TestApi
  public class HealthStatsParceler implements Parcelable {
      private HealthStatsWriter mWriter;
      private HealthStats mHealthStats;
  
      public static final @android.annotation.NonNull Parcelable.Creator<HealthStatsParceler> CREATOR
              = new Parcelable.Creator<HealthStatsParceler>() {
          public HealthStatsParceler createFromParcel(Parcel in) {
              return new HealthStatsParceler(in);
          }
  
          public HealthStatsParceler[] newArray(int size) {
              return new HealthStatsParceler[size];
          }
      };
  
      public HealthStatsParceler(HealthStatsWriter writer) {
          mWriter = writer;
      }
  
      public HealthStatsParceler(Parcel in) {
          mHealthStats = new HealthStats(in);
      }
  
      public int describeContents() {
          return 0;
      }
  
      public void writeToParcel(Parcel out, int flags) {
          // See comment on mWriter declaration above.
          if (mWriter != null) {
              mWriter.flattenToParcel(out);
          } else {
              throw new RuntimeException("Can not re-parcel HealthStatsParceler that was"
                      + " constructed from a Parcel");
          }
      }
  
      public HealthStats getHealthStats() {
          if (mWriter != null) {
              final Parcel parcel = Parcel.obtain();
              mWriter.flattenToParcel(parcel);
              parcel.setDataPosition(0);
              mHealthStats = new HealthStats(parcel);
              parcel.recycle();
          }
  
          return mHealthStats;
      }
  }
  
  