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