• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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 
17 package com.android.settings.fuelgauge;
18 
19 import android.content.Intent;
20 import android.os.BatteryStats;
21 import android.os.BatteryStats.HistoryItem;
22 import android.os.Bundle;
23 import android.os.SystemClock;
24 import android.util.TypedValue;
25 import android.view.LayoutInflater;
26 import android.view.View;
27 import android.view.ViewGroup;
28 import android.widget.TextView;
29 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
30 import com.android.internal.os.BatteryStatsHelper;
31 import com.android.settings.R;
32 import com.android.settings.SettingsPreferenceFragment;
33 import com.android.settings.fuelgauge.BatteryActiveView.BatteryActiveProvider;
34 import com.android.settingslib.BatteryInfo;
35 import com.android.settingslib.graph.UsageView;
36 
37 public class BatteryHistoryDetail extends SettingsPreferenceFragment {
38     public static final String EXTRA_STATS = "stats";
39     public static final String EXTRA_BROADCAST = "broadcast";
40     public static final String BATTERY_HISTORY_FILE = "tmp_bat_history.bin";
41 
42     private BatteryStats mStats;
43     private Intent mBatteryBroadcast;
44 
45     private BatteryFlagParser mChargingParser;
46     private BatteryFlagParser mScreenOn;
47     private BatteryFlagParser mGpsParser;
48     private BatteryFlagParser mFlashlightParser;
49     private BatteryFlagParser mCameraParser;
50     private BatteryWifiParser mWifiParser;
51     private BatteryFlagParser mCpuParser;
52     private BatteryCellParser mPhoneParser;
53 
54     @Override
onCreate(Bundle icicle)55     public void onCreate(Bundle icicle) {
56         super.onCreate(icicle);
57         String histFile = getArguments().getString(EXTRA_STATS);
58         mStats = BatteryStatsHelper.statsFromFile(getActivity(), histFile);
59         mBatteryBroadcast = getArguments().getParcelable(EXTRA_BROADCAST);
60 
61         TypedValue value = new TypedValue();
62         getContext().getTheme().resolveAttribute(android.R.attr.colorAccent, value, true);
63         int accentColor = getContext().getColor(value.resourceId);
64 
65         mChargingParser = new BatteryFlagParser(accentColor, false,
66                 HistoryItem.STATE_BATTERY_PLUGGED_FLAG);
67         mScreenOn = new BatteryFlagParser(accentColor, false,
68                 HistoryItem.STATE_SCREEN_ON_FLAG);
69         mGpsParser = new BatteryFlagParser(accentColor, false,
70                 HistoryItem.STATE_GPS_ON_FLAG);
71         mFlashlightParser = new BatteryFlagParser(accentColor, true,
72                 HistoryItem.STATE2_FLASHLIGHT_FLAG);
73         mCameraParser = new BatteryFlagParser(accentColor, true,
74                 HistoryItem.STATE2_CAMERA_FLAG);
75         mWifiParser = new BatteryWifiParser(accentColor);
76         mCpuParser = new BatteryFlagParser(accentColor, false,
77                 HistoryItem.STATE_CPU_RUNNING_FLAG);
78         mPhoneParser = new BatteryCellParser();
79         setHasOptionsMenu(true);
80     }
81 
82     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)83     public View onCreateView(LayoutInflater inflater, ViewGroup container,
84             Bundle savedInstanceState) {
85         return inflater.inflate(R.layout.battery_history_detail, container, false);
86     }
87 
88     @Override
onViewCreated(View view, Bundle savedInstanceState)89     public void onViewCreated(View view, Bundle savedInstanceState) {
90         super.onViewCreated(view, savedInstanceState);
91         updateEverything();
92     }
93 
updateEverything()94     private void updateEverything() {
95         BatteryInfo info = BatteryInfo.getBatteryInfo(getContext(), mBatteryBroadcast, mStats,
96                 SystemClock.elapsedRealtime() * 1000);
97         final View view = getView();
98         info.bindHistory((UsageView) view.findViewById(R.id.battery_usage), mChargingParser,
99                 mScreenOn, mGpsParser, mFlashlightParser, mCameraParser, mWifiParser, mCpuParser,
100                 mPhoneParser);
101         ((TextView) view.findViewById(R.id.charge)).setText(info.batteryPercentString);
102         ((TextView) view.findViewById(R.id.estimation)).setText(info.remainingLabel);
103 
104         bindData(mChargingParser, R.string.battery_stats_charging_label, R.id.charging_group);
105         bindData(mScreenOn, R.string.battery_stats_screen_on_label, R.id.screen_on_group);
106         bindData(mGpsParser, R.string.battery_stats_gps_on_label, R.id.gps_group);
107         bindData(mFlashlightParser, R.string.battery_stats_flashlight_on_label,
108                 R.id.flashlight_group);
109         bindData(mCameraParser, R.string.battery_stats_camera_on_label, R.id.camera_group);
110         bindData(mWifiParser, R.string.battery_stats_wifi_running_label, R.id.wifi_group);
111         bindData(mCpuParser, R.string.battery_stats_wake_lock_label, R.id.cpu_group);
112         bindData(mPhoneParser, R.string.battery_stats_phone_signal_label, R.id.cell_network_group);
113     }
114 
bindData(BatteryActiveProvider provider, int label, int groupId)115     private void bindData(BatteryActiveProvider provider, int label, int groupId) {
116         View group = getView().findViewById(groupId);
117         group.setVisibility(provider.hasData() ? View.VISIBLE : View.GONE);
118         ((TextView) group.findViewById(android.R.id.title)).setText(label);
119         ((BatteryActiveView) group.findViewById(R.id.battery_active)).setProvider(provider);
120     }
121 
122     @Override
getMetricsCategory()123     public int getMetricsCategory() {
124         return MetricsEvent.FUELGAUGE_BATTERY_HISTORY_DETAIL;
125     }
126 }
127