feat: 全面完善API — 补全核心类方法、存根转真实实现、Exception体系扩展
核心类方法补全: - Activity: +20方法 (requestWindowFeature, setTitle/getTitle, onKeyDown/onKeyUp, enterPictureInPictureMode, getReferrer, isTaskRoot, navigateUpTo等) - Fragment: +15方法 (getChildFragmentManager, getParentFragment, requireContext/requireActivity, setMenuVisibility等) - Intent: +20方法 (getParcelableExtra, setComponent/getComponent, getDataString, getScheme, putExtras等) - View: +20方法 (setLabelFor, setRotationX/Y, setForeground, setBackgroundTintList等) - KeyEvent: +7方法 (getCharacters, isSystem, isPrintingKey, isModifierKey, startTracking等) - Paint: +12方法 (setStrokeCap/Join, getTextBounds, setBlendMode, setLetterSpacing等) - Notification.Builder: +10方法 (setProgress, setShowWhen, setOnlyAlertOnce, setSound等) 存根转真实实现: - TrafficStats: 读取 /proc/net/dev 返回真实网络流量 - RecyclerView.Adapter: 观察者模式触发通知 - BaseAdapter: 观察者模式触发通知 - ExifInterface: 使用PIL实现图片翻转/旋转 - Process: 使用os.kill实现进程信号 - FileUtils: 真实文件I/O - SharedPreferences: 监听器模式 - TelephonyManager.listen: 维护监听器列表 - ScrollView.smoothScrollTo: 更新滚动位置 Exception体系扩展: - 新增15个Exception/Error类 (ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchElementException, AssertionError, OutOfMemoryError, StackOverflowError, NoClassDefFoundError, UnsatisfiedLinkError, LinkageError, VerifyError, AbstractMethodError, IncompatibleClassChangeError, ExceptionInInitializerError) Math/System/Thread/StringBuilder/Integer增强: - Math: +20方法 (subtractExact, multiplyExact, toIntExact, floorDiv/floorMod, fma等) - System: getProperties/setProperties/mapLibraryName/getLogger - Thread: +10方法 (getUncaughtExceptionHandler, getAllStackTraces, getStackTrace, holdLock等) - StringBuilder: +7方法 (ensureCapacity, trimToSize, setLength, subSequence等) - Integer: +8静态方法 (compare, compareUnsigned, divideUnsigned, sum, max, min等) 修复: - app_fragment.py: 使用java.lang.IllegalStateException替代本地定义 - content_intent.py: Intent.setData/getScheme正确从Uri提取scheme - view_ext.py: KeyEvent继承view.KeyEvent获取所有KEYCODE常量 - __init__.py: 补全Fragment/KeyEvent/MotionEvent/TrafficStats/RecyclerView等导出 统计: 221模块, 3660类, 30826方法, 180217行
This commit is contained in:
1 parent
e316e18d98
commit
39b1da37c9
16 files changed
+1274
-107
No files matched your search
@@ -938,6 +938,106 @@ class View(Stub):
|
||||
def onApplyWindowInsets(self, insets):
|
||||
return insets
|
||||
|
||||
def setOnCreateContextMenuListener(self, listener):
|
||||
self._on_create_context_menu_listener = listener
|
||||
return self
|
||||
|
||||
def getBaseline(self):
|
||||
return -1
|
||||
|
||||
def setFocusableInTouchMode(self, focusable):
|
||||
self._focusable_in_touch_mode = focusable
|
||||
|
||||
def isFocusableInTouchMode(self):
|
||||
return getattr(self, '_focusable_in_touch_mode', False)
|
||||
|
||||
def setRotationX(self, rotationX):
|
||||
self._rotation_x = rotationX
|
||||
|
||||
def getRotationX(self):
|
||||
return getattr(self, '_rotation_x', 0.0)
|
||||
|
||||
def setRotationY(self, rotationY):
|
||||
self._rotation_y = rotationY
|
||||
|
||||
def getRotationY(self):
|
||||
return getattr(self, '_rotation_y', 0.0)
|
||||
|
||||
def setCameraDistance(self, distance):
|
||||
self._camera_distance = distance
|
||||
|
||||
def getCameraDistance(self):
|
||||
return getattr(self, '_camera_distance', 0.0)
|
||||
|
||||
def setForeground(self, foreground):
|
||||
self._foreground = foreground
|
||||
|
||||
def getForeground(self):
|
||||
return getattr(self, '_foreground', None)
|
||||
|
||||
def setBackgroundTintList(self, tint):
|
||||
self._background_tint = tint
|
||||
|
||||
def setBackgroundTintMode(self, tintMode):
|
||||
self._background_tint_mode = tintMode
|
||||
|
||||
def setScrollbarFadingEnabled(self, fadeScrollbars):
|
||||
self._fade_scrollbars = fadeScrollbars
|
||||
|
||||
def isScrollbarFadingEnabled(self):
|
||||
return getattr(self, '_fade_scrollbars', True)
|
||||
|
||||
def setVerticalScrollBarEnabled(self, enabled):
|
||||
self._vertical_scrollbar = enabled
|
||||
|
||||
def isVerticalScrollBarEnabled(self):
|
||||
return getattr(self, '_vertical_scrollbar', True)
|
||||
|
||||
def setHorizontalScrollBarEnabled(self, enabled):
|
||||
self._horizontal_scrollbar = enabled
|
||||
|
||||
def isHorizontalScrollBarEnabled(self):
|
||||
return getattr(self, '_horizontal_scrollbar', True)
|
||||
|
||||
def setLabelFor(self, id):
|
||||
self._label_for = id
|
||||
|
||||
def getLabelFor(self):
|
||||
return getattr(self, '_label_for', 0)
|
||||
|
||||
def cancelLongPress(self):
|
||||
pass
|
||||
|
||||
def setPaddingRelative(self, start, top, end, bottom):
|
||||
self._padding_start = start
|
||||
self._padding_top = top
|
||||
self._padding_end = end
|
||||
self._padding_bottom = bottom
|
||||
|
||||
def setSoundEffectsEnabled(self, soundEffectsEnabled):
|
||||
self._sound_effects = soundEffectsEnabled
|
||||
|
||||
def isSoundEffectsEnabled(self):
|
||||
return getattr(self, '_sound_effects', True)
|
||||
|
||||
def setHapticFeedbackEnabled(self, hapticFeedbackEnabled):
|
||||
self._haptic_feedback = hapticFeedbackEnabled
|
||||
|
||||
def isHapticFeedbackEnabled(self):
|
||||
return getattr(self, '_haptic_feedback', True)
|
||||
|
||||
def refreshDrawableState(self):
|
||||
pass
|
||||
|
||||
def getDrawableState(self):
|
||||
return []
|
||||
|
||||
def requestRectangleOnScreen(self, rectangle):
|
||||
return False
|
||||
|
||||
def setAllCaps(self, allCaps):
|
||||
self._all_caps = allCaps
|
||||
|
||||
|
||||
class MeasureSpec:
|
||||
"""MeasureSpec — 测量规格包装"""
|
||||
@@ -1993,6 +2093,28 @@ class KeyEvent(Stub):
|
||||
meta_state=event._meta_state,
|
||||
)
|
||||
|
||||
def getCharacters(self):
|
||||
return getattr(self, '_characters', None)
|
||||
|
||||
def isSystem(self):
|
||||
return False
|
||||
|
||||
def isPrintingKey(self):
|
||||
return False
|
||||
|
||||
def isModifierKey(self, keyCode):
|
||||
return keyCode in (KEYCODE_SHIFT_LEFT, KEYCODE_SHIFT_RIGHT, KEYCODE_ALT_LEFT, KEYCODE_ALT_RIGHT, KEYCODE_CTRL_LEFT, KEYCODE_CTRL_RIGHT, KEYCODE_META_LEFT, KEYCODE_META_RIGHT)
|
||||
|
||||
def startTracking(self):
|
||||
self._tracking = True
|
||||
|
||||
def isTracking(self):
|
||||
return getattr(self, '_tracking', False)
|
||||
|
||||
@staticmethod
|
||||
def keyCodeToString(keyCode):
|
||||
return f"KEYCODE_{keyCode}"
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# GestureDetector
|
||||
@@ -2700,14 +2822,18 @@ class SurfaceHolder(Stub):
|
||||
def setFormat(self, format: int):
|
||||
self._format = format
|
||||
|
||||
def lockCanvas(self) -> Any:
|
||||
return None
|
||||
def lockCanvas(self, *args):
|
||||
"""锁定画布并返回 Canvas 对象"""
|
||||
if hasattr(self, '_surface') and self._surface:
|
||||
from .graphics import Canvas, Bitmap
|
||||
if hasattr(self._surface, '_bitmap') and self._surface._bitmap:
|
||||
return Canvas(self._surface._bitmap)
|
||||
from .graphics import Canvas, Bitmap
|
||||
return Canvas(Bitmap(100, 100))
|
||||
|
||||
def lockCanvas(self, dirty: Any) -> Any:
|
||||
return None
|
||||
|
||||
def unlockCanvasAndPost(self, canvas: Any):
|
||||
pass
|
||||
def unlockCanvasAndPost(self, canvas):
|
||||
"""解锁画布并提交"""
|
||||
pass # 桌面环境无需实际提交
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
Reference in new issue
Block a user