Files
Android-pyApi/android_pyapi/android/content_sync.py
T
shuiyu1123 a51854455b 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关键字冲突
2026-06-24 14:15:56 +00:00

915 lines
31 KiB
Python

"""
Android Content Sync API — SyncManager, SyncAdapter, SyncResult, SyncRequest, ContentResolver, etc.
方法签名完全对齐 Android SDK
"""
from __future__ import annotations
import os
import sys
import time
import json
import uuid
import threading
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional, Set, Tuple, Callable
from .._core import Stub, AndroidOnlyError
from ..java.lang import RuntimeException
IllegalArgumentException = type("IllegalArgumentException", (RuntimeException,), {})
# ═══════════════════════════════════════════════════════════════
# 常量
# ═══════════════════════════════════════════════════════════════
# SYNC_* 常量
SYNC_EXTRAS_REQUIRE_CHARGING = "require_charging"
SYNC_EXTRAS_UPLOAD = "upload"
SYNC_EXTRAS_MANUAL = "force"
SYNC_EXTRAS_IGNORE_BACKOFF = "ignore_backoff"
SYNC_EXTRAS_DO_NOT_RETRY = "do_not_retry"
SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS = "discard_local_deletions"
SYNC_EXTRAS_EXPEDITED = "expedited"
SYNC_EXTRAS_SCHEDULE_AS_EXPEDITED = "schedule_as_expedited"
SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS = "override_too_many_deletions"
SYNC_EXTRAS_ALLOW_METERED = "allow_metered"
SYNC_EXTRAS_INITIALIZE = "initialize"
SYNC_EXTRAS_VIRTUAL_EXTRAS = "virtual_extras"
SYNC_EXTRAS_IGNORE_SETTINGS = "ignore_settings"
SYNC_EXTRAS_IS_EXPEDITED = "is_expedited"
SYNC_EXTRAS_IS_RETRY = "is_retry"
# SYNC_ERROR 常量
SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS = 1
SYNC_ERROR_AUTHENTICATION = 2
SYNC_ERROR_IO = 3
SYNC_ERROR_PARSE = 4
SYNC_ERROR_CONFLICT = 5
SYNC_ERROR_TOO_MANY_DELETIONS = 6
SYNC_ERROR_TOO_MANY_RETRIES = 7
SYNC_ERROR_INTERNAL = 8
SYNC_ERROR_SYNC_EXTRAS_INVALID = 9
SYNC_ERROR_REMOTE_SERVER_ERROR = 10
SYNC_ERROR_MISMATCHED_UID = 11
SYNC_ERROR_USER_CANCELED = 12
# 通知码
NOTIFY_SYNC_RESULT = 0
NOTIFY_SETTINGS_CHANGE = 1
NOTIFY_SYNC_START = 2
NOTIFY_SYNC_STOP = 3
# 同步触发器
SYNC_TRIGGER_MANUAL = 0
SYNC_TRIGGER_AUTO = 1
SYNC_TRIGGER_EXPEDITED = 2
SYNC_TRIGGER_SCHEDULED = 3
# 同步状态
SYNC_STATUS_PENDING = 0
SYNC_STATUS_IN_PROGRESS = 1
SYNC_STATUS_SUCCESS = 2
SYNC_STATUS_ERROR = 3
SYNC_STATUS_CANCELLED = 4
# ═══════════════════════════════════════════════════════════════
# SyncResult
# ═══════════════════════════════════════════════════════════════
class SyncResult(Stub):
"""SyncResult — 同步结果"""
def __init__(self):
super().__init__()
self.syncAlreadlyInProgress = False
self.tooManyDeletions = False
self.tooManyRetries = False
self.databaseError = False
self.fullSyncRequested = False
self.partialSyncUnavailable = False
self.moreRecordsToGet = False
self.delayUntil = 0
self.stats: "SyncStats" = SyncStats()
self._sync_error = 0
self._sync_exception: Optional[Exception] = None
self._sync_start_time: Optional[float] = None
self._sync_end_time: Optional[float] = None
self._sync_duration_ms: Optional[int] = None
self._num_conflicts = 0
self._num_auth_exceptions = 0
self._num_io_exceptions = 0
self._num_parse_exceptions = 0
self._num_skipped_entries = 0
self._num_inserted_entries = 0
self._num_updated_entries = 0
self._num_deleted_entries = 0
self._has_error = False
self._has_hard_error = False
self._has_soft_error = False
def hasError(self) -> bool:
return (
self.syncAlreadlyInProgress
or self.tooManyDeletions
or self.tooManyRetries
or self.databaseError
or self.stats.numAuthExceptions > 0
or self.stats.numIoExceptions > 0
or self.stats.numParseExceptions > 0
or self._has_error
)
def hasHardError(self) -> bool:
return (
self.tooManyDeletions
or self.databaseError
or self.stats.numAuthExceptions > 0
or self.stats.numParseExceptions > 0
)
def hasSoftError(self) -> bool:
return (
self.syncAlreadlyInProgress
or self.tooManyRetries
or self.stats.numIoExceptions > 0
)
def clear(self) -> None:
self.syncAlreadlyInProgress = False
self.tooManyDeletions = False
self.tooManyRetries = False
self.databaseError = False
self.fullSyncRequested = False
self.partialSyncUnavailable = False
self.moreRecordsToGet = False
self.delayUntil = 0
self.stats.clear()
self._has_error = False
self._has_hard_error = False
self._has_soft_error = False
def getStats(self) -> "SyncStats":
return self.stats
def toString(self) -> str:
return (
f"SyncResult(hasError={self.hasError()}, "
f"fullSyncRequested={self.fullSyncRequested}, "
f"moreRecordsToGet={self.moreRecordsToGet}, "
f"stats={self.stats})"
)
# ═══════════════════════════════════════════════════════════════
# SyncStats
# ═══════════════════════════════════════════════════════════════
class SyncStats(Stub):
"""SyncStats — 同步统计"""
def __init__(self):
super().__init__()
self.numAuthExceptions = 0
self.numIoExceptions = 0
self.numParseExceptions = 0
self.numConflictDetectedExceptions = 0
self.numSkippedEntries = 0
self.numInserts = 0
self.numUpdates = 0
self.numDeletes = 0
self.numEntries = 0
self._total_entries = 0
self._total_errors = 0
self._total_bytes_downloaded = 0
self._total_bytes_uploaded = 0
self._sync_duration_ms = 0
def clear(self) -> None:
self.numAuthExceptions = 0
self.numIoExceptions = 0
self.numParseExceptions = 0
self.numConflictDetectedExceptions = 0
self.numSkippedEntries = 0
self.numInserts = 0
self.numUpdates = 0
self.numDeletes = 0
self.numEntries = 0
self._total_bytes_downloaded = 0
self._total_bytes_uploaded = 0
self._sync_duration_ms = 0
def getTotalBytesDownloaded(self) -> int:
return self._total_bytes_downloaded
def setTotalBytesDownloaded(self, bytes_: int) -> None:
self._total_bytes_downloaded = bytes_
def getTotalBytesUploaded(self) -> int:
return self._total_bytes_uploaded
def setTotalBytesUploaded(self, bytes_: int) -> None:
self._total_bytes_uploaded = bytes_
def getSyncDurationMs(self) -> int:
return self._sync_duration_ms
def setSyncDurationMs(self, ms: int) -> None:
self._sync_duration_ms = ms
def toString(self) -> str:
return (
f"SyncStats(inserts={self.numInserts}, updates={self.numUpdates}, "
f"deletes={self.numDeletes}, errors={self._total_errors})"
)
# ═══════════════════════════════════════════════════════════════
# SyncInfo
# ═══════════════════════════════════════════════════════════════
class SyncInfo(Stub):
"""SyncInfo — 同步信息"""
def __init__(self, authority: str, account: Any, userId: int):
super().__init__()
self._authority = authority
self._account = account
self._user_id = userId
self._start_time = time.time()
self._status = SYNC_STATUS_PENDING
self._sync_id = str(uuid.uuid4())
self._elapsed_time_ms = 0
self._result: Optional[SyncResult] = None
self._description: Optional[str] = None
self._is_manual = False
self._is_expedited = False
self._trigger = SYNC_TRIGGER_AUTO
self._sync_request: Optional["SyncRequest"] = None
def getAuthority(self) -> str:
return self._authority
def getAccount(self) -> Any:
return self._account
def getUserId(self) -> int:
return self._user_id
def getStartTime(self) -> float:
return self._start_time
def getStatus(self) -> int:
return self._status
def setStatus(self, status: int) -> None:
self._status = status
def getSyncId(self) -> str:
return self._sync_id
def getElapsedTimeMs(self) -> int:
return self._elapsed_time_ms
def getResult(self) -> Optional[SyncResult]:
return self._result
def isManual(self) -> bool:
return self._is_manual
def isExpedited(self) -> bool:
return self._is_expedited
def getTriggerSource(self) -> int:
return self._trigger
def toString(self) -> str:
return f"SyncInfo(authority={self._authority}, status={self._status})"
# ═══════════════════════════════════════════════════════════════
# SyncStatusObserver
# ═══════════════════════════════════════════════════════════════
class SyncStatusObserver(Stub):
"""SyncStatusObserver — 同步状态观察者"""
def __init__(self):
super().__init__()
def onStatusChanged(self, which: int) -> None:
pass
def toString(self) -> str:
return "SyncStatusObserver"
# ═══════════════════════════════════════════════════════════════
# SyncAdapter
# ═══════════════════════════════════════════════════════════════
class SyncAdapter(Stub):
"""SyncAdapter — 同步适配器基类"""
def __init__(self, context: Any, autoInitialize: bool, allowParallelSyncs: bool):
super().__init__()
self._context = context
self._auto_initialize = autoInitialize
self._allow_parallel_syncs = allowParallelSyncs
self._sync_auto_initialized = False
self._is_initialized = False
self._options: Dict[str, Any] = {}
def onPerformSync(
self,
account: Any,
extras: Any,
authority: str,
provider: Any,
syncResult: SyncResult,
) -> None:
pass
def onSyncCanceled(self) -> None:
pass
def onSecurityException(self, account: Any, authority: str, exception: Any) -> None:
pass
def onUnsyncableAccount(self) -> bool:
return True
def getAutoInitialize(self) -> bool:
return self._auto_initialize
def getAllowParallelSyncs(self) -> bool:
return self._allow_parallel_syncs
def isSyncAdapterInitialized(self) -> bool:
return self._is_initialized
def toString(self) -> str:
return f"SyncAdapter(auto_init={self._auto_initialize}, parallel={self._allow_parallel_syncs})"
# ═══════════════════════════════════════════════════════════════
# SyncRequest
# ═══════════════════════════════════════════════════════════════
class SyncRequest(Stub):
"""SyncRequest — 同步请求"""
def __init__(self):
super().__init__()
self._account: Optional[Any] = None
self._authority: Optional[str] = None
self._extras: Dict[str, Any] = {}
self._sync_flexibility_time = 0
self._sync_run_time = 0
self._is_expedited = False
self._is_manual = False
self._is_periodic = False
self._ignore_backoff = False
self._ignore_settings = False
self._do_not_retry = False
self._require_charging = False
self._is_initialized = False
self._schedule_as_expedited = False
self._allow_metered = False
self._discard_local_deletions = False
self._override_too_many_deletions = False
def getAccount(self) -> Optional[Any]:
return self._account
def getAuthority(self) -> Optional[str]:
return self._authority
def getExtras(self) -> Dict[str, Any]:
return dict(self._extras)
def isExpedited(self) -> bool:
return self._is_expedited
def isPeriodic(self) -> bool:
return self._is_periodic
def getSyncFlexibilityTime(self) -> int:
return self._sync_flexibility_time
def getSyncRunTime(self) -> int:
return self._sync_run_time
def toString(self) -> str:
return f"SyncRequest(authority={self._authority}, periodic={self._is_periodic})"
# ═══════════════════════════════════════════════════════════
# SyncRequest.Builder
# ═══════════════════════════════════════════════════════════
class Builder(Stub):
"""SyncRequest.Builder — 同步请求构建器"""
def __init__(self):
super().__init__()
self._request = SyncRequest()
def sync(self) -> "SyncRequest.Builder":
return self
def setExpedited(self, expedited: bool) -> "SyncRequest.Builder":
self._request._is_expedited = expedited
return self
def setManual(self, manual: bool) -> "SyncRequest.Builder":
self._request._is_manual = manual
return self
def setExtras(self, extras: Dict[str, Any]) -> "SyncRequest.Builder":
self._request._extras = dict(extras)
return self
def setIgnoreBackoff(self, ignoreBackoff: bool) -> "SyncRequest.Builder":
self._request._ignore_backoff = ignoreBackoff
return self
def setIgnoreSettings(self, ignoreSettings: bool) -> "SyncRequest.Builder":
self._request._ignore_settings = ignoreSettings
return self
def setDoNotRetry(self, doNotRetry: bool) -> "SyncRequest.Builder":
self._request._do_not_retry = doNotRetry
return self
def setRequireCharging(self, requireCharging: bool) -> "SyncRequest.Builder":
self._request._require_charging = requireCharging
return self
def setScheduleAsExpedited(self, expedited: bool) -> "SyncRequest.Builder":
self._request._schedule_as_expedited = expedited
return self
def setAllowMetered(self, allowMetered: bool) -> "SyncRequest.Builder":
self._request._allow_metered = allowMetered
return self
def setDiscardLocalDeletions(self, discard: bool) -> "SyncRequest.Builder":
self._request._discard_local_deletions = discard
return self
def setOverrideTooManyDeletions(self, override: bool) -> "SyncRequest.Builder":
self._request._override_too_many_deletions = override
return self
def setSyncAdapter(self, account: Any, authority: str) -> "SyncRequest.Builder":
self._request._account = account
self._request._authority = authority
return self
def setPeriodic(self, pollFrequency: int, flexTime: int = 0) -> "SyncRequest.Builder":
self._request._is_periodic = True
self._request._sync_run_time = time.time() + pollFrequency
self._request._sync_flexibility_time = flexTime
return self
def build(self) -> SyncRequest:
return self._request
def toString(self) -> str:
return f"SyncRequest.Builder(existing={self._request})"
# ═══════════════════════════════════════════════════════════════
# SyncConfiguration
# ═══════════════════════════════════════════════════════════════
class SyncConfiguration(Stub):
"""SyncConfiguration — 同步配置"""
def __init__(self, authority: str, account: Any, userId: int = 0):
super().__init__()
self._authority = authority
self._account = account
self._user_id = userId
self._sync_enabled = True
self._sync_automatically = True
self._sync_interval = 3600
self._sync_flex = 300
self._is_active = False
self._pending = False
self._last_sync_time: Optional[float] = None
self._last_sync_result: Optional[SyncResult] = None
self._delay_until = 0
self._backoff_time = 0
self._backoff_delay = 0
self._authority_settings: Dict[str, Any] = {}
def getAuthority(self) -> str:
return self._authority
def getAccount(self) -> Any:
return self._account
def getUserId(self) -> int:
return self._user_id
def isSyncEnabled(self) -> bool:
return self._sync_enabled
def setSyncEnabled(self, enabled: bool) -> None:
self._sync_enabled = enabled
def isSyncAutomatically(self) -> bool:
return self._sync_automatically
def setSyncAutomatically(self, auto: bool) -> None:
self._sync_automatically = auto
def getSyncInterval(self) -> int:
return self._sync_interval
def setSyncInterval(self, intervalSec: int) -> None:
self._sync_interval = intervalSec
def getSyncFlex(self) -> int:
return self._sync_flex
def setSyncFlex(self, flexSec: int) -> None:
self._sync_flex = flexSec
def getDelayUntil(self) -> int:
return self._delay_until
def setDelayUntil(self, delayUntil: int) -> None:
self._delay_until = delayUntil
def getLastSyncTime(self) -> Optional[float]:
return self._last_sync_time
def setLastSyncTime(self, syncTime: float) -> None:
self._last_sync_time = syncTime
def isActive(self) -> bool:
return self._is_active
def isPending(self) -> bool:
return self._pending
def toString(self) -> str:
return f"SyncConfiguration(authority={self._authority}, enabled={self._sync_enabled})"
# ═══════════════════════════════════════════════════════════════
# SyncAdaptersCache
# ═══════════════════════════════════════════════════════════════
class SyncAdaptersCache(Stub):
"""SyncAdaptersCache — 同步适配器缓存"""
def __init__(self):
super().__init__()
self._adapters: Dict[str, SyncAdapter] = {}
self._configs: Dict[str, SyncConfiguration] = {}
self._lock = threading.Lock()
def put(self, authority: str, adapter: SyncAdapter) -> None:
with self._lock:
self._adapters[authority] = adapter
def get(self, authority: str) -> Optional[SyncAdapter]:
with self._lock:
return self._adapters.get(authority)
def remove(self, authority: str) -> None:
with self._lock:
self._adapters.pop(authority, None)
def containsAuthority(self, authority: str) -> bool:
with self._lock:
return authority in self._adapters
def getAuthorities(self) -> List[str]:
with self._lock:
return list(self._adapters.keys())
def getAdapterCount(self) -> int:
with self._lock:
return len(self._adapters)
def clear(self) -> None:
with self._lock:
self._adapters.clear()
def getConfiguration(self, authority: str) -> Optional[SyncConfiguration]:
with self._lock:
return self._configs.get(authority)
def putConfiguration(self, config: SyncConfiguration) -> None:
with self._lock:
self._configs[config.getAuthority()] = config
def getAllConfigurations(self) -> List[SyncConfiguration]:
with self._lock:
return list(self._configs.values())
def toString(self) -> str:
with self._lock:
return f"SyncAdaptersCache(adapters={len(self._adapters)}, configs={len(self._configs)})"
# ═══════════════════════════════════════════════════════════════
# SyncManager
# ═══════════════════════════════════════════════════════════════
class SyncManager(Stub):
"""SyncManager — 同步管理器 (桌面存根)"""
def __init__(self, context: Any = None):
super().__init__()
self._context = context
self._lock = threading.Lock()
self._active_syncs: Dict[str, SyncInfo] = {}
self._pending_syncs: List[SyncRequest] = []
self._observers: List[SyncStatusObserver] = []
self._adapters_cache = SyncAdaptersCache()
self._sync_automatically = True
self._master_sync_automatically = True
self._sync_enabled = True
self._is_syncable = True
self._sync_backoff_enabled = True
self._worker_thread: Optional[threading.Thread] = None
self._running = True
self._pending_sync_count = 0
self._total_sync_count = 0
self._last_sync_time: Optional[float] = None
self._start_worker()
def _start_worker(self) -> None:
if self._worker_thread is None or not self._worker_thread.is_alive():
self._running = True
self._worker_thread = threading.Thread(target=self._sync_loop, daemon=True)
self._worker_thread.start()
def _sync_loop(self) -> None:
while self._running:
with self._lock:
if self._pending_syncs:
req = self._pending_syncs.pop(0)
self._execute_sync(req)
time.sleep(1.0)
def _execute_sync(self, request: SyncRequest) -> None:
authority = request.getAuthority()
if authority:
info = SyncInfo(authority, request._account, 0)
self._active_syncs[authority] = info
self._total_sync_count += 1
adapter = self._adapters_cache.get(authority)
if adapter:
result = SyncResult()
try:
adapter.onPerformSync(
request._account, request._extras, authority, None, result
)
except Exception:
pass
info._result = result
time.sleep(0.1)
self._active_syncs.pop(authority, None)
self._last_sync_time = time.time()
def getSyncableAccountsForAuthority(self, authority: str) -> List[Any]:
return []
def getSyncableAccounts(self) -> List[Any]:
return []
def scheduleSync(self, request: SyncRequest) -> None:
with self._lock:
self._pending_syncs.append(request)
self._pending_sync_count = len(self._pending_syncs)
def schedule(self, account: Any, authority: str, extras: Any) -> None:
req = SyncRequest.Builder().setSyncAdapter(account, authority).build()
self.scheduleSync(req)
def cancelSync(self, request: SyncRequest) -> None:
with self._lock:
self._pending_syncs = [
r for r in self._pending_syncs
if r.getAuthority() != request.getAuthority()
]
self._pending_sync_count = len(self._pending_syncs)
def cancelSync(self, authority: str = None) -> None:
with self._lock:
if authority:
self._pending_syncs = [
r for r in self._pending_syncs
if r.getAuthority() != authority
]
else:
self._pending_syncs.clear()
self._pending_sync_count = len(self._pending_syncs)
def getCurrentSyncs(self) -> List[SyncInfo]:
with self._lock:
return list(self._active_syncs.values())
def getSyncAutomatically(self, account: Any, authority: str) -> bool:
return self._sync_automatically
def setSyncAutomatically(self, account: Any, authority: str, sync: bool) -> None:
self._sync_automatically = sync
def getMasterSyncAutomatically(self) -> bool:
return self._master_sync_automatically
def setMasterSyncAutomatically(self, sync: bool) -> None:
self._master_sync_automatically = sync
def setIsSyncable(self, account: Any, authority: str, syncable: int) -> None:
self._is_syncable = syncable != 0
def getIsSyncable(self, account: Any, authority: str) -> int:
return 1 if self._is_syncable else 0
def addStatusChangeListener(self, which: int, observer: SyncStatusObserver) -> None:
if observer not in self._observers:
self._observers.append(observer)
def removeStatusChangeListener(self, observer: SyncStatusObserver) -> None:
if observer in self._observers:
self._observers.remove(observer)
def notifyStatusChange(self, which: int) -> None:
for observer in self._observers:
try:
observer.onStatusChanged(which)
except Exception:
pass
def getSyncAdapterTypes(self) -> List[Any]:
return []
def getSyncAdapterPackagesForAuthority(self, authority: str) -> List[str]:
return []
def isSyncActive(self, account: Any, authority: str) -> bool:
with self._lock:
return authority in self._active_syncs
def isSyncPending(self, account: Any, authority: str) -> bool:
with self._lock:
for req in self._pending_syncs:
if req.getAuthority() == authority:
return True
return False
def getSyncInfo(self, authority: str) -> Optional[SyncInfo]:
with self._lock:
return self._active_syncs.get(authority)
def getAdaptersCache(self) -> SyncAdaptersCache:
return self._adapters_cache
def getTotalSyncCount(self) -> int:
return self._total_sync_count
def getLastSyncTime(self) -> Optional[float]:
return self._last_sync_time
def getPendingSyncCount(self) -> int:
with self._lock:
return len(self._pending_syncs)
def toString(self) -> str:
with self._lock:
return (
f"SyncManager(active={len(self._active_syncs)}, "
f"pending={len(self._pending_syncs)}, "
f"total={self._total_sync_count})"
)
# ═══════════════════════════════════════════════════════════════
# ContentResolver (Sync 扩展)
# ═══════════════════════════════════════════════════════════════
class ContentResolverSync(Stub):
"""ContentResolver — 同步扩展方法"""
SYNC_EXTRAS_REQUIRE_CHARGING = SYNC_EXTRAS_REQUIRE_CHARGING
SYNC_EXTRAS_UPLOAD = SYNC_EXTRAS_UPLOAD
SYNC_EXTRAS_MANUAL = SYNC_EXTRAS_MANUAL
SYNC_EXTRAS_IGNORE_BACKOFF = SYNC_EXTRAS_IGNORE_BACKOFF
SYNC_EXTRAS_DO_NOT_RETRY = SYNC_EXTRAS_DO_NOT_RETRY
SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS = SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS
SYNC_EXTRAS_EXPEDITED = SYNC_EXTRAS_EXPEDITED
SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS = SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS
SYNC_EXTRAS_ALLOW_METERED = SYNC_EXTRAS_ALLOW_METERED
SYNC_EXTRAS_INITIALIZE = SYNC_EXTRAS_INITIALIZE
SYNC_EXTRAS_IGNORE_SETTINGS = SYNC_EXTRAS_IGNORE_SETTINGS
NOTIFY_SYNC_RESULT = NOTIFY_SYNC_RESULT
NOTIFY_SETTINGS_CHANGE = NOTIFY_SETTINGS_CHANGE
NOTIFY_SYNC_START = NOTIFY_SYNC_START
NOTIFY_SYNC_STOP = NOTIFY_SYNC_STOP
def __init__(self):
super().__init__()
@staticmethod
def requestSync(account: Any, authority: str, extras: Any) -> None:
pass
@staticmethod
def requestSync(request: SyncRequest) -> None:
pass
@staticmethod
def cancelSync(request: SyncRequest) -> None:
pass
@staticmethod
def cancelSync(account: Any, authority: str) -> None:
pass
@staticmethod
def getSyncAdapterTypes() -> List[Any]:
return []
@staticmethod
def getSyncAutomatically(account: Any, authority: str) -> bool:
return True
@staticmethod
def setSyncAutomatically(account: Any, authority: str, sync: bool) -> None:
pass
@staticmethod
def getMasterSyncAutomatically() -> bool:
return True
@staticmethod
def setMasterSyncAutomatically(sync: bool) -> None:
pass
@staticmethod
def isSyncActive(account: Any, authority: str) -> bool:
return False
@staticmethod
def isSyncPending(account: Any, authority: str) -> bool:
return False
@staticmethod
def addStatusChangeListener(which: int, observer: SyncStatusObserver) -> None:
pass
@staticmethod
def removeStatusChangeListener(observer: SyncStatusObserver) -> None:
pass
@staticmethod
def validateSyncExtrasBundle(extras: Any) -> None:
pass
@staticmethod
def getPeriodicSyncs(account: Any, authority: str) -> List[SyncRequest]:
return []
@staticmethod
def addPeriodicSync(account: Any, authority: str, extras: Any, pollFrequency: int) -> None:
pass
@staticmethod
def removePeriodicSync(account: Any, authority: str, extras: Any) -> None:
pass
@staticmethod
def setIsSyncable(account: Any, authority: str, syncable: int) -> None:
pass
@staticmethod
def getIsSyncable(account: Any, authority: str) -> int:
return 1
@staticmethod
def getSyncAdapterPackagesForAuthority(authority: str) -> List[str]:
return []
@staticmethod
def invalidateSegments(authority: str) -> None:
pass
@staticmethod
def wrapSyncExtras(extras: Any) -> Any:
return extras
def toString(self) -> str:
return "ContentResolver(Sync)"
SyncRequest.Builder = SyncRequest.Builder