Home | History | Annotate | Download | only in fuelgauge
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
      5  * except in compliance with the License. You may obtain a copy of the License at
      6  *
      7  *      http://www.apache.org/licenses/LICENSE-2.0
      8  *
      9  * Unless required by applicable law or agreed to in writing, software distributed under the
     10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     11  * KIND, either express or implied. See the License for the specific language governing
     12  * permissions and limitations under the License.
     13  */
     14 
     15 package com.android.settings.fuelgauge;
     16 
     17 import android.os.BatteryStats.HistoryItem;
     18 import android.util.SparseBooleanArray;
     19 import android.util.SparseIntArray;
     20 import com.android.settings.fuelgauge.BatteryActiveView.BatteryActiveProvider;
     21 import com.android.settingslib.BatteryInfo;
     22 
     23 public class BatteryFlagParser implements BatteryInfo.BatteryDataParser, BatteryActiveProvider {
     24 
     25     private final SparseBooleanArray mData = new SparseBooleanArray();
     26     private final int mFlag;
     27     private final boolean mState2;
     28     private final int mAccentColor;
     29 
     30     private boolean mLastSet;
     31     private long mLength;
     32     private long mLastTime;
     33 
     34     public BatteryFlagParser(int accent, boolean state2, int flag) {
     35         mAccentColor = accent;
     36         mFlag = flag;
     37         mState2 = state2;
     38     }
     39 
     40     protected boolean isSet(HistoryItem record) {
     41         return ((mState2 ? record.states2 : record.states) & mFlag) != 0;
     42     }
     43 
     44     @Override
     45     public void onParsingStarted(long startTime, long endTime) {
     46         mLength = endTime - startTime;
     47     }
     48 
     49     @Override
     50     public void onDataPoint(long time, HistoryItem record) {
     51         boolean isSet = isSet(record);
     52         if (isSet != mLastSet) {
     53             mData.put((int) time, isSet);
     54             mLastSet = isSet;
     55         }
     56         mLastTime = time;
     57     }
     58 
     59     @Override
     60     public void onDataGap() {
     61         if (mLastSet) {
     62             mData.put((int) mLastTime, false);
     63             mLastSet = false;
     64         }
     65     }
     66 
     67     @Override
     68     public void onParsingDone() {
     69         if (mLastSet) {
     70             mData.put((int) mLastTime, false);
     71             mLastSet = false;
     72         }
     73     }
     74 
     75     @Override
     76     public long getPeriod() {
     77         return mLength;
     78     }
     79 
     80     @Override
     81     public boolean hasData() {
     82         return mData.size() > 1;
     83     }
     84 
     85     @Override
     86     public SparseIntArray getColorArray() {
     87         SparseIntArray ret = new SparseIntArray();
     88         for (int i = 0; i < mData.size(); i++) {
     89             ret.put(mData.keyAt(i), getColor(mData.valueAt(i)));
     90         }
     91         return ret;
     92     }
     93 
     94     private int getColor(boolean b) {
     95         if (b) {
     96             return mAccentColor;
     97         }
     98         return 0;
     99     }
    100 }
    101