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}