1 /*
2  * Copyright (C) 2008 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.internal.app;
18 
19 import android.bluetooth.BluetoothActivityEnergyInfo;
20 import android.os.BatteryUsageStats;
21 import android.os.BatteryUsageStatsQuery;
22 import android.os.BluetoothBatteryStats;
23 import android.os.ParcelFileDescriptor;
24 import android.os.WakeLockStats;
25 import android.os.WorkSource;
26 import android.os.connectivity.CellularBatteryStats;
27 import android.os.connectivity.WifiActivityEnergyInfo;
28 import android.os.connectivity.WifiBatteryStats;
29 import android.os.connectivity.GpsBatteryStats;
30 import android.os.health.HealthStatsParceler;
31 import android.telephony.DataConnectionRealTimeInfo;
32 import android.telephony.ModemActivityInfo;
33 import android.telephony.SignalStrength;
34 
35 interface IBatteryStats {
36     // These first methods are also called by native code, so must
37     // be kept in sync with frameworks/native/libs/binder/include_batterystats/batterystats/IBatteryStats.h
38     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStartSensor(int uid, int sensor)39     void noteStartSensor(int uid, int sensor);
40     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStopSensor(int uid, int sensor)41     void noteStopSensor(int uid, int sensor);
42     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStartVideo(int uid)43     void noteStartVideo(int uid);
44     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStopVideo(int uid)45     void noteStopVideo(int uid);
46     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStartAudio(int uid)47     void noteStartAudio(int uid);
48     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStopAudio(int uid)49     void noteStopAudio(int uid);
50     @EnforcePermission("UPDATE_DEVICE_STATS")
noteResetVideo()51     void noteResetVideo();
52     @EnforcePermission("UPDATE_DEVICE_STATS")
noteResetAudio()53     void noteResetAudio();
54     @EnforcePermission("UPDATE_DEVICE_STATS")
noteFlashlightOn(int uid)55     void noteFlashlightOn(int uid);
56     @EnforcePermission("UPDATE_DEVICE_STATS")
noteFlashlightOff(int uid)57     void noteFlashlightOff(int uid);
58     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStartCamera(int uid)59     void noteStartCamera(int uid);
60     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStopCamera(int uid)61     void noteStopCamera(int uid);
62     @EnforcePermission("UPDATE_DEVICE_STATS")
noteResetCamera()63     void noteResetCamera();
64     @EnforcePermission("UPDATE_DEVICE_STATS")
noteResetFlashlight()65     void noteResetFlashlight();
noteWakeupSensorEvent(long elapsedNanos, int uid, int handle)66     void noteWakeupSensorEvent(long elapsedNanos, int uid, int handle);
67 
68     // Remaining methods are only used in Java.
69     @EnforcePermission("BATTERY_STATS")
getBatteryUsageStats(in List<BatteryUsageStatsQuery> queries)70     List<BatteryUsageStats> getBatteryUsageStats(in List<BatteryUsageStatsQuery> queries);
71 
72     // Return true if we see the battery as currently charging.
73     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
74     @RequiresNoPermission
isCharging()75     boolean isCharging();
76 
77     // Return the computed amount of time remaining on battery, in milliseconds.
78     // Returns -1 if nothing could be computed.
79     @RequiresNoPermission
computeBatteryTimeRemaining()80     long computeBatteryTimeRemaining();
81 
82     // Return the computed amount of time remaining to fully charge, in milliseconds.
83     // Returns -1 if nothing could be computed.
84     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
85     @RequiresNoPermission
computeChargeTimeRemaining()86     long computeChargeTimeRemaining();
87 
88     @EnforcePermission("BATTERY_STATS")
computeBatteryScreenOffRealtimeMs()89     long computeBatteryScreenOffRealtimeMs();
90     @EnforcePermission("BATTERY_STATS")
getScreenOffDischargeMah()91     long getScreenOffDischargeMah();
92 
93     @EnforcePermission("UPDATE_DEVICE_STATS")
noteEvent(int code, String name, int uid)94     void noteEvent(int code, String name, int uid);
95 
96     @EnforcePermission("UPDATE_DEVICE_STATS")
noteSyncStart(String name, int uid)97     void noteSyncStart(String name, int uid);
98     @EnforcePermission("UPDATE_DEVICE_STATS")
noteSyncFinish(String name, int uid)99     void noteSyncFinish(String name, int uid);
100     @EnforcePermission("UPDATE_DEVICE_STATS")
noteJobStart(String name, int uid)101     void noteJobStart(String name, int uid);
102     @EnforcePermission("UPDATE_DEVICE_STATS")
noteJobFinish(String name, int uid, int stopReason)103     void noteJobFinish(String name, int uid, int stopReason);
104 
105     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStartWakelock(int uid, int pid, String name, String historyName, int type, boolean unimportantForLogging)106     void noteStartWakelock(int uid, int pid, String name, String historyName,
107             int type, boolean unimportantForLogging);
108     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStopWakelock(int uid, int pid, String name, String historyName, int type)109     void noteStopWakelock(int uid, int pid, String name, String historyName, int type);
110 
111     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStartWakelockFromSource(in WorkSource ws, int pid, String name, String historyName, int type, boolean unimportantForLogging)112     void noteStartWakelockFromSource(in WorkSource ws, int pid, String name, String historyName,
113             int type, boolean unimportantForLogging);
114     @EnforcePermission("UPDATE_DEVICE_STATS")
noteChangeWakelockFromSource(in WorkSource ws, int pid, String name, String histyoryName, int type, in WorkSource newWs, int newPid, String newName, String newHistoryName, int newType, boolean newUnimportantForLogging)115     void noteChangeWakelockFromSource(in WorkSource ws, int pid, String name, String histyoryName,
116             int type, in WorkSource newWs, int newPid, String newName,
117             String newHistoryName, int newType, boolean newUnimportantForLogging);
118     @EnforcePermission("UPDATE_DEVICE_STATS")
noteStopWakelockFromSource(in WorkSource ws, int pid, String name, String historyName, int type)119     void noteStopWakelockFromSource(in WorkSource ws, int pid, String name, String historyName,
120             int type);
121     @EnforcePermission("UPDATE_DEVICE_STATS")
noteLongPartialWakelockStart(String name, String historyName, int uid)122     void noteLongPartialWakelockStart(String name, String historyName, int uid);
123     @EnforcePermission("UPDATE_DEVICE_STATS")
noteLongPartialWakelockStartFromSource(String name, String historyName, in WorkSource workSource)124     void noteLongPartialWakelockStartFromSource(String name, String historyName,
125             in WorkSource workSource);
126     @EnforcePermission("UPDATE_DEVICE_STATS")
noteLongPartialWakelockFinish(String name, String historyName, int uid)127     void noteLongPartialWakelockFinish(String name, String historyName, int uid);
128     @EnforcePermission("UPDATE_DEVICE_STATS")
noteLongPartialWakelockFinishFromSource(String name, String historyName, in WorkSource workSource)129     void noteLongPartialWakelockFinishFromSource(String name, String historyName,
130             in WorkSource workSource);
131 
132     @EnforcePermission("UPDATE_DEVICE_STATS")
noteVibratorOn(int uid, long durationMillis)133     void noteVibratorOn(int uid, long durationMillis);
134     @EnforcePermission("UPDATE_DEVICE_STATS")
noteVibratorOff(int uid)135     void noteVibratorOff(int uid);
136     @EnforcePermission("UPDATE_DEVICE_STATS")
noteGpsChanged(in WorkSource oldSource, in WorkSource newSource)137     void noteGpsChanged(in WorkSource oldSource, in WorkSource newSource);
138     @EnforcePermission("UPDATE_DEVICE_STATS")
noteGpsSignalQuality(int signalLevel)139     void noteGpsSignalQuality(int signalLevel);
140     @EnforcePermission("UPDATE_DEVICE_STATS")
noteScreenState(int state)141     void noteScreenState(int state);
142     @EnforcePermission("UPDATE_DEVICE_STATS")
noteScreenBrightness(int brightness)143     void noteScreenBrightness(int brightness);
144     @EnforcePermission("UPDATE_DEVICE_STATS")
noteUserActivity(int uid, int event)145     void noteUserActivity(int uid, int event);
146     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWakeUp(String reason, int reasonUid)147     void noteWakeUp(String reason, int reasonUid);
148     @EnforcePermission("UPDATE_DEVICE_STATS")
noteInteractive(boolean interactive)149     void noteInteractive(boolean interactive);
150     @EnforcePermission("UPDATE_DEVICE_STATS")
noteConnectivityChanged(int type, String extra)151     void noteConnectivityChanged(int type, String extra);
152     @EnforcePermission("UPDATE_DEVICE_STATS")
noteMobileRadioPowerState(int powerState, long timestampNs, int uid)153     void noteMobileRadioPowerState(int powerState, long timestampNs, int uid);
154     @EnforcePermission("UPDATE_DEVICE_STATS")
notePhoneOn()155     void notePhoneOn();
156     @EnforcePermission("UPDATE_DEVICE_STATS")
notePhoneOff()157     void notePhoneOff();
158     @EnforcePermission("UPDATE_DEVICE_STATS")
notePhoneSignalStrength(in SignalStrength signalStrength)159     void notePhoneSignalStrength(in SignalStrength signalStrength);
160     @EnforcePermission("UPDATE_DEVICE_STATS")
notePhoneDataConnectionState(int dataType, boolean hasData, int serviceType, int nrFrequency)161     void notePhoneDataConnectionState(int dataType, boolean hasData, int serviceType, int nrFrequency);
162     @EnforcePermission("UPDATE_DEVICE_STATS")
notePhoneState(int phoneState)163     void notePhoneState(int phoneState);
164     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiOn()165     void noteWifiOn();
166     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiOff()167     void noteWifiOff();
168     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiRunning(in WorkSource ws)169     void noteWifiRunning(in WorkSource ws);
170     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiRunningChanged(in WorkSource oldWs, in WorkSource newWs)171     void noteWifiRunningChanged(in WorkSource oldWs, in WorkSource newWs);
172     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiStopped(in WorkSource ws)173     void noteWifiStopped(in WorkSource ws);
174     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiState(int wifiState, String accessPoint)175     void noteWifiState(int wifiState, String accessPoint);
176     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiSupplicantStateChanged(int supplState, boolean failedAuth)177     void noteWifiSupplicantStateChanged(int supplState, boolean failedAuth);
178     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiRssiChanged(int newRssi)179     void noteWifiRssiChanged(int newRssi);
180     @EnforcePermission("UPDATE_DEVICE_STATS")
noteFullWifiLockAcquired(int uid)181     void noteFullWifiLockAcquired(int uid);
182     @EnforcePermission("UPDATE_DEVICE_STATS")
noteFullWifiLockReleased(int uid)183     void noteFullWifiLockReleased(int uid);
184     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiScanStarted(int uid)185     void noteWifiScanStarted(int uid);
186     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiScanStopped(int uid)187     void noteWifiScanStopped(int uid);
188     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiMulticastEnabled(int uid)189     void noteWifiMulticastEnabled(int uid);
190     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiMulticastDisabled(int uid)191     void noteWifiMulticastDisabled(int uid);
192     @EnforcePermission("UPDATE_DEVICE_STATS")
noteFullWifiLockAcquiredFromSource(in WorkSource ws)193     void noteFullWifiLockAcquiredFromSource(in WorkSource ws);
194     @EnforcePermission("UPDATE_DEVICE_STATS")
noteFullWifiLockReleasedFromSource(in WorkSource ws)195     void noteFullWifiLockReleasedFromSource(in WorkSource ws);
196     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiScanStartedFromSource(in WorkSource ws)197     void noteWifiScanStartedFromSource(in WorkSource ws);
198     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiScanStoppedFromSource(in WorkSource ws)199     void noteWifiScanStoppedFromSource(in WorkSource ws);
200     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiBatchedScanStartedFromSource(in WorkSource ws, int csph)201     void noteWifiBatchedScanStartedFromSource(in WorkSource ws, int csph);
202     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiBatchedScanStoppedFromSource(in WorkSource ws)203     void noteWifiBatchedScanStoppedFromSource(in WorkSource ws);
204     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiRadioPowerState(int powerState, long timestampNs, int uid)205     void noteWifiRadioPowerState(int powerState, long timestampNs, int uid);
206     @EnforcePermission(anyOf = {"NETWORK_STACK", "android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK"})
noteNetworkInterfaceForTransports(String iface, in int[] transportTypes)207     void noteNetworkInterfaceForTransports(String iface, in int[] transportTypes);
208     @EnforcePermission("UPDATE_DEVICE_STATS")
noteNetworkStatsEnabled()209     void noteNetworkStatsEnabled();
210     @EnforcePermission("UPDATE_DEVICE_STATS")
noteDeviceIdleMode(int mode, String activeReason, int activeUid)211     void noteDeviceIdleMode(int mode, String activeReason, int activeUid);
212     @EnforcePermission("UPDATE_DEVICE_STATS")
setBatteryState(int status, int health, int plugType, int level, int temp, int volt, int chargeUAh, int chargeFullUAh, long chargeTimeToFullSeconds)213     void setBatteryState(int status, int health, int plugType, int level, int temp, int volt,
214             int chargeUAh, int chargeFullUAh, long chargeTimeToFullSeconds);
215 
216     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
217     @EnforcePermission("BATTERY_STATS")
getAwakeTimeBattery()218     long getAwakeTimeBattery();
219     @EnforcePermission("BATTERY_STATS")
getAwakeTimePlugged()220     long getAwakeTimePlugged();
221 
222     @EnforcePermission("UPDATE_DEVICE_STATS")
noteBleScanStarted(in WorkSource ws, boolean isUnoptimized)223     void noteBleScanStarted(in WorkSource ws, boolean isUnoptimized);
224     @EnforcePermission("UPDATE_DEVICE_STATS")
noteBleScanStopped(in WorkSource ws, boolean isUnoptimized)225     void noteBleScanStopped(in WorkSource ws, boolean isUnoptimized);
226     @EnforcePermission("UPDATE_DEVICE_STATS")
noteBleScanReset()227     void noteBleScanReset();
228     @EnforcePermission("UPDATE_DEVICE_STATS")
noteBleScanResults(in WorkSource ws, int numNewResults)229     void noteBleScanResults(in WorkSource ws, int numNewResults);
230 
231     /** {@hide} */
232     @EnforcePermission(anyOf = {"UPDATE_DEVICE_STATS", "BATTERY_STATS"})
getCellularBatteryStats()233     CellularBatteryStats getCellularBatteryStats();
234 
235     /** {@hide} */
236     @EnforcePermission(anyOf = {"UPDATE_DEVICE_STATS", "BATTERY_STATS"})
getWifiBatteryStats()237     WifiBatteryStats getWifiBatteryStats();
238 
239     /** {@hide} */
240     @EnforcePermission("BATTERY_STATS")
getGpsBatteryStats()241     GpsBatteryStats getGpsBatteryStats();
242 
243     /** {@hide} */
244     @EnforcePermission("BATTERY_STATS")
getWakeLockStats()245     WakeLockStats getWakeLockStats();
246 
247     /** {@hide} */
248     @EnforcePermission("BATTERY_STATS")
getBluetoothBatteryStats()249     BluetoothBatteryStats getBluetoothBatteryStats();
250 
251     @PermissionManuallyEnforced
takeUidSnapshot(int uid)252     HealthStatsParceler takeUidSnapshot(int uid);
253     @PermissionManuallyEnforced
takeUidSnapshots(in int[] uid)254     HealthStatsParceler[] takeUidSnapshots(in int[] uid);
255 
256     @EnforcePermission("UPDATE_DEVICE_STATS")
noteBluetoothControllerActivity(in BluetoothActivityEnergyInfo info)257     oneway void noteBluetoothControllerActivity(in BluetoothActivityEnergyInfo info);
258     @EnforcePermission("UPDATE_DEVICE_STATS")
noteModemControllerActivity(in ModemActivityInfo info)259     oneway void noteModemControllerActivity(in ModemActivityInfo info);
260     @EnforcePermission("UPDATE_DEVICE_STATS")
noteWifiControllerActivity(in WifiActivityEnergyInfo info)261     oneway void noteWifiControllerActivity(in WifiActivityEnergyInfo info);
262 
263     /** {@hide} */
264     @EnforcePermission("POWER_SAVER")
setChargingStateUpdateDelayMillis(int delay)265     boolean setChargingStateUpdateDelayMillis(int delay);
266 
267     /** Exposed as a test API. */
268     @EnforcePermission("DEVICE_POWER")
setChargerAcOnline(boolean online, boolean forceUpdate)269     void setChargerAcOnline(boolean online, boolean forceUpdate);
270     /** Exposed as a test API. */
271     @EnforcePermission("DEVICE_POWER")
setBatteryLevel(int level, boolean forceUpdate)272     void setBatteryLevel(int level, boolean forceUpdate);
273     /** Exposed as a test API. */
274     @EnforcePermission("DEVICE_POWER")
unplugBattery(boolean forceUpdate)275     void unplugBattery(boolean forceUpdate);
276     /** Exposed as a test API. */
277     @EnforcePermission("DEVICE_POWER")
resetBattery(boolean forceUpdate)278     void resetBattery(boolean forceUpdate);
279     /** Exposed as a test API. */
280     @EnforcePermission("DEVICE_POWER")
suspendBatteryInput()281     void suspendBatteryInput();
282 }
283