""" Android os.health 组件 — HealthStats, HealthStatsWriter, UidHealthStats 等 方法签名完全对齐 Android SDK """ from __future__ import annotations from typing import Any, Dict, List, Optional from .._core import Stub, AndroidOnlyError from ..java.lang import RuntimeException IllegalArgumentException = type("IllegalArgumentException", (RuntimeException,), {}) # ═══════════════════════════════════════════════════════════════ # UidHealthStats # ═══════════════════════════════════════════════════════════════ class UidHealthStats(Stub): """UidHealthStats — UID 健康统计常量""" STATISTICS_SORTED_KEYS_COUNT = 0x10001 MEASUREMENT_REALTIME_BATTERY_MS = 0x20001 MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS = 0x20002 MEASUREMENT_FOREGROUND_APP_MS = 0x20003 MEASUREMENT_BACKGROUND_PIDS_MEASUREMENT = 0x20004 MEASUREMENT_REALTIME_BATTERY_MS_UNPLUGGED = 0x20005 MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS_UNPLUGGED = 0x20006 TIMER_FLASHLIGHT = 0x30001 TIMER_CAMERA = 0x30002 TIMER_VIDEO = 0x30003 TIMER_AUDIO = 0x30004 TIMER_WIFI = 0x30005 TIMER_BLUETOOTH = 0x30006 TIMER_GPS = 0x30007 TIMER_SENSORS = 0x30008 TIMER_MOBILE_RADIO_ACTIVE = 0x30009 TIMER_PARTIAL_WAKELOCK = 0x3000A TIMER_WIFI_SCAN = 0x3000B TIMER_WIFI_FULL_LOCK = 0x3000C TIMER_WIFI_MULTICAST = 0x3000D TIMER_WIFI_RADIO_ACTIVE = 0x3000E TIMER_AUDIO_JACK = 0x3000F TIMER_VIDEO_GPS = 0x30010 TIMER_VIDEO_TURBO = 0x30011 TIMER_VIDEO_LOCK = 0x30012 TIMER_OVERCOUNT = 0x40001 MEASUREMENT_OTHER_USER_ACTIVITY_COUNT = 0x50001 MEASUREMENT_BLUETOOTH_ACTIVITY_COUNT = 0x50002 MEASUREMENT_WIFI_ACTIVITY_COUNT = 0x50003 MEASUREMENT_MOBILE_RADIO_ACTIVITY_COUNT = 0x50004 TIMER_WIFI_RADIO_ACTIVITY = 0x60001 TIMER_BLUETOOTH_RADIO_ACTIVITY = 0x60002 TIMER_MOBILE_RADIO_ACTIVITY = 0x60003 MEASUREMENT_WIFI_IDLE_MS = 0x70001 MEASUREMENT_WIFI_RX_MS = 0x70002 MEASUREMENT_WIFI_TX_MS = 0x70003 MEASUREMENT_BLUETOOTH_IDLE_MS = 0x70004 MEASUREMENT_BLUETOOTH_RX_MS = 0x70005 MEASUREMENT_BLUETOOTH_TX_MS = 0x70006 MEASUREMENT_MOBILE_RADIO_IDLE_MS = 0x70007 MEASUREMENT_MOBILE_RADIO_RX_MS = 0x70008 MEASUREMENT_MOBILE_RADIO_TX_MS = 0x70009 TIMER_WIFI_RADIO_SCAN = 0x80001 TIMER_BLUETOOTH_RADIO_SCAN = 0x80002 TIMER_MOBILE_RADIO_SCAN = 0x80003 MEASUREMENT_WIFI_RADIO_ACTIVE_MS = 0x90001 MEASUREMENT_BLUETOOTH_RADIO_ACTIVE_MS = 0x90002 MEASUREMENT_MOBILE_RADIO_ACTIVE_MS = 0x90003 # ═══════════════════════════════════════════════════════════════ # PidHealthStats # ═══════════════════════════════════════════════════════════════ class PidHealthStats(Stub): """PidHealthStats — 进程健康统计常量""" MEASUREMENT_WAKE_NESTING_COUNT = 0x20001 MEASUREMENT_WAKE_SUM_MS = 0x20002 MEASUREMENT_WAKE_START_MS = 0x20003 # ═══════════════════════════════════════════════════════════════ # ProcessHealthStats # ═══════════════════════════════════════════════════════════════ class ProcessHealthStats(Stub): """ProcessHealthStats — 进程健康统计常量""" MEASUREMENT_USER_TIME_MS = 0x20001 MEASUREMENT_SYSTEM_TIME_MS = 0x20002 MEASUREMENT_STARTS_COUNT = 0x20003 MEASUREMENT_CRASHES_COUNT = 0x20004 MEASUREMENT_ANR_COUNT = 0x20005 MEASUREMENT_FOREGROUND_MS = 0x20006 # ═══════════════════════════════════════════════════════════════ # PackageHealthStats # ═══════════════════════════════════════════════════════════════ class PackageHealthStats(Stub): """PackageHealthStats — 包健康统计常量""" STATISTICS_SORTED_BY_TYPE = 0x10001 MEASUREMENTS_WAKEUP_ALARMS_COUNT = 0x20001 TIMERS_SERVICES = 0x30001 STATISTICS_SERVICES = 0x40001 # ═══════════════════════════════════════════════════════════════ # ServiceHealthStats # ═══════════════════════════════════════════════════════════════ class ServiceHealthStats(Stub): """ServiceHealthStats — 服务健康统计常量""" MEASUREMENT_START_SERVICE_COUNT = 0x20001 MEASUREMENT_LAUNCH_COUNT = 0x20002 MEASUREMENT_CRASH_COUNT = 0x20003 # ═══════════════════════════════════════════════════════════════ # HealthStats # ═══════════════════════════════════════════════════════════════ class HealthStats(Stub): """HealthStats — 健康统计数据""" def __init__(self, data: Optional[Dict[int, Any]] = None): super().__init__() self._data: Dict[int, Any] = data or {} def getMeasurement(self, key: int) -> int: return self._data.get(key, 0) def getTimer(self, key: int) -> Any: return self._data.get(key) def getTimers(self, key: int) -> List[Any]: return self._data.get(key, []) def getStats(self, key: int) -> "HealthStats": return self._data.get(key, HealthStats()) def getStatsArray(self, key: int) -> List["HealthStats"]: return self._data.get(key, []) def hasKey(self, key: int) -> bool: return key in self._data def getKeys(self) -> List[int]: return list(self._data.keys()) def toString(self) -> str: return f"HealthStats{{{len(self._data)} entries}}" # ═══════════════════════════════════════════════════════════════ # HealthStatsWriter # ═══════════════════════════════════════════════════════════════ class HealthStatsWriter(Stub): """HealthStatsWriter — 健康统计写入器""" def __init__(self, keys: Optional[List[int]] = None): super().__init__() self._data: Dict[int, Any] = {} def addMeasurement(self, key: int, value: int): self._data[key] = value def addTimer(self, key: int, count: int, time_ms: int): self._data[key] = (count, time_ms) def addTimers(self, key: int, values: List[Any]): self._data[key] = values def addStats(self, key: int, value: HealthStats): self._data[key] = value def addStatsArray(self, key: int, values: List[HealthStats]): self._data[key] = values def toHealthStats(self) -> HealthStats: return HealthStats(dict(self._data)) def toString(self) -> str: return f"HealthStatsWriter@{hex(id(self))}" # ═══════════════════════════════════════════════════════════════ # __all__ # ═══════════════════════════════════════════════════════════════ __all__ = [ "HealthStats", "HealthStatsWriter", "UidHealthStats", "PidHealthStats", "ProcessHealthStats", "PackageHealthStats", "ServiceHealthStats", ]