178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray/*
278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * Copyright (C) 2016 The Android Open Source Project
378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray *
478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * Licensed under the Apache License, Version 2.0 (the "License");
578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * you may not use this file except in compliance with the License.
678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * You may obtain a copy of the License at
778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray *
878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray *      http://www.apache.org/licenses/LICENSE-2.0
978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray *
1078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * Unless required by applicable law or agreed to in writing, software
1178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * distributed under the License is distributed on an "AS IS" BASIS,
1278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * See the License for the specific language governing permissions and
1478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * limitations under the License.
1578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray */
1678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Raypackage android.os.connectivity;
1778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
1878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Rayimport android.os.Parcel;
1978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Rayimport android.os.Parcelable;
2078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
2178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Rayimport com.android.internal.location.gnssmetrics.GnssMetrics;
2278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
2378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Rayimport java.util.Arrays;
2478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
2578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray/**
2678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * API for GPS power stats
2778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray *
2878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray * @hide
2978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray */
3078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Raypublic final class GpsBatteryStats implements Parcelable {
3178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
3278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  private long mLoggingDurationMs;
3378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  private long mEnergyConsumedMaMs;
3478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  private long[] mTimeInGpsSignalQualityLevel;
3578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
3678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public static final Parcelable.Creator<GpsBatteryStats> CREATOR = new
3778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray      Parcelable.Creator<GpsBatteryStats>() {
3878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray        public GpsBatteryStats createFromParcel(Parcel in) {
3978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray          return new GpsBatteryStats(in);
4078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray        }
4178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
4278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray        public GpsBatteryStats[] newArray(int size) {
4378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray          return new GpsBatteryStats[size];
4478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray        }
4578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray      };
4678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
4778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public GpsBatteryStats() {
4878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    initialize();
4978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
5078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
5178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  @Override
5278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public void writeToParcel(Parcel out, int flags) {
5378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    out.writeLong(mLoggingDurationMs);
5478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    out.writeLong(mEnergyConsumedMaMs);
5578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    out.writeLongArray(mTimeInGpsSignalQualityLevel);
5678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
5778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
5878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public void readFromParcel(Parcel in) {
5978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mLoggingDurationMs = in.readLong();
6078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mEnergyConsumedMaMs = in.readLong();
6178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    in.readLongArray(mTimeInGpsSignalQualityLevel);
6278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
6378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
6478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public long getLoggingDurationMs() {
6578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return mLoggingDurationMs;
6678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
6778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
6878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public long getEnergyConsumedMaMs() {
6978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return mEnergyConsumedMaMs;
7078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
7178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
7278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public long[] getTimeInGpsSignalQualityLevel() {
7378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return mTimeInGpsSignalQualityLevel;
7478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
7578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
7678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public void setLoggingDurationMs(long t) {
7778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mLoggingDurationMs = t;
7878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return;
7978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
8078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
8178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public void setEnergyConsumedMaMs(long e) {
8278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mEnergyConsumedMaMs = e;
8378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return;
8478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
8578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
8678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public void setTimeInGpsSignalQualityLevel(long[] t) {
8778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mTimeInGpsSignalQualityLevel = Arrays.copyOfRange(t, 0,
8878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray        Math.min(t.length, GnssMetrics.NUM_GPS_SIGNAL_QUALITY_LEVELS));
8978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return;
9078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
9178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
9278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  @Override
9378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  public int describeContents() {
9478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return 0;
9578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
9678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
9778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  private GpsBatteryStats(Parcel in) {
9878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    initialize();
9978ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    readFromParcel(in);
10078ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
10178ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray
10278ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  private void initialize() {
10378ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mLoggingDurationMs = 0;
10478ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mEnergyConsumedMaMs = 0;
10578ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    mTimeInGpsSignalQualityLevel = new long[GnssMetrics.NUM_GPS_SIGNAL_QUALITY_LEVELS];
10678ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray    return;
10778ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray  }
10878ccaf5d287cbb6bd214913d72653aa74ecfef76Siddharth Ray}