Home | History | Annotate | Download | only in item
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.loganalysis.item;
     17 
     18 import org.json.JSONException;
     19 import org.json.JSONObject;
     20 
     21 /**
     22  * An {@link IItem} used to store BatteryStats Info
     23  */
     24 public class BatteryStatsDetailedInfoItem implements IItem {
     25 
     26     /** Constant for JSON output */
     27     public static final String TIME_ON_BATTERY = "TIME_ON_BATTERY";
     28     /** Constant for JSON output */
     29     public static final String SCREEN_ON_TIME = "SCREEN_ON_TIME";
     30     /** Constant for JSON output */
     31     public static final String BATTERY_USAGE = "BATTERY_USAGE";
     32     /** Constant for JSON output */
     33     public static final String WAKELOCKS = "WAKELOCKS";
     34     /** Constant for JSON output */
     35     public static final String INTERRUPTS = "INTERRUPTS";
     36     /** Constant for JSON output */
     37     public static final String PROCESS_USAGE = "PROCESS_USAGE";
     38 
     39     private long mTimeOnBattery = 0;
     40     private long mScreenOnTime = 0;
     41     private BatteryUsageItem mBatteryUsageItem = null;
     42     private WakelockItem mWakelockItem = null;
     43     private InterruptItem mInterruptItem = null;
     44     private ProcessUsageItem mprocessUsageItem = null;
     45 
     46     /**
     47      * Set the time on battery
     48      */
     49     public void setTimeOnBattery(long timeOnBattery) {
     50         mTimeOnBattery = timeOnBattery;
     51     }
     52 
     53     /**
     54      * Set the time on battery
     55      */
     56     public void setScreenOnTime(long screenOnTime) {
     57         mScreenOnTime = screenOnTime;
     58     }
     59 
     60     /**
     61      * Set the wakelock summary {@link WakelockItem}
     62      */
     63     public void setWakelockItem(WakelockItem wakelockItem) {
     64         mWakelockItem = wakelockItem;
     65     }
     66 
     67     /**
     68      * Set the interrupt summary {@link InterruptItem}
     69      */
     70     public void setInterruptItem(InterruptItem interruptItem) {
     71         mInterruptItem = interruptItem;
     72     }
     73 
     74     /**
     75      * Set the process usage {@link ProcessUsageItem}
     76      */
     77     public void setProcessUsageItem(ProcessUsageItem processUsageItem) {
     78         mprocessUsageItem = processUsageItem;
     79     }
     80 
     81     /**
     82      * Set the process usage {@link BatteryUsageItem}
     83      */
     84     public void setBatteryUsageItem(BatteryUsageItem batteryUsageItem) {
     85         mBatteryUsageItem = batteryUsageItem;
     86     }
     87 
     88     /**
     89      * Get the time on battery
     90      */
     91     public long getTimeOnBattery() {
     92         return mTimeOnBattery;
     93     }
     94 
     95     /**
     96      * Get the screen on time
     97      */
     98     public long getScreenOnTime() {
     99         return mScreenOnTime;
    100     }
    101 
    102     /**
    103      * Get the wakelock summary {@link WakelockItem}
    104      */
    105     public WakelockItem getWakelockItem() {
    106         return mWakelockItem;
    107     }
    108 
    109     /**
    110      * Get the interrupt summary {@link InterruptItem}
    111      */
    112     public InterruptItem getInterruptItem() {
    113         return mInterruptItem;
    114     }
    115 
    116     /**
    117      * Get the process usage summary {@link ProcessUsageItem}
    118      */
    119     public ProcessUsageItem getProcessUsageItem() {
    120         return mprocessUsageItem;
    121     }
    122 
    123     /**
    124      * Get the battery usage summary {@link BatteryUsageItem}
    125      */
    126     public BatteryUsageItem getBatteryUsageItem() {
    127         return mBatteryUsageItem;
    128     }
    129 
    130     /**
    131      * {@inheritDoc}
    132      */
    133     @Override
    134     public IItem merge(IItem other) throws ConflictingItemException {
    135         throw new ConflictingItemException("Dumpsys battery info items cannot be merged");
    136     }
    137 
    138     /**
    139      * {@inheritDoc}
    140      */
    141     @Override
    142     public boolean isConsistent(IItem other) {
    143         return false;
    144     }
    145 
    146     /**
    147      * {@inheritDoc}
    148      */
    149     @Override
    150     public JSONObject toJson() {
    151         JSONObject batteryStatsComponent = new JSONObject();
    152         try {
    153             if (mTimeOnBattery > 0) {
    154                 batteryStatsComponent.put(TIME_ON_BATTERY, getTimeOnBattery());
    155             }
    156             if (mScreenOnTime > 0) {
    157                 batteryStatsComponent.put(SCREEN_ON_TIME, getScreenOnTime());
    158             }
    159             if (mBatteryUsageItem != null) {
    160                 batteryStatsComponent.put(BATTERY_USAGE, mBatteryUsageItem.toJson());
    161             }
    162             if (mWakelockItem != null) {
    163                 batteryStatsComponent.put(WAKELOCKS, mWakelockItem.toJson());
    164             }
    165             if (mInterruptItem != null) {
    166                 batteryStatsComponent.put(INTERRUPTS, mInterruptItem.toJson());
    167             }
    168             if (mprocessUsageItem != null) {
    169                 batteryStatsComponent.put(PROCESS_USAGE, mprocessUsageItem.toJson());
    170             }
    171         } catch (JSONException e) {
    172             // ignore
    173         }
    174         return batteryStatsComponent;
    175     }
    176 }
    177