677 lines
23 KiB
Java
677 lines
23 KiB
Java
/*
|
|
* Copyright (C) 2019 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.os;
|
|
|
|
import android.annotation.IntDef;
|
|
import android.annotation.IntRange;
|
|
import android.annotation.NonNull;
|
|
import android.annotation.Nullable;
|
|
import android.annotation.RequiresPermission;
|
|
import android.annotation.SystemApi;
|
|
import android.annotation.SystemService;
|
|
import android.annotation.TestApi;
|
|
import android.content.Context;
|
|
import android.net.NetworkStack;
|
|
import android.os.connectivity.CellularBatteryStats;
|
|
import android.os.connectivity.WifiBatteryStats;
|
|
import android.telephony.DataConnectionRealTimeInfo;
|
|
|
|
import com.android.internal.app.IBatteryStats;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* This class provides an API surface for internal system components to report events that are
|
|
* needed for battery usage/estimation and battery blaming for apps.
|
|
*
|
|
* Note: This internally uses the same {@link IBatteryStats} binder service as the public
|
|
* {@link BatteryManager}.
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
@SystemService(Context.BATTERY_STATS_SERVICE)
|
|
public final class BatteryStatsManager {
|
|
/**
|
|
* Wifi states.
|
|
*
|
|
* @see #noteWifiState(int, String)
|
|
*/
|
|
/**
|
|
* Wifi fully off.
|
|
*/
|
|
public static final int WIFI_STATE_OFF = 0;
|
|
/**
|
|
* Wifi connectivity off, but scanning enabled.
|
|
*/
|
|
public static final int WIFI_STATE_OFF_SCANNING = 1;
|
|
/**
|
|
* Wifi on, but no saved infrastructure networks to connect to.
|
|
*/
|
|
public static final int WIFI_STATE_ON_NO_NETWORKS = 2;
|
|
/**
|
|
* Wifi on, but not connected to any infrastructure networks.
|
|
*/
|
|
public static final int WIFI_STATE_ON_DISCONNECTED = 3;
|
|
/**
|
|
* Wifi on and connected to a infrastructure network.
|
|
*/
|
|
public static final int WIFI_STATE_ON_CONNECTED_STA = 4;
|
|
/**
|
|
* Wifi on and connected to a P2P device, but no infrastructure connection to a network.
|
|
*/
|
|
public static final int WIFI_STATE_ON_CONNECTED_P2P = 5;
|
|
/**
|
|
* Wifi on and connected to both a P2P device and infrastructure connection to a network.
|
|
*/
|
|
public static final int WIFI_STATE_ON_CONNECTED_STA_P2P = 6;
|
|
/**
|
|
* SoftAp/Hotspot turned on.
|
|
*/
|
|
public static final int WIFI_STATE_SOFT_AP = 7;
|
|
|
|
/** @hide */
|
|
public static final int NUM_WIFI_STATES = WIFI_STATE_SOFT_AP + 1;
|
|
|
|
/** @hide */
|
|
@IntDef(prefix = { "WIFI_STATE_" }, value = {
|
|
WIFI_STATE_OFF,
|
|
WIFI_STATE_OFF_SCANNING,
|
|
WIFI_STATE_ON_NO_NETWORKS,
|
|
WIFI_STATE_ON_DISCONNECTED,
|
|
WIFI_STATE_ON_CONNECTED_STA,
|
|
WIFI_STATE_ON_CONNECTED_P2P,
|
|
WIFI_STATE_ON_CONNECTED_STA_P2P,
|
|
WIFI_STATE_SOFT_AP
|
|
})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface WifiState {}
|
|
|
|
/**
|
|
* Wifi supplicant daemon states.
|
|
*
|
|
* @see android.net.wifi.SupplicantState for detailed description of states.
|
|
* @see #noteWifiSupplicantStateChanged(int)
|
|
*/
|
|
/** @see android.net.wifi.SupplicantState#INVALID */
|
|
public static final int WIFI_SUPPL_STATE_INVALID = 0;
|
|
/** @see android.net.wifi.SupplicantState#DISCONNECTED*/
|
|
public static final int WIFI_SUPPL_STATE_DISCONNECTED = 1;
|
|
/** @see android.net.wifi.SupplicantState#INTERFACE_DISABLED */
|
|
public static final int WIFI_SUPPL_STATE_INTERFACE_DISABLED = 2;
|
|
/** @see android.net.wifi.SupplicantState#INACTIVE*/
|
|
public static final int WIFI_SUPPL_STATE_INACTIVE = 3;
|
|
/** @see android.net.wifi.SupplicantState#SCANNING*/
|
|
public static final int WIFI_SUPPL_STATE_SCANNING = 4;
|
|
/** @see android.net.wifi.SupplicantState#AUTHENTICATING */
|
|
public static final int WIFI_SUPPL_STATE_AUTHENTICATING = 5;
|
|
/** @see android.net.wifi.SupplicantState#ASSOCIATING */
|
|
public static final int WIFI_SUPPL_STATE_ASSOCIATING = 6;
|
|
/** @see android.net.wifi.SupplicantState#ASSOCIATED */
|
|
public static final int WIFI_SUPPL_STATE_ASSOCIATED = 7;
|
|
/** @see android.net.wifi.SupplicantState#FOUR_WAY_HANDSHAKE */
|
|
public static final int WIFI_SUPPL_STATE_FOUR_WAY_HANDSHAKE = 8;
|
|
/** @see android.net.wifi.SupplicantState#GROUP_HANDSHAKE */
|
|
public static final int WIFI_SUPPL_STATE_GROUP_HANDSHAKE = 9;
|
|
/** @see android.net.wifi.SupplicantState#COMPLETED */
|
|
public static final int WIFI_SUPPL_STATE_COMPLETED = 10;
|
|
/** @see android.net.wifi.SupplicantState#DORMANT */
|
|
public static final int WIFI_SUPPL_STATE_DORMANT = 11;
|
|
/** @see android.net.wifi.SupplicantState#UNINITIALIZED */
|
|
public static final int WIFI_SUPPL_STATE_UNINITIALIZED = 12;
|
|
|
|
/** @hide */
|
|
public static final int NUM_WIFI_SUPPL_STATES = WIFI_SUPPL_STATE_UNINITIALIZED + 1;
|
|
|
|
/** @hide */
|
|
@IntDef(prefix = { "WIFI_SUPPL_STATE_" }, value = {
|
|
WIFI_SUPPL_STATE_INVALID,
|
|
WIFI_SUPPL_STATE_DISCONNECTED,
|
|
WIFI_SUPPL_STATE_INTERFACE_DISABLED,
|
|
WIFI_SUPPL_STATE_INACTIVE,
|
|
WIFI_SUPPL_STATE_SCANNING,
|
|
WIFI_SUPPL_STATE_AUTHENTICATING,
|
|
WIFI_SUPPL_STATE_ASSOCIATING,
|
|
WIFI_SUPPL_STATE_ASSOCIATED,
|
|
WIFI_SUPPL_STATE_FOUR_WAY_HANDSHAKE,
|
|
WIFI_SUPPL_STATE_GROUP_HANDSHAKE,
|
|
WIFI_SUPPL_STATE_COMPLETED,
|
|
WIFI_SUPPL_STATE_DORMANT,
|
|
WIFI_SUPPL_STATE_UNINITIALIZED,
|
|
})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface WifiSupplState {}
|
|
|
|
|
|
private final IBatteryStats mBatteryStats;
|
|
|
|
/** @hide */
|
|
public BatteryStatsManager(IBatteryStats batteryStats) {
|
|
mBatteryStats = batteryStats;
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns BatteryUsageStats, which contains power attribution data on a per-subsystem
|
|
* and per-UID basis.
|
|
*
|
|
* @hide
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.BATTERY_STATS)
|
|
@NonNull
|
|
public BatteryUsageStats getBatteryUsageStats() {
|
|
return getBatteryUsageStats(BatteryUsageStatsQuery.DEFAULT);
|
|
}
|
|
|
|
/**
|
|
* Returns BatteryUsageStats, which contains power attribution data on a per-subsystem
|
|
* and per-UID basis.
|
|
*
|
|
* @hide
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.BATTERY_STATS)
|
|
@NonNull
|
|
public BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) {
|
|
return getBatteryUsageStats(List.of(query)).get(0);
|
|
}
|
|
|
|
/**
|
|
* Returns BatteryUsageStats, which contains power attribution data on a per-subsystem
|
|
* and per-UID basis.
|
|
*
|
|
* @hide
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.BATTERY_STATS)
|
|
@NonNull
|
|
public List<BatteryUsageStats> getBatteryUsageStats(List<BatteryUsageStatsQuery> queries) {
|
|
try {
|
|
return mBatteryStats.getBatteryUsageStats(queries);
|
|
} catch (RemoteException e) {
|
|
throw e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that the wifi connection RSSI has changed.
|
|
*
|
|
* @param newRssi The new RSSI value.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiRssiChanged(@IntRange(from = -127, to = 0) int newRssi) {
|
|
try {
|
|
mBatteryStats.noteWifiRssiChanged(newRssi);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that wifi was toggled on.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiOn() {
|
|
try {
|
|
mBatteryStats.noteWifiOn();
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that wifi was toggled off.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiOff() {
|
|
try {
|
|
mBatteryStats.noteWifiOff();
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that wifi state has changed.
|
|
*
|
|
* @param newWifiState The new wifi State.
|
|
* @param accessPoint SSID of the network if wifi is connected to STA, else null.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiState(@WifiState int newWifiState,
|
|
@Nullable String accessPoint) {
|
|
try {
|
|
mBatteryStats.noteWifiState(newWifiState, accessPoint);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that a new wifi scan has started.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiScanStartedFromSource(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteWifiScanStartedFromSource(ws);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that an ongoing wifi scan has stopped.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiScanStoppedFromSource(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteWifiScanStoppedFromSource(ws);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that a new wifi batched scan has started.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
* @param csph Channels scanned per hour.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiBatchedScanStartedFromSource(@NonNull WorkSource ws,
|
|
@IntRange(from = 0) int csph) {
|
|
try {
|
|
mBatteryStats.noteWifiBatchedScanStartedFromSource(ws, csph);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that an ongoing wifi batched scan has stopped.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiBatchedScanStoppedFromSource(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteWifiBatchedScanStoppedFromSource(ws);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves all the cellular related battery stats.
|
|
*
|
|
* @return Instance of {@link CellularBatteryStats}.
|
|
*/
|
|
@RequiresPermission(anyOf = {
|
|
android.Manifest.permission.BATTERY_STATS,
|
|
android.Manifest.permission.UPDATE_DEVICE_STATS})
|
|
public @NonNull CellularBatteryStats getCellularBatteryStats() {
|
|
try {
|
|
return mBatteryStats.getCellularBatteryStats();
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves all the wifi related battery stats.
|
|
*
|
|
* @return Instance of {@link WifiBatteryStats}.
|
|
*/
|
|
@RequiresPermission(anyOf = {
|
|
android.Manifest.permission.BATTERY_STATS,
|
|
android.Manifest.permission.UPDATE_DEVICE_STATS})
|
|
public @NonNull WifiBatteryStats getWifiBatteryStats() {
|
|
try {
|
|
return mBatteryStats.getWifiBatteryStats();
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves accumulate wake lock stats.
|
|
*
|
|
* @hide
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.BATTERY_STATS)
|
|
@NonNull
|
|
public WakeLockStats getWakeLockStats() {
|
|
try {
|
|
return mBatteryStats.getWakeLockStats();
|
|
} catch (RemoteException e) {
|
|
throw e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves accumulated bluetooth stats.
|
|
*
|
|
* @hide
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.BATTERY_STATS)
|
|
@NonNull
|
|
public BluetoothBatteryStats getBluetoothBatteryStats() {
|
|
try {
|
|
return mBatteryStats.getBluetoothBatteryStats();
|
|
} catch (RemoteException e) {
|
|
throw e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates an app acquiring full wifi lock.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportFullWifiLockAcquiredFromSource(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteFullWifiLockAcquiredFromSource(ws);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates an app releasing full wifi lock.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportFullWifiLockReleasedFromSource(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteFullWifiLockReleasedFromSource(ws);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that supplicant state has changed.
|
|
*
|
|
* @param newSupplState The new Supplicant state.
|
|
* @param failedAuth Boolean indicating whether there was a connection failure due to
|
|
* authentication failure.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiSupplicantStateChanged(@WifiSupplState int newSupplState,
|
|
boolean failedAuth) {
|
|
try {
|
|
mBatteryStats.noteWifiSupplicantStateChanged(newSupplState, failedAuth);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that an app has acquired the wifi multicast lock.
|
|
*
|
|
* @param ws Worksource with the uid of the app that acquired the wifi lock (to be used for
|
|
* battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiMulticastEnabled(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteWifiMulticastEnabled(ws.getAttributionUid());
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that an app has released the wifi multicast lock.
|
|
*
|
|
* @param ws Worksource with the uid of the app that released the wifi lock (to be used for
|
|
* battery blaming).
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiMulticastDisabled(@NonNull WorkSource ws) {
|
|
try {
|
|
mBatteryStats.noteWifiMulticastDisabled(ws.getAttributionUid());
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that the radio power state has changed.
|
|
*
|
|
* @param isActive indicates if the mobile radio is powered.
|
|
* @param uid Uid of this event. For the active state it represents the uid that was responsible
|
|
* for waking the radio, or -1 if the system was responsible for waking the radio.
|
|
* For inactive state, the UID should always be -1.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportMobileRadioPowerState(boolean isActive, int uid) {
|
|
try {
|
|
mBatteryStats.noteMobileRadioPowerState(getDataConnectionPowerState(isActive),
|
|
SystemClock.elapsedRealtimeNanos(), uid);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that the wifi power state has changed.
|
|
*
|
|
* @param isActive indicates if the wifi radio is powered.
|
|
* @param uid Uid of this event. For the active state it represents the uid that was responsible
|
|
* for waking the radio, or -1 if the system was responsible for waking the radio.
|
|
* For inactive state, the UID should always be -1.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportWifiRadioPowerState(boolean isActive, int uid) {
|
|
try {
|
|
mBatteryStats.noteWifiRadioPowerState(getDataConnectionPowerState(isActive),
|
|
SystemClock.elapsedRealtimeNanos(), uid);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Notifies the battery stats of a new interface, and the transport types of the network that
|
|
* includes that interface.
|
|
*
|
|
* @param iface The interface of the network.
|
|
* @param transportTypes The transport type of the network {@link Transport}.
|
|
* @hide
|
|
*/
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
@RequiresPermission(anyOf = {
|
|
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
|
android.Manifest.permission.NETWORK_STACK})
|
|
public void reportNetworkInterfaceForTransports(@NonNull String iface,
|
|
@NonNull int[] transportTypes) throws RuntimeException {
|
|
try {
|
|
mBatteryStats.noteNetworkInterfaceForTransports(iface, transportTypes);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that Bluetooth was toggled on.
|
|
*
|
|
* @param uid calling package uid
|
|
* @param reason why Bluetooth has been turned on
|
|
* @param packageName package responsible for this change
|
|
* @deprecated Bluetooth self report its state and no longer call this
|
|
*/
|
|
@Deprecated
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
|
|
public void reportBluetoothOn(int uid, int reason, @NonNull String packageName) {
|
|
}
|
|
|
|
/**
|
|
* Indicates that Bluetooth was toggled off.
|
|
*
|
|
* @param uid calling package uid
|
|
* @param reason why Bluetooth has been turned on
|
|
* @param packageName package responsible for this change
|
|
* @deprecated Bluetooth self report its state and no longer call this
|
|
*/
|
|
@Deprecated
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
|
|
public void reportBluetoothOff(int uid, int reason, @NonNull String packageName) {
|
|
}
|
|
|
|
/**
|
|
* Indicates that a new Bluetooth LE scan has started.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
* @param isUnoptimized whether or not the scan has a filter.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportBleScanStarted(@NonNull WorkSource ws, boolean isUnoptimized) {
|
|
try {
|
|
mBatteryStats.noteBleScanStarted(ws, isUnoptimized);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that an ongoing Bluetooth LE scan has stopped.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
* @param isUnoptimized whether or not the scan has a filter.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportBleScanStopped(@NonNull WorkSource ws, boolean isUnoptimized) {
|
|
try {
|
|
mBatteryStats.noteBleScanStopped(ws, isUnoptimized);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that Bluetooth LE has been reset.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportBleScanReset() {
|
|
try {
|
|
mBatteryStats.noteBleScanReset();
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that Bluetooth LE scan has received new results.
|
|
*
|
|
* @param ws worksource (to be used for battery blaming).
|
|
* @param numNewResults number of results received since last update.
|
|
*/
|
|
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
|
public void reportBleScanResults(@NonNull WorkSource ws, int numNewResults) {
|
|
try {
|
|
mBatteryStats.noteBleScanResults(ws, numNewResults);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
private static int getDataConnectionPowerState(boolean isActive) {
|
|
// TODO: DataConnectionRealTimeInfo is under telephony package but the constants are used
|
|
// for both Wifi and mobile. It would make more sense to separate the constants to a
|
|
// generic class or move it to generic package.
|
|
return isActive ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
|
|
: DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
|
|
}
|
|
|
|
/**
|
|
* Sets battery AC charger to enabled/disabled, and freezes the battery state.
|
|
* @hide
|
|
*/
|
|
@TestApi
|
|
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
|
|
public void setChargerAcOnline(boolean online, boolean forceUpdate) {
|
|
try {
|
|
mBatteryStats.setChargerAcOnline(online, forceUpdate);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets battery level, and freezes the battery state.
|
|
* @hide
|
|
*/
|
|
@TestApi
|
|
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
|
|
public void setBatteryLevel(int level, boolean forceUpdate) {
|
|
try {
|
|
mBatteryStats.setBatteryLevel(level, forceUpdate);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unplugs battery, and freezes the battery state.
|
|
* @hide
|
|
*/
|
|
@TestApi
|
|
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
|
|
public void unplugBattery(boolean forceUpdate) {
|
|
try {
|
|
mBatteryStats.unplugBattery(forceUpdate);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unfreezes battery state, returning to current hardware values.
|
|
* @hide
|
|
*/
|
|
@TestApi
|
|
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
|
|
public void resetBattery(boolean forceUpdate) {
|
|
try {
|
|
mBatteryStats.resetBattery(forceUpdate);
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Suspend charging even if plugged in.
|
|
* @hide
|
|
*/
|
|
@TestApi
|
|
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
|
|
public void suspendBatteryInput() {
|
|
try {
|
|
mBatteryStats.suspendBatteryInput();
|
|
} catch (RemoteException e) {
|
|
e.rethrowFromSystemServer();
|
|
}
|
|
}
|
|
} |