Files
Android-pyApi/android_pyapi/android/credentials.py
T
shuiyu1123 506f9ac725 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 行代码
2026-06-24 12:00:28 +00:00

418 lines
15 KiB
Python

"""
Android Credentials API — CredentialManager, CreateCredentialRequest, GetCredentialRequest 等
方法签名完全对齐 Android SDK
"""
import sys
from typing import Any, Dict, List, Optional, Set, Tuple, Callable
from .._core import Stub, AndroidOnlyError
from ..java.lang import RuntimeException
IllegalArgumentException = type("IllegalArgumentException", (RuntimeException,), {})
__all__ = [
"CredentialManager",
"CreateCredentialRequest",
"CreateCredentialResponse",
"GetCredentialRequest",
"GetCredentialResponse",
"CredentialDescription",
"CredentialManagerState",
"PrepareGetCredentialResponse",
]
# ═══════════════════════════════════════════════════════════════
# CredentialManager
# ═══════════════════════════════════════════════════════════════
class CredentialManager(Stub):
"""CredentialManager — 凭据管理器 (桌面存根)"""
ACTION_CREATE_CREDENTIAL = "android.credentials.action.CREATE_CREDENTIAL"
ACTION_GET_CREDENTIAL = "android.credentials.action.GET_CREDENTIAL"
ACTION_CLEAR_CREDENTIAL = "android.credentials.action.CLEAR_CREDENTIAL"
def __init__(self, context: Any = None):
super().__init__()
self._context = context
self._descriptions: List["CredentialDescription"] = []
def createCredential(
self,
request: "CreateCredentialRequest",
cancellationSignal: Any = None,
executor: Any = None,
callback: Callable = None,
):
"""创建凭据"""
raise AndroidOnlyError("CredentialManager.createCredential() 仅在 Android 设备上可用")
def getCredential(
self,
request: "GetCredentialRequest",
cancellationSignal: Any = None,
executor: Any = None,
callback: Callable = None,
):
"""获取凭据"""
raise AndroidOnlyError("CredentialManager.getCredential() 仅在 Android 设备上可用")
def clearCredentialState(
self,
request: Any = None,
cancellationSignal: Any = None,
executor: Any = None,
callback: Callable = None,
):
"""清除凭据状态"""
raise AndroidOnlyError("CredentialManager.clearCredentialState() 仅在 Android 设备上可用")
def registerCredentialDescription(
self,
credentialDescription: "CredentialDescription",
cancellationSignal: Any = None,
executor: Any = None,
callback: Callable = None,
):
"""注册凭据描述"""
if credentialDescription not in self._descriptions:
self._descriptions.append(credentialDescription)
def unregisterCredentialDescription(
self,
credentialDescription: "CredentialDescription",
):
"""注销凭据描述"""
if credentialDescription in self._descriptions:
self._descriptions.remove(credentialDescription)
def getCredentialManagerState(self) -> "CredentialManagerState":
"""获取凭据管理器状态"""
return CredentialManagerState()
def toString(self) -> str:
return f"CredentialManager@{hex(id(self))}"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# CreateCredentialRequest
# ═══════════════════════════════════════════════════════════════
class CreateCredentialRequest(Stub):
"""CreateCredentialRequest — 创建凭据请求"""
class Builder(Stub):
"""CreateCredentialRequest.Builder — 创建凭据请求构建器"""
def __init__(self, credentialType: str = ""):
super().__init__()
self._credential_type = credentialType
self._credential_data = None
self._candidate_query_data = None
self._always_send_app_uri = False
self._origin = ""
def setCredentialData(self, data: Any) -> "CreateCredentialRequest.Builder":
self._credential_data = data
return self
def setCandidateQueryData(
self, data: Any
) -> "CreateCredentialRequest.Builder":
self._candidate_query_data = data
return self
def setAlwaysSendAppUri(
self, alwaysSend: bool
) -> "CreateCredentialRequest.Builder":
self._always_send_app_uri = alwaysSend
return self
def setOrigin(self, origin: str) -> "CreateCredentialRequest.Builder":
self._origin = origin
return self
def build(self) -> "CreateCredentialRequest":
req = CreateCredentialRequest.__new__(CreateCredentialRequest)
req._credential_type = self._credential_type
req._credential_data = self._credential_data
req._candidate_query_data = self._candidate_query_data
req._always_send_app_uri = self._always_send_app_uri
req._origin = self._origin
return req
def toString(self) -> str:
return f"CreateCredentialRequest.Builder(type={self._credential_type})"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
def __init__(self):
super().__init__()
self._credential_type = ""
self._credential_data = None
self._candidate_query_data = None
self._always_send_app_uri = False
self._origin = ""
def getCredentialData(self) -> Optional[Any]:
return self._credential_data
def getCredentialType(self) -> str:
return self._credential_type
def getCandidateQueryData(self) -> Optional[Any]:
return self._candidate_query_data
def alwaysSendAppUri(self) -> bool:
return self._always_send_app_uri
def getOrigin(self) -> str:
return self._origin
def toString(self) -> str:
return f"CreateCredentialRequest(type={self._credential_type})"
def equals(self, other) -> bool:
if not isinstance(other, CreateCredentialRequest):
return False
return self._credential_type == other._credential_type
def hashCode(self) -> int:
return hash(self._credential_type) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# CreateCredentialResponse
# ═══════════════════════════════════════════════════════════════
class CreateCredentialResponse(Stub):
"""CreateCredentialResponse — 创建凭据响应"""
def __init__(self):
super().__init__()
self._credential_data = None
self._credential_data_result = None
def getCredentialData(self) -> Optional[Any]:
return self._credential_data
def getCredentialDataResult(self) -> Optional[Any]:
return self._credential_data_result
def toString(self) -> str:
return f"CreateCredentialResponse@{hex(id(self))}"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# GetCredentialRequest
# ═══════════════════════════════════════════════════════════════
class GetCredentialRequest(Stub):
"""GetCredentialRequest — 获取凭据请求"""
class Builder(Stub):
"""GetCredentialRequest.Builder — 获取凭据请求构建器"""
def __init__(self):
super().__init__()
self._credential_data = None
self._origin = ""
self._always_send_app_uri = False
self._candidate_query_data = None
def setCredentialData(
self, data: Any
) -> "GetCredentialRequest.Builder":
self._credential_data = data
return self
def setOrigin(self, origin: str) -> "GetCredentialRequest.Builder":
self._origin = origin
return self
def setAlwaysSendAppUri(
self, alwaysSend: bool
) -> "GetCredentialRequest.Builder":
self._always_send_app_uri = alwaysSend
return self
def setCandidateQueryData(
self, data: Any
) -> "GetCredentialRequest.Builder":
self._candidate_query_data = data
return self
def build(self) -> "GetCredentialRequest":
req = GetCredentialRequest.__new__(GetCredentialRequest)
req._credential_data = self._credential_data
req._origin = self._origin
req._always_send_app_uri = self._always_send_app_uri
req._candidate_query_data = self._candidate_query_data
return req
def toString(self) -> str:
return f"GetCredentialRequest.Builder@{hex(id(self))}"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
def __init__(self):
super().__init__()
self._credential_data = None
self._origin = ""
self._always_send_app_uri = False
self._candidate_query_data = None
def getCredentialData(self) -> Optional[Any]:
return self._credential_data
def getOrigin(self) -> str:
return self._origin
def alwaysSendAppUri(self) -> bool:
return self._always_send_app_uri
def getCandidateQueryData(self) -> Optional[Any]:
return self._candidate_query_data
def toString(self) -> str:
return f"GetCredentialRequest@{hex(id(self))}"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# GetCredentialResponse
# ═══════════════════════════════════════════════════════════════
class GetCredentialResponse(Stub):
"""GetCredentialResponse — 获取凭据响应"""
def __init__(self):
super().__init__()
self._credential_data_results: List[Any] = []
def getCredentialDataResults(self) -> List[Any]:
return list(self._credential_data_results)
def toString(self) -> str:
return f"GetCredentialResponse(results={len(self._credential_data_results)})"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# CredentialDescription
# ═══════════════════════════════════════════════════════════════
class CredentialDescription(Stub):
"""CredentialDescription — 凭据描述"""
def __init__(self, credentialType: str = "", origin: str = ""):
super().__init__()
self._credential_type = credentialType
self._origin = origin
def getCredentialType(self) -> str:
return self._credential_type
def getOrigin(self) -> str:
return self._origin
def toString(self) -> str:
return f"CredentialDescription(type={self._credential_type})"
def equals(self, other) -> bool:
if not isinstance(other, CredentialDescription):
return False
return (self._credential_type == other._credential_type
and self._origin == other._origin)
def hashCode(self) -> int:
return hash((self._credential_type, self._origin)) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# CredentialManagerState
# ═══════════════════════════════════════════════════════════════
class CredentialManagerState(Stub):
"""CredentialManagerState — 凭据管理器状态"""
def __init__(self):
super().__init__()
self._registered_descriptions: List["CredentialDescription"] = []
self._is_enabled = True
def getRegisteredCredentialDescriptions(self) -> List["CredentialDescription"]:
return list(self._registered_descriptions)
def isEnabled(self) -> bool:
return self._is_enabled
def toString(self) -> str:
return f"CredentialManagerState(enabled={self._is_enabled})"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF
# ═══════════════════════════════════════════════════════════════
# PrepareGetCredentialResponse
# ═══════════════════════════════════════════════════════════════
class PrepareGetCredentialResponse(Stub):
"""PrepareGetCredentialResponse — 预备获取凭据响应"""
def __init__(self):
super().__init__()
self._has_results = False
self._pending_credential = None
def hasResults(self) -> bool:
return self._has_results
def getPendingGetCredentialResponse(self) -> Optional["GetCredentialResponse"]:
return self._pending_credential
def toString(self) -> str:
return f"PrepareGetCredentialResponse(hasResults={self._has_results})"
def equals(self, other) -> bool:
return self is other
def hashCode(self) -> int:
return id(self) & 0x7FFFFFFF