新增模块覆盖: 系统层 (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 行代码
418 lines
15 KiB
Python
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 |