feat: 新增 42 个 Android API 模块
新增模块覆盖: 系统层 (14): system, security, print, opengl, renderscript, transition, test, service_notification, service_controls, service_quicksettings, service_wallpaper, service_autofill, service_dreams, service_vr 应用层 (13): app_admin, app_backup, app_job, app_usage, app_role, app_people, appwidget, companion, credentials, mtp, sip, telecom, speech 硬件媒体层 (15): hardware_display, hardware_fingerprint, hardware_usb, hardware_input, media_audiofx, media_browse, media_session, media_tv, media_midi, media_projection, uwb, se, view_autofill, view_textclassifier, view_translation 总计 94 个模块,75,342 行代码
This commit is contained in:
1 parent
8ad62be068
commit
506f9ac725
43 files changed
+16704
-23
No files matched your search
@@ -0,0 +1,214 @@
|
||||
"""
|
||||
Android Service QuickSettings 组件 — TileService, Tile 等
|
||||
方法签名完全对齐 Android SDK (android.service.quicksettings 包)
|
||||
"""
|
||||
|
||||
import time
|
||||
from typing import Any, Callable, Dict, List, Optional
|
||||
|
||||
from .._core import Stub, AndroidOnlyError
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# Tile
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
class Tile(Stub):
|
||||
"""Tile — 快捷设置磁贴"""
|
||||
|
||||
# 状态常量
|
||||
STATE_ACTIVE = 1
|
||||
STATE_INACTIVE = 2
|
||||
STATE_UNAVAILABLE = 0
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._state: int = Tile.STATE_INACTIVE
|
||||
self._label: str = ""
|
||||
self._subtitle: str = ""
|
||||
self._content_description: str = ""
|
||||
self._icon: Optional[Any] = None
|
||||
self._icon_res_id: int = 0
|
||||
self._meta_data: Optional[Dict[str, Any]] = None
|
||||
self._last_updated: int = 0
|
||||
|
||||
def getState(self) -> int:
|
||||
"""获取磁贴状态"""
|
||||
return self._state
|
||||
|
||||
def setState(self, state: int):
|
||||
"""设置磁贴状态"""
|
||||
self._state = state
|
||||
self._last_updated = int(time.time() * 1000)
|
||||
|
||||
def getLabel(self) -> str:
|
||||
"""获取标签"""
|
||||
return self._label
|
||||
|
||||
def setLabel(self, label: str):
|
||||
"""设置标签"""
|
||||
self._label = label
|
||||
self._last_updated = int(time.time() * 1000)
|
||||
|
||||
def getSubtitle(self) -> str:
|
||||
"""获取副标题"""
|
||||
return self._subtitle
|
||||
|
||||
def setSubtitle(self, subtitle: str):
|
||||
"""设置副标题"""
|
||||
self._subtitle = subtitle
|
||||
self._last_updated = int(time.time() * 1000)
|
||||
|
||||
def getContentDescription(self) -> str:
|
||||
"""获取内容描述"""
|
||||
return self._content_description
|
||||
|
||||
def setContentDescription(self, content_description: str):
|
||||
"""设置内容描述"""
|
||||
self._content_description = content_description
|
||||
|
||||
def getIcon(self) -> Optional[Any]:
|
||||
"""获取图标"""
|
||||
return self._icon
|
||||
|
||||
def setIcon(self, icon: Any):
|
||||
"""设置图标"""
|
||||
self._icon = icon
|
||||
self._last_updated = int(time.time() * 1000)
|
||||
|
||||
def updateTile(self):
|
||||
"""更新磁贴 (通知系统刷新)"""
|
||||
self._last_updated = int(time.time() * 1000)
|
||||
|
||||
def getMetaData(self) -> Optional[Dict[str, Any]]:
|
||||
return self._meta_data
|
||||
|
||||
def setMetaData(self, meta_data: Dict[str, Any]):
|
||||
self._meta_data = meta_data
|
||||
|
||||
def toString(self) -> str:
|
||||
state_names = {
|
||||
Tile.STATE_ACTIVE: "ACTIVE",
|
||||
Tile.STATE_INACTIVE: "INACTIVE",
|
||||
Tile.STATE_UNAVAILABLE: "UNAVAILABLE",
|
||||
}
|
||||
return (f"Tile(label={self._label}, state="
|
||||
f"{state_names.get(self._state, self._state)})")
|
||||
|
||||
def hashCode(self) -> int:
|
||||
return hash((self._label, self._state)) & 0x7FFFFFFF
|
||||
|
||||
def equals(self, other) -> bool:
|
||||
if not isinstance(other, Tile):
|
||||
return False
|
||||
return (self._label == other._label and self._state == other._state)
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# TileService
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
class TileService(Stub):
|
||||
"""TileService — 快捷设置磁贴服务"""
|
||||
|
||||
# 动作
|
||||
ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE"
|
||||
ACTION_REQUEST_LISTENING = (
|
||||
"android.service.quicksettings.action.REQUEST_LISTENING"
|
||||
)
|
||||
META_DATA_ACTIVE_TILE = "android.service.quicksettings.ACTIVE_TILE"
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._qs_tile: Optional[Tile] = None
|
||||
self._locked: bool = False
|
||||
self._secure: bool = False
|
||||
self._listening: bool = False
|
||||
self._tile_added: bool = False
|
||||
self._tile_removed: bool = False
|
||||
|
||||
@staticmethod
|
||||
def requestListeningState(context: Any, component: Any):
|
||||
"""请求监听状态 (Android-only)"""
|
||||
pass
|
||||
|
||||
def isLocked(self) -> bool:
|
||||
"""检查设备是否锁定"""
|
||||
return self._locked
|
||||
|
||||
def isSecure(self) -> bool:
|
||||
"""检查设备是否安全锁定"""
|
||||
return self._secure
|
||||
|
||||
def startActivity(self, intent: Any):
|
||||
"""启动 Activity (Android-only)"""
|
||||
raise AndroidOnlyError(
|
||||
"TileService.startActivity() 仅在 Android 设备上可用"
|
||||
)
|
||||
|
||||
def showDialog(self, dialog: Any):
|
||||
"""显示对话框"""
|
||||
pass
|
||||
|
||||
def getQsTile(self) -> Optional[Tile]:
|
||||
"""获取快速设置磁贴"""
|
||||
return self._qs_tile
|
||||
|
||||
def setQsTile(self, tile: Tile):
|
||||
self._qs_tile = tile
|
||||
|
||||
def unlockAndRun(self, runnable: Callable):
|
||||
"""解锁并运行"""
|
||||
runnable()
|
||||
|
||||
def onTileAdded(self):
|
||||
"""磁贴被添加时回调"""
|
||||
self._tile_added = True
|
||||
|
||||
def onTileRemoved(self):
|
||||
"""磁贴被移除时回调"""
|
||||
self._tile_removed = True
|
||||
|
||||
def onStartListening(self):
|
||||
"""开始监听时回调"""
|
||||
self._listening = True
|
||||
|
||||
def onStopListening(self):
|
||||
"""停止监听时回调"""
|
||||
self._listening = False
|
||||
|
||||
def onClick(self):
|
||||
"""被点击时回调"""
|
||||
if self._qs_tile:
|
||||
current_state = self._qs_tile.getState()
|
||||
if current_state == Tile.STATE_ACTIVE:
|
||||
self._qs_tile.setState(Tile.STATE_INACTIVE)
|
||||
elif current_state == Tile.STATE_INACTIVE:
|
||||
self._qs_tile.setState(Tile.STATE_ACTIVE)
|
||||
|
||||
def onDestroy(self):
|
||||
"""销毁时回调"""
|
||||
pass
|
||||
|
||||
def isListening(self) -> bool:
|
||||
return self._listening
|
||||
|
||||
def toString(self) -> str:
|
||||
return (f"TileService(locked={self._locked}, secure={self._secure}, "
|
||||
f"listening={self._listening})")
|
||||
|
||||
def hashCode(self) -> int:
|
||||
return id(self) & 0x7FFFFFFF
|
||||
|
||||
def equals(self, other) -> bool:
|
||||
return self is other
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# __all__
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
__all__ = [
|
||||
"TileService",
|
||||
"Tile",
|
||||
]
|
||||
Reference in new issue
Block a user