feat: 大规模扩充至212个模块/175K行代码 — 覆盖android/java/javax/org/dalvik全包

- android/ 167个模块 (app/content/os/view/widget/graphics/media/hardware/net/telephony/provider等)
- java/ 35个模块 (lang/io/util/net/nio/security/crypto/sql/beans/rmi/awt等)
- javax/ 4个模块 (net/crypto/security/sql)
- org/ 5个模块 (json/w3c_dom/xml_sax/xml_pull/apache_http)
- dalvik/ 1个模块 (system)
- ~3053个类/接口,方法签名完全对齐Android SDK
- 桌面跨平台运行 (Windows/macOS/Linux)
- 修复所有导入错误和Python关键字冲突
This commit is contained in:
shuiyu1123 committed 2026-06-24 14:15:56 +00:00
1 parent 506f9ac725
commit a51854455b
128 files changed
+100571 -3

No files matched your search

+218
View File
@@ -0,0 +1,218 @@
"""
Android hardware.thermal 组件 — ThermalManager, CoolingDevice, Temperature 等
方法签名完全对齐 Android SDK
"""
from __future__ import annotations
import random
import threading
from typing import Any, Callable, Dict, List, Optional
from .._core import Stub, AndroidOnlyError, HAS_PSUTIL
from ..java.lang import RuntimeException
IllegalArgumentException = type("IllegalArgumentException", (RuntimeException,), {})
# ═══════════════════════════════════════════════════════════════
# Temperature
# ═══════════════════════════════════════════════════════════════
class Temperature(Stub):
"""Temperature — 温度数据"""
TYPE_SKIN = 0
TYPE_CPU = 1
TYPE_GPU = 2
TYPE_BATTERY = 3
TYPE_NPU = 4
TYPE_POWER_AMP = 5
TYPE_MODEM = 6
TYPE_AMBIENT = 7
TYPE_USB_PORT = 8
TYPE_DISPLAY = 9
TYPE_BELT = 10
TYPE_CAMERA = 11
TYPE_TPU = 12
TYPE_POGO = 13
def __init__(self, type_: int = TYPE_AMBIENT, name: str = "ambient",
value: float = 25.0, status: int = 0):
super().__init__()
self._type = type_
self._name = name
self._value = value
self._status = status
def getType(self) -> int:
return self._type
def getName(self) -> str:
return self._name
def getValue(self) -> float:
return self._value
def getStatus(self) -> int:
return self._status
def toString(self) -> str:
return f"Temperature{{type={self._type}, name={self._name}, value={self._value}, status={self._status}}}"
# ═══════════════════════════════════════════════════════════════
# CoolingDevice
# ═══════════════════════════════════════════════════════════════
class CoolingDevice(Stub):
"""CoolingDevice — 冷却设备"""
def __init__(self, type_: int = 0, description: str = "cooling_fan",
current_level: int = 50):
super().__init__()
self._type = type_
self._description = description
self._current_level = current_level
def getType(self) -> int:
return self._type
def getDescription(self) -> str:
return self._description
def getCurrentLevel(self) -> int:
return self._current_level
def toString(self) -> str:
return f"CoolingDevice{{type={self._type}, description={self._description}, level={self._current_level}}}"
# ═══════════════════════════════════════════════════════════════
# ThermalStatus
# ═══════════════════════════════════════════════════════════════
class ThermalStatus(Stub):
"""ThermalStatus — 热状态"""
def __init__(self):
super().__init__()
self._status: int = ThermalManager.THERMAL_STATUS_NONE
self._temperatures: List[Temperature] = []
def getStatus(self) -> int:
return self._status
def getType(self) -> int:
return 0
def getName(self) -> str:
return "thermal_status"
def getTemperatures(self) -> List[Temperature]:
return list(self._temperatures)
def toString(self) -> str:
return f"ThermalStatus{{status={self._status}}}"
# ═══════════════════════════════════════════════════════════════
# ThermalManager
# ═══════════════════════════════════════════════════════════════
class ThermalManager(Stub):
"""ThermalManager — 热管理器"""
THERMAL_STATUS_NONE = 0
THERMAL_STATUS_LIGHT = 1
THERMAL_STATUS_MODERATE = 2
THERMAL_STATUS_SEVERE = 3
THERMAL_STATUS_CRITICAL = 4
THERMAL_STATUS_EMERGENCY = 5
THERMAL_STATUS_SHUTDOWN = 6
def __init__(self):
super().__init__()
self._lock = threading.Lock()
self._listeners: List[Callable[[int], None]] = []
self._thermal_status = self.THERMAL_STATUS_NONE
self._status_threshold = self.THERMAL_STATUS_CRITICAL
# Simulated temperatures
self._temperatures: List[Temperature] = [
Temperature(Temperature.TYPE_CPU, "cpu0", 45.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_GPU, "gpu0", 40.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_BATTERY, "battery", 30.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_AMBIENT, "ambient", 25.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_SKIN, "skin", 32.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_NPU, "npu0", 38.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_MODEM, "modem", 35.0, self.THERMAL_STATUS_NONE),
Temperature(Temperature.TYPE_DISPLAY, "display", 36.0, self.THERMAL_STATUS_NONE),
]
# Try to get actual CPU temps via psutil
if HAS_PSUTIL:
import psutil
try:
temps = psutil.sensors_temperatures()
if temps:
for name, entries in temps.items():
for entry in entries:
temp_type = getattr(Temperature, f"TYPE_{name.upper()}", Temperature.TYPE_AMBIENT)
self._temperatures.append(
Temperature(temp_type, entry.label or name,
entry.current, self.THERMAL_STATUS_NONE)
)
except Exception:
pass
# ── Thermal headroom ──
def getThermalHeadroom(self, forecastSeconds: int) -> float:
"""获取热余量百分比 (0.0 = 过温, 1.0 = 安全)"""
max_temp = max(t.getValue() for t in self._temperatures) if self._temperatures else 25.0
headroom = max(0.0, 1.0 - (max_temp - 25.0) / 75.0)
return min(1.0, headroom)
# ── Status ──
def getThermalStatus(self) -> int:
return self._thermal_status
def getThermalStatusThreshold(self) -> int:
return self._status_threshold
# ── Listeners ──
def addThermalStatusListener(self, listener: Callable[[int], None]):
with self._lock:
if listener not in self._listeners:
self._listeners.append(listener)
def removeThermalStatusListener(self, listener: Callable[[int], None]):
with self._lock:
if listener in self._listeners:
self._listeners.remove(listener)
def _notify_listeners(self, status: int):
with self._lock:
for listener in self._listeners:
listener(status)
# ── Helper ──
def toString(self) -> str:
return f"ThermalManager{{status={self._thermal_status}}}"
# ═══════════════════════════════════════════════════════════════
# __all__
# ═══════════════════════════════════════════════════════════════
__all__ = [
"ThermalManager",
"CoolingDevice",
"ThermalStatus",
"Temperature",
]