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
@@ -1260,28 +1260,48 @@ class RecyclerView(ViewGroup):
|
||||
return False
|
||||
|
||||
def notifyDataSetChanged(self):
|
||||
pass
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onChanged()
|
||||
|
||||
def notifyItemChanged(self, position: int):
|
||||
pass
|
||||
def notifyItemChanged(self, position, payload=None):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeChanged(position, 1, payload)
|
||||
|
||||
def notifyItemInserted(self, position: int):
|
||||
pass
|
||||
def notifyItemInserted(self, position):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeInserted(position, 1)
|
||||
|
||||
def notifyItemRemoved(self, position: int):
|
||||
pass
|
||||
def notifyItemRemoved(self, position):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeRemoved(position, 1)
|
||||
|
||||
def notifyItemMoved(self, from_position: int, to_position: int):
|
||||
pass
|
||||
def notifyItemMoved(self, fromPosition, toPosition):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeMoved(fromPosition, toPosition, 1)
|
||||
|
||||
def notifyItemRangeChanged(self, position_start: int, item_count: int):
|
||||
pass
|
||||
def notifyItemRangeChanged(self, positionStart, itemCount, payload=None):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeChanged(positionStart, itemCount, payload)
|
||||
|
||||
def notifyItemRangeInserted(self, position_start: int, item_count: int):
|
||||
pass
|
||||
def notifyItemRangeInserted(self, positionStart, itemCount):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeInserted(positionStart, itemCount)
|
||||
|
||||
def notifyItemRangeRemoved(self, position_start: int, item_count: int):
|
||||
pass
|
||||
def notifyItemRangeRemoved(self, positionStart, itemCount):
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onItemRangeRemoved(positionStart, itemCount)
|
||||
|
||||
def registerAdapterDataObserver(self, observer):
|
||||
if not hasattr(self, '_observers'):
|
||||
self._observers = []
|
||||
self._observers.append(observer)
|
||||
|
||||
def unregisterAdapterDataObserver(self, observer):
|
||||
if hasattr(self, '_observers'):
|
||||
try:
|
||||
self._observers.remove(observer)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
def getStateRestorationPolicy(self) -> int:
|
||||
return 0
|
||||
@@ -2068,11 +2088,13 @@ class ScrollView(FrameLayout):
|
||||
def arrowScroll(self, direction: int) -> bool:
|
||||
return True
|
||||
|
||||
def smoothScrollTo(self, x: int, y: int):
|
||||
self._scroll_position = y
|
||||
def smoothScrollTo(self, x, y):
|
||||
self._scroll_x = x
|
||||
self._scroll_y = y
|
||||
|
||||
def smoothScrollBy(self, dx: int, dy: int):
|
||||
self._scroll_position += dy
|
||||
def smoothScrollBy(self, dx, dy):
|
||||
self._scroll_x = getattr(self, '_scroll_x', 0) + dx
|
||||
self._scroll_y = getattr(self, '_scroll_y', 0) + dy
|
||||
|
||||
def pageScroll(self, direction: int) -> bool:
|
||||
return True
|
||||
@@ -2106,11 +2128,13 @@ class HorizontalScrollView(FrameLayout):
|
||||
def arrowScroll(self, direction: int) -> bool:
|
||||
return True
|
||||
|
||||
def smoothScrollTo(self, x: int, y: int):
|
||||
pass
|
||||
def smoothScrollTo(self, x, y):
|
||||
self._scroll_x = x
|
||||
self._scroll_y = y
|
||||
|
||||
def smoothScrollBy(self, dx: int, dy: int):
|
||||
pass
|
||||
def smoothScrollBy(self, dx, dy):
|
||||
self._scroll_x = getattr(self, '_scroll_x', 0) + dx
|
||||
self._scroll_y = getattr(self, '_scroll_y', 0) + dy
|
||||
|
||||
def pageScroll(self, direction: int) -> bool:
|
||||
return True
|
||||
@@ -2795,16 +2819,24 @@ class BaseAdapter(Stub):
|
||||
return self.getView(position, convert_view, parent)
|
||||
|
||||
def notifyDataSetChanged(self):
|
||||
pass
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onChanged()
|
||||
|
||||
def notifyDataSetInvalidated(self):
|
||||
pass
|
||||
for observer in getattr(self, '_observers', []):
|
||||
observer.onInvalidated()
|
||||
|
||||
def registerDataSetObserver(self, observer: Any):
|
||||
pass
|
||||
def registerDataSetObserver(self, observer):
|
||||
if not hasattr(self, '_observers'):
|
||||
self._observers = []
|
||||
self._observers.append(observer)
|
||||
|
||||
def unregisterDataSetObserver(self, observer: Any):
|
||||
pass
|
||||
def unregisterDataSetObserver(self, observer):
|
||||
if hasattr(self, '_observers'):
|
||||
try:
|
||||
self._observers.remove(observer)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
class ArrayAdapter(BaseAdapter):
|
||||
|
||||
Reference in new issue
Block a user