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