The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .editorconfig
├── .github
    ├── CODE_OF_CONDUCT.md
    ├── CONTRIBUTING.md
    ├── ISSUE_TEMPLATE
    │   ├── bug_report.yml
    │   ├── config.yml
    │   ├── feature_request.yml
    │   └── the_dev_feedback.yml
    ├── PULL_REQUEST_TEMPLATE.md
    └── workflows
    │   ├── auto_close_issues.yml
    │   ├── check_commit_message.yml
    │   ├── clean.yml
    │   ├── pr_ci.yml
    │   └── push_ci.yml
├── .gitignore
├── .gitmodules
├── .idea
    ├── codeStyles
    │   ├── Project.xml
    │   └── codeStyleConfig.xml
    ├── copyright
    │   ├── license.xml
    │   └── profiles_settings.xml
    ├── icon.png
    └── inspectionProfiles
    │   └── Project_Default.xml
├── LICENSE.md
├── PRIVACY_LICENSE.md
├── README.md
├── app
    ├── build.gradle.kts
    ├── icons
    │   ├── ChineseNewYearIcon
    │   │   └── ic_qauxiliary_ChineseNewYear
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   ├── QAPro
    │   │   └── ic_qauxiliary_pro
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   ├── classic
    │   │   ├── ic_qauxiliary_DarkBlue
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_LightBlue
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_LightOrange
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_black
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_brown
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_cyan
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_darkgreen
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_pro
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_purple
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_qnstyle
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   ├── ic_qauxiliary_qnstylelite
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   │   └── ic_qauxiliary_red
    │   │   │   ├── icon.xml
    │   │   │   ├── icon_qa_background.xml
    │   │   │   └── icon_qa_foreground.xml
    │   └── icon.xml
    ├── proguard-rules.pro
    └── src
    │   ├── debug
    │       └── java
    │       │   └── hook
    │       │       ├── DebugDump.kt
    │       │       ├── EnableAllHook.kt
    │       │       └── EnableQLog.kt
    │   └── main
    │       ├── AndroidManifest.xml
    │       ├── aidl
    │           └── io
    │           │   └── github
    │           │       └── qauxv
    │           │           └── lifecycle
    │           │               └── IShadowTmpFileProvider.aidl
    │       ├── assets
    │           ├── face.png
    │           ├── native_init
    │           ├── repeat.png
    │           └── xposed_init
    │       ├── cpp
    │           ├── CMakeLists.txt
    │           ├── dummy
    │           │   └── dummy.cc
    │           ├── jni
    │           │   └── dexkit_native_bridge.cc
    │           ├── misc
    │           │   ├── md5.cpp
    │           │   ├── md5.h
    │           │   ├── v2sign.cc
    │           │   ├── v2sign.h
    │           │   └── version.c
    │           ├── nativebridge
    │           │   └── native_bridge.h
    │           ├── ntkernel
    │           │   ├── NtRecallMsgHook.cc
    │           │   ├── NtRecallMsgHook.h
    │           │   └── card_msg_sender.cc
    │           ├── preload
    │           │   └── preload.cc
    │           ├── qauxv_core
    │           │   ├── HostInfo.cc
    │           │   ├── HostInfo.h
    │           │   ├── LsplantBridge.cc
    │           │   ├── LsplantBridge.h
    │           │   ├── NativeCoreBridge.cc
    │           │   ├── NativeCoreBridge.h
    │           │   ├── Natives.cpp
    │           │   ├── Natives.h
    │           │   ├── SilkCodec.cc
    │           │   ├── jni_method_registry.cc
    │           │   ├── jni_method_registry.h
    │           │   ├── linker_utils.cc
    │           │   ├── linker_utils.h
    │           │   ├── lsp_native_api.h
    │           │   ├── native_loader.cc
    │           │   ├── native_loader.h
    │           │   └── natives_utils.h
    │           └── utils
    │           │   ├── AobScanUtils.cc
    │           │   ├── AobScanUtils.h
    │           │   ├── ConcurrentHashSet.h
    │           │   ├── ConfigManager.cc
    │           │   ├── ConfigManager.h
    │           │   ├── ElfScan.cc
    │           │   ├── ElfScan.h
    │           │   ├── ElfView.cpp
    │           │   ├── ElfView.h
    │           │   ├── FileMemMap.cpp
    │           │   ├── FileMemMap.h
    │           │   ├── JniUtils.cc
    │           │   ├── JniUtils.h
    │           │   ├── Log.cc
    │           │   ├── Log.h
    │           │   ├── MemoryBuffer.h
    │           │   ├── MemoryDexLoader.cc
    │           │   ├── MemoryDexLoader.h
    │           │   ├── MemoryUtils.cc
    │           │   ├── MemoryUtils.h
    │           │   ├── ProcessView.cpp
    │           │   ├── ProcessView.h
    │           │   ├── TextUtils.cc
    │           │   ├── TextUtils.h
    │           │   ├── ThreadUtils.cc
    │           │   ├── ThreadUtils.h
    │           │   ├── arch_utils.cc
    │           │   ├── arch_utils.h
    │           │   ├── art_symbol_resolver.cc
    │           │   ├── art_symbol_resolver.h
    │           │   ├── auto_close_fd.cc
    │           │   ├── auto_close_fd.h
    │           │   ├── byte_array_output_stream.cc
    │           │   ├── byte_array_output_stream.h
    │           │   ├── debug_utils.cc
    │           │   ├── debug_utils.h
    │           │   ├── endian.h
    │           │   ├── shared_memory.cpp
    │           │   ├── shared_memory.h
    │           │   ├── string_operators.h
    │           │   ├── xz_decoder.cc
    │           │   └── xz_decoder.h
    │       ├── java
    │           ├── awoo
    │           │   └── linwenxuan04
    │           │   │   └── hook
    │           │   │       └── ChannelProxyHook.kt
    │           ├── cc
    │           │   ├── chenhe
    │           │   │   └── qqnotifyevo
    │           │   │   │   ├── core
    │           │   │   │       ├── AvatarManager.kt
    │           │   │   │       ├── NevoNotificationProcessor.kt
    │           │   │   │       └── NotificationProcessor.kt
    │           │   │   │   └── utils
    │           │   │   │       ├── NotifyChannel.kt
    │           │   │   │       ├── PreferencesUtils.kt
    │           │   │   │       ├── Tag.kt
    │           │   │   │       └── Utils.kt
    │           │   ├── hicore
    │           │   │   ├── Env.java
    │           │   │   ├── QApp
    │           │   │   │   └── QAppUtils.java
    │           │   │   ├── QQDecodeUtils
    │           │   │   │   └── DecodeForEncPic.java
    │           │   │   ├── ReflectUtil
    │           │   │   │   ├── MField.java
    │           │   │   │   ├── MMethod.java
    │           │   │   │   ├── MRes.java
    │           │   │   │   ├── XClass.java
    │           │   │   │   ├── XField.java
    │           │   │   │   └── XMethod.java
    │           │   │   ├── Utils
    │           │   │   │   ├── Async.java
    │           │   │   │   ├── ContextUtils.java
    │           │   │   │   ├── DataUtils.java
    │           │   │   │   ├── FileUtils.java
    │           │   │   │   ├── FunConf.java
    │           │   │   │   ├── FunProtoData.java
    │           │   │   │   ├── HttpUtils.java
    │           │   │   │   ├── ImageUtils.java
    │           │   │   │   ├── RandomUtils.java
    │           │   │   │   └── XLog.java
    │           │   │   ├── dialog
    │           │   │   │   └── RepeaterPlusIconSettingDialog.java
    │           │   │   ├── hook
    │           │   │   │   ├── DisablePopOutEmoticon.java
    │           │   │   │   ├── IgnorePhoneCallState.java
    │           │   │   │   ├── Repeater.java
    │           │   │   │   ├── RepeaterHelper.java
    │           │   │   │   ├── RepeaterPlus.java
    │           │   │   │   ├── ReplyMsgWithImg.java
    │           │   │   │   ├── ShowAccurateGaggedTime.java
    │           │   │   │   ├── ShowHideEmo.java
    │           │   │   │   ├── TroopMemberLeaveGreyTip.java
    │           │   │   │   ├── UnlockLeftSlipLimit.java
    │           │   │   │   ├── UnlockTroopNameLimit.kt
    │           │   │   │   ├── UploadTransparentAvatar.java
    │           │   │   │   └── stickerPanel
    │           │   │   │   │   ├── EmoOnlineLoader.java
    │           │   │   │   │   ├── EmoPanel.java
    │           │   │   │   │   ├── Hooker
    │           │   │   │   │       └── StickerPanelEntryHooker.java
    │           │   │   │   │   ├── ICreator.java
    │           │   │   │   │   ├── LocalDataHelper.java
    │           │   │   │   │   ├── MainItemImpl
    │           │   │   │   │       ├── InputFromLocalImpl.java
    │           │   │   │   │       ├── LocalStickerImpl.java
    │           │   │   │   │       ├── OnlinePreviewItemImpl.java
    │           │   │   │   │       ├── PanelSetImpl.java
    │           │   │   │   │       └── RecentStickerImpl.java
    │           │   │   │   │   ├── PanelUtils.java
    │           │   │   │   │   ├── QQGifDecoder.java
    │           │   │   │   │   └── RecentStickerHelper.java
    │           │   │   ├── message
    │           │   │   │   ├── bridge
    │           │   │   │   │   ├── Chat_facade_bridge.java
    │           │   │   │   │   └── Nt_kernel_bridge.java
    │           │   │   │   ├── chat
    │           │   │   │   │   ├── SessionHooker.java
    │           │   │   │   │   └── SessionUtils.java
    │           │   │   │   └── common
    │           │   │   │   │   ├── MsgBuilder.java
    │           │   │   │   │   ├── MsgSender.java
    │           │   │   │   │   └── MsgUtils.java
    │           │   │   └── ui
    │           │   │   │   ├── SimpleDragSortView.java
    │           │   │   │   └── handygridview
    │           │   │   │       ├── Child.java
    │           │   │   │       ├── Children.java
    │           │   │   │       ├── HandyGridView.java
    │           │   │   │       ├── listener
    │           │   │   │           ├── IDrawer.java
    │           │   │   │           └── OnItemCapturedListener.java
    │           │   │   │       ├── scrollrunner
    │           │   │   │           ├── ICarrier.java
    │           │   │   │           ├── OnItemMovedListener.java
    │           │   │   │           ├── OnceRunnable.java
    │           │   │   │           └── ScrollRunner.java
    │           │   │   │       └── utils
    │           │   │   │           ├── Pools.java
    │           │   │   │           ├── ReflectUtil.java
    │           │   │   │           └── SdkVerUtils.java
    │           │   ├── ioctl
    │           │   │   ├── dialog
    │           │   │   │   ├── RepeaterIconSettingDialog.java
    │           │   │   │   ├── RikkaBaseApkFormatDialog.java
    │           │   │   │   ├── RikkaCustomDeviceModelDialog.java
    │           │   │   │   ├── RikkaCustomMsgTimeFormatDialog.java
    │           │   │   │   └── WsaWarningDialog.kt
    │           │   │   ├── fragment
    │           │   │   │   ├── CustomSplashConfigFragment.kt
    │           │   │   │   ├── DatabaseListFragment.kt
    │           │   │   │   ├── DatabaseShrinkFragment.kt
    │           │   │   │   ├── DebugTestFragment.kt
    │           │   │   │   ├── ExfriendListFragment.java
    │           │   │   │   ├── FakeBatteryConfigFragment.java
    │           │   │   │   ├── FriendListExportFragment.java
    │           │   │   │   ├── JefsRuleConfigFragment.java
    │           │   │   │   ├── JunkCodeFragment.kt
    │           │   │   │   ├── Pcm2SilkTestFragment.kt
    │           │   │   │   └── RevokeMsgConfigFragment.kt
    │           │   │   ├── hook
    │           │   │   │   ├── AppCenterFix.java
    │           │   │   │   ├── DeletionObserver.java
    │           │   │   │   ├── SettingEntryHook.java
    │           │   │   │   ├── bak
    │           │   │   │   │   ├── MuteAtAllAndRedPacket.java
    │           │   │   │   │   └── RemovePokeGrayTips.kt
    │           │   │   │   ├── chat
    │           │   │   │   │   ├── BlockFluxThief.java
    │           │   │   │   │   ├── CustomMsgTimeFormat.java
    │           │   │   │   │   ├── DefaultBubbleHook.java
    │           │   │   │   │   ├── DefaultFont.java
    │           │   │   │   │   ├── DisableDropSticker.java
    │           │   │   │   │   ├── DisableEnterEffect.java
    │           │   │   │   │   ├── DisableLightInteraction.kt
    │           │   │   │   │   ├── DisablePokeEffect.java
    │           │   │   │   │   ├── DisableShakeWindow.java
    │           │   │   │   │   ├── EmoPicHook.java
    │           │   │   │   │   ├── FakeVipHook.java
    │           │   │   │   │   ├── FavMoreEmo.java
    │           │   │   │   │   ├── GagInfoDisclosure.kt
    │           │   │   │   │   ├── GalleryBgHook.java
    │           │   │   │   │   ├── HideGiftAnim.java
    │           │   │   │   │   ├── RoundAvatarHook.java
    │           │   │   │   │   └── SendGiftHook.java
    │           │   │   │   ├── entertainment
    │           │   │   │   │   ├── AddAccount.java
    │           │   │   │   │   ├── AutoMosaicName.kt
    │           │   │   │   │   ├── PokeNoCoolDown.kt
    │           │   │   │   │   └── ShowSelfMsgByLeft.kt
    │           │   │   │   ├── experimental
    │           │   │   │   │   ├── CardMsgSender.java
    │           │   │   │   │   ├── FakeBatteryHook.java
    │           │   │   │   │   ├── FileRecvRedirect.kt
    │           │   │   │   │   ├── ForcePadMode.kt
    │           │   │   │   │   ├── ForcePhoneMode.kt
    │           │   │   │   │   └── QrLoginAuthSecCheckMitigation.kt
    │           │   │   │   ├── file
    │           │   │   │   │   └── BaseApk.java
    │           │   │   │   ├── friend
    │           │   │   │   │   ├── ArbitraryFrdSourceId.java
    │           │   │   │   │   ├── CheckCommonGroup.java
    │           │   │   │   │   ├── CheckCommonGroupMenu.kt
    │           │   │   │   │   ├── FriendDeletionNotification.kt
    │           │   │   │   │   ├── OpenFriendChatHistory.kt
    │           │   │   │   │   └── ShowDeletedFriendListEntry.kt
    │           │   │   │   ├── guild
    │           │   │   │   │   ├── GuildCopyCardMsg.kt
    │           │   │   │   │   ├── HideGuildNewFeedHighLightText.kt
    │           │   │   │   │   └── RevokeGuildMsg.kt
    │           │   │   │   ├── mini
    │           │   │   │   │   └── HideMiniAppLoadingAd.kt
    │           │   │   │   ├── misc
    │           │   │   │   │   ├── AntiUpdate.kt
    │           │   │   │   │   ├── BrowserRestrictMitigation.java
    │           │   │   │   │   ├── CleanUpMitigation.java
    │           │   │   │   │   ├── CustomDeviceModel.java
    │           │   │   │   │   ├── CustomSplash.java
    │           │   │   │   │   ├── DisableHotPatch.kt
    │           │   │   │   │   ├── DisableQQCrashReportManager.kt
    │           │   │   │   │   ├── DisableScreenshotHelper.java
    │           │   │   │   │   ├── FixTroopRefuseDarkText.java
    │           │   │   │   │   ├── JumpController.java
    │           │   │   │   │   ├── NoAskContinueRecvShortVideoOrNot.kt
    │           │   │   │   │   ├── QSecO3AddRiskRequestMitigation.kt
    │           │   │   │   │   └── ShadowInitDependencyStub.kt
    │           │   │   │   ├── msg
    │           │   │   │   │   ├── AioChatPieClipPasteHook.java
    │           │   │   │   │   ├── CopyCardMsg.kt
    │           │   │   │   │   ├── FileShareExtHook.java
    │           │   │   │   │   ├── FlashPicHook.java
    │           │   │   │   │   ├── Ipv6LinkSpanMitigation.java
    │           │   │   │   │   ├── MultiForwardAvatarHook.kt
    │           │   │   │   │   ├── OpenMultiFwdMsg.kt
    │           │   │   │   │   ├── PicMd5Hook.java
    │           │   │   │   │   ├── PttForwardHook.java
    │           │   │   │   │   ├── RevokeMsgHook.java
    │           │   │   │   │   ├── SharePicExtHook.java
    │           │   │   │   │   └── ShowMsgCount.kt
    │           │   │   │   ├── notification
    │           │   │   │   │   ├── AntiMessage.kt
    │           │   │   │   │   ├── MessageInterception.kt
    │           │   │   │   │   └── MuteQZoneThumbsUp.java
    │           │   │   │   ├── profile
    │           │   │   │   │   ├── InterceptZipBomb.java
    │           │   │   │   │   ├── OneTapTwentyLikes.java
    │           │   │   │   │   ├── OpenProfileCard.java
    │           │   │   │   │   └── OpenProfileCardMenu.kt
    │           │   │   │   ├── qwallet
    │           │   │   │   │   ├── FakeBalance.kt
    │           │   │   │   │   └── QWalletNoAD.kt
    │           │   │   │   ├── qzone
    │           │   │   │   │   └── HideQZMTitleBarEntrance.kt
    │           │   │   │   ├── sideswipe
    │           │   │   │   │   └── SimplifyQQSettingMe.kt
    │           │   │   │   ├── troop
    │           │   │   │   │   ├── DisableColorNickName.kt
    │           │   │   │   │   ├── DisableFlingToTroopGuild.kt
    │           │   │   │   │   ├── HideListenTogetherPanel.kt
    │           │   │   │   │   ├── RemoveGroupApp.kt
    │           │   │   │   │   ├── RemovePlayTogether.kt
    │           │   │   │   │   ├── TroopFileRename.kt
    │           │   │   │   │   └── TroopFileSaveLasting.kt
    │           │   │   │   └── ui
    │           │   │   │   │   ├── chat
    │           │   │   │   │       ├── MutePokePacket.java
    │           │   │   │   │       ├── RepeaterHook.java
    │           │   │   │   │       ├── ReplyNoAtHook.java
    │           │   │   │   │       └── ShowPicGagHook.java
    │           │   │   │   │   ├── main
    │           │   │   │   │       ├── ContactListSortHook.java
    │           │   │   │   │       ├── HideMiniAppPullEntry.kt
    │           │   │   │   │       └── HideQFSRedPointTips.java
    │           │   │   │   │   ├── misc
    │           │   │   │   │       ├── ChangeDpi.kt
    │           │   │   │   │       └── OptXListViewScrollBar.java
    │           │   │   │   │   ├── profile
    │           │   │   │   │       ├── DisableAvatarDecoration.java
    │           │   │   │   │       └── RemoveDiyCard.kt
    │           │   │   │   │   └── title
    │           │   │   │   │       ├── RemoveCameraButton.kt
    │           │   │   │   │       ├── RemoveDailySign.kt
    │           │   │   │   │       └── RemoveQbossAD.java
    │           │   │   └── util
    │           │   │   │   ├── BiMap.java
    │           │   │   │   ├── BinaryXmlParser.java
    │           │   │   │   ├── BugUtils.java
    │           │   │   │   ├── DateTimeUtil.java
    │           │   │   │   ├── DebugUtils.java
    │           │   │   │   ├── ExfriendManager.java
    │           │   │   │   ├── HashBiMap.java
    │           │   │   │   ├── HookUtils.java
    │           │   │   │   ├── HookUtils.kt
    │           │   │   │   ├── HostInfo.java
    │           │   │   │   ├── HostStyledViewBuilder.java
    │           │   │   │   ├── IndexFrom.java
    │           │   │   │   ├── JunkCodeUtils.java
    │           │   │   │   ├── LayoutHelper.java
    │           │   │   │   ├── LayoutHelperScope.kt
    │           │   │   │   ├── MsgRecordUtil.kt
    │           │   │   │   ├── Reflex.java
    │           │   │   │   ├── SendCacheUtils.java
    │           │   │   │   ├── TroopManagerHelper.java
    │           │   │   │   ├── data
    │           │   │   │       ├── EventRecord.java
    │           │   │   │       ├── FriendRecord.java
    │           │   │   │       └── Table.java
    │           │   │   │   ├── msg
    │           │   │   │       ├── MessageManager.java
    │           │   │   │       └── MessageReceiver.java
    │           │   │   │   └── ui
    │           │   │   │       ├── FaultyDialog.java
    │           │   │   │       ├── FaultyDialogHelper.kt
    │           │   │   │       ├── ThemeAttrUtils.java
    │           │   │   │       ├── ViewBuilder.kt
    │           │   │   │       ├── drawable
    │           │   │   │           ├── BackgroundDrawableUtils.java
    │           │   │   │           ├── DebugDrawable.java
    │           │   │   │           ├── HighContrastBorder.java
    │           │   │   │           ├── HostStyleCommonItemBackground.java
    │           │   │   │           ├── ProportionDrawable.java
    │           │   │   │           └── SimpleBgDrawable.java
    │           │   │   │       ├── dsl
    │           │   │   │           └── RecyclerListViewController.kt
    │           │   │   │       ├── fling
    │           │   │   │           └── SimpleFlingInterceptLayout.java
    │           │   │   │       └── widget
    │           │   │   │           └── FunctionDummy.kt
    │           │   └── microblock
    │           │   │   └── hook
    │           │   │       ├── DumpTelegramStickers.kt
    │           │   │       ├── FavEmoticonSortBy.kt
    │           │   │       ├── ForceEnableMultiForward.kt
    │           │   │       ├── ImageCustomSummary.kt
    │           │   │       ├── LegacyContextMenu.kt
    │           │   │       ├── Pangu.kt
    │           │   │       ├── RemoveDotOne.kt
    │           │   │       └── TimRemoveToastTips.kt
    │           ├── cn
    │           │   └── lliiooll
    │           │   │   └── hook
    │           │   │       ├── AntiNickBlock.kt
    │           │   │       └── AntiRobotMessage.kt
    │           ├── com
    │           │   ├── alphi
    │           │   │   └── qhmk
    │           │   │   │   └── module
    │           │   │   │       ├── DisableX5.java
    │           │   │   │       ├── HiddenApolloView.java
    │           │   │   │       ├── HiddenVipIconForSe.java
    │           │   │   │       ├── HookQWallet.java
    │           │   │   │       ├── HookSwiftMenuQWeb.java
    │           │   │   │       └── HookUpgrade.java
    │           │   ├── codepwn
    │           │   │   └── hook
    │           │   │   │   └── ForceEnableQQSettingMeV9.kt
    │           │   ├── enlysure
    │           │   │   └── hook
    │           │   │   │   └── HideGroupAssistantBanner.kt
    │           │   └── xiaoniu
    │           │   │   ├── dispatcher
    │           │   │       └── MenuBuilderHook.kt
    │           │   │   ├── hook
    │           │   │       ├── CtrlEnterToSend.kt
    │           │   │       ├── DisableAddTroopToRecentUser.kt
    │           │   │       ├── DisableDocOnlinePreview.kt
    │           │   │       ├── DisableInteractivePop.kt
    │           │   │       ├── DisableNTContactsSearchFilter.kt
    │           │   │       ├── DisableNewTroopInfoPage.kt
    │           │   │       ├── DisableProfileCardZplanCover.kt
    │           │   │       ├── DisableQCircleContactFriendsUpdate.kt
    │           │   │       ├── DisableQQSettingMeV9.kt
    │           │   │       ├── DisableReactionLimit.kt
    │           │   │       ├── DisableRedInfo.kt
    │           │   │       ├── DisableTroopFlame.kt
    │           │   │       ├── DisableTroopGuild.kt
    │           │   │       ├── EnableEmotionDownload.kt
    │           │   │       ├── FullTroopMemberJoinTime.kt
    │           │   │       ├── TimProfileSelectable.kt
    │           │   │       ├── TroopGroupHook.kt
    │           │   │       └── UseAioPhotoChoosePanel.kt
    │           │   │   └── util
    │           │   │       └── ContextUtils.java
    │           ├── im
    │           │   └── mingxi
    │           │   │   └── BlockLinkInfo.kt
    │           ├── io
    │           │   └── github
    │           │   │   ├── duzhaokun123
    │           │   │       ├── hook
    │           │   │       │   ├── DialogStyleHook.kt
    │           │   │       │   ├── GalBgBlurHook.kt
    │           │   │       │   ├── MessageCopyHook.kt
    │           │   │       │   ├── MessageTTSHook.kt
    │           │   │       │   └── SendTTSHook.kt
    │           │   │       └── util
    │           │   │       │   ├── FilePicker.kt
    │           │   │       │   ├── TTS.kt
    │           │   │       │   ├── TimeFormat.kt
    │           │   │       │   └── Windows.kt
    │           │   │   ├── ex3124
    │           │   │       └── hook
    │           │   │       │   └── BlockBusCard.java
    │           │   │   ├── fusumayuki
    │           │   │       └── hook
    │           │   │       │   ├── HideQQValue.kt
    │           │   │       │   └── HideQZoneGuidePublishMoodBanner.kt
    │           │   │   ├── horange321
    │           │   │       ├── RemoveSecurityTipsBanner.kt
    │           │   │       └── SimplifyQQSettingMe2.kt
    │           │   │   ├── leafmoes
    │           │   │       └── RemoveAudioTransition.kt
    │           │   │   ├── memory2314
    │           │   │       └── hook
    │           │   │       │   ├── GuildOldStyle.kt
    │           │   │       │   └── RemoveShareLimit.kt
    │           │   │   ├── moonleeeaf
    │           │   │       └── hook
    │           │   │       │   ├── AddEssenceViewerToGroupSettingsHook.java
    │           │   │       │   ├── FuckOpenContactsActivity.java
    │           │   │       │   ├── FuckSvipVoiceToTextGreyTip.java
    │           │   │       │   ├── FxxkGroupChangeNotificationTipsForTIM.kt
    │           │   │       │   ├── FxxkPasteHereForTIM.kt
    │           │   │       │   ├── HideChatDatabaseCorruptDialogHook.java
    │           │   │       │   └── RemoveTIMOpenContactTip.kt
    │           │   │   ├── nakixii
    │           │   │       └── hook
    │           │   │       │   ├── ForceShowTroopView.kt
    │           │   │       │   ├── ForceUnfoldMessages.kt
    │           │   │       │   └── HideLoadingDialog.kt
    │           │   │   └── qauxv
    │           │   │       ├── activity
    │           │   │           ├── AppCompatTransferActivity.java
    │           │   │           ├── BaseActivity.java
    │           │   │           ├── ConfigV2Activity.kt
    │           │   │           ├── SettingsUiFragmentHostActivity.kt
    │           │   │           ├── ShadowSafTransientActivity.java
    │           │   │           └── ShadowShareFileAgentActivity.java
    │           │   │       ├── base
    │           │   │           ├── IDynamicHook.kt
    │           │   │           ├── IEntityAgent.kt
    │           │   │           ├── IEntityAgentProvider.kt
    │           │   │           ├── ISwitchCellAgent.kt
    │           │   │           ├── ITraceableDynamicHook.kt
    │           │   │           ├── IUiItemAgent.kt
    │           │   │           ├── IUiItemAgentProvider.kt
    │           │   │           ├── RuntimeErrorTracer.kt
    │           │   │           └── annotation
    │           │   │           │   ├── ComponentHookEntry.java
    │           │   │           │   ├── DexDeobfs.java
    │           │   │           │   ├── EntityAgentEntry.java
    │           │   │           │   ├── FunctionHookEntry.java
    │           │   │           │   ├── InternalApi.java
    │           │   │           │   └── UiItemAgentEntry.java
    │           │   │       ├── bridge
    │           │   │           ├── AIOUtilsImpl.java
    │           │   │           ├── AppRuntimeHelper.java
    │           │   │           ├── ChatActivityFacade.java
    │           │   │           ├── ContactUtils.java
    │           │   │           ├── FaceImpl.java
    │           │   │           ├── FriendChunk.java
    │           │   │           ├── GreyTipBuilder.java
    │           │   │           ├── ManagerHelper.java
    │           │   │           ├── QQMessageFacade.java
    │           │   │           ├── RevokeMsgInfoImpl.java
    │           │   │           ├── SessionInfoImpl.java
    │           │   │           ├── TroopFileProtocol.kt
    │           │   │           ├── kernelcompat
    │           │   │           │   ├── ContactCompat.java
    │           │   │           │   ├── KernelMsgServiceCompat.java
    │           │   │           │   └── KernelObjectHelper.java
    │           │   │           ├── ntapi
    │           │   │           │   ├── ChatTypeConstants.java
    │           │   │           │   ├── MsgConstants.java
    │           │   │           │   ├── MsgServiceHelper.java
    │           │   │           │   ├── NtGrayTipHelper.java
    │           │   │           │   └── RelationNTUinAndUidApi.java
    │           │   │           └── protocol
    │           │   │           │   ├── TroopFileGetOneFileInfoObserver.kt
    │           │   │           │   └── TroopFileRenameObserver.kt
    │           │   │       ├── chainloader
    │           │   │           ├── api
    │           │   │           │   └── ChainLoaderAgent.java
    │           │   │           └── detail
    │           │   │           │   ├── ChainLoaderParentClassLoader.java
    │           │   │           │   ├── ExternalModuleChainLoader.java
    │           │   │           │   ├── ExternalModuleManager.kt
    │           │   │           │   └── ui
    │           │   │           │       ├── ExternalModuleConfigFragment.kt
    │           │   │           │       └── ExternalModuleConfigHook.kt
    │           │   │       ├── config
    │           │   │           ├── BackupConfigSession.java
    │           │   │           ├── ConfigItems.java
    │           │   │           ├── ConfigManager.java
    │           │   │           ├── MmkvConfigManagerImpl.java
    │           │   │           ├── RestoreConfigSession.java
    │           │   │           └── SafeModeManager.java
    │           │   │       ├── core
    │           │   │           ├── HookInstaller.java
    │           │   │           ├── InjectDelayableHooks.java
    │           │   │           ├── MainHook.java
    │           │   │           └── NativeCoreBridge.java
    │           │   │       ├── dsl
    │           │   │           ├── FunctionEntryRouter.kt
    │           │   │           ├── LegacyDslUiPreference.kt
    │           │   │           ├── cell
    │           │   │           │   ├── HeaderCell.kt
    │           │   │           │   ├── SpacerCell.kt
    │           │   │           │   ├── TextBannerCell.kt
    │           │   │           │   ├── TextInfoCell.kt
    │           │   │           │   └── TitleValueCell.kt
    │           │   │           ├── func
    │           │   │           │   ├── BaseParentNode.kt
    │           │   │           │   ├── CategoryDescription.kt
    │           │   │           │   ├── FragmentDescription.kt
    │           │   │           │   ├── FragmentImplDescription.kt
    │           │   │           │   ├── IDslFragmentNode.kt
    │           │   │           │   ├── IDslItemNode.kt
    │           │   │           │   ├── IDslParentNode.kt
    │           │   │           │   ├── RootFragmentDescription.kt
    │           │   │           │   └── UiItemAgentDescription.kt
    │           │   │           └── item
    │           │   │           │   ├── CategoryItem.kt
    │           │   │           │   ├── DescriptionItem.kt
    │           │   │           │   ├── DslTMsgListItemInflatable.kt
    │           │   │           │   ├── SimpleListItem.kt
    │           │   │           │   ├── TMsgListItem.kt
    │           │   │           │   ├── TextBannerItem.kt
    │           │   │           │   ├── TextListItem.kt
    │           │   │           │   ├── TextSwitchItem.kt
    │           │   │           │   ├── UiAgentItem.kt
    │           │   │           │   └── impl
    │           │   │           │       ├── HeaderItem.kt
    │           │   │           │       └── SpacerItem.kt
    │           │   │       ├── fragment
    │           │   │           ├── AboutFragment.kt
    │           │   │           ├── BackupRestoreConfigFragment.kt
    │           │   │           ├── BaseHierarchyFragment.kt
    │           │   │           ├── BaseRootLayoutFragment.kt
    │           │   │           ├── BaseSettingFragment.java
    │           │   │           ├── CheckAbiVariantFragment.kt
    │           │   │           ├── CheckAbiVariantModel.java
    │           │   │           ├── ConfigEntrySearchHistoryManager.kt
    │           │   │           ├── EulaFragment.kt
    │           │   │           ├── FuncStatListFragment.kt
    │           │   │           ├── FuncStatusDetailsFragment.kt
    │           │   │           ├── HotUpdateConfigFragment.kt
    │           │   │           ├── PendingFunctionFragment.kt
    │           │   │           ├── SearchOverlaySubFragment.kt
    │           │   │           ├── SettingsMainFragment.kt
    │           │   │           ├── ThemeSelectDialog.kt
    │           │   │           └── TroubleshootFragment.kt
    │           │   │       ├── hook
    │           │   │           ├── BaseComponentHook.kt
    │           │   │           ├── BaseFunctionHook.kt
    │           │   │           ├── BaseHookDispatcher.kt
    │           │   │           ├── BasePersistBackgroundHook.kt
    │           │   │           ├── BasePlainUiAgentItem.kt
    │           │   │           ├── CommonClickableStaticFunctionItem.kt
    │           │   │           ├── CommonConfigFunctionHook.kt
    │           │   │           └── CommonSwitchFunctionHook.kt
    │           │   │       ├── isolated
    │           │   │           └── soloader
    │           │   │           │   └── LoadLibraryInvoker.java
    │           │   │       ├── lifecycle
    │           │   │           ├── ActProxyMgr.java
    │           │   │           ├── CounterfeitActivityInfoFactory.java
    │           │   │           ├── JumpActivityEntryHook.java
    │           │   │           ├── Parasitics.java
    │           │   │           └── ShadowFileProvider.java
    │           │   │       ├── omnifix
    │           │   │           └── hw
    │           │   │           │   └── HwResThemeMgrFix.java
    │           │   │       ├── poststartup
    │           │   │           ├── StartupAgent.java
    │           │   │           ├── StartupHook.java
    │           │   │           ├── StartupInfo.java
    │           │   │           └── StartupRoutine.java
    │           │   │       ├── remote
    │           │   │           └── TransactionHelper.kt
    │           │   │       ├── router
    │           │   │           ├── decorator
    │           │   │           │   ├── BaseDecorator.kt
    │           │   │           │   ├── BaseSwitchFunctionDecorator.kt
    │           │   │           │   ├── IBaseChatPieDecorator.kt
    │           │   │           │   ├── IBaseChatPieInitDecorator.kt
    │           │   │           │   ├── IInputButtonDecorator.kt
    │           │   │           │   ├── IItemBuilderFactoryHookDecorator.kt
    │           │   │           │   └── IStartActivityHookDecorator.kt
    │           │   │           └── dispacher
    │           │   │           │   ├── InputButtonHookDispatcher.java
    │           │   │           │   ├── ItemBuilderFactoryHook.kt
    │           │   │           │   └── StartActivityHook.kt
    │           │   │       ├── step
    │           │   │           ├── DexDeobfStep.java
    │           │   │           ├── ShadowBatchDexDeobfStep.java
    │           │   │           └── Step.java
    │           │   │       ├── tips
    │           │   │           └── newfeaturehint
    │           │   │           │   ├── NewFeatureIntroduceFragment.kt
    │           │   │           │   └── NewFeatureManager.kt
    │           │   │       ├── tlb
    │           │   │           ├── ConfigTable.kt
    │           │   │           ├── ConfigTableInterface.kt
    │           │   │           ├── PlayQQConfigTable.kt
    │           │   │           ├── QQConfigTable.kt
    │           │   │           └── TIMConfigTable.kt
    │           │   │       ├── ui
    │           │   │           ├── CommonContextWrapper.java
    │           │   │           ├── CustomDialog.java
    │           │   │           ├── ModuleThemeManager.java
    │           │   │           ├── ResUtils.java
    │           │   │           ├── TouchEventToLongClickAdapter.java
    │           │   │           ├── WindowIsTranslucent.java
    │           │   │           └── widget
    │           │   │           │   ├── InterceptLayout.java
    │           │   │           │   ├── LinearLayoutDelegate.java
    │           │   │           │   └── Switch.java
    │           │   │       └── util
    │           │   │           ├── ArscKit.java
    │           │   │           ├── BugCollector.java
    │           │   │           ├── CliOper.java
    │           │   │           ├── CustomMenu.kt
    │           │   │           ├── HostInfo.kt
    │           │   │           ├── Initiator.java
    │           │   │           ├── IoUtils.java
    │           │   │           ├── JsonHelper.kt
    │           │   │           ├── LicenseStatus.kt
    │           │   │           ├── LoaderExtensionHelper.java
    │           │   │           ├── Log.java
    │           │   │           ├── MainProcess.java
    │           │   │           ├── MemoryFileUtils.java
    │           │   │           ├── Natives.java
    │           │   │           ├── NonUiThread.java
    │           │   │           ├── PackageConstants.java
    │           │   │           ├── PlayQQVersion.java
    │           │   │           ├── QQVersion.java
    │           │   │           ├── SafUtils.java
    │           │   │           ├── SavedInstanceStatePatchedClassReferencer.java
    │           │   │           ├── SyncUtils.java
    │           │   │           ├── TIMVersion.java
    │           │   │           ├── Toasts.java
    │           │   │           ├── UiThread.java
    │           │   │           ├── consis
    │           │   │               ├── ShadowStartupAgentActivity.java
    │           │   │               └── StartupDirectorBridge.java
    │           │   │           ├── data
    │           │   │               ├── ContactDescriptor.java
    │           │   │               ├── Licenses.kt
    │           │   │               └── UserStatusConst.kt
    │           │   │           ├── dexkit
    │           │   │               ├── DexDeobfsBackend.kt
    │           │   │               ├── DexDeobfsProvider.kt
    │           │   │               ├── DexFieldDescriptor.java
    │           │   │               ├── DexFlow.java
    │           │   │               ├── DexKit.kt
    │           │   │               ├── DexKitFilter.kt
    │           │   │               ├── DexKitFinder.kt
    │           │   │               ├── DexKitTarget.kt
    │           │   │               ├── DexMethodDescriptor.java
    │           │   │               ├── HostMainDexHelper.java
    │           │   │               └── impl
    │           │   │               │   ├── DexKitDeobfs.kt
    │           │   │               │   └── SharedRefCountResourceImpl.java
    │           │   │           ├── dyn
    │           │   │               └── MemoryDexLoader.java
    │           │   │           ├── hookimpl
    │           │   │               ├── InMemoryClassLoaderHelper.java
    │           │   │               ├── LibXposedNewApiByteCodeGenerator.java
    │           │   │               └── lsplant
    │           │   │               │   ├── LsplantBridge.java
    │           │   │               │   ├── LsplantCallbackDispatcher.java
    │           │   │               │   ├── LsplantCallbackToken.java
    │           │   │               │   └── LsplantHookImpl.java
    │           │   │           ├── hookstatus
    │           │   │               ├── AbiUtils.java
    │           │   │               ├── HookStatus.java
    │           │   │               ├── HookStatusImpl.java
    │           │   │               └── ModuleAppImpl.java
    │           │   │           ├── hotupdate
    │           │   │               └── HotUpdateManager.kt
    │           │   │           ├── libart
    │           │   │               └── OatInlineDeoptManager.java
    │           │   │           ├── ptt
    │           │   │               └── SilkEncodeUtils.java
    │           │   │           ├── soloader
    │           │   │               ├── NativeLoader.java
    │           │   │               ├── NativeLoaderInvokerClassLoader.java
    │           │   │               └── NativeLoaderInvokerStubClassLoader.java
    │           │   │           └── xpcompat
    │           │   │               ├── ArrayUtils.java
    │           │   │               ├── ClassUtils.java
    │           │   │               ├── MemberUtils.java
    │           │   │               ├── WrappedCallbacks.java
    │           │   │               ├── XC_MethodHook.java
    │           │   │               ├── XC_MethodReplacement.java
    │           │   │               ├── XposedBridge.java
    │           │   │               └── XposedHelpers.java
    │           ├── me
    │           │   ├── hd
    │           │   │   ├── hook
    │           │   │   │   ├── ChangeCircleJumpProfile.kt
    │           │   │   │   ├── ChangeFriendsVip.kt
    │           │   │   │   ├── ChangeGroupStatus.kt
    │           │   │   │   ├── DisableBigSticker.kt
    │           │   │   │   ├── DisableChatsCardContainer.kt
    │           │   │   │   ├── DisableFekitToAppDialog.kt
    │           │   │   │   ├── DisableGrowHalfLayer.kt
    │           │   │   │   ├── DisableSwipeRight.kt
    │           │   │   │   ├── DisableThirdContainer.kt
    │           │   │   │   ├── FakeLocation.kt
    │           │   │   │   ├── FakePhone.kt
    │           │   │   │   ├── FakePicSize.kt
    │           │   │   │   ├── FakeVoiceTime.kt
    │           │   │   │   ├── HandleClickGroupBotMsgBtnSend.kt
    │           │   │   │   ├── HandleClickPrivateBotRecMsgSend.kt
    │           │   │   │   ├── HandleQQSomeFunExit.kt
    │           │   │   │   ├── HandleSendChatCount.kt
    │           │   │   │   ├── HideBottomTabTitle.kt
    │           │   │   │   ├── HideChatPanelBtn.kt
    │           │   │   │   ├── HideEditTroopNick.kt
    │           │   │   │   ├── HideFriendChatVoice.kt
    │           │   │   │   ├── HideJoinTroopBriefContent.kt
    │           │   │   │   ├── HideLoginDevicesTipsBar.kt
    │           │   │   │   ├── HideMsgListGuild.kt
    │           │   │   │   ├── HideShortcutBar.kt
    │           │   │   │   ├── HideTipTextView.kt
    │           │   │   │   ├── HideTroopSquare.kt
    │           │   │   │   ├── HideTroopToDo.kt
    │           │   │   │   ├── OpenIllegalityHistory.kt
    │           │   │   │   ├── OutFileHbDetail.kt
    │           │   │   │   ├── RemoveAudioPlayerDialog.kt
    │           │   │   │   ├── RemoveCommentAd.kt
    │           │   │   │   ├── RemoveDialogWaitTime.kt
    │           │   │   │   ├── RemoveEmoReplyMenu.kt
    │           │   │   │   ├── RemoveFavPreviewLimit.kt
    │           │   │   │   ├── RemoveGroupProfileDialog.kt
    │           │   │   │   ├── RemoveRedPackSkin.kt
    │           │   │   │   ├── RemoveSelectedMedia.kt
    │           │   │   │   ├── ShowServiceRemove.kt
    │           │   │   │   ├── TimBarAddEssenceHook.kt
    │           │   │   │   ├── TimReplyMsgMenu.kt
    │           │   │   │   └── menu
    │           │   │   │   │   ├── CopyMarkdown.kt
    │           │   │   │   │   ├── EditTextContent.kt
    │           │   │   │   │   ├── RecallMsgRecord.kt
    │           │   │   │   │   └── RepeatToImg.kt
    │           │   │   └── util
    │           │   │   │   └── Util.kt
    │           │   ├── ketal
    │           │   │   ├── base
    │           │   │   │   └── PluginDelayableHook.kt
    │           │   │   ├── data
    │           │   │   │   ├── ConfigData.java
    │           │   │   │   └── TroopFileInfo.kt
    │           │   │   ├── dispacher
    │           │   │   │   └── BaseBubbleBuilderHook.kt
    │           │   │   ├── hook
    │           │   │   │   ├── ChangeQQIcon.kt
    │           │   │   │   ├── ChatItemShowQQUin.kt
    │           │   │   │   ├── Emoji2Sticker.kt
    │           │   │   │   ├── FakeMultiWindowStatus.kt
    │           │   │   │   ├── FakeNetworkType.kt
    │           │   │   │   ├── FakeQQLevel.kt
    │           │   │   │   ├── HideAssistantRemoveTips.kt
    │           │   │   │   ├── HideFriendCardSendGift.kt
    │           │   │   │   ├── HideTab.kt
    │           │   │   │   ├── LeftSwipeReplyHook.kt
    │           │   │   │   ├── ManageComponent.kt
    │           │   │   │   ├── MultiActionHook.kt
    │           │   │   │   ├── PicCopyToClipboard.kt
    │           │   │   │   ├── QZoneNoAD.kt
    │           │   │   │   ├── RemoveQRLoginAuth.kt
    │           │   │   │   ├── SendFavoriteHook.kt
    │           │   │   │   ├── ShowMsgAt.kt
    │           │   │   │   └── SortAtPanel.kt
    │           │   │   ├── ui
    │           │   │   │   ├── activity
    │           │   │   │   │   ├── ModifyLeftSwipeReplyFragment.kt
    │           │   │   │   │   └── QFileShareToIpadActivity.kt
    │           │   │   │   └── view
    │           │   │   │   │   ├── BViewGroup.kt
    │           │   │   │   │   └── ConfigView.kt
    │           │   │   └── util
    │           │   │   │   ├── ComponentUtil.kt
    │           │   │   │   ├── HookUtil.kt
    │           │   │   │   └── ViewUtils.kt
    │           │   ├── qcuncle
    │           │   │   └── hook
    │           │   │   │   └── TranslateTextMsg.kt
    │           │   ├── singleneuron
    │           │   │   ├── activity
    │           │   │   │   └── ChooseAgentActivity.kt
    │           │   │   ├── base
    │           │   │   │   ├── AbstractChooseActivity.kt
    │           │   │   │   ├── Conditional.kt
    │           │   │   │   └── bridge
    │           │   │   │   │   └── CardMsgList.kt
    │           │   │   ├── data
    │           │   │   │   ├── CardMsgCheckResult.kt
    │           │   │   │   ├── MiniAppArkData.kt
    │           │   │   │   ├── MsgRecordData.kt
    │           │   │   │   └── StructMsgData.kt
    │           │   │   ├── hook
    │           │   │   │   ├── AppCenterHook.kt
    │           │   │   │   ├── ChangeDrawerWidth.kt
    │           │   │   │   ├── GroupSpecialCare.kt
    │           │   │   │   ├── JustPush.kt
    │           │   │   │   ├── NewRoundHead.kt
    │           │   │   │   ├── NoApplet.kt
    │           │   │   │   ├── SpecialCareNewChannel.kt
    │           │   │   │   ├── SystemEmoji.kt
    │           │   │   │   └── decorator
    │           │   │   │   │   ├── CardMsgToText.kt
    │           │   │   │   │   ├── DisableQzoneSlideCamera.kt
    │           │   │   │   │   ├── ForceSystemAlbum.kt
    │           │   │   │   │   ├── ForceSystemFile.kt
    │           │   │   │   │   ├── FxxkQQBrowser.kt
    │           │   │   │   │   ├── MiniAppToStruckMsg.kt
    │           │   │   │   │   ├── RegexAntiMeg.kt
    │           │   │   │   │   ├── SimpleCheckIn.kt
    │           │   │   │   │   └── SimpleReceiptMessage.kt
    │           │   │   └── util
    │           │   │   │   ├── EasterEggsForTheNonexistent.kt
    │           │   │   │   ├── KotlinUtils.kt
    │           │   │   │   ├── NoAppletUtil.java
    │           │   │   │   └── NonNTMessageStyleNotification.kt
    │           │   └── teble
    │           │   │   └── hook
    │           │   │       └── CancelPicCompress.kt
    │           ├── moe
    │           │   └── zapic
    │           │   │   ├── hook
    │           │   │       └── MessagingStyleNotification.kt
    │           │   │   └── util
    │           │   │       ├── QQAvatarHelper.kt
    │           │   │       └── QQRecentContactInfo.kt
    │           ├── name
    │           │   └── mikanoshi
    │           │   │   └── customiuizer
    │           │   │       ├── holidays
    │           │   │           ├── FlowerGenerator.java
    │           │   │           ├── FlowerParticle.java
    │           │   │           ├── HolidayHelper.java
    │           │   │           ├── SnowGenerator.java
    │           │   │           └── SnowParticle.java
    │           │   │       └── utils
    │           │   │           ├── GravitySensor.java
    │           │   │           └── Helpers.java
    │           ├── nep
    │           │   └── timeline
    │           │   │   └── MessageUtils.java
    │           ├── net
    │           │   └── bytebuddy
    │           │   │   └── android
    │           │   │       ├── AndroidClassLoadingStrategy.java
    │           │   │       ├── IAndroidInjectableClassLoader.java
    │           │   │       └── InjectableDexClassLoader.java
    │           ├── top
    │           │   ├── linl
    │           │   │   ├── hook
    │           │   │   │   ├── FixCleanRecentChat.java
    │           │   │   │   ├── OffRelationshipIdentification.java
    │           │   │   │   ├── SortTroopSettingAppListView.java
    │           │   │   │   └── TurnOffFriendInteractionLogoView.java
    │           │   │   └── util
    │           │   │   │   ├── ScreenParamUtils.java
    │           │   │   │   └── reflect
    │           │   │   │       ├── CheckClassType.java
    │           │   │   │       ├── ClassUtils.java
    │           │   │   │       ├── FieldUtils.java
    │           │   │   │       ├── MethodTool.java
    │           │   │   │       └── ReflectException.java
    │           │   └── xunflash
    │           │   │   └── hook
    │           │   │       └── MiniAppDirectJump.kt
    │           ├── wang
    │           │   └── allenyou
    │           │   │   └── hook
    │           │   │       └── DisableUtfControlCharacterInNicknameHook.kt
    │           └── xyz
    │           │   └── nextalone
    │           │       ├── base
    │           │           └── MultiItemDelayableHook.kt
    │           │       ├── bridge
    │           │           ├── NAMethodHook.kt
    │           │           └── NAMethodReplacement.kt
    │           │       ├── data
    │           │           └── TroopInfo.kt
    │           │       ├── hook
    │           │           ├── AutoReceiveOriginalPhoto.kt
    │           │           ├── AutoSendOriginalPhoto.kt
    │           │           ├── ChatInputHint.kt
    │           │           ├── ChatWordsCount.kt
    │           │           ├── CleanRecentChat.kt
    │           │           ├── CollapseTroopMessage.kt
    │           │           ├── DisabledRedNick.kt
    │           │           ├── HideChatVipImage.kt
    │           │           ├── HideFrameTabUnreadMsgCount.kt
    │           │           ├── HideMutualMark.kt
    │           │           ├── HideOnlineNumber.kt
    │           │           ├── HideOnlineStatus.kt
    │           │           ├── HideProfileBubble.kt
    │           │           ├── HideRedPoints.kt
    │           │           ├── HideTotalNumber.kt
    │           │           ├── HideTroopAddTips.kt
    │           │           ├── HideTroopLevel.kt
    │           │           ├── RemoveIntimateDrawer.kt
    │           │           ├── RemoveShortCutBar.kt
    │           │           ├── RemoveSuperQQShow.kt
    │           │           ├── SimplifyBottomTab.kt
    │           │           ├── SimplifyChatLongItem.kt
    │           │           ├── SimplifyContactTabs.kt
    │           │           ├── SimplifyEmoPanel.kt
    │           │           ├── SimplifyPlusPanel.kt
    │           │           ├── SimplifyQQSettings.kt
    │           │           ├── SimplifyRecentDialog.kt
    │           │           └── TrimMessage.kt
    │           │       └── util
    │           │           ├── HookUtils.kt
    │           │           ├── SystemServiceUtils.kt
    │           │           ├── Utils.kt
    │           │           └── ViewUtils.kt
    │       ├── proto
    │           └── trpc
    │           │   └── msg
    │           │       ├── ContentHead.proto
    │           │       ├── ForwardHead.proto
    │           │       ├── Group.proto
    │           │       ├── InfoSyncPush.proto
    │           │       ├── Message.proto
    │           │       ├── MessageBody.proto
    │           │       ├── MessageControl.proto
    │           │       ├── MsgPush.proto
    │           │       ├── RichText.proto
    │           │       ├── RoutingHead.proto
    │           │       ├── elem
    │           │           ├── ExtraInfo.proto
    │           │           ├── MsgElement.proto
    │           │           └── Text.proto
    │           │       └── recall
    │           │           ├── C2CMsgRecall.proto
    │           │           └── GroupMsgRecall.proto
    │       └── res
    │           ├── anim
    │               ├── enter_from_left.xml
    │               ├── enter_from_right.xml
    │               ├── exit_to_left.xml
    │               ├── exit_to_right.xml
    │               ├── fade_in.xml
    │               └── fade_out.xml
    │           ├── drawable-nodpi
    │               ├── lunar_newyear_header.webp
    │               └── newyear_header.webp
    │           ├── drawable-xxhdpi
    │               ├── confetti1.webp
    │               ├── confetti2.webp
    │               ├── confetti3.webp
    │               ├── petal.webp
    │               └── snowflake.webp
    │           ├── drawable
    │               ├── bg_green_solid.xml
    │               ├── bg_item_light_grey_r16.xml
    │               ├── bg_red_solid.xml
    │               ├── bg_ripple_r8.xml
    │               ├── bg_ripple_rect.xml
    │               ├── bg_trans_border.xml
    │               ├── bg_trans_border_null_ripple.xml
    │               ├── bg_trans_border_ripple.xml
    │               ├── bg_yellow_solid.xml
    │               ├── dialog_background.xml
    │               ├── ic_arrow_forward_outline_24.xml
    │               ├── ic_bg_gradient.xml
    │               ├── ic_bg_white.xml
    │               ├── ic_build.xml
    │               ├── ic_check_24.xml
    │               ├── ic_check_circle.xml
    │               ├── ic_close_24.xml
    │               ├── ic_copy.xml
    │               ├── ic_data_usage.xml
    │               ├── ic_del_friend_top.webp
    │               ├── ic_delete_outline_24.xml
    │               ├── ic_done.xml
    │               ├── ic_error_filled.xml
    │               ├── ic_failure_white.xml
    │               ├── ic_filter_list.xml
    │               ├── ic_github.xml
    │               ├── ic_guild_schedule_edit.webp
    │               ├── ic_help.xml
    │               ├── ic_info.xml
    │               ├── ic_info_filled.xml
    │               ├── ic_info_white.xml
    │               ├── ic_item_copy_72dp.xml
    │               ├── ic_item_edit_72dp.xml
    │               ├── ic_item_md5_72dp.xml
    │               ├── ic_item_open_72dp.xml
    │               ├── ic_item_recall_72dp.xml
    │               ├── ic_item_repeat_72dp.xml
    │               ├── ic_item_save_72dp.xml
    │               ├── ic_item_share_72dp.xml
    │               ├── ic_item_tool_72dp.xml
    │               ├── ic_item_translate_72dp.xml
    │               ├── ic_item_troop_group_72dp.xml
    │               ├── ic_item_tts_72dp.xml
    │               ├── ic_item_tts_plus_72dp.xml
    │               ├── ic_launch_28dp_light.xml
    │               ├── ic_launch_28dp_night.xml
    │               ├── ic_notify_qq.xml
    │               ├── ic_notify_qzone.xml
    │               ├── ic_recall_28dp_black.xml
    │               ├── ic_recall_28dp_white.xml
    │               ├── ic_refresh_24.xml
    │               ├── ic_search_baseline.xml
    │               ├── ic_send_outline_24.xml
    │               ├── ic_settings.xml
    │               ├── ic_share_baseline_24.xml
    │               ├── ic_sort_24.xml
    │               ├── ic_success_white.xml
    │               ├── ic_warn.xml
    │               ├── ic_warn_filled.xml
    │               ├── input.png
    │               ├── sticker_like.png
    │               ├── sticker_pack_set_icon.png
    │               ├── sticker_panel_input_icon.png
    │               ├── sticker_panel_like_icon.png
    │               ├── sticker_panel_recent_icon.png
    │               ├── sticker_panel_round_bg.xml
    │               ├── sticker_panen_set_button_icon.png
    │               └── sticker_recent.png
    │           ├── layout
    │               ├── activity_settings_ui_host.xml
    │               ├── dialog_clickable_item.xml
    │               ├── dialog_confirm_send_picture.xml
    │               ├── dialog_external_module_info.xml
    │               ├── dialog_send_tts.xml
    │               ├── fragment_abi_variant_info.xml
    │               ├── fragment_backup_restore_config.xml
    │               ├── fragment_custom_splash_config.xml
    │               ├── fragment_hot_update_config.xml
    │               ├── fragment_junk_code.xml
    │               ├── fragment_new_feature_intro.xml
    │               ├── fragment_pcm2silk_test.xml
    │               ├── fragment_setting_search.xml
    │               ├── item_file_picker.xml
    │               ├── item_func_status.xml
    │               ├── item_host_status.xml
    │               ├── main_v2_light_blue.xml
    │               ├── main_v2_normal.xml
    │               ├── rikka_base_apk_dialog.xml
    │               ├── rikka_custom_device_model_dialog.xml
    │               ├── rikka_msg_time_formart_dialog.xml
    │               ├── search_result_item.xml
    │               ├── select_repeater_icon_dialog.xml
    │               ├── select_repeater_icon_dialog_plus.xml
    │               ├── sticker_panel_impl_input_from_local.xml
    │               ├── sticker_panel_plus_main.xml
    │               ├── sticker_panel_plus_pack_item.xml
    │               ├── sticker_panel_set.xml
    │               ├── sticker_pre_save.xml
    │               ├── sticker_share_root.xml
    │               └── tts2_dialog.xml
    │           ├── menu
    │               ├── database_file_list_options.xml
    │               ├── database_view_options.xml
    │               ├── exfriend_list_fragment_options.xml
    │               ├── func_status_details.xml
    │               ├── host_about_fragment_options.xml
    │               ├── host_main_v2_options.xml
    │               ├── main_settings_toolbar.xml
    │               └── main_v2_toolbar.xml
    │           ├── values-night
    │               ├── bool.xml
    │               ├── colors.xml
    │               └── styles.xml
    │           └── values
    │               ├── arrays.xml
    │               ├── attrs.xml
    │               ├── bool.xml
    │               ├── colors.xml
    │               ├── ids.xml
    │               ├── strings.xml
    │               └── styles.xml
├── build-logic
    ├── convention
    │   ├── build.gradle.kts
    │   └── src
    │   │   └── main
    │   │       └── kotlin
    │   │           ├── Common.kt
    │   │           ├── SigningConfigs.kt
    │   │           ├── Utils.kt
    │   │           ├── Version.kt
    │   │           ├── build-logic.android.application.gradle.kts
    │   │           ├── build-logic.android.base.gradle.kts
    │   │           ├── build-logic.android.library.gradle.kts
    │   │           ├── build-logic.root-project.gradle.kts
    │   │           └── task
    │   │               └── ReplaceIcon.kt
    ├── gradle.properties
    └── settings.gradle.kts
├── build.gradle.kts
├── docs
    └── instruction-qauxv-frida.md
├── gradle.properties
├── gradle
    ├── libs.versions.toml
    └── wrapper
    │   ├── gradle-wrapper.jar
    │   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── libs
    ├── dexkit
    │   ├── AndroidManifest.xml
    │   └── build.gradle.kts
    ├── ezxhelper
    │   └── src
    │   │   └── main
    │   │       └── java
    │   │           └── com
    │   │               └── github
    │   │                   └── kyuubiran
    │   │                       └── ezxhelper
    │   │                           ├── init
    │   │                               └── InitFields.kt
    │   │                           └── utils
    │   │                               ├── AndroidUtils.kt
    │   │                               ├── ClassUtil.kt
    │   │                               ├── DexDescriptor.kt
    │   │                               ├── Extensions.kt
    │   │                               ├── FieldUtils.kt
    │   │                               ├── HookUtils.kt
    │   │                               ├── JsonUtils.kt
    │   │                               ├── Log.kt
    │   │                               ├── MemberExtensions.kt
    │   │                               ├── MethodUtils.kt
    │   │                               ├── Observe.kt
    │   │                               ├── Utils.kt
    │   │                               └── ViewUtils.kt
    ├── ksp
    │   ├── build.gradle.kts
    │   └── src
    │   │   └── main
    │   │       ├── kotlin
    │   │           └── cn
    │   │           │   └── lliiooll
    │   │           │       └── processors
    │   │           │           ├── FunctionHookEntryItemProcessor.kt
    │   │           │           └── UiItemAgentEntryProcessor.kt
    │   │       └── resources
    │   │           └── META-INF
    │   │               └── services
    │   │                   └── com.google.devtools.ksp.processing.SymbolProcessorProvider
    ├── libxposed
    │   ├── api
    │   │   ├── AndroidManifest.xml
    │   │   └── build.gradle.kts
    │   └── service
    │   │   └── build.gradle.kts
    ├── mmkv
    │   ├── .gitignore
    │   ├── AndroidManifest.xml
    │   ├── CMakeLists.txt
    │   ├── build.gradle.kts
    │   └── native-bridge.cpp
    ├── silk
    │   ├── CMakeLists.txt
    │   └── silk-v3-decoder
    │   │   ├── LICENSE
    │   │   ├── README.md
    │   │   └── silk
    │   │       ├── Makefile
    │   │       ├── interface
    │   │           ├── SKP_Silk_SDK_API.h
    │   │           ├── SKP_Silk_control.h
    │   │           ├── SKP_Silk_errors.h
    │   │           └── SKP_Silk_typedef.h
    │   │       ├── src
    │   │           ├── SKP_Silk_A2NLSF.c
    │   │           ├── SKP_Silk_A2NLSF_arm.S
    │   │           ├── SKP_Silk_AsmHelper.h
    │   │           ├── SKP_Silk_AsmPreproc.h
    │   │           ├── SKP_Silk_CNG.c
    │   │           ├── SKP_Silk_HP_variable_cutoff_FIX.c
    │   │           ├── SKP_Silk_Inlines.h
    │   │           ├── SKP_Silk_LBRR_reset.c
    │   │           ├── SKP_Silk_LPC_inv_pred_gain.c
    │   │           ├── SKP_Silk_LPC_synthesis_filter.c
    │   │           ├── SKP_Silk_LPC_synthesis_order16.c
    │   │           ├── SKP_Silk_LP_variable_cutoff.c
    │   │           ├── SKP_Silk_LSF_cos_table.c
    │   │           ├── SKP_Silk_LTP_analysis_filter_FIX.c
    │   │           ├── SKP_Silk_LTP_scale_ctrl_FIX.c
    │   │           ├── SKP_Silk_MA.c
    │   │           ├── SKP_Silk_MA_arm.S
    │   │           ├── SKP_Silk_NLSF2A.c
    │   │           ├── SKP_Silk_NLSF2A_stable.c
    │   │           ├── SKP_Silk_NLSF_MSVQ_decode.c
    │   │           ├── SKP_Silk_NLSF_MSVQ_encode_FIX.c
    │   │           ├── SKP_Silk_NLSF_VQ_rate_distortion_FIX.c
    │   │           ├── SKP_Silk_NLSF_VQ_sum_error_FIX.c
    │   │           ├── SKP_Silk_NLSF_VQ_sum_error_FIX_arm.S
    │   │           ├── SKP_Silk_NLSF_VQ_weights_laroia.c
    │   │           ├── SKP_Silk_NLSF_stabilize.c
    │   │           ├── SKP_Silk_NSQ.c
    │   │           ├── SKP_Silk_NSQ_del_dec.c
    │   │           ├── SKP_Silk_PLC.c
    │   │           ├── SKP_Silk_PLC.h
    │   │           ├── SKP_Silk_SigProc_FIX.h
    │   │           ├── SKP_Silk_VAD.c
    │   │           ├── SKP_Silk_VQ_nearest_neighbor_FIX.c
    │   │           ├── SKP_Silk_allpass_int_arm.S
    │   │           ├── SKP_Silk_ana_filt_bank_1.c
    │   │           ├── SKP_Silk_ana_filt_bank_1_arm.S
    │   │           ├── SKP_Silk_apply_sine_window.c
    │   │           ├── SKP_Silk_array_maxabs.c
    │   │           ├── SKP_Silk_array_maxabs_arm.S
    │   │           ├── SKP_Silk_autocorr.c
    │   │           ├── SKP_Silk_biquad.c
    │   │           ├── SKP_Silk_biquad_alt.c
    │   │           ├── SKP_Silk_burg_modified.c
    │   │           ├── SKP_Silk_bwexpander.c
    │   │           ├── SKP_Silk_bwexpander_32.c
    │   │           ├── SKP_Silk_clz_arm.S
    │   │           ├── SKP_Silk_code_signs.c
    │   │           ├── SKP_Silk_common_pitch_est_defines.h
    │   │           ├── SKP_Silk_control_audio_bandwidth.c
    │   │           ├── SKP_Silk_control_codec_FIX.c
    │   │           ├── SKP_Silk_corrMatrix_FIX.c
    │   │           ├── SKP_Silk_create_init_destroy.c
    │   │           ├── SKP_Silk_dec_API.c
    │   │           ├── SKP_Silk_decode_core.c
    │   │           ├── SKP_Silk_decode_core_arm.S
    │   │           ├── SKP_Silk_decode_frame.c
    │   │           ├── SKP_Silk_decode_parameters.c
    │   │           ├── SKP_Silk_decode_pitch.c
    │   │           ├── SKP_Silk_decode_pulses.c
    │   │           ├── SKP_Silk_decoder_set_fs.c
    │   │           ├── SKP_Silk_define.h
    │   │           ├── SKP_Silk_detect_SWB_input.c
    │   │           ├── SKP_Silk_div_oabi.c
    │   │           ├── SKP_Silk_enc_API.c
    │   │           ├── SKP_Silk_encode_frame_FIX.c
    │   │           ├── SKP_Silk_encode_parameters.c
    │   │           ├── SKP_Silk_encode_pulses.c
    │   │           ├── SKP_Silk_find_LPC_FIX.c
    │   │           ├── SKP_Silk_find_LTP_FIX.c
    │   │           ├── SKP_Silk_find_pitch_lags_FIX.c
    │   │           ├── SKP_Silk_find_pred_coefs_FIX.c
    │   │           ├── SKP_Silk_gain_quant.c
    │   │           ├── SKP_Silk_init_encoder_FIX.c
    │   │           ├── SKP_Silk_inner_prod_aligned.c
    │   │           ├── SKP_Silk_inner_prod_aligned_arm.S
    │   │           ├── SKP_Silk_interpolate.c
    │   │           ├── SKP_Silk_k2a.c
    │   │           ├── SKP_Silk_k2a_Q16.c
    │   │           ├── SKP_Silk_lin2log.c
    │   │           ├── SKP_Silk_lin2log_arm.S
    │   │           ├── SKP_Silk_log2lin.c
    │   │           ├── SKP_Silk_macros.h
    │   │           ├── SKP_Silk_macros_arm.h
    │   │           ├── SKP_Silk_main.h
    │   │           ├── SKP_Silk_main_FIX.h
    │   │           ├── SKP_Silk_noise_shape_analysis_FIX.c
    │   │           ├── SKP_Silk_pitch_analysis_core.c
    │   │           ├── SKP_Silk_pitch_est_defines.h
    │   │           ├── SKP_Silk_pitch_est_tables.c
    │   │           ├── SKP_Silk_prefilter_FIX.c
    │   │           ├── SKP_Silk_prefilter_FIX_arm.S
    │   │           ├── SKP_Silk_process_NLSFs_FIX.c
    │   │           ├── SKP_Silk_process_gains_FIX.c
    │   │           ├── SKP_Silk_quant_LTP_gains_FIX.c
    │   │           ├── SKP_Silk_range_coder.c
    │   │           ├── SKP_Silk_regularize_correlations_FIX.c
    │   │           ├── SKP_Silk_resampler.c
    │   │           ├── SKP_Silk_resampler_down2.c
    │   │           ├── SKP_Silk_resampler_down2_3.c
    │   │           ├── SKP_Silk_resampler_down2_arm.S
    │   │           ├── SKP_Silk_resampler_down3.c
    │   │           ├── SKP_Silk_resampler_private.h
    │   │           ├── SKP_Silk_resampler_private_AR2.c
    │   │           ├── SKP_Silk_resampler_private_AR2_arm.S
    │   │           ├── SKP_Silk_resampler_private_ARMA4.c
    │   │           ├── SKP_Silk_resampler_private_ARMA4_arm.S
    │   │           ├── SKP_Silk_resampler_private_IIR_FIR.c
    │   │           ├── SKP_Silk_resampler_private_IIR_FIR_arm.S
    │   │           ├── SKP_Silk_resampler_private_copy.c
    │   │           ├── SKP_Silk_resampler_private_down4.c
    │   │           ├── SKP_Silk_resampler_private_down_FIR.c
    │   │           ├── SKP_Silk_resampler_private_down_FIR_arm.S
    │   │           ├── SKP_Silk_resampler_private_up2_HQ.c
    │   │           ├── SKP_Silk_resampler_private_up2_HQ_arm.S
    │   │           ├── SKP_Silk_resampler_private_up4.c
    │   │           ├── SKP_Silk_resampler_rom.c
    │   │           ├── SKP_Silk_resampler_rom.h
    │   │           ├── SKP_Silk_resampler_rom_arm.S
    │   │           ├── SKP_Silk_resampler_structs.h
    │   │           ├── SKP_Silk_resampler_up2.c
    │   │           ├── SKP_Silk_resampler_up2_arm.S
    │   │           ├── SKP_Silk_residual_energy16_FIX.c
    │   │           ├── SKP_Silk_residual_energy_FIX.c
    │   │           ├── SKP_Silk_scale_copy_vector16.c
    │   │           ├── SKP_Silk_scale_vector.c
    │   │           ├── SKP_Silk_schur.c
    │   │           ├── SKP_Silk_schur64.c
    │   │           ├── SKP_Silk_schur64_arm.S
    │   │           ├── SKP_Silk_setup_complexity.h
    │   │           ├── SKP_Silk_shell_coder.c
    │   │           ├── SKP_Silk_sigm_Q15.c
    │   │           ├── SKP_Silk_sigm_Q15_arm.S
    │   │           ├── SKP_Silk_solve_LS_FIX.c
    │   │           ├── SKP_Silk_sort.c
    │   │           ├── SKP_Silk_structs.h
    │   │           ├── SKP_Silk_structs_FIX.h
    │   │           ├── SKP_Silk_sum_sqr_shift.c
    │   │           ├── SKP_Silk_sum_sqr_shift_arm.S
    │   │           ├── SKP_Silk_tables.h
    │   │           ├── SKP_Silk_tables_LTP.c
    │   │           ├── SKP_Silk_tables_NLSF_CB0_10.c
    │   │           ├── SKP_Silk_tables_NLSF_CB0_10.h
    │   │           ├── SKP_Silk_tables_NLSF_CB0_16.c
    │   │           ├── SKP_Silk_tables_NLSF_CB0_16.h
    │   │           ├── SKP_Silk_tables_NLSF_CB1_10.c
    │   │           ├── SKP_Silk_tables_NLSF_CB1_10.h
    │   │           ├── SKP_Silk_tables_NLSF_CB1_16.c
    │   │           ├── SKP_Silk_tables_NLSF_CB1_16.h
    │   │           ├── SKP_Silk_tables_gain.c
    │   │           ├── SKP_Silk_tables_other.c
    │   │           ├── SKP_Silk_tables_pitch_lag.c
    │   │           ├── SKP_Silk_tables_pulses_per_block.c
    │   │           ├── SKP_Silk_tables_sign.c
    │   │           ├── SKP_Silk_tables_type_offset.c
    │   │           ├── SKP_Silk_tuning_parameters.h
    │   │           ├── SKP_Silk_warped_autocorrelation_FIX.c
    │   │           └── SKP_Silk_warped_autocorrelation_FIX_arm.S
    │   │       └── test
    │   │           ├── Decoder.c
    │   │           ├── Encoder.c
    │   │           └── signalCompare.c
    ├── stub
    │   ├── AndroidManifest.xml
    │   └── build.gradle.kts
    └── xView
    │   ├── AndroidManifest.xml
    │   └── build.gradle.kts
├── loader
    ├── hookapi
    │   ├── build.gradle.kts
    │   └── src
    │   │   └── main
    │   │       └── java
    │   │           └── io
    │   │               └── github
    │   │                   └── qauxv
    │   │                       └── loader
    │   │                           └── hookapi
    │   │                               ├── IClassLoaderHelper.java
    │   │                               ├── IHookBridge.java
    │   │                               └── ILoaderService.java
    ├── sbl
    │   ├── build.gradle.kts
    │   └── src
    │   │   └── main
    │   │       ├── java
    │   │           └── io
    │   │           │   └── github
    │   │           │       └── qauxv
    │   │           │           └── loader
    │   │           │               └── sbl
    │   │           │                   ├── common
    │   │           │                       ├── CheckUtils.java
    │   │           │                       ├── ModuleLoader.java
    │   │           │                       └── TransitClassLoader.java
    │   │           │                   ├── frida
    │   │           │                       ├── FridaInjectEntry.java
    │   │           │                       └── FridaStartupImpl.java
    │   │           │                   ├── lsp100
    │   │           │                       ├── Lsp100ExtCmd.java
    │   │           │                       ├── Lsp100HookEntry.java
    │   │           │                       ├── Lsp100HookImpl.java
    │   │           │                       ├── Lsp100HookWrapper.java
    │   │           │                       ├── codegen
    │   │           │                       │   └── Lsp100ProxyClassMaker.java
    │   │           │                       └── dyn
    │   │           │                       │   └── Lsp100CallbackProxy.java
    │   │           │                   └── xp51
    │   │           │                       ├── Xp51ExtCmd.java
    │   │           │                       ├── Xp51HookEntry.java
    │   │           │                       ├── Xp51HookImpl.java
    │   │           │                       ├── Xp51HookStatusInit.java
    │   │           │                       └── Xp51HookWrapper.java
    │   │       └── resources
    │   │           └── META-INF
    │   │               └── xposed
    │   │                   ├── java_init.list
    │   │                   ├── module.prop
    │   │                   ├── native_init.list
    │   │                   └── scope.list
    └── startup
    │   ├── build.gradle.kts
    │   └── src
    │       └── main
    │           └── java
    │               └── io
    │                   └── github
    │                       └── qauxv
    │                           └── startup
    │                               ├── HybridClassLoader.java
    │                               └── UnifiedEntryPoint.java
├── renovate.json
└── settings.gradle.kts


/.editorconfig:
--------------------------------------------------------------------------------
 1 | root = true
 2 | 
 3 | [*]
 4 | end_of_line = lf
 5 | charset = utf-8
 6 | indent_style = space
 7 | 
 8 | [{*.java, *.kt,*.kts, *.cpp, *.c, *.cc, *.h}]
 9 | tab_width = 4
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 | max_line_length = 160
13 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 |   - name: 交流群 / Group
4 |     url: https://t.me/QAuxiliaryChat
5 |     about: Our Telegram Group
6 |   - name: 如何智慧地提问 / smart-question
7 |     url: https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md
8 |     about: 在提问之前请阅读 / READ BEFORE YOU ASKING ANY QUESTION
9 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
 1 | name: 功能请求 / Feature request
 2 | description: 提出你想要的功能。 / Feature request.
 3 | labels: [ Feature ]
 4 | title: "[功能请求] "
 5 | body:
 6 |   - type: markdown
 7 |     attributes:
 8 |       value: |
 9 |         感谢您给 QAuxiliary 提出建议!
10 |         为了使我们更好地帮助你,请提供以下信息。
11 | 
12 |   - type: "input"
13 |     id: version
14 |     attributes:
15 |       label: "QQ(TIM) 版本 / QQ(TIM) Version"
16 |       description: "QQ(TIM) 版本 / QQ(TIM) Version"
17 |     validations:
18 |       required: true
19 | 
20 |   - type: textarea
21 |     id: why
22 |     attributes:
23 |       label: 为什么你认为需要此功能
24 |     validations:
25 |       required: true
26 | 
27 |   - type: textarea
28 |     id: related-feature
29 |     attributes:
30 |       label: 联系到哪些已经存在的 bug 或者功能
31 |       description: 如果没有留空即可
32 |     validations:
33 |       required: false
34 | 
35 |   - type: textarea
36 |     id: details
37 |     attributes:
38 |       label: 具体功能需要 / Detailed features requirements
39 |     validations:
40 |       required: true
41 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/the_dev_feedback.yml:
--------------------------------------------------------------------------------
 1 | name: 开发者帮助 / Development Help
 2 | description: 汇报问题或请求开发帮助(仅限开发者)。 / Report issues or ask for help on development. (For developers only)
 3 | labels: [ "dev" ]
 4 | title: "[dev] "
 5 | body:
 6 |   - type: markdown
 7 |     attributes:
 8 |       value: |
 9 |         感谢给 QAuxiliary 汇报问题!
10 |         为了使我们更好地帮助你,请提供以下信息。
11 |   - type: textarea
12 |     attributes:
13 |       label: 描述 / Description
14 |       placeholder: |
15 |         1. 
16 |         2. 
17 |         3.
18 |     validations:
19 |       required: true
20 |   - type: checkboxes
21 |     id: latest
22 |     attributes:
23 |       label: 其他要求 / Other Requirements
24 |       options:
25 |         - label: 我已经在 [Issue Tracker](https://github.com/cinit/QAuxiliary/issues) 中找过我要提出的问题,没有找到相同问题。重复问题会被关闭。
26 |           required: true
27 |         - label: 我知晓此 Issue 模板仅限开发者使用,普通用户请使用问题反馈或功能请求模板。 / I know this issue template is for developers only. Regular users should use the bug report or feature request template.
28 |           required: true
29 | 


--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
 1 | # 标题 / Title Here
 2 | 
 3 | <!--- Provide a general summary of your changes in the title above. -->
 4 | <!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
 5 | 
 6 | ## 描述 / Description
 7 | 
 8 | <!--- Describe your changes in detail here. -->
 9 | 
10 | ## 修复或解决的问题 / Issues Fixed or Closed by This PR
11 | 
12 | ## 检查列表 / Check List
13 | 
14 | <!--- 请根据您的实际情况勾选下面的复选框,并非全部都需要勾选。 -->
15 | <!--- Please check the checkboxes below according to your ACTUAL situation. This is NOT a must-check-all list. -->
16 | 
17 | - [ ] 我已经在预期的 QQ 或 TIM 版本上测试了这些更改,并确认它们能够正常工作,不会破坏任何东西(尽我所能)。
18 |   I have tested these changes on the expected version and confirmed that they work and don't break anything (as well as I can manage).
19 | - [ ] 我的改动不会导致本模块丢失对旧版 QQ 或 TIM 的支持。
20 |   My changes will not cause this module to lose support for older versions of QQ or TIM。
21 | - [ ] 我已经合并了对后续工作无意义的提交,并确认它们不会对后续维护造成破坏。(必须)
22 |   I have merged commits that are meaningless for follow-up work and confirmed that they will not cause damage to follow-up maintenance. (Required)
23 | 


--------------------------------------------------------------------------------
/.github/workflows/auto_close_issues.yml:
--------------------------------------------------------------------------------
 1 | name: Check Issues
 2 | 
 3 | on:
 4 |   issues:
 5 |     types: [opened]
 6 | jobs:
 7 |   check:
 8 |     runs-on: ubuntu-latest
 9 |     steps:
10 |       - if: contains(github.event.issue.body, '最新版' ) 
11 |         id: close-latest-version
12 |         name: Close Issue(template)
13 |         uses: peter-evans/close-issue@v3
14 |         with:
15 |           comment: 我不知道什么是最新版捏,具体版本号pls
16 | 


--------------------------------------------------------------------------------
/.github/workflows/check_commit_message.yml:
--------------------------------------------------------------------------------
 1 | name: 'Commit Message Check'
 2 | on: 
 3 |   pull_request:
 4 | jobs:
 5 |   check-commit-message:
 6 |     name: Check Commit Message
 7 |     runs-on: ubuntu-latest 
 8 |     steps:
 9 |         - name: Check Commit Message [skip CI]
10 |           env: 
11 |             COMMIT_FILTER: "[skip ci]"
12 |           if: "contains(github.event.head_commit.message, '[skip ci]')"
13 |           run: | 
14 |             echo "no 'skip ci' in commit message"
15 |             exit 2
16 | 
17 |         - uses: actions-ecosystem/action-regex-match@v2
18 |           id: regex-match
19 |           with:
20 |             text: ${{ github.event.head_commit.message }}
21 |             regex: '[^\x00-\x7F]+'
22 | 
23 |         - name: Check Commit Message [Non-ASCII]
24 |           if: ${{ steps.regex-match.outputs.match != '' }}
25 |           run: | 
26 |             echo "No Non-ASCII msg in commit message"
27 |             exit 2
28 | 
29 | 


--------------------------------------------------------------------------------
/.github/workflows/clean.yml:
--------------------------------------------------------------------------------
 1 | name: Clear cache
 2 | 
 3 | on:
 4 |   workflow_dispatch:
 5 | 
 6 | permissions:
 7 |   actions: write
 8 | 
 9 | jobs:
10 |   clear-ccache:
11 |     runs-on: ubuntu-latest
12 |     steps:
13 |       - name: Clear cache
14 |         uses: actions/github-script@v7
15 |         with:
16 |           script: |
17 |             console.log("About to clear")
18 |             const caches = await github.rest.actions.getActionsCacheList({
19 |               owner: context.repo.owner,
20 |               repo: context.repo.repo,
21 |             })
22 |             for (const cache of caches.data.actions_caches) {
23 |               console.log(cache)
24 |               github.rest.actions.deleteActionsCacheById({
25 |                 owner: context.repo.owner,
26 |                 repo: context.repo.repo,
27 |                 cache_id: cache.id,
28 |               })
29 |             }
30 |             console.log("Clear completed")
31 | 


--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 | <component name="ProjectCodeStyleConfiguration">
2 |   <state>
3 |     <option name="USE_PER_PROJECT_SETTINGS" value="true" />
4 |   </state>
5 | </component>


--------------------------------------------------------------------------------
/.idea/copyright/license.xml:
--------------------------------------------------------------------------------
1 | <component name="CopyrightManager">
2 |   <copyright>
3 |     <option name="notice" value="QAuxiliary - An Xposed module for QQ/TIM&#10;Copyright (C) 2019-&amp;#36;{today.year} QAuxiliary developers&#10;https://github.com/cinit/QAuxiliary&#10;&#10;This software is an opensource software: you can redistribute it&#10;and/or modify it under the terms of the General Public License&#10;as published by the Free Software Foundation; either&#10;version 3 of the License, or any later version as published&#10;by QAuxiliary contributors.&#10;&#10;This software is distributed in the hope that it will be useful,&#10;but WITHOUT ANY WARRANTY; without even the implied warranty of&#10;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&#10;See the General Public License for more details.&#10;&#10;You should have received a copy of the General Public License&#10;along with this software.&#10;If not, see&#10;&lt;https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md&gt;." />
4 |     <option name="myName" value="license" />
5 |   </copyright>
6 | </component>


--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 | <component name="CopyrightManager">
2 |   <settings default="license">
3 |     <module2copyright>
4 |       <element module="All" copyright="license" />
5 |     </module2copyright>
6 |   </settings>
7 | </component>


--------------------------------------------------------------------------------
/.idea/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/.idea/icon.png


--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 | <component name="InspectionProjectProfileManager">
2 |   <profile version="1.0">
3 |     <option name="myName" value="Project Default" />
4 |     <inspection_tool class="AndroidLintUnsafeImplicitIntentLaunch" enabled="false" level="ERROR" enabled_by_default="false" />
5 |     <inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
6 |   </profile>
7 | </component>


--------------------------------------------------------------------------------
/PRIVACY_LICENSE.md:
--------------------------------------------------------------------------------
 1 | # 隐私条款
 2 | 我们非常重视用户的隐私保护,因此制定了本涵盖如何收集、使用、披露、分享以及存储用户的信息的《隐私条款》。用户在使用本模块时,我们可能会收集和使用您的相关信息。
 3 | 我们希望通过本《隐私条款》向您说明,在使用本模块时,我们如何收集、使用、储存和分享这些信息,以及我们为您提供的访问、更新、控制和保护这些信息的方式。
 4 | 本《隐私条款》适用于用户与本模块的交互行为以及用户安装和使用本模块的服务,我们建议您仔细地阅读本政策,以帮助您了解维护自己隐私权的方式。
 5 | 您使用或继续使用本模块,即表示您同意我们按照本《隐私条款》收集、使用、储存和分享您的相关信息。如对本《隐私条款》或相关事宜有任何问题,请进行留言。
 6 | ## 一、我们可能收集的信息
 7 | 我们提供服务时,可能会收集、储存和使用下列与您有关的信息。如果您不提供相关信息,可能无法享受我们提供的某些服务,或者无法达到相关服务拟达到的效果。
 8 | ### (一)您提供的信息:
 9 | 您在使用本模块时,向我们提供的相关信息,例如QQ号等;
10 | ### (二)其他方分享的您的信息:
11 | 其他方使用本模块时所提供有关您的共享信息。
12 | ### (三)我们获取的您的信息:
13 | 1. 您使用服务时我们可能收集如下信息:
14 | 
15 | - 日志信息: 指您使用本模块时,系统自动采集的技术信息,包括:
16 | - 设备或软件信息: 例如您的移动设备或用于使用我们服务的其他程序所提供的配置信息、您的IP地址和移动设备所用的版本;
17 | 
18 | ## 二、我们如何使用您的信息
19 | ### (一)我们可能将在向您提供服务的过程之中所收集的信息用作下列用途:
20 | 1. 向您提供服务。在我们提供服务时,用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途,确保我们向您提供的产品和服务的安全性;
21 | 2. 帮助我们设计新服务,改善我们现有服务;
22 | 3. 使我们更加了解您如何使用和使用本模块,从而针对性地回应您的个性化需求,例如个性化的帮助服务和指示,或对您和其他用户作出其他方面的回应;
23 | 4. 软件认证或管理软件升级;
24 | 5. 让您参与有关我们产品和服务的调查。
25 | ## 三、我们如何分享您的信息
26 | 除以下情形外,未经您同意,我们不会与任何第三方分享您的个人信息:
27 | - 您授权或同意本模块披露的;
28 | - 遵守适用的法律法规;
29 | - 遵守法院命令或其他法律程序的规定;
30 | - 遵守相关政府机关的要求;
31 | - 为遵守适用的法律法规、维护社会公共利益;
32 | - 根据本模块各服务条款及声明中的相关规定。
33 | 


--------------------------------------------------------------------------------
/app/icons/ChineseNewYearIcon/ic_qauxiliary_ChineseNewYear/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:aapt="http://schemas.android.com/aapt"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="108"
 6 |     android:viewportHeight="108">
 7 |   <group android:scaleX="0.1434375"
 8 |       android:scaleY="0.1434375"
 9 |       android:translateX="17.28"
10 |       android:translateY="17.28">
11 |     <group>
12 |       <clip-path
13 |           android:pathData="M0,0h512v512h-512z"/>
14 |       <path
15 |           android:pathData="M0,0h512v512h-512z"
16 |           android:fillColor="#00FFFFFF"/>
17 |       <path
18 |           android:pathData="M0,0h512v512h-512z">
19 |         <aapt:attr name="android:fillColor">
20 |           <gradient 
21 |               android:startX="256"
22 |               android:startY="104.96"
23 |               android:endX="256"
24 |               android:endY="434.69"
25 |               android:type="linear">
26 |             <item android:offset="0" android:color="#FFCD230B"/>
27 |             <item android:offset="1" android:color="#FFCD2406"/>
28 |           </gradient>
29 |         </aapt:attr>
30 |       </path>
31 |     </group>
32 |   </group>
33 | </vector>
34 | 


--------------------------------------------------------------------------------
/app/icons/QAPro/ic_qauxiliary_pro/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:aapt="http://schemas.android.com/aapt"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="108"
 6 |     android:viewportHeight="108">
 7 |     <group android:scaleX="0.1434375"
 8 |         android:scaleY="0.1434375"
 9 |         android:translateX="17.28"
10 |         android:translateY="17.28">
11 |         <group>
12 |             <clip-path
13 |                 android:pathData="M0,0h512v512h-512z"/>
14 |             <path
15 |                 android:pathData="M0,0h512v512h-512z"
16 |                 android:fillColor="#00FFFFFF"/>
17 |             <path
18 |                 android:pathData="M0,0h512v512h-512z">
19 |                 <aapt:attr name="android:fillColor">
20 |                     <gradient
21 |                         android:startX="131.58"
22 |                         android:startY="141.82"
23 |                         android:endX="371.2"
24 |                         android:endY="367.1"
25 |                         android:type="linear">
26 |                         <item android:offset="0" android:color="#FF3C4043"/>
27 |                         <item android:offset="1" android:color="#FF202124"/>
28 |                     </gradient>
29 |                 </aapt:attr>
30 |             </path>
31 |         </group>
32 |     </group>
33 | </vector>
34 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_DarkBlue/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FF344CB7"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_LightBlue/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FF39A2DB"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_LightOrange/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FFE5890A"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_black/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FF202124"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_brown/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FFA64B2A"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_cyan/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FF219f94"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_darkgreen/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FF1C6758"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_pro/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:aapt="http://schemas.android.com/aapt"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="108"
 6 |     android:viewportHeight="108">
 7 |     <group android:scaleX="0.1434375"
 8 |         android:scaleY="0.1434375"
 9 |         android:translateX="17.28"
10 |         android:translateY="17.28">
11 |         <group>
12 |             <clip-path
13 |                 android:pathData="M0,0h512v512h-512z"/>
14 |             <path
15 |                 android:pathData="M0,0h512v512h-512z"
16 |                 android:fillColor="#00FFFFFF"/>
17 |             <path
18 |                 android:pathData="M0,0h512v512h-512z">
19 |                 <aapt:attr name="android:fillColor">
20 |                     <gradient
21 |                         android:startX="131.58"
22 |                         android:startY="141.82"
23 |                         android:endX="371.2"
24 |                         android:endY="367.1"
25 |                         android:type="linear">
26 |                         <item android:offset="0" android:color="#FF3C4043"/>
27 |                         <item android:offset="1" android:color="#FF202124"/>
28 |                     </gradient>
29 |                 </aapt:attr>
30 |             </path>
31 |         </group>
32 |     </group>
33 | </vector>
34 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_purple/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FF7952B3"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_qnstyle/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FFFFFFFF"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_qnstylelite/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FFFFFFFF"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/classic/ic_qauxiliary_red/icon_qa_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="512"
 6 |     android:viewportHeight="512">
 7 |     <path
 8 |         android:fillColor="#FFE64848"
 9 |         android:pathData="M0,0h512v512h-512" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/icons/icon.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/icon_qa_background" />
4 |     <foreground android:drawable="@drawable/icon_qa_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/app/src/debug/java/hook/EnableAllHook.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package hook
23 | 
24 | import io.github.qauxv.base.annotation.UiItemAgentEntry
25 | import io.github.qauxv.dsl.FunctionEntryRouter
26 | import io.github.qauxv.hook.CommonSwitchFunctionHook
27 | 
28 | @UiItemAgentEntry
29 | object EnableAllHook : CommonSwitchFunctionHook() {
30 |     override val name: String = "启用所有功能"
31 | 
32 |     override fun initOnce(): Boolean = true
33 | 
34 |     override val uiItemLocation: Array<String>
35 |         get() = FunctionEntryRouter.Locations.DebugCategory.DEBUG_CATEGORY
36 | }
37 | 


--------------------------------------------------------------------------------
/app/src/main/aidl/io/github/qauxv/lifecycle/IShadowTmpFileProvider.aidl:
--------------------------------------------------------------------------------
 1 | // IShadowTmpFileProvider.aidl
 2 | package io.github.qauxv.lifecycle;
 3 | 
 4 | // Declare any non-default types here with import statements
 5 | 
 6 | interface IShadowTmpFileProvider {
 7 | 
 8 |     boolean isTmpFileExists(String id);
 9 | 
10 |     long getTmpFileSize(String id);
11 | 
12 |     String getTmpFileMimeType(String id);
13 | 
14 |     String getTmpFileName(String id);
15 | 
16 |     ParcelFileDescriptor getTmpFileDescriptor(String id);
17 | 
18 | }
19 | 


--------------------------------------------------------------------------------
/app/src/main/assets/face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/assets/face.png


--------------------------------------------------------------------------------
/app/src/main/assets/native_init:
--------------------------------------------------------------------------------
1 | libqauxv-core0.so
2 | libqauxv-core1.so
3 | 


--------------------------------------------------------------------------------
/app/src/main/assets/repeat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/assets/repeat.png


--------------------------------------------------------------------------------
/app/src/main/assets/xposed_init:
--------------------------------------------------------------------------------
1 | io.github.qauxv.loader.sbl.xp51.Xp51HookEntry
2 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/dummy/dummy.cc:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-16.
 3 | //
 4 | 
 5 | #include <jni.h>
 6 | 
 7 | extern "C"
 8 | JNIEXPORT jint JNI_OnLoad([[maybe_unused]] JavaVM* vm, [[maybe_unused]] void* reserved) {
 9 |     // placeholder symbol to make this shared exists
10 |     return JNI_VERSION_1_6;
11 | }
12 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/misc/md5.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by teble on 2022/4/9.
 3 | //
 4 | 
 5 | #ifndef MD5_H
 6 | #define MD5_H
 7 | 
 8 | #include <bitset>
 9 | #include <string>
10 | #include <vector>
11 | 
12 | typedef unsigned int bit32;
13 | 
14 | class MD5 {
15 | public:
16 |     explicit MD5(std::string str);
17 |     MD5();
18 | 
19 |     void init();
20 | 
21 |     std::string getDigest();
22 | 
23 |     void padding();
24 |     void sort_little_endian();
25 |     void appendLength();
26 |     void transform(int beginIndex);
27 |     void decode(int beginIndex, bit32* x);
28 |     static bit32 convertToBit32(const std::vector<bool>& a);
29 | 
30 |     std::string to_str() const;
31 | 
32 | private:
33 |     std::string input_msg;
34 |     std::vector<bool> bin_msg;
35 | 
36 |     // b is the length of the original msg
37 |     int b{};
38 |     std::vector<bool> bin_b;
39 | 
40 |     bit32 A{}, B{}, C{}, D{};
41 | };
42 | 
43 | 
44 | #endif //MD5_H
45 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/misc/v2sign.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-10-12.
 3 | //
 4 | 
 5 | #ifndef QAUXV_V2SIGN_H
 6 | #define QAUXV_V2SIGN_H
 7 | 
 8 | #include <cstdint>
 9 | #include <string>
10 | #include <jni.h>
11 | 
12 | namespace teble::v2sign {
13 | 
14 | bool checkSignature(JNIEnv* env, bool isInHostAsModule);
15 | 
16 | }
17 | 
18 | #endif //QAUXV_V2SIGN_H
19 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/misc/version.c:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by cinit on 2021-05-12.
 3 | //
 4 | #include <stdio.h>
 5 | #include <unistd.h>
 6 | 
 7 | #if defined(__LP64__)
 8 | const char so_interp[] __attribute__((used, section(".interp"), visibility("default"))) = "/system/bin/linker64";
 9 | _Static_assert(sizeof(void *) == 8, "sizeof(void *) != 8");
10 | #else
11 | const char so_interp[] __attribute__((used, section(".interp"), visibility("default"))) = "/system/bin/linker";
12 | _Static_assert(sizeof(void *) == 4, "sizeof(void *) != 4");
13 | #endif
14 | 
15 | #ifndef QAUXV_VERSION
16 | #error Please define macro QAUXV_VERSION in CMakeList
17 | #endif
18 | 
19 | __attribute__((used, noreturn, section(".entry_init")))
20 | void __libqauxv_main(void) {
21 |     printf("QAuxiliary libqauxv-core0.so version " QAUXV_VERSION ".\n"
22 |            "Copyright (C) 2019-2023 QAuxiliary developers\n"
23 |            "This software is distributed in the hope that it will be useful,\n"
24 |            "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
25 |            "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
26 |     _exit(0);
27 | }
28 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/ntkernel/NtRecallMsgHook.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-05-17.
 3 | //
 4 | 
 5 | #ifndef QAUXILIARY_NTREVOKEMSGHOOK_H
 6 | #define QAUXILIARY_NTREVOKEMSGHOOK_H
 7 | 
 8 | #include <cstdint>
 9 | 
10 | 
11 | namespace ntqq::hook {
12 | 
13 | class NtRecallMsgHook {
14 | 
15 | };
16 | 
17 | } // ntqq::hook
18 | 
19 | #endif //QAUXILIARY_NTREVOKEMSGHOOK_H
20 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/qauxv_core/HostInfo.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-05-17.
 3 | //
 4 | 
 5 | #ifndef QAUXILIARY_HOSTINFO_H
 6 | #define QAUXILIARY_HOSTINFO_H
 7 | 
 8 | #include <cstdint>
 9 | #include <string>
10 | #include <string_view>
11 | 
12 | struct _JavaVM;
13 | typedef _JavaVM JavaVM;
14 | 
15 | namespace qauxv {
16 | 
17 | class HostInfo {
18 | public:
19 |     // no instance
20 |     HostInfo() = delete;
21 | 
22 |     static int GetSdkInt() noexcept;
23 |     static std::string GetPackageName();
24 |     static std::string GetVersionName();
25 |     static std::string GetDataDir();
26 |     static uint32_t GetVersionCode32() noexcept;
27 |     static uint64_t GetLongVersionCode() noexcept;
28 |     static bool IsDebugBuild() noexcept;
29 |     static JavaVM* GetJavaVM() noexcept;
30 | 
31 |     static void PreInitHostInfo(JavaVM* jvm, std::string dataDir);
32 | 
33 |     static void InitHostInfo(
34 |             JavaVM* jvm,
35 |             std::string dataDir,
36 |             std::string_view packageName,
37 |             std::string_view versionName,
38 |             uint64_t longVersionCode,
39 |             bool isDebugBuild
40 |     );
41 | 
42 | };
43 | 
44 | } // qauxv
45 | 
46 | #endif // QAUXILIARY_HOSTINFO_H
47 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/qauxv_core/LsplantBridge.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-18.
 3 | //
 4 | 
 5 | #ifndef QAUXV_LSPLANTBRIDGE_H
 6 | #define QAUXV_LSPLANTBRIDGE_H
 7 | 
 8 | #include <jni.h>
 9 | 
10 | namespace qauxv {
11 | 
12 | bool InitLSPlantImpl(JNIEnv* env);
13 | 
14 | void HookArtProfileSaver();
15 | 
16 | }
17 | 
18 | #endif //QAUXV_LSPLANTBRIDGE_H
19 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/qauxv_core/linker_utils.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-07-11.
 3 | //
 4 | 
 5 | #ifndef QAUXV_LINKER_UTILS_H
 6 | #define QAUXV_LINKER_UTILS_H
 7 | 
 8 | #include <android/dlext.h>
 9 | 
10 | namespace qauxv {
11 | 
12 | void* loader_android_dlopen_ext(const char* filename,
13 |                                 int flag,
14 |                                 const android_dlextinfo* extinfo,
15 |                                 const void* caller_addr);
16 | 
17 | void* loader_dlopen(const char* filename, int flag, const void* caller_addr);
18 | 
19 | }
20 | 
21 | #endif //QAUXV_LINKER_UTILS_H
22 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/qauxv_core/lsp_native_api.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * This file is part of LSPosed.
 3 |  *
 4 |  * LSPosed is free software: you can redistribute it and/or modify
 5 |  * it under the terms of the GNU General Public License as published by
 6 |  * the Free Software Foundation, either version 3 of the License, or
 7 |  * (at your option) any later version.
 8 |  *
 9 |  * LSPosed is distributed in the hope that it will be useful,
10 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 |  * GNU General Public License for more details.
13 |  *
14 |  * You should have received a copy of the GNU General Public License
15 |  * along with LSPosed.  If not, see <https://www.gnu.org/licenses/>.
16 |  *
17 |  * Copyright (C) 2020 EdXposed Contributors
18 |  * Copyright (C) 2021 LSPosed Contributors
19 |  */
20 | 
21 | //
22 | // Created by kotori on 2/4/21.
23 | //
24 | 
25 | #ifndef LSPOSED_NATIVE_API_H
26 | #define LSPOSED_NATIVE_API_H
27 | 
28 | #include <cstdint>
29 | #include <string>
30 | 
31 | typedef int (*HookFunType)(void *func, void *replace, void **backup);
32 | 
33 | typedef int (*UnhookFunType)(void *func);
34 | 
35 | typedef void (*NativeOnModuleLoaded)(const char *name, void *handle);
36 | 
37 | typedef struct {
38 |     uint32_t version;
39 |     HookFunType hookFunc;
40 |     UnhookFunType unhookFunc;
41 | } NativeAPIEntries;
42 | 
43 | typedef NativeOnModuleLoaded (*NativeInit)(const NativeAPIEntries *entries);
44 | 
45 | #endif //LSPOSED_NATIVE_API_H
46 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/qauxv_core/natives_utils.h:
--------------------------------------------------------------------------------
 1 | #ifndef NATIVES_NATIVES_UTILS_H
 2 | #define NATIVES_NATIVES_UTILS_H
 3 | 
 4 | #include <jni.h>
 5 | #include <stdint.h>
 6 | 
 7 | #define EXPORT __attribute__((visibility("default")))
 8 | 
 9 | #define NOINLINE __attribute__((noinline))
10 | 
11 | typedef unsigned char uchar;
12 | 
13 | //Android is little endian, use pointer
14 | inline uint32_t readLe32(uint8_t *buf, int index) {
15 |     return *((uint32_t * )(buf + index));
16 | }
17 | 
18 | inline uint32_t readLe16(uint8_t *buf, int off) {
19 |     return *((uint16_t * )(buf + off));
20 | }
21 | 
22 | inline int min(int a, int b) {
23 |     return a > b ? b : a;
24 | }
25 | 
26 | inline int max(int a, int b) {
27 |     return a < b ? b : a;
28 | }
29 | 
30 | extern "C" jint MMKV_JNI_OnLoad(JavaVM *vm, void *reserved);
31 | 
32 | #endif //NATIVES_NATIVES_UTILS_H
33 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/ElfScan.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-06-24.
 3 | //
 4 | 
 5 | #ifndef QAUXV_ELFSCAN_H
 6 | #define QAUXV_ELFSCAN_H
 7 | 
 8 | #include <cstdint>
 9 | #include <string>
10 | #include <vector>
11 | #include <optional>
12 | #include <span>
13 | 
14 | namespace utils {
15 | 
16 | std::vector<uint64_t> FindByteSequenceForImageFile(const void* baseAddress, std::span<const uint8_t> sequence,
17 |                                                    std::span<const uint8_t> mask, bool execMemOnly, int step,
18 |                                                    std::optional<uint64_t> hint);
19 | 
20 | std::vector<uint64_t> FindByteSequenceForLoadedImage(const void* baseAddress, std::span<const uint8_t> sequence,
21 |                                                      std::span<const uint8_t> mask, bool execMemOnly, int step,
22 |                                                      std::optional<uint64_t> hint);
23 | 
24 | std::vector<uint64_t> FindByteSequenceImpl(const void* baseAddress, bool isLoaded, std::span<const uint8_t> sequence,
25 |                                            std::span<const uint8_t> mask, bool execMemOnly, int step,
26 |                                            std::optional<uint64_t> hint);
27 | 
28 | }
29 | 
30 | #endif //QAUXV_ELFSCAN_H
31 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/Log.cc:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-09.
 3 | //
 4 | 
 5 | 
 6 | #include "Log.h"
 7 | 
 8 | #include <cstring>
 9 | #include <cstdlib>
10 | #include <unistd.h>
11 | 
12 | #include <android/log.h>
13 | #include <android/set_abort_message.h>
14 | 
15 | namespace qauxv::utils {
16 | 
17 | [[noreturn]] void Abort(std::string_view msg) noexcept {
18 |     if (!msg.empty()) {
19 |         static const char oomWhenAborting[] = "Out of memory when trying to allocate memory for abort message.";
20 |         auto* buf = reinterpret_cast<char*>(malloc(msg.size() + 1));
21 |         size_t len;
22 |         if (buf == nullptr) {
23 |             len = sizeof(oomWhenAborting);
24 |             buf = const_cast<char*>(oomWhenAborting);
25 |         } else {
26 |             len = msg.size();
27 |             std::memcpy(buf, msg.data(), len);
28 |             buf[len] = '\0';
29 |         }
30 | #ifdef __ANDROID__
31 |         __android_log_write(ANDROID_LOG_FATAL, "DEBUG", buf);
32 |         android_set_abort_message(buf);
33 | #else
34 |         ::write(STDERR_FILENO, buf, len);
35 | #endif
36 |     }
37 |     ::abort();
38 | }
39 | 
40 | }
41 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/MemoryDexLoader.h:
--------------------------------------------------------------------------------
 1 | #include <string>
 2 | #include <string_view>
 3 | #include <memory>
 4 | 
 5 | #include <jni.h>
 6 | 
 7 | #include "utils/art_symbol_resolver.h"
 8 | 
 9 | namespace qauxv {
10 | 
11 | namespace art {
12 | 
13 | class DexFile {
14 | public:
15 |     DexFile() = delete;
16 |     ~DexFile() = default;
17 |     // no copy, no assign
18 |     DexFile(const DexFile&) = delete;
19 |     DexFile& operator=(const DexFile&) = delete;
20 |     DexFile(DexFile&&) = delete;
21 |     DexFile& operator=(DexFile&&) = delete;
22 | 
23 |     jobject ToJavaDexFile(JNIEnv* env) const;
24 | 
25 |     // Opens a .dex file at the given address, optionally backed by a MemMap
26 |     // see https://cs.android.com/android/platform/superproject/+/android-7.0.0_r1:art/runtime/dex_file.cc
27 |     static const art::DexFile* OpenMemory(const uint8_t* dex_file, size_t size, std::string location, std::string* error_msg);
28 | 
29 | };
30 | 
31 | }
32 | 
33 | }
34 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/ProcessView.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by kinit on 2021-10-25.
 3 | //
 4 | 
 5 | #ifndef NATIVES_PROCESSVIEW_H
 6 | #define NATIVES_PROCESSVIEW_H
 7 | 
 8 | #include <cstdint>
 9 | #include <vector>
10 | #include <string>
11 | 
12 | namespace utils {
13 | 
14 | class ProcessView {
15 | public:
16 |     class Module {
17 |     public:
18 |         std::string name;
19 |         std::string path;
20 |         uint64_t baseAddress;
21 |     };
22 | 
23 |     [[nodiscard]] int readProcess(int pid);
24 | 
25 |     [[nodiscard]] int getPointerSize() const noexcept;
26 | 
27 |     [[nodiscard]] int getArchitecture() const noexcept;
28 | 
29 |     [[nodiscard]] bool isValid() const noexcept;
30 | 
31 |     [[nodiscard]] std::vector<Module> getModules() const;
32 | 
33 | private:
34 |     int mPointerSize = 0;
35 |     int mArchitecture = 0;
36 |     std::vector<Module> mProcessModules;
37 | };
38 | 
39 | }
40 | 
41 | #endif //NATIVES_PROCESSVIEW_H
42 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/ThreadUtils.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-05-19.
 3 | //
 4 | 
 5 | #ifndef QAUXILIARY_THREADUTILS_H
 6 | #define QAUXILIARY_THREADUTILS_H
 7 | 
 8 | #include <cstdint>
 9 | #include <unwindstack/AndroidUnwinder.h>
10 | 
11 | #include "utils/Log.h"
12 | 
13 | namespace utils {
14 | 
15 | void DumpCurrentThreadStackTraceToLogcat(android_LogPriority priority);
16 | 
17 | void DumpThreadStackTraceToLogcat(uint32_t tid, android_LogPriority priority);
18 | 
19 | void DumpCurrentProcessWithUContext(void* uctx, android_LogPriority priority);
20 | 
21 | } // utils
22 | 
23 | #endif //QAUXILIARY_THREADUTILS_H
24 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/arch_utils.cc:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-07-14.
 3 | //
 4 | 
 5 | #include "arch_utils.h"
 6 | 
 7 | #include <cstdlib>
 8 | 
 9 | #ifdef __aarch64__
10 | 
11 | extern "C" __attribute__((naked, visibility("default"))) void* call_func_with_x8(const void* func, void* x8, void* x0, void* x1, void* x2, void* x3) {
12 |     __asm volatile (
13 |             "mov x16, x0\n"
14 |             "mov x8, x1\n"
15 |             "mov x0, x2\n"
16 |             "mov x1, x3\n"
17 |             "mov x2, x4\n"
18 |             "mov x3, x5\n"
19 |             "br x16\n"
20 |             );
21 | }
22 | 
23 | #else // not __aarch64__
24 | 
25 | extern "C" void* call_func_with_x8(const void* func, void* x8, void* x0, void* x1, void* x2, void* x3) {
26 |     // not implemented
27 |     abort();
28 | }
29 | 
30 | #endif // __aarch64__
31 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/arch_utils.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2023-07-14.
 3 | //
 4 | 
 5 | #ifndef QAUXV_ARCH_UTILS_H
 6 | #define QAUXV_ARCH_UTILS_H
 7 | 
 8 | extern "C" void* call_func_with_x8(const void* func, void* x8, void* x0, void* x1, void* x2, void* x3);
 9 | 
10 | #endif //QAUXV_ARCH_UTILS_H
11 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/auto_close_fd.cc:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by kinit on 2023-01-03.
 3 | //
 4 | 
 5 | #include <cerrno>
 6 | #include <unistd.h>
 7 | 
 8 | #include "auto_close_fd.h"
 9 | 
10 | auto_close_fd::~auto_close_fd() {
11 |     if (mFd >= 0) {
12 |         TEMP_FAILURE_RETRY(::close(mFd));
13 |     }
14 | }
15 | 
16 | void auto_close_fd::close() noexcept {
17 |     if (mFd >= 0) {
18 |         TEMP_FAILURE_RETRY(::close(mFd));
19 |         mFd = -1;
20 |     }
21 | }
22 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/auto_close_fd.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by kinit on 2023-01-03.
 3 | //
 4 | 
 5 | #ifndef QAUXILIARY_AUTO_CLOSE_FD_H
 6 | #define QAUXILIARY_AUTO_CLOSE_FD_H
 7 | 
 8 | class auto_close_fd {
 9 |  private:
10 |   int mFd = -1;
11 |  public:
12 |   auto_close_fd() = default;
13 | 
14 |   explicit inline auto_close_fd(int fd) noexcept: mFd(fd) {};
15 | 
16 |   ~auto_close_fd();
17 | 
18 |   auto_close_fd(const auto_close_fd &) = delete;
19 | 
20 |   auto_close_fd &operator=(const auto_close_fd &) = delete;
21 | 
22 |   [[nodiscard]] inline bool valid() const noexcept {
23 |       return mFd >= 0;
24 |   }
25 | 
26 |   explicit inline operator bool() const noexcept {
27 |       return valid();
28 |   }
29 | 
30 |   [[nodiscard]] inline int get() const noexcept {
31 |       return mFd;
32 |   }
33 | 
34 |   void close() noexcept;
35 | 
36 |   inline int detach() noexcept {
37 |       int fd = mFd;
38 |       mFd = -1;
39 |       return fd;
40 |   }
41 | };
42 | 
43 | #endif //QAUXILIARY_AUTO_CLOSE_FD_H
44 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/byte_array_output_stream.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-17.
 3 | //
 4 | 
 5 | #ifndef NATIVES_BYTE_ARRAY_OUTPUT_STREAM_H
 6 | #define NATIVES_BYTE_ARRAY_OUTPUT_STREAM_H
 7 | 
 8 | #include <cstdint>
 9 | #include <vector>
10 | #include <span>
11 | 
12 | namespace util {
13 | 
14 | // this utility class is used to write data to a byte array
15 | // it is NOT thread-safe
16 | class ByteArrayOutputStream {
17 | public:
18 |     ByteArrayOutputStream() = default;
19 |     ~ByteArrayOutputStream() = default;
20 |     // avoid accidental copying
21 |     ByteArrayOutputStream(const ByteArrayOutputStream&) = delete;
22 |     ByteArrayOutputStream& operator=(const ByteArrayOutputStream&) = delete;
23 | private:
24 |     static constexpr auto kBlockSize = 4096;
25 | public:
26 |     void Write(const uint8_t* data, int64_t size);
27 | 
28 |     inline void Write(std::span<const uint8_t> data) {
29 |         Write(data.data(), data.size());
30 |     }
31 | 
32 |     void GetCurrentBuffer(uint8_t** buffer, int64_t* currentOffset) noexcept;
33 | 
34 |     void Skip(int64_t size);
35 | 
36 |     [[nodiscard]] std::vector<uint8_t> GetBytes() const;
37 | 
38 |     [[nodiscard]] int64_t GetSize() const noexcept;
39 | 
40 |     [[nodiscard]] constexpr int64_t GetBlockSize() const noexcept {
41 |         return kBlockSize;
42 |     }
43 | 
44 |     void Reset() noexcept;
45 | 
46 | private:
47 |     int64_t mOffsetInCurrentBuffer = 0;
48 |     std::vector<std::array<uint8_t, kBlockSize>> mBuffers;
49 | };
50 | 
51 | }
52 | 
53 | #endif //NATIVES_BYTE_ARRAY_OUTPUT_STREAM_H
54 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/debug_utils.cc:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-05.
 3 | //
 4 | 
 5 | #include "debug_utils.h"
 6 | 
 7 | #include <string_view>
 8 | #include <string>
 9 | #include <cstdint>
10 | #include <vector>
11 | #include <array>
12 | 
13 | #include <fmt/format.h>
14 | 
15 | #include <unistd.h>
16 | #include <fcntl.h>
17 | #include <cstdio>
18 | 
19 | namespace debugutil {
20 | 
21 | void DebugBreakIfDebuggerPresent() {
22 |     if (IsDebuggerPresent()) {
23 |         DebugBreak();
24 |     }
25 | }
26 | 
27 | bool IsDebuggerPresent() {
28 |     // find TracerPid
29 |     std::string statusPath = fmt::format("/proc/{}/status", getpid());
30 |     FILE* statusFile = fopen(statusPath.c_str(), "r");
31 |     if (!statusFile) {
32 |         return false;
33 |     }
34 |     std::array<char, 1024> line = {};
35 |     while (fgets(line.data(), line.size(), statusFile)) {
36 |         if (std::string_view(line.data(), 9) == "TracerPid") {
37 |             int tracerPid = 0;
38 |             sscanf(line.data(), "TracerPid: %d", &tracerPid);
39 |             if (tracerPid != 0) {
40 |                 fclose(statusFile);
41 |                 return true;
42 |             }
43 |             break;
44 |         }
45 |     }
46 |     fclose(statusFile);
47 |     return false;
48 | }
49 | 
50 | }
51 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/debug_utils.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-05.
 3 | //
 4 | 
 5 | #ifndef QAUXV_DEBUG_UTILS_H
 6 | #define QAUXV_DEBUG_UTILS_H
 7 | 
 8 | namespace debugutil {
 9 | 
10 | inline void DebugBreak() {
11 |     __builtin_trap();
12 | }
13 | 
14 | bool IsDebuggerPresent();
15 | 
16 | void DebugBreakIfDebuggerPresent();
17 | 
18 | }
19 | 
20 | #endif //QAUXV_DEBUG_UTILS_H
21 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/shared_memory.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by kinit on 2021-06-24.
 3 | //
 4 | 
 5 | #ifndef RPCPROTOCOL_SHARED_MEMORY_H
 6 | #define RPCPROTOCOL_SHARED_MEMORY_H
 7 | 
 8 | #include <cstddef>
 9 | 
10 | bool has_memfd_support();
11 | 
12 | /*
13 |  * ashmem_create_region - creates a new ashmem region and returns the file
14 |  * descriptor, or <0 on error
15 |  *
16 |  * `name' is an optional label to give the region (visible in /proc/pid/maps)
17 |  * `size' is the size of the region, in page-aligned bytes
18 |  */
19 | int ashmem_create_region(const char *name, size_t size);
20 | 
21 | /**
22 |  * @param fd origin file
23 |  * @return memfd fd if success, -errno on failure
24 |  */
25 | int copy_file_to_memfd(int fd, const char *name);
26 | 
27 | /**
28 |  * create a file in memory
29 |  * @param dir  the directory to create the file and then unlink if memfd is not supported
30 |  * @param name  the name of the file, for debug purpose
31 |  * @param size  the size of the file
32 |  * @return  memfd fd if success, -errno on failure
33 |  */
34 | int create_in_memory_file(const char *dir, const char *name, size_t size);
35 | 
36 | #endif //RPCPROTOCOL_SHARED_MEMORY_H
37 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/string_operators.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-02-08.
 3 | //
 4 | 
 5 | #ifndef QAUXV_STRING_OPERATORS_H
 6 | #define QAUXV_STRING_OPERATORS_H
 7 | 
 8 | #include <string_view>
 9 | #include <string>
10 | 
11 | static inline std::string operator+(std::string_view lhs, std::string_view rhs) {
12 |     std::string result;
13 |     result.reserve(lhs.size() + rhs.size());
14 |     result.append(lhs);
15 |     result.append(rhs);
16 |     return result;
17 | }
18 | 
19 | static inline std::string operator+(std::string_view lhs, const char* rhs) {
20 |     if (rhs == nullptr) [[unlikely]] {
21 |         return std::string(lhs);
22 |     }
23 |     std::string result;
24 |     result.reserve(lhs.size() + std::strlen(rhs));
25 |     result.append(lhs);
26 |     result.append(rhs);
27 |     return result;
28 | }
29 | 
30 | static inline std::string operator+(const char* lhs, std::string_view rhs) {
31 |     if (lhs == nullptr) [[unlikely]] {
32 |         return std::string(rhs);
33 |     }
34 |     std::string result;
35 |     result.reserve(std::strlen(lhs) + rhs.size());
36 |     result.append(lhs);
37 |     result.append(rhs);
38 |     return result;
39 | }
40 | 
41 | #endif //QAUXV_STRING_OPERATORS_H
42 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/utils/xz_decoder.h:
--------------------------------------------------------------------------------
 1 | //
 2 | // Created by sulfate on 2024-08-17.
 3 | //
 4 | 
 5 | #ifndef NATIVES_XZ_DECODER_H
 6 | #define NATIVES_XZ_DECODER_H
 7 | 
 8 | #include <vector>
 9 | #include <cstdint>
10 | #include <span>
11 | #include <string>
12 | 
13 | namespace util {
14 | 
15 | std::vector<uint8_t> DecodeXzData(std::span<const uint8_t> inputData, bool* isSuccess, std::string* errorMsg);
16 | 
17 | }
18 | 
19 | #endif //NATIVES_XZ_DECODER_H
20 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/chenhe/qqnotifyevo/core/NevoNotificationProcessor.kt:
--------------------------------------------------------------------------------
 1 | package cc.chenhe.qqnotifyevo.core
 2 | 
 3 | import android.app.Notification
 4 | import android.content.Context
 5 | import cc.chenhe.qqnotifyevo.utils.NotifyChannel
 6 | import cc.chenhe.qqnotifyevo.utils.Tag
 7 | 
 8 | /**
 9 |  * 通知处理器,直接创建并返回优化后的通知。
10 |  */
11 | class NevoNotificationProcessor(context: Context) : NotificationProcessor(context) {
12 | 
13 |     override fun renewQzoneNotification(context: Context, tag: Tag, conversation: Conversation, original: Notification): Notification {
14 |         return createQZoneNotification(context, tag, conversation, original).apply {
15 |             contentIntent = original.contentIntent
16 |             deleteIntent = original.deleteIntent
17 |         }
18 |     }
19 | 
20 |     override fun renewConversionNotification(context: Context, tag: Tag, channel: NotifyChannel, conversation: Conversation, original: Notification): Notification {
21 |         return createConversationNotification(context, tag, channel, conversation, original).apply {
22 |             contentIntent = original.contentIntent
23 |             deleteIntent = original.deleteIntent
24 |         }
25 |     }
26 | }
27 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/chenhe/qqnotifyevo/utils/NotifyChannel.kt:
--------------------------------------------------------------------------------
 1 | package cc.chenhe.qqnotifyevo.utils
 2 | 
 3 | enum class NotifyChannel {
 4 |     /** 私聊消息 */
 5 |     FRIEND,
 6 | 
 7 |     /** 特别关心私聊消息 */
 8 |     FRIEND_SPECIAL,
 9 | 
10 |     /** 群聊消息 */
11 |     GROUP,
12 | 
13 |     /** Q空间 */
14 |     QZONE
15 | }
16 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/chenhe/qqnotifyevo/utils/Tag.kt:
--------------------------------------------------------------------------------
 1 | package cc.chenhe.qqnotifyevo.utils
 2 | 
 3 | /**
 4 |  * 用于标记通知的来源。
 5 |  */
 6 | enum class Tag(val pkg: String) {
 7 |     UNKNOWN(""),
 8 |     QQ("com.tencent.mobileqq"),
 9 |     QQ_HD("com.tencent.minihd.qq"),
10 |     QQ_LITE("com.tencent.qqlite"),
11 |     TIM("com.tencent.tim");
12 | }


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/Env.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2023 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the qwq233 Universal License
 8 |  * as published on https://github.com/qwq233/license; either
 9 |  * version 2 of the License, or any later version and our EULA as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the qwq233 Universal License for more details.
16 |  *
17 |  * See
18 |  * <https://github.com/qwq233/license>
19 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
20 |  */
21 | 
22 | package cc.hicore;
23 | 
24 | import cc.ioctl.util.HostInfo;
25 | 
26 | public class Env {
27 |     public static String app_save_path = "/sdcard/Android/data/" + HostInfo.getPackageName() + "/files/.tool/";
28 | }
29 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ReflectUtil/MRes.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2023 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the qwq233 Universal License
 8 |  * as published on https://github.com/qwq233/license; either
 9 |  * version 2 of the License, or any later version and our EULA as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the qwq233 Universal License for more details.
16 |  *
17 |  * See
18 |  * <https://github.com/qwq233/license>
19 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
20 |  */
21 | 
22 | package cc.hicore.ReflectUtil;
23 | 
24 | import android.view.View;
25 | 
26 | public class MRes {
27 |     public static String getViewResName(View v){
28 |         if (v == null)return "";
29 |         return v.getContext().getResources().getResourceEntryName(v.getId());
30 |     }
31 | }
32 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/Utils/XLog.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2023 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the qwq233 Universal License
 8 |  * as published on https://github.com/qwq233/license; either
 9 |  * version 2 of the License, or any later version and our EULA as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the qwq233 Universal License for more details.
16 |  *
17 |  * See
18 |  * <https://github.com/qwq233/license>
19 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
20 |  */
21 | 
22 | package cc.hicore.Utils;
23 | 
24 | import io.github.qauxv.util.Log;
25 | 
26 | public class XLog {
27 |     public static void e(String TAG,Throwable msg){
28 |         Log.e("[QAuxv]"+"("+TAG+")"+Log.getStackTraceString(msg));
29 |     }
30 |     public static void e(String TAG,String TAG2,Throwable msg){
31 |         e(TAG+"."+TAG2,msg);
32 |     }
33 |     public static void e(String TAG,String msg){
34 |         Log.e("[QAuxv]"+"("+TAG+")"+msg);
35 |     }
36 |     public static void d(String TAG,String msg){
37 |         Log.d("[QAuxv]"+"("+TAG+")"+msg);
38 |     }
39 | }
40 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/hook/stickerPanel/EmoPanel.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.hook.stickerPanel;
 2 | 
 3 | 
 4 | public class EmoPanel {
 5 |     public static class EmoInfo {
 6 |         public String Path;
 7 |         public String OCR;
 8 |         public int type;
 9 |         public String MD5;
10 |         public String URL;
11 |         public String thumb;
12 |     }
13 | 
14 | 
15 | }
16 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/hook/stickerPanel/MainItemImpl/OnlinePreviewItemImpl.java:
--------------------------------------------------------------------------------
1 | package cc.hicore.hook.stickerPanel.MainItemImpl;
2 | 
3 | public class OnlinePreviewItemImpl {
4 | }
5 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/listener/IDrawer.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.listener;
 2 | 
 3 | import android.graphics.Canvas;
 4 | 
 5 | 
 6 | public interface IDrawer {
 7 |     /**
 8 |      * You can draw something in gridview by this method.
 9 |      *
10 |      * @param canvas
11 |      * @param width  the gridview's width
12 |      * @param height the gridview's height
13 |      */
14 |     void onDraw(Canvas canvas, int width, int height);
15 | }
16 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/listener/OnItemCapturedListener.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.listener;
 2 | 
 3 | import android.view.View;
 4 | 
 5 | public interface OnItemCapturedListener {
 6 |     /**
 7 |      * Called when user selected a view to drag.
 8 |      *
 9 |      * @param v
10 |      */
11 |     void onItemCaptured(View v,int position);
12 | 
13 |     /**
14 |      * Called when user released the drag view.
15 |      *
16 |      * @param v
17 |      */
18 |     void onItemReleased(View v,int position);
19 | }
20 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/scrollrunner/ICarrier.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.scrollrunner;
 2 | 
 3 | 
 4 | import android.content.Context;
 5 | 
 6 | public interface ICarrier {
 7 |     Context getContext();
 8 | 
 9 |     void onMove(int lastX, int lastY, int curX, int curY);
10 | 
11 |     void onDone();
12 | 
13 |     boolean post(Runnable runnable);
14 | 
15 |     boolean removeCallbacks(Runnable action);
16 | }
17 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/scrollrunner/OnItemMovedListener.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.scrollrunner;
 2 | 
 3 | public interface OnItemMovedListener {
 4 |     /**
 5 |      * Called when user moved the item of gridview.
 6 |      * you should swipe data in this method.
 7 |      * @param from item's original position
 8 |      * @param to   item's destination poisition
 9 |      */
10 |     void onItemMoved(int from, int to);
11 | 
12 |     /**
13 |      * return true if the item of special position can not move.
14 |      * @param position
15 |      * @return
16 |      */
17 |     boolean isFixed(int position);
18 | }
19 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/scrollrunner/OnceRunnable.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.scrollrunner;
 2 | 
 3 | import android.view.View;
 4 | 
 5 | public abstract class OnceRunnable implements Runnable {
 6 |     private boolean mScheduled;
 7 | 
 8 |     public final void run() {
 9 |         onRun();
10 |         mScheduled = false;
11 |     }
12 | 
13 |     public abstract void onRun();
14 | 
15 |     public void postSelf(View carrier) {
16 |         postDelaySelf(carrier, 0);
17 |     }
18 | 
19 |     public void postDelaySelf(View carrier, int delay) {
20 |         if (!mScheduled) {
21 |             carrier.postDelayed(this, delay);
22 |             mScheduled = true;
23 |         }
24 |     }
25 | 
26 |     public void removeSelf(View carrier) {
27 |         mScheduled = false;
28 |         carrier.removeCallbacks(this);
29 |     }
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/utils/ReflectUtil.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.utils;
 2 | 
 3 | import android.text.TextUtils;
 4 | import java.lang.reflect.Method;
 5 | 
 6 | public class ReflectUtil {
 7 |     public static Object invokeMethod(Object targetObject, String methodName, Object[] params, Class[] paramTypes) {
 8 |         Object returnObj = null;
 9 |         if (targetObject == null || TextUtils.isEmpty(methodName)) {
10 |             return null;
11 |         }
12 |         Method method = null;
13 |         for (Class cls = targetObject.getClass(); cls != Object.class; cls = cls.getSuperclass()) {
14 |             try {
15 |                 method = cls.getDeclaredMethod(methodName, paramTypes);
16 |                 break;
17 |             } catch (Exception e) {
18 | //                e.printStackTrace();
19 | //                return null;
20 |             }
21 |         }
22 |         if (method != null) {
23 |             method.setAccessible(true);
24 |             try {
25 |                 returnObj = method.invoke(targetObject, params);
26 |             } catch (Exception e) {
27 |                 e.printStackTrace();
28 |             }
29 |         }
30 |         return returnObj;
31 |     }
32 | }
33 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/hicore/ui/handygridview/utils/SdkVerUtils.java:
--------------------------------------------------------------------------------
 1 | package cc.hicore.ui.handygridview.utils;
 2 | 
 3 | import android.os.Build;
 4 | 
 5 | /**
 6 |  * Created by Administrator on 2017/11/26.
 7 |  */
 8 | 
 9 | public class SdkVerUtils {
10 |     public static boolean isAboveVersion(int version) {
11 |         int sdkVersion = Build.VERSION.SDK_INT;
12 |         if (sdkVersion >= version) {
13 |             return true;
14 |         }
15 |         return false;
16 |     }
17 | 
18 |     public static boolean isAbove19() {
19 |         return isAboveVersion(Build.VERSION_CODES.KITKAT);
20 |     }
21 | }
22 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/ioctl/util/BiMap.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package cc.ioctl.util;
24 | 
25 | import java.util.Map;
26 | 
27 | public interface BiMap<K, V> extends Map<K, V> {
28 | 
29 |     BiMap<V, K> getReverseMap();
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/ioctl/util/HashBiMap.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package cc.ioctl.util;
24 | 
25 | import java.util.HashMap;
26 | 
27 | public class HashBiMap<K, V> extends HashMap<K, V> implements BiMap<K, V> {
28 | 
29 |     /**
30 |      * @return 一个反向map
31 |      */
32 |     @Override
33 |     public BiMap<V, K> getReverseMap() {
34 |         BiMap<V, K> reverse = new HashBiMap<>();
35 |         for (K key : this.keySet()) {
36 |             V value = this.get(key);
37 |             reverse.put(value, key);
38 |         }
39 |         return reverse;
40 |     }
41 | }
42 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/ioctl/util/JunkCodeUtils.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package cc.ioctl.util;
24 | 
25 | public class JunkCodeUtils {
26 | 
27 |     private JunkCodeUtils() {
28 |         throw new UnsupportedOperationException();
29 |     }
30 | 
31 |     /**
32 |      * Result code should be in the range [0, 999999]
33 |      */
34 |     public static native int getJunkCode(int tc);
35 | }
36 | 


--------------------------------------------------------------------------------
/app/src/main/java/cc/ioctl/util/ui/FaultyDialogHelper.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2025 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package cc.ioctl.util.ui
24 | 
25 | import android.content.Context
26 | 
27 | fun doWithFaultyDialogWithoutErrorHandling(
28 |     ctx: Context,
29 |     block: () -> Unit
30 | ) {
31 |     try {
32 |         block()
33 |     } catch (e: Throwable) {
34 |         FaultyDialog.show(ctx, e)
35 |     }
36 | }
37 | 


--------------------------------------------------------------------------------
/app/src/main/java/im/mingxi/BlockLinkInfo.kt:
--------------------------------------------------------------------------------
 1 | package im.mingxi
 2 | 
 3 | import cc.ioctl.util.hookBeforeIfEnabled
 4 | import io.github.qauxv.base.annotation.FunctionHookEntry
 5 | import io.github.qauxv.base.annotation.UiItemAgentEntry
 6 | import io.github.qauxv.dsl.FunctionEntryRouter
 7 | import io.github.qauxv.hook.CommonSwitchFunctionHook
 8 | import io.github.qauxv.util.Initiator
 9 | import io.github.qauxv.util.xpcompat.XC_MethodHook
10 | import io.github.qauxv.util.xpcompat.XposedBridge
11 | 
12 | @FunctionHookEntry
13 | @UiItemAgentEntry
14 | object BlockLinkInfo : CommonSwitchFunctionHook() {
15 | 
16 |     override val name = "屏蔽链接信息"
17 | 
18 |     override val description = "去除链接下方的信息卡片,也可以用来防耗流量链接消息"
19 | 
20 |     override val uiItemLocation: Array<String> = FunctionEntryRouter.Locations.Auxiliary.CHAT_CATEGORY
21 | 
22 |     override fun initOnce(): Boolean {
23 |         val linkInfoClass = Initiator.loadClass("com.tencent.qqnt.kernel.nativeinterface.LinkInfo")
24 |         XposedBridge.hookAllConstructors(linkInfoClass, object: XC_MethodHook() {
25 |             override fun beforeHookedMethod(param: MethodHookParam) {
26 |                 param.result = null
27 |             }
28 |         })
29 | 
30 |         val msgExtClass = Initiator.loadClass("com.tencent.qqnt.msg.MsgExtKt")
31 |         hookBeforeIfEnabled(msgExtClass.declaredMethods.single { it.name == "T" }) { param ->
32 |             param.result = false
33 |         }
34 | 
35 |         return true
36 |     }
37 | }
38 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/duzhaokun123/util/TimeFormat.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.duzhaokun123.util
24 | 
25 | import android.icu.text.SimpleDateFormat
26 | import java.util.Locale
27 | 
28 | object TimeFormat {
29 |     val format1 by lazy { SimpleDateFormat("yyyyMMddHHmmssSSSS", Locale.ROOT) }
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/duzhaokun123/util/Windows.kt:
--------------------------------------------------------------------------------
 1 | package io.github.duzhaokun123.util
 2 | 
 3 | import android.os.Build
 4 | import android.view.View
 5 | import android.view.Window
 6 | import android.view.WindowManager
 7 | import androidx.annotation.RequiresApi
 8 | 
 9 | fun Window.blurBackground(br: Int, bd: Float) {
10 |     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return
11 |     addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND)
12 |     attributes.blurBehindRadius = br
13 |     val blurEnableListener = { _: Boolean ->
14 |         setDimAmount(bd)
15 |         setBackgroundBlurRadius(br)
16 |     }
17 |     decorView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
18 |         @RequiresApi(Build.VERSION_CODES.S)
19 |         override fun onViewAttachedToWindow(v: View) {
20 |             windowManager.addCrossWindowBlurEnabledListener(blurEnableListener)
21 |         }
22 | 
23 |         @RequiresApi(Build.VERSION_CODES.S)
24 |         override fun onViewDetachedFromWindow(v: View) {
25 |             windowManager.removeCrossWindowBlurEnabledListener(blurEnableListener)
26 |         }
27 | 
28 |     })
29 |     addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/IEntityAgent.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2024 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.base
24 | 
25 | import android.content.Context
26 | 
27 | /**
28 |  * An entity agent is an agent that represents an entity.
29 |  * It provides a title and a summary for the entity.
30 |  * It can be user interactive functions, or a background service.
31 |  */
32 | interface IEntityAgent {
33 |     val titleProvider: (IEntityAgent) -> String
34 |     val summaryProvider: ((IEntityAgent, Context) -> CharSequence?)?
35 | }
36 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/IEntityAgentProvider.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2024 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.base
24 | 
25 | interface IEntityAgentProvider {
26 |     val entityAgent: IEntityAgent
27 | 
28 |     val itemAgentProviderUniqueIdentifier: String get() = javaClass.name
29 | }
30 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/ISwitchCellAgent.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.base
24 | 
25 | interface ISwitchCellAgent {
26 |     var isChecked: Boolean
27 | 
28 |     val isCheckable: Boolean
29 | }
30 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/ITraceableDynamicHook.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2023 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the qwq233 Universal License
 8 |  * as published on https://github.com/qwq233/license; either
 9 |  * version 2 of the License, or any later version and our EULA as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the qwq233 Universal License for more details.
16 |  *
17 |  * See
18 |  * <https://github.com/qwq233/license>
19 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
20 |  */
21 | 
22 | package io.github.qauxv.base
23 | 
24 | interface ITraceableDynamicHook : IDynamicHook, RuntimeErrorTracer {
25 | 
26 |     val dependentComponents: List<ITraceableDynamicHook>?
27 | 
28 | }
29 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/IUiItemAgentProvider.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.base
24 | 
25 | interface IUiItemAgentProvider : IEntityAgentProvider {
26 | 
27 |     val uiItemAgent: IUiItemAgent
28 | 
29 |     override val entityAgent: IEntityAgent get() = uiItemAgent
30 | 
31 |     val uiItemLocation: Array<String>
32 | 
33 |     override val itemAgentProviderUniqueIdentifier: String get() = javaClass.name
34 | 
35 | }
36 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/annotation/ComponentHookEntry.java:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.base.annotation;
 2 | 
 3 | import java.lang.annotation.ElementType;
 4 | import java.lang.annotation.Retention;
 5 | import java.lang.annotation.RetentionPolicy;
 6 | import java.lang.annotation.Target;
 7 | 
 8 | /**
 9 |  * Denoting a hook component(has nothing to do with the UI).
10 |  * <p>
11 |  * It's should be a Kotlin object(or a Java class with a public static final INSTANCE field).
12 |  * <p>
13 |  * Target should be an instance of {@link io.github.qauxv.base.ITraceableDynamicHook}.
14 |  */
15 | @Target({ElementType.TYPE})
16 | @Retention(RetentionPolicy.CLASS)
17 | public @interface ComponentHookEntry {
18 | 
19 | }
20 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/annotation/EntityAgentEntry.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2024 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.base.annotation;
24 | 
25 | import java.lang.annotation.ElementType;
26 | import java.lang.annotation.Retention;
27 | import java.lang.annotation.RetentionPolicy;
28 | import java.lang.annotation.Target;
29 | 
30 | /**
31 |  * A passive entity agent entry, for error tracking.
32 |  * <p>
33 |  * Target should be an instance of {@link io.github.qauxv.base.IEntityAgentProvider}
34 |  */
35 | @Target({ElementType.TYPE})
36 | @Retention(RetentionPolicy.CLASS)
37 | public @interface EntityAgentEntry {
38 | 
39 | }
40 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/annotation/FunctionHookEntry.java:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.base.annotation;
 2 | 
 3 | import io.github.qauxv.base.IDynamicHook;
 4 | import java.lang.annotation.ElementType;
 5 | import java.lang.annotation.Retention;
 6 | import java.lang.annotation.RetentionPolicy;
 7 | import java.lang.annotation.Target;
 8 | 
 9 | /**
10 |  * Denoting a hook(has nothing to do with the UI).
11 |  * <p>
12 |  * It's should be a Kotlin object(or a Java class with a public static final INSTANCE field).
13 |  * <p>
14 |  * Target should be an instance of {@link IDynamicHook}.
15 |  */
16 | @Target({ElementType.TYPE})
17 | @Retention(RetentionPolicy.CLASS)
18 | public @interface FunctionHookEntry {
19 | 
20 | }
21 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/base/annotation/InternalApi.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.base.annotation;
24 | 
25 | public @interface InternalApi {
26 | 
27 | }
28 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/bridge/protocol/TroopFileRenameObserver.kt:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.bridge.protocol
 2 | 
 3 | import android.os.Bundle
 4 | import com.tencent.biz.ProtoUtils
 5 | import tencent.im.oidb.cmd0x6d6.oidb_0x6d6
 6 | 
 7 | abstract class TroopFileRenameObserver : ProtoUtils.TroopProtocolObserver() {
 8 |     protected abstract fun onResult(result: Boolean, code: Int, fileName: String, fileId: String)
 9 | 
10 |     final override fun onResult(code: Int, data: ByteArray, bundle: Bundle) {
11 |         val fileId: String = bundle.getString("fileId", "")
12 |         val fileName: String = bundle.getString("fileName", "")
13 |         if (code != 0) {
14 |             onResult(false, code, fileName, fileId)
15 |             return
16 |         }
17 |         val rspBody = oidb_0x6d6.RspBody()
18 |         try {
19 |             rspBody.mergeFrom(data)
20 |             val renameFileRspBody = rspBody.rename_file_rsp.get()
21 |             if (!renameFileRspBody.int32_ret_code.has()) {
22 |                 onResult(false, -1, fileName, fileId)
23 |             } else if (renameFileRspBody.int32_ret_code.get() == 0) {
24 |                 onResult(true, 0, fileName, fileId)
25 |             } else {
26 |                 onResult(false, renameFileRspBody.int32_ret_code.get(), fileName, fileId)
27 |             }
28 |         } catch (unused: Exception) {
29 |             onResult(false, -1, fileName, fileId)
30 |         }
31 |     }
32 | }
33 | 
34 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/dsl/func/RootFragmentDescription.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.dsl.func
24 | 
25 | class RootFragmentDescription(
26 |     initializer: (FragmentDescription.() -> Unit)?
27 | ) : FragmentDescription("root", "root", false, initializer) {
28 |     override val name: String? = null
29 | }
30 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/dsl/item/DslTMsgListItemInflatable.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.dsl.item
24 | 
25 | interface DslTMsgListItemInflatable {
26 |     fun inflateTMsgListItems(context: android.content.Context): List<TMsgListItem>
27 | }
28 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/dsl/item/TextListItem.kt:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.dsl.item
 2 | 
 3 | import android.content.Context
 4 | import android.view.View
 5 | import android.view.ViewGroup
 6 | import androidx.recyclerview.widget.RecyclerView
 7 | import io.github.qauxv.dsl.cell.TitleValueCell
 8 | 
 9 | class TextListItem(
10 |         private val title: String,
11 |         private val summary: String? = null,
12 |         private val value: String? = null,
13 |         private val onClick: View.OnClickListener? = null
14 | ) : DslTMsgListItemInflatable, TMsgListItem {
15 | 
16 |     class ViewHolder(cell: TitleValueCell) : RecyclerView.ViewHolder(cell)
17 | 
18 |     override val isEnabled = true
19 |     override val isVoidBackground = false
20 |     override val isClickable = true
21 |     override val isLongClickable = false
22 | 
23 |     override fun createViewHolder(context: Context, parent: ViewGroup) =
24 |             ViewHolder(TitleValueCell(context))
25 | 
26 |     private val mCellOnClickListener = View.OnClickListener {
27 |         onItemClick(it, -1, -1, -1)
28 |     }
29 | 
30 |     override fun bindView(viewHolder: RecyclerView.ViewHolder, position: Int, context: Context) {
31 |         val cell = viewHolder.itemView as TitleValueCell
32 |         cell.setOnClickListener(mCellOnClickListener)
33 |         cell.isHasSwitch = false
34 |         cell.title = title
35 |         cell.summary = summary
36 |         cell.value = value
37 |     }
38 | 
39 |     override fun onItemClick(v: View, position: Int, x: Int, y: Int) {
40 |         onClick?.onClick(v)
41 |     }
42 | }
43 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/router/decorator/IBaseChatPieDecorator.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.router.decorator
24 | 
25 | import io.github.qauxv.base.ITraceableDynamicHook
26 | import io.github.qauxv.base.RuntimeErrorTracer
27 | import io.github.qauxv.router.dispacher.InputButtonHookDispatcher
28 | 
29 | interface IBaseChatPieDecorator : ITraceableDynamicHook {
30 |     override val runtimeErrorDependentComponents: List<RuntimeErrorTracer>?
31 |         get() = listOf(InputButtonHookDispatcher.INSTANCE)
32 | }
33 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/tlb/ConfigTableInterface.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.tlb
24 | 
25 | interface ConfigTableInterface {
26 |     val configs: Map<String, Map<Long, Any>>
27 |     val rangingConfigs: Map<String, Map<Long, Any>>
28 | }
29 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/ui/WindowIsTranslucent.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package io.github.qauxv.ui;
23 | 
24 | public interface WindowIsTranslucent {
25 | 
26 | }
27 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/JsonHelper.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.util
24 | 
25 | import kotlinx.serialization.encodeToString
26 | import kotlinx.serialization.json.Json
27 | 
28 | private val json = Json {
29 |     encodeDefaults = true
30 |     ignoreUnknownKeys = true
31 | }
32 | 
33 | internal inline fun <reified T> T.encodeToJson(): String {
34 |     return json.encodeToString(this)
35 | }
36 | 
37 | internal inline fun <reified T> String.decodeToDataClass(): T {
38 |     return json.decodeFromString(this)
39 | }
40 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/MainProcess.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package io.github.qauxv.util;
23 | 
24 | import static java.lang.annotation.ElementType.CONSTRUCTOR;
25 | import static java.lang.annotation.ElementType.METHOD;
26 | import static java.lang.annotation.ElementType.TYPE;
27 | import static java.lang.annotation.RetentionPolicy.CLASS;
28 | 
29 | import java.lang.annotation.Retention;
30 | import java.lang.annotation.Target;
31 | 
32 | @Retention(CLASS)
33 | @Target({METHOD, CONSTRUCTOR, TYPE})
34 | public @interface MainProcess {
35 | 
36 | }
37 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/NonUiThread.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package io.github.qauxv.util;
23 | 
24 | import static java.lang.annotation.ElementType.CONSTRUCTOR;
25 | import static java.lang.annotation.ElementType.METHOD;
26 | import static java.lang.annotation.RetentionPolicy.CLASS;
27 | 
28 | import java.lang.annotation.Retention;
29 | import java.lang.annotation.Target;
30 | 
31 | /**
32 |  * This method is time-consuming and must NOT run on UI thread.
33 |  */
34 | @Retention(CLASS)
35 | @Target({METHOD, CONSTRUCTOR})
36 | public @interface NonUiThread {
37 | 
38 | }
39 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/PlayQQVersion.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package io.github.qauxv.util;
23 | 
24 | public class PlayQQVersion {
25 | 
26 |     public static final long PlayQQ_8_2_9 = 1352;
27 |     public static final long PlayQQ_8_2_9_1 = 1353;
28 |     public static final long PlayQQ_8_2_10 = 1354;
29 |     public static final long PlayQQ_8_2_11 = 1380;
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/UiThread.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package io.github.qauxv.util;
23 | 
24 | import static java.lang.annotation.ElementType.METHOD;
25 | import static java.lang.annotation.RetentionPolicy.CLASS;
26 | 
27 | import java.lang.annotation.Retention;
28 | import java.lang.annotation.Target;
29 | 
30 | @Retention(CLASS)
31 | @Target({METHOD})
32 | public @interface UiThread {
33 | 
34 | }
35 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/data/Licenses.kt:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.util.data
 2 | 
 3 | import io.github.qauxv.R
 4 | import io.github.qauxv.util.decodeToDataClass
 5 | import io.github.qauxv.util.hostInfo
 6 | import kotlinx.serialization.Serializable
 7 | 
 8 | object Licenses {
 9 |     @Serializable
10 |     data class AboutLibraries(
11 |         val libraries: List<LibraryLicense>
12 |     )
13 | 
14 |     @Serializable
15 |     data class DeveloperInfo(
16 |         val name: String
17 |     )
18 | 
19 |     @Serializable
20 |     data class LibraryLicense(
21 |         val uniqueId: String,
22 |         val website: String? = null,
23 |         val licenses: List<String>,
24 |         val developers: List<DeveloperInfo>
25 |     ) {
26 |         fun getAuthor(): String {
27 |             return developers.joinToString(",") { it.name }
28 |         }
29 |     }
30 | 
31 |     val list: List<LibraryLicense> by lazy {
32 |         val libs = hostInfo.application.resources.openRawResource(R.raw.aboutlibraries)
33 |         val content = libs.bufferedReader().use { x -> x.readText() }
34 |         val info: AboutLibraries = content.decodeToDataClass()
35 |         info.libraries.filter { it.website != null }
36 |     }
37 | }
38 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/data/UserStatusConst.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | package io.github.qauxv.util.data
23 | 
24 | object UserStatusConst {
25 |     /**
26 |      * 未刷新前的默认状态
27 |      */
28 |     const val notExist = -1
29 | 
30 |     /**
31 |      * 黑名单
32 |      */
33 |     const val blacklisted = 1
34 | 
35 |     /**
36 |      * 白名单
37 |      */
38 |     const val whitelisted = 2
39 | 
40 |     /**
41 |      * 开发者
42 |      */
43 |     const val developer = 3
44 | }
45 | 


--------------------------------------------------------------------------------
/app/src/main/java/io/github/qauxv/util/dexkit/DexKitFinder.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.util.dexkit
24 | 
25 | interface DexKitFinder {
26 | 
27 |     val isNeedFind: Boolean
28 | 
29 |     fun doFind(): Boolean
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/me/hd/util/Util.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2024 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package me.hd.util
24 | 
25 | import io.github.qauxv.config.ConfigManager.getExFriendCfg
26 | 
27 | internal fun getExCfg(keyName: String, obj: Any): Any = getExFriendCfg()?.getOrDefault(keyName, obj) ?: obj
28 | internal fun putExCfg(keyName: String, obj: Any) = getExFriendCfg()?.putObject(keyName, obj)?.save()
29 | 


--------------------------------------------------------------------------------
/app/src/main/java/me/singleneuron/base/Conditional.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QNotified - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 dmca@ioctl.cc
 4 |  * https://github.com/ferredoxin/QNotified
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by ferredoxin.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/ferredoxin/QNotified/blob/master/LICENSE.md>.
21 |  */
22 | package me.singleneuron.base
23 | 
24 | interface Conditional {
25 |     val condition: Boolean
26 | }
27 | 


--------------------------------------------------------------------------------
/app/src/main/java/me/singleneuron/data/CardMsgCheckResult.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QNotified - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 dmca@ioctl.cc
 4 |  * https://github.com/ferredoxin/QNotified
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by ferredoxin.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/ferredoxin/QNotified/blob/master/LICENSE.md>.
21 |  */
22 | package me.singleneuron.data
23 | 
24 | data class CardMsgCheckResult @JvmOverloads constructor(
25 |     val accept: Boolean,
26 |     val reason: String? = null
27 | )
28 | 


--------------------------------------------------------------------------------
/app/src/main/java/name/mikanoshi/customiuizer/holidays/FlowerGenerator.java:
--------------------------------------------------------------------------------
 1 | package name.mikanoshi.customiuizer.holidays;
 2 | 
 3 | import android.content.Context;
 4 | import com.github.jinatonic.confetti.ConfettoGenerator;
 5 | import com.github.jinatonic.confetti.confetto.Confetto;
 6 | import com.github.matteobattilana.weather.PrecipType;
 7 | import com.github.matteobattilana.weather.confetti.ConfettoInfo;
 8 | import java.util.Random;
 9 | 
10 | public class FlowerGenerator implements ConfettoGenerator {
11 | 
12 |     private final ConfettoInfo confettoInfo;
13 |     private final Context context;
14 | 
15 |     public FlowerGenerator(Context ctx) {
16 |         super();
17 |         this.context = ctx;
18 |         this.confettoInfo = new ConfettoInfo(PrecipType.SNOW, 1.0f, null);
19 |     }
20 | 
21 |     @Override
22 |     public Confetto generateConfetto(Random random) {
23 |         return new FlowerParticle(this.context, this.confettoInfo);
24 |     }
25 | 
26 |     public final ConfettoInfo getConfettoInfo() {
27 |         return this.confettoInfo;
28 |     }
29 | }
30 | 


--------------------------------------------------------------------------------
/app/src/main/java/name/mikanoshi/customiuizer/holidays/SnowGenerator.java:
--------------------------------------------------------------------------------
 1 | package name.mikanoshi.customiuizer.holidays;
 2 | 
 3 | import android.content.Context;
 4 | import com.github.jinatonic.confetti.ConfettoGenerator;
 5 | import com.github.jinatonic.confetti.confetto.Confetto;
 6 | import com.github.matteobattilana.weather.PrecipType;
 7 | import com.github.matteobattilana.weather.confetti.ConfettoInfo;
 8 | import java.util.Random;
 9 | 
10 | public class SnowGenerator implements ConfettoGenerator {
11 | 
12 |     private final ConfettoInfo confettoInfo;
13 |     private final Context context;
14 | 
15 |     public SnowGenerator(Context ctx) {
16 |         super();
17 |         this.context = ctx;
18 |         this.confettoInfo = new ConfettoInfo(PrecipType.SNOW, 1.0f, null);
19 |     }
20 | 
21 |     @Override
22 |     public Confetto generateConfetto(Random random) {
23 |         return new SnowParticle(this.context, this.confettoInfo);
24 |     }
25 | 
26 |     public final ConfettoInfo getConfettoInfo() {
27 |         return this.confettoInfo;
28 |     }
29 | }
30 | 


--------------------------------------------------------------------------------
/app/src/main/java/name/mikanoshi/customiuizer/utils/Helpers.java:
--------------------------------------------------------------------------------
 1 | package name.mikanoshi.customiuizer.utils;
 2 | 
 3 | import android.content.Context;
 4 | import android.os.Build.VERSION;
 5 | import android.os.Build.VERSION_CODES;
 6 | import android.view.WindowManager;
 7 | import java.util.Calendar;
 8 | 
 9 | public class Helpers {
10 | 
11 |     public static Holidays currentHoliday = Holidays.NONE;
12 | 
13 |     public enum Holidays {
14 |         NONE, NEWYEAR, LUNARNEWYEAR
15 |     }
16 | 
17 |     public static void detectHoliday() {
18 |         currentHoliday = Holidays.NONE;
19 |         Calendar cal = Calendar.getInstance();
20 |         int month = cal.get(Calendar.MONTH);
21 |         int monthDay = cal.get(Calendar.DAY_OF_MONTH);
22 |         int year = cal.get(Calendar.YEAR);
23 | 
24 |         // Lunar NY
25 |         if ((month == 0 && monthDay > 15) || month == 1) {
26 |             currentHoliday = Holidays.LUNARNEWYEAR;
27 |         }
28 |         // NY
29 |         else if (month == 0 || month == 11) {
30 |             currentHoliday = Holidays.NEWYEAR;
31 |         }
32 |     }
33 | 
34 |     public static int getRotation(Context context) {
35 |         if (VERSION.SDK_INT >= VERSION_CODES.R) {
36 |             return context.getDisplay().getRotation();
37 |         } else {
38 |             return ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
39 |         }
40 |     }
41 | }
42 | 


--------------------------------------------------------------------------------
/app/src/main/java/net/bytebuddy/android/IAndroidInjectableClassLoader.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2024 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package net.bytebuddy.android;
24 | 
25 | import androidx.annotation.NonNull;
26 | import androidx.annotation.Nullable;
27 | 
28 | public interface IAndroidInjectableClassLoader {
29 | 
30 |     void injectDex(@NonNull byte[] dexBytes, @Nullable String dexName) throws IllegalArgumentException;
31 | 
32 | }
33 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/ContentHead.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/ForwardHead.proto";
 6 | 
 7 | message ContentHead {
 8 |   uint32 type = 1;
 9 |   optional uint32 sub_type = 2; // may be missing
10 |   optional uint32 div_seq = 3;
11 |   int64 msg_id = 4;
12 |   uint32 sequence = 5;
13 |   int64 timestamp = 6;
14 |   optional int64 field_7 = 7;
15 |   optional uint32 field_8 = 8;
16 |   optional uint32 field_9 = 9;
17 |   uint64 new_id = 12;
18 |   optional ForwardHead forward = 15;
19 | }
20 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/ForwardHead.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | message ForwardHead {
 6 |   uint32 field1 = 1;
 7 |   uint32 field2 = 2;
 8 |   uint32 field3 = 3; // for friend: 2, for group: null
 9 |   string unknown_base64 = 4;
10 |   string avatar = 5;
11 | }
12 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/Group.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | 
 4 | message Group {
 5 |   uint32 group_code = 1;
 6 |   uint32 field2 = 2; // 1
 7 |   uint32 field3 = 3; // 500053
 8 |   string sender_nick = 4;
 9 |   uint32 field5 = 5; // 1
10 |   uint32 field6 = 6; // 1
11 |   string group_name = 7;
12 | }
13 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/InfoSyncPush.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/Message.proto";
 6 | 
 7 | // trpc.msg.register_proxy.RegisterProxy.InfoSyncPush
 8 | message InfoSyncPush {
 9 |   optional uint32 result = 1;
10 |   optional string err_msg = 2;
11 |   uint32 push_flag = 3;
12 |   optional uint32 push_seq = 4;
13 |   optional uint32 retry_flag = 5;
14 |   // repeated GroupNode group_nodes = 6;
15 |   optional bytes field_7 = 7; // maybe sync messages?
16 |   optional SyncMsgRecall sync_msg_recall = 8;
17 |   optional bytes field_9 = 9; // maybe sync guild?
18 |   optional uint32 use_init_cache_data = 10;
19 |   // optional GuildNode guild_nodes = 11;
20 |   // optional RecentContactInfo recent_contact = 12;
21 | 
22 |   message SyncMsgRecall {
23 |     SyncTime sync_start = 3;
24 |     repeated SyncInfoBody body = 4;
25 |     SyncTime sync_end = 5;
26 | 
27 |     message SyncTime {
28 |       uint64 timestamp = 1;
29 |     }
30 | 
31 |     message SyncInfoBody {
32 |       uint64 peer_uin = 1;
33 |       string peer_uid = 2;
34 |       uint64 timestamp = 5;
35 |       repeated Message msg = 8;
36 |     }
37 |   }
38 | }
39 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/Message.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/RoutingHead.proto";
 6 | import "trpc/msg/ContentHead.proto";
 7 | import "trpc/msg/MessageBody.proto";
 8 | 
 9 | message Message {
10 |   RoutingHead routing_head = 1;
11 |   ContentHead content_head = 2;
12 |   MessageBody body = 3;
13 | }
14 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/MessageBody.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/RichText.proto";
 6 | 
 7 | message MessageBody {
 8 |   RichText rich_text = 1;
 9 |   optional bytes msg_content = 2; // Offline file is now put here
10 |   optional bytes msg_encrypt_content = 3;
11 | }
12 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/MessageControl.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 | package io.github.qauxv.proto.trpc.msg;
3 | 
4 | message MessageControl {
5 |   int32 msg_flag = 1;
6 | }
7 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/MsgPush.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/Message.proto";
 6 | 
 7 | // trpc.msg.olpush.OlPushService.MsgPush
 8 | 
 9 | message MsgPush {
10 |   Message message = 1;
11 | }
12 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/RichText.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/elem/MsgElement.proto";
 6 | 
 7 | message RichText {
 8 |   // Attr attr = 1;
 9 |   repeated MsgElement elements = 2;
10 |   // NotOnlineFile not_online_file = 3;
11 |   // Ptt ptt = 4;
12 | }
13 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/RoutingHead.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | import "trpc/msg/Group.proto";
 6 | 
 7 | message RoutingHead {
 8 |   uint64 from_uin = 1;
 9 |   string from_uid = 2;
10 |   optional uint32 from_app_id = 3;
11 |   optional uint32 from_inst_id = 4;
12 |   uint64 to_uin = 5;
13 |   optional string to_uid = 6; // may be missing, some messages have it
14 |   optional bytes c2c = 7; // i have never seen this
15 |   optional Group group = 8;
16 | }
17 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/elem/ExtraInfo.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg.elem";
 4 | 
 5 | message ExtraInfo {
 6 |   bytes nick = 1;
 7 |   bytes group_card = 2;
 8 |   int32 level = 3;
 9 |   int32 flags = 4;
10 |   int32 group_mask = 5;
11 |   int32 msg_tail_id = 6;
12 |   bytes sender_title = 7;
13 |   bytes apns_tips = 8;
14 |   uint64 uin = 9;
15 |   int32 msg_state_flag = 10;
16 |   int32 apns_sound_type = 11;
17 |   int32 new_group_flag = 12;
18 | }
19 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/elem/MsgElement.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg.elem";
 4 | 
 5 | import "trpc/msg/elem/Text.proto";
 6 | import "trpc/msg/elem/ExtraInfo.proto";
 7 | 
 8 | message MsgElement {
 9 |   optional Text text = 1; // TextEntity
10 |   // Face face = 2;
11 |   // OnlineImage online_image = 3;
12 |   // NotOnlineImage not_online_image = 4; // Offline Image
13 |   // TransElem trans_elem = 5;
14 |   // Marketface marketface = 6;
15 |   // CustomFace custom_face = 8;
16 |   // ElemFlags2 elem_flags2 = 9;
17 |   // RichMsg rich_msg = 12;
18 |   // GroupFile group_file = 13;
19 |   optional ExtraInfo extra_info = 16;
20 |   // VideoFile video_file = 19;
21 |   // AnonymousGroupMessage anon_group_msg = 21;
22 |   // QQWalletMsg qq_wallet_msg = 24;
23 |   // CustomElem custom_elem = 31;
24 |   // GeneralFlags general_flags = 37;
25 |   // SrcMsg src_msg = 45; // Forward/ReplyEntity
26 |   // LightAppElem light_app_elem = 51;
27 |   // CommonElem common_elem = 53;
28 | }
29 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/elem/Text.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg.elem";
 4 | 
 5 | message Text {
 6 |   string str = 1;
 7 |   string link = 2;
 8 |   bytes attr6_buf = 3;
 9 |   bytes attr7_buf = 4;
10 |   bytes buf = 11;
11 |   bytes pb_reserve = 12;
12 | }
13 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/recall/C2CMsgRecall.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | message C2CMsgRecall {
 6 |   repeated MsgInfo msg_infos = 1;
 7 |   int32 field_2 = 2; // 1001
 8 |   int32 field_3 = 3; // i don't know
 9 |   int32 field_4 = 4; // 0
10 |   bytes field_5 = 5; // 5: {1: 0}
11 | 
12 |   message MsgInfo {
13 |     string from_uid = 1;
14 |     string to_uid = 2;
15 |     uint32 msg_client_seq = 3;
16 |     uint64 msg_uid = 4;
17 |     uint64 timestamp = 5; // unix seconds
18 |     uint64 random_id = 6;
19 |     uint64 msg_seq = 20;
20 |   }
21 | }
22 | 


--------------------------------------------------------------------------------
/app/src/main/proto/trpc/msg/recall/GroupMsgRecall.proto:
--------------------------------------------------------------------------------
 1 | syntax = "proto3";
 2 | package io.github.qauxv.proto.trpc.msg;
 3 | option java_package = "io.github.qauxv.proto.trpc.msg";
 4 | 
 5 | message GroupMsgRecall {
 6 |   uint32 op_type = 1; // should be 7
 7 |   uint32 group_code = 4;
 8 |   MsgRecallInfo msg_recall = 11;
 9 |   uint32 field_37 = 37; // may be msq_seq
10 |   uint32 field_39 = 39; // i don't know
11 | 
12 |   message MsgRecallInfo {
13 |     string operator_uid = 1;
14 |     repeated MsgInfo msg_infos = 3;
15 |     bytes field_5 = 5; // 5: {1: 0}
16 |     int32 field_6 = 6; // 0
17 |     int32 field_7 = 7; // 0
18 | 
19 |     message MsgInfo {
20 |       uint32 msg_seq = 1;
21 |       uint64 timestamp = 2; // unix seconds
22 |       uint32 random_id = 3;
23 |       int32 field_4 = 4; // 0
24 |       int32 field_5 = 5; // 0
25 |       string msg_author_uid = 6;
26 |     }
27 |   }
28 | }
29 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/enter_from_left.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <translate
4 |         android:duration="250"
5 |         android:fromXDelta="-100%p"
6 |         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
7 |         android:toXDelta="0" />
8 | </set>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/enter_from_right.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <translate
4 |         android:duration="250"
5 |         android:fromXDelta="100%p"
6 |         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
7 |         android:toXDelta="0" />
8 | </set>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/exit_to_left.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <translate
4 |         android:duration="250"
5 |         android:fromXDelta="0"
6 |         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
7 |         android:toXDelta="-100%p" />
8 | </set>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/exit_to_right.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <translate
4 |         android:duration="250"
5 |         android:fromXDelta="0"
6 |         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
7 |         android:toXDelta="100%p" />
8 | </set>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/fade_in.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <alpha
4 |         android:duration="300"
5 |         android:fromAlpha="0.0"
6 |         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
7 |         android:toAlpha="1.0" />
8 | </set>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/fade_out.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <alpha
4 |         android:duration="300"
5 |         android:fromAlpha="1.0"
6 |         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
7 |         android:toAlpha="0.0" />
8 | </set>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/lunar_newyear_header.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-nodpi/lunar_newyear_header.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/newyear_header.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-nodpi/newyear_header.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/confetti1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-xxhdpi/confetti1.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/confetti2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-xxhdpi/confetti2.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/confetti3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-xxhdpi/confetti3.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/petal.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-xxhdpi/petal.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/snowflake.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable-xxhdpi/snowflake.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_green_solid.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |        android:shape="rectangle">
 4 |     <solid android:color="?attr/usableColor"/>
 5 |     <corners android:topLeftRadius="8dp"
 6 |              android:topRightRadius="8dp"
 7 |              android:bottomLeftRadius="8dp"
 8 |              android:bottomRightRadius="8dp"/>
 9 | </shape>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_item_light_grey_r16.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:shape="rectangle">
 4 |     <corners
 5 |         android:bottomLeftRadius="16dp"
 6 |         android:bottomRightRadius="16dp"
 7 |         android:topLeftRadius="16dp"
 8 |         android:topRightRadius="16dp" />
 9 |     <solid android:color="#30A0A0A0" />
10 | </shape>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_red_solid.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |        android:shape="rectangle">
 4 |     <solid android:color="?attr/unusableColor"/>
 5 |     <corners android:topLeftRadius="8dp"
 6 |              android:topRightRadius="8dp"
 7 |              android:bottomLeftRadius="8dp"
 8 |              android:bottomRightRadius="8dp"/>
 9 | </shape>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_ripple_r8.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:color="@color/rippleColor">
 4 |     <item android:id="@android:id/mask">
 5 |         <shape android:shape="rectangle">
 6 |             <corners
 7 |                 android:bottomLeftRadius="8dp"
 8 |                 android:bottomRightRadius="8dp"
 9 |                 android:topLeftRadius="8dp"
10 |                 android:topRightRadius="8dp" />
11 |             <solid android:color="#000000" />
12 |         </shape>
13 |     </item>
14 | </ripple>
15 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_ripple_rect.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
3 |         android:color="@color/rippleColor">
4 | 
5 |     <item android:id="@android:id/mask"
6 |           android:drawable="@android:color/black"/>
7 | 
8 | </ripple>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_trans_border.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |        android:shape="rectangle">
 4 |     <stroke android:width="1dp" android:color="?attr/lineColor"/>
 5 |     <corners android:topLeftRadius="8dp"
 6 |              android:topRightRadius="8dp"
 7 |              android:bottomLeftRadius="8dp"
 8 |              android:bottomRightRadius="8dp"/>
 9 | </shape>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_trans_border_null_ripple.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <item>
 4 |         <shape android:shape="rectangle">
 5 |             <stroke android:width="1dp" android:color="@color/nullColor"/>
 6 |             <corners android:topLeftRadius="8dp"
 7 |                      android:topRightRadius="8dp"
 8 |                      android:bottomLeftRadius="8dp"
 9 |                      android:bottomRightRadius="8dp"/>
10 |         </shape>
11 |     </item>
12 | 
13 |     <item>
14 |         <ripple android:color="@color/rippleColor">
15 |             <item android:id="@android:id/mask">
16 |                 <shape android:shape="rectangle">
17 |                     <solid android:color="#000000"/>
18 |                     <corners android:topLeftRadius="8dp"
19 |                              android:topRightRadius="8dp"
20 |                              android:bottomLeftRadius="8dp"
21 |                              android:bottomRightRadius="8dp"/>
22 |                 </shape>
23 |             </item>
24 |         </ripple>
25 |     </item>
26 | </layer-list>
27 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_trans_border_ripple.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <item>
 4 |         <shape android:shape="rectangle">
 5 |             <stroke android:width="1dp" android:color="?attr/lineColor"/>
 6 |             <corners android:topLeftRadius="8dp"
 7 |                      android:topRightRadius="8dp"
 8 |                      android:bottomLeftRadius="8dp"
 9 |                      android:bottomRightRadius="8dp"/>
10 |         </shape>
11 |     </item>
12 | 
13 |     <item>
14 |         <ripple android:color="@color/rippleColor">
15 |             <item android:id="@android:id/mask">
16 |                 <shape android:shape="rectangle">
17 |                     <solid android:color="#000000"/>
18 |                     <corners android:topLeftRadius="8dp"
19 |                              android:topRightRadius="8dp"
20 |                              android:bottomLeftRadius="8dp"
21 |                              android:bottomRightRadius="8dp"/>
22 |                 </shape>
23 |             </item>
24 |         </ripple>
25 |     </item>
26 | </layer-list>
27 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_yellow_solid.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |        android:shape="rectangle">
 4 |     <solid android:color="?attr/warnColor"/>
 5 |     <corners android:topLeftRadius="8dp"
 6 |              android:topRightRadius="8dp"
 7 |              android:bottomLeftRadius="8dp"
 8 |              android:bottomRightRadius="8dp"/>
 9 | </shape>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/dialog_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?><!--
 2 |   ~ QAuxiliary - An Xposed module for QQ/TIM
 3 |   ~ Copyright (C) 2019-2025 QAuxiliary developers
 4 |   ~ https://github.com/cinit/QAuxiliary
 5 |   ~
 6 |   ~ This software is an opensource software: you can redistribute it
 7 |   ~ and/or modify it under the terms of the General Public License
 8 |   ~ as published by the Free Software Foundation; either
 9 |   ~ version 3 of the License, or any later version as published
10 |   ~ by QAuxiliary contributors.
11 |   ~
12 |   ~ This software is distributed in the hope that it will be useful,
13 |   ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |   ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |   ~ See the General Public License for more details.
16 |   ~
17 |   ~ You should have received a copy of the General Public License
18 |   ~ along with this software.
19 |   ~ If not, see
20 |   ~ <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |   -->
22 | 
23 | <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
24 |     <corners android:radius="28dp" />
25 |     <solid android:color="?attr/colorBackgroundFloating" />
26 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_forward_outline_24.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:autoMirrored="true"
 3 |     android:height="24dp"
 4 |     android:tint="?attr/colorControlNormal"
 5 |     android:viewportHeight="24"
 6 |     android:viewportWidth="24"
 7 |     android:width="24dp">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8 -8,-8z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bg_gradient.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:aapt="http://schemas.android.com/aapt"
 3 |     android:width="360dp"
 4 |     android:height="88dp"
 5 |     android:viewportWidth="360"
 6 |     android:viewportHeight="88">
 7 |   <path
 8 |       android:pathData="M0,0h360v88h-360z">
 9 |     <aapt:attr name="android:fillColor">
10 |       <gradient 
11 |           android:startY="0"
12 |           android:startX="180"
13 |           android:endY="88"
14 |           android:endX="180"
15 |           android:type="linear">
16 |         <item android:offset="0" android:color="?attr/themeColor"/>
17 |         <item android:offset="0.316" android:color="?attr/themeColor"/>
18 |         <item android:offset="0.879" android:color="?attr/backgroundColor"/>
19 |         <item android:offset="1" android:color="?attr/backgroundColor"/>
20 |       </gradient>
21 |     </aapt:attr>
22 |   </path>
23 | </vector>
24 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bg_white.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="328dp"
 4 |     android:height="91dp"
 5 |     android:viewportWidth="328"
 6 |     android:viewportHeight="91">
 7 |   <path
 8 |       android:pathData="M8,0L320,0A8,8 0,0 1,328 8L328,83A8,8 0,0 1,320 91L8,91A8,8 0,0 1,0 83L0,8A8,8 0,0 1,8 0z"
 9 |       android:fillColor="?attr/whiteBackgroundColor"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_build.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24">
 7 |   <path
 8 |       android:pathData="M0,0H24V24H0Z"
 9 |       android:fillColor="#00000000"/>
10 |   <path
11 |       android:pathData="M20.725,17.367l-8.288,-8.26a5.923,5.923 0,0 0,-9.009 -6.96l3.5,3.5 -1.3,1.283 -3.5,-3.484a5.886,5.886 0,0 0,0.593 7.66,5.95 5.95,0 0,0 6.289,1.346l8.315,8.288a0.911,0.911 0,0 0,1.287 0l2.1,-2.092a0.888,0.888 0,0 0,0 -1.283ZM17.987,18.823L9.352,10.216a4,4 0,0 1,-1.826 0.746A4.089,4.089 0,0 1,2.825 6.7l2.82,2.811L9.516,5.65 6.7,2.838A4.123,4.123 0,0 1,9.835 4.03a4.057,4.057 0,0 1,1.132 3.6,3.95 3.95,0 0,1 -0.8,1.783l8.626,8.6Z"
12 |       android:fillColor="#3c4043"/>
13 | </vector>
14 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_24.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24"
 7 |     android:tint="?attr/colorControlNormal">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4z"/>
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_circle.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24">
 7 |   <path
 8 |       android:pathData="M12,2 L1,21H23M12,6l7.53,13H4.47M11,10v4h2V10m-2,6v2h2V16"
 9 |       android:fillColor="#fff"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close_24.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:viewportHeight="24"
 4 |     android:viewportWidth="24"
 5 |     android:width="24dp">
 6 |     <path
 7 |         android:fillColor="@android:color/white"
 8 |         android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z" />
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_copy.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:tint="?attr/colorControlNormal"
 4 |     android:viewportHeight="24"
 5 |     android:viewportWidth="24"
 6 |     android:width="24dp">
 7 |     <path
 8 |         android:fillColor="@android:color/white"
 9 |         android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_data_usage.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:tint="?attr/colorControlNormal"
 4 |     android:viewportHeight="24"
 5 |     android:viewportWidth="24"
 6 |     android:width="24dp">
 7 |     <path
 8 |         android:fillColor="@android:color/white"
 9 |         android:pathData="M13,2.05v3.03c3.39,0.49 6,3.39 6,6.92 0,0.9 -0.18,1.75 -0.48,2.54l2.6,1.53c0.56,-1.24 0.88,-2.62 0.88,-4.07 0,-5.18 -3.95,-9.45 -9,-9.95zM12,19c-3.87,0 -7,-3.13 -7,-7 0,-3.53 2.61,-6.43 6,-6.92V2.05c-5.06,0.5 -9,4.76 -9,9.95 0,5.52 4.47,10 9.99,10 3.31,0 6.24,-1.61 8.06,-4.09l-2.6,-1.53C16.17,17.98 14.21,19 12,19z" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_del_friend_top.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/ic_del_friend_top.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete_outline_24.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:height="24dp"
 4 |     android:tint="?attr/colorControlNormal"
 5 |     android:viewportHeight="24"
 6 |     android:viewportWidth="24"
 7 |     android:width="24dp">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M16,9v10H8V9h8m-1.5,-6h-5l-1,1H5v2h14V4h-3.5l-1,-1zM18,7H6v12c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_done.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:viewportHeight="24"
 4 |     android:viewportWidth="24"
 5 |     android:width="24dp">
 6 |     <path
 7 |         android:fillColor="@android:color/white"
 8 |         android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z" />
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_error_filled.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:viewportHeight="24"
 4 |     android:viewportWidth="24"
 5 |     android:width="24dp">
 6 |     <path
 7 |         android:fillColor="@android:color/white"
 8 |         android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z" />
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_failure_white.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |         android:width="24dp"
 4 |         android:height="24dp"
 5 |         android:viewportWidth="24"
 6 |         android:viewportHeight="24">
 7 |     <path
 8 |             android:fillColor="#FFFFFFFF"
 9 |             android:pathData="M14.59,8L12,10.59 9.41,8 8,9.41 10.59,12 8,14.59 9.41,16 12,13.41 14.59,16 16,14.59 13.41,12 16,9.41 14.59,8zM12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_filter_list.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:tint="?attr/colorControlNormal"
 4 |     android:viewportHeight="24"
 5 |     android:viewportWidth="24"
 6 |     android:width="24dp">
 7 |     <path
 8 |         android:fillColor="@android:color/white"
 9 |         android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z" />
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_github.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24">
 7 |   <path
 8 |       android:pathData="M12,2A10.126,10.126 0,0 0,2 12.248a10.257,10.257 0,0 0,6.84 9.736c0.5,0.082 0.66,-0.236 0.66,-0.512V19.74c-2.77,0.615 -3.36,-1.373 -3.36,-1.373A2.741,2.741 0,0 0,5.03 16.86c-0.91,-0.635 0.07,-0.615 0.07,-0.615A2.109,2.109 0,0 1,6.63 17.3a2.118,2.118 0,0 0,2.91 0.851,2.235 2.235,0 0,1 0.63,-1.373c-2.22,-0.256 -4.55,-1.138 -4.55,-5.042A4.025,4.025 0,0 1,6.65 8.959a3.75,3.75 0,0 1,0.1 -2.706S7.59,5.976 9.5,7.3a9.409,9.409 0,0 1,5 0c1.91,-1.322 2.75,-1.045 2.75,-1.045a3.75,3.75 0,0 1,0.1 2.706,4.025 4.025,0 0,1 1.03,2.777c0,3.915 -2.34,4.776 -4.57,5.032a2.477,2.477 0,0 1,0.69 1.9v2.808c0,0.277 0.16,0.6 0.67,0.512A10.259,10.259 0,0 0,22 12.248,10.126 10.126,0 0,0 12,2Z"
 9 |       android:fillColor="#000000"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_guild_schedule_edit.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/ic_guild_schedule_edit.webp


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_help.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |         android:width="24dp"
 4 |         android:height="24dp"
 5 |         android:viewportWidth="24"
 6 |         android:viewportHeight="24">
 7 |     <path
 8 |             android:fillColor="#FF000000"
 9 |             android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |         android:width="24dp"
 4 |         android:height="24dp"
 5 |         android:viewportWidth="24"
 6 |         android:viewportHeight="24">
 7 |     <path
 8 |             android:fillColor="#FF000000"
 9 |             android:pathData="M11,7h2v2h-2zM11,11h2v6h-2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info_filled.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:viewportHeight="24"
 4 |     android:viewportWidth="24"
 5 |     android:width="24dp">
 6 |     <path
 7 |         android:fillColor="@android:color/white"
 8 |         android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z" />
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_copy_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M510.6,930.5H222.7C153.9,930.5 98,874.6 98,805.8V518.7c0,-68.7 55.9,-124.6 124.6,-124.6h287.9c68.7,0 124.7,55.9 124.7,124.6v287.1c0,68.8 -55.9,124.7 -124.6,124.7zM222.7,483.6c-19.4,0 -35.1,15.7 -35.1,35.1v287.1c0,19.4 15.7,35.1 35.1,35.1h287.9c19.4,0 35.1,-15.7 35.1,-35.1V518.7c0,-19.4 -15.8,-35.1 -35.1,-35.1H222.7z"
 8 |       android:fillColor="#ffffff"/>
 9 |   <path
10 |       android:pathData="M801.5,639.5H590.4c-24.7,0 -44.8,-20 -44.8,-44.8v-76c0,-19.4 -15.8,-35.1 -35.1,-35.1h-76.8c-24.7,0 -44.8,-20 -44.8,-44.8v-211c0,-68.7 55.9,-124.6 124.7,-124.6h287.9c68.7,0 124.6,55.9 124.6,124.6v287.1c0.1,68.7 -55.8,124.6 -124.6,124.6zM635.2,550h166.3c19.4,0 35.1,-15.7 35.1,-35.1V227.8c0,-19.4 -15.7,-35.1 -35.1,-35.1H513.6c-19.4,0 -35.1,15.7 -35.1,35.1v166.3h32.1c68.7,0 124.7,55.9 124.7,124.6V550z"
11 |       android:fillColor="#ffffff"/>
12 | </vector>
13 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_edit_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M744.5,544.4c-10.6,0 -21.1,-4 -29.2,-12.1 -16.1,-16.1 -16.1,-42.3 0,-58.4l122.5,-122.5L670.4,184 547.7,306.4c-16.1,16.1 -42.3,16.1 -58.4,0s-16.1,-42.3 0,-58.4l124.9,-124.9c30.9,-30.9 79,-33.1 107.2,-4.8l182,182c28.2,28.2 26,76.3 -4.9,107.2L773.6,532.3c-8,8.1 -18.6,12.1 -29.1,12.1z"
 8 |       android:fillColor="#ffffff"/>
 9 |   <path
10 |       android:pathData="M746.5,542.3c-10.6,0 -21.1,-4 -29.2,-12.1L491.4,304.3c-16.1,-16.1 -16.1,-42.3 0,-58.4s42.3,-16.1 58.4,0l225.9,225.9c16.1,16.1 16.1,42.3 0,58.4 -8,8.1 -18.6,12.1 -29.2,12.1z"
11 |       android:fillColor="#ffffff"/>
12 |   <path
13 |       android:pathData="M153.9,924.1c-15,0 -29.4,-5.8 -39.9,-16.4 -13.1,-13.1 -18.8,-32.1 -15.3,-50.8l43.6,-231.4c4.6,-24.3 17,-47.5 35,-65.5l312.1,-312c16.1,-16.1 42.3,-16.1 58.4,0s16.1,42.3 0,58.4L235.7,618.5c-6.4,6.4 -10.7,14.3 -12.2,22.4l-36.6,194 194,-36.6c8.1,-1.5 16,-5.9 22.4,-12.2L715.4,474c16.1,-16.1 42.3,-16.1 58.4,0s16.1,42.3 0,58.4l-312.2,312c-18,18 -41.2,30.4 -65.4,35L164.7,923c-3.6,0.7 -7.2,1.1 -10.8,1.1z"
14 |       android:fillColor="#ffffff"/>
15 | </vector>
16 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_md5_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M791.4,925.8H232.6c-74.1,0 -134.4,-60.3 -134.4,-134.4V232.6c0,-74.1 60.3,-134.4 134.4,-134.4h558.8c74.1,0 134.4,60.3 134.4,134.4v558.8c0,74.1 -60.3,134.4 -134.4,134.4zM232.6,187.7c-24.8,0 -44.9,20.1 -44.9,44.9v558.8c0,24.8 20.1,44.9 44.9,44.9h558.8c24.8,0 44.9,-20.2 44.9,-44.9V232.6c0,-24.8 -20.2,-44.9 -44.9,-44.9H232.6z"
 8 |       android:fillColor="#ffffff"/>
 9 |   <path
10 |       android:pathData="M349.3,645.3c-12.5,0 -24.9,-5.2 -33.8,-15.4l-77.1,-88.6c-14.7,-16.8 -14.7,-41.9 0,-58.7l77.1,-88.6c16.2,-18.6 44.5,-20.6 63.1,-4.4 18.6,16.2 20.6,44.5 4.4,63.1L331.5,512l51.5,59.2c16.2,18.6 14.3,46.9 -4.4,63.1 -8.4,7.4 -18.9,11 -29.3,11zM674.7,645.3c-10.4,0 -20.9,-3.6 -29.3,-11 -18.6,-16.2 -20.6,-44.5 -4.4,-63.1L692.5,512 641,452.8c-16.2,-18.6 -14.3,-46.9 4.4,-63.1 18.6,-16.2 46.9,-14.3 63.1,4.4l77.1,88.6c14.7,16.8 14.7,41.9 0,58.7l-77.1,88.6c-8.9,10.2 -21.3,15.4 -33.8,15.4zM445,723.6c-5.6,0 -11.2,-1 -16.6,-3.2 -22.9,-9.2 -34,-35.3 -24.9,-58.2L537.4,328.5c9.2,-22.9 35.3,-34 58.2,-24.9 22.9,9.2 34,35.3 24.9,58.2L486.6,695.5c-7,17.5 -23.8,28.1 -41.5,28.1z"
11 |       android:fillColor="#ffffff"/>
12 | </vector>
13 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_open_72dp.xml:
--------------------------------------------------------------------------------
1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="72dp" android:tint="#ffffff" android:viewportHeight="24" android:viewportWidth="24" android:width="72dp">
2 |     <path android:fillColor="@android:color/white" android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z"/>
3 | </vector>
4 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_recall_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M602.2,913.1H345.6c-14,0 -25.1,-11 -25.1,-25.1v-63.7c0,-14 11,-25.1 25.1,-25.1H602.2c122.3,0 221.6,-93.7 221.6,-208.6S724.6,382.2 602.2,382.2H180.1V268.4H602.2c185,0 335.4,144.4 335.4,322.4 0,177.5 -150.4,322.4 -335.4,322.4z"
 8 |       android:fillColor="#ffffff"/>
 9 |   <path
10 |       android:pathData="M325.5,549.1L111.9,336c-6,-6 -6,-15.5 0,-21.1l213.6,-213.6c10,-10 25.6,-10 35.6,0l45.1,45.1c10,10 10,25.6 0,35.6L262.3,325.5l143.4,143.4c10,10 10,25.6 0,35.6l-45.1,45.1c-9.5,9.5 -25.6,9.5 -35.1,-0.5z"
11 |       android:fillColor="#ffffff"/>
12 | </vector>
13 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_repeat_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="72dp"
 3 |     android:viewportHeight="1024"
 4 |     android:viewportWidth="1024"
 5 |     android:width="72dp">
 6 |     <path
 7 |         android:fillColor="#00000000"
 8 |         android:pathData="M82,512a430,430 0,1 0,860 0a430,430 0,1 0,-860 0z"
 9 |         android:strokeColor="#ffffff"
10 |         android:strokeWidth="99" />
11 |     <path
12 |         android:fillColor="#ffffff"
13 |         android:pathData="M652.7,282h104v466.7h-105z" />
14 |     <path
15 |         android:fillColor="#ffffff"
16 |         android:pathData="M509,470l-0,84l-298,0l-0,-84z" />
17 |     <path
18 |         android:fillColor="#ffffff"
19 |         android:pathData="M318,363h84v298h-84z" />
20 |     <path
21 |         android:fillColor="#ffffff"
22 |         android:pathData="m655,281l-139,68.7l1,92.3l137,-61.6l1,-99.4z" />
23 | </vector>
24 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_save_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M795.8,956.4H224.5c-69,0 -125.2,-56.2 -125.2,-125.2V189c0,-69 56.2,-125.2 125.2,-125.2h460c36.5,0 71,15.8 94.8,43.5l111.3,129.2c19.6,22.7 30.4,51.7 30.4,81.7v513c0,69 -56.2,125.2 -125.2,125.2zM224.5,153.1c-19.8,0 -35.9,16.1 -35.9,35.9v642.2c0,19.8 16.1,35.9 35.9,35.9h571.4c19.8,0 35.9,-16.1 35.9,-35.9v-513c0,-8.6 -3.1,-16.9 -8.7,-23.4L711.7,165.6c-6.8,-7.9 -16.8,-12.5 -27.2,-12.5h-460z"
 8 |       android:fillColor="#ffffff"/>
 9 |   <path
10 |       android:pathData="M679.2,493.4L341.1,493.4c-24.6,0 -44.6,-20 -44.6,-44.6L296.5,108.5c0,-24.6 20,-44.6 44.6,-44.6h338.1c24.6,0 44.6,20 44.6,44.6v340.3c0,24.6 -19.9,44.6 -44.6,44.6zM385.7,404.2h248.9L634.6,153.1L385.7,153.1v251.1z"
11 |       android:fillColor="#ffffff"/>
12 |   <path
13 |       android:pathData="M553.7,334.6c-24.6,0 -44.6,-20 -44.6,-44.6v-28.4c0,-24.6 20,-44.6 44.6,-44.6s44.6,20 44.6,44.6V290c0.1,24.6 -19.9,44.6 -44.6,44.6z"
14 |       android:fillColor="#ffffff"/>
15 | </vector>
16 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_share_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M144.4,924.1c-1,0 -2.1,0 -3.1,-0.1 -21.6,-1.5 -39.1,-18 -41.8,-39.5 -1.8,-13.6 -41,-337.2 117.5,-517.2 58.7,-66.7 136.1,-104.9 230.5,-114v-67.5c0,-32.4 17.8,-62 46.4,-77.3 28.6,-15.2 63,-13.5 89.9,4.6l309.3,205.8c24.4,16.3 39,43.5 39,72.9 0,29.4 -14.6,56.6 -39,72.9L583.6,670.9c-27,17.9 -61.4,19.5 -89.9,4.2 -28.5,-15.3 -46.2,-44.9 -46.2,-77.2v-37.6C268,602.7 188.9,887.5 188.1,890.6c-5.4,19.9 -23.4,33.5 -43.7,33.5zM538.1,191.6v104.9c0,25 -20.3,45.3 -45.3,45.3 -89.2,0 -157.2,27.9 -207.8,85.4 -55.7,63.2 -81.4,152 -92.6,233.8 62.4,-99.1 159.6,-196.6 300.4,-196.6 25,0 45.3,20.3 45.3,45.3v82.7l301.1,-200.5 -301.1,-200.3zM868,427.1h0.2,-0.2zM842.9,389.4z"
 8 |       android:fillColor="#ffffff"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_tool_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M244.3,930.6c-36,0 -69.9,-14 -95.4,-39.5l-12.2,-12.2C84,826.2 84,740.6 136.6,688l275.2,-275.2c-20.7,-99.8 18.5,-203.5 102.6,-265 74.1,-54.3 173.2,-64.9 258.5,-27.7 13.7,6 23.5,18.3 26.3,33 2.8,14.7 -1.9,29.8 -12.4,40.3L690,290.2l47.5,47.5 96.6,-96.6c10.5,-10.6 25.5,-15.2 40.3,-12.4 14.7,2.8 27,12.6 33,26.3 43.5,99.5 22.2,213.3 -54.5,289.9 -63,63 -152.1,89 -238.1,71.1L339.7,891c-25.5,25.5 -59.4,39.6 -95.4,39.6zM664,188.4c-34.4,0.7 -68.2,11.6 -96.3,32.2 -60.3,44.2 -85.5,121.4 -62.7,192 5.2,16.1 0.9,33.8 -11,45.8L200.5,751.8c-17.4,17.4 -17.4,45.7 0,63.1l12.2,12.2c17.4,17.4 45.7,17.4 63.1,0l293.5,-293.5c12,-12 29.7,-16.2 45.8,-11 61.7,19.9 128.3,3.9 174,-41.7 32.1,-32.1 49.3,-74.1 50.2,-117.3l-69.8,69.8c-17.6,17.6 -46.2,17.6 -63.9,0L594.2,322.1c-17.6,-17.6 -17.6,-46.2 0,-63.8l69.8,-69.9z"
 8 |       android:fillColor="#4d4d4d"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_translate_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M608.3,416.3L896,416.3c35.3,0 64,28.7 64,64L960,896c0,35.3 -28.7,64 -64,64L480.3,960c-35.3,0 -64,-28.7 -64,-64v-288.3L128,607.7c-35.3,0 -64,-28.7 -64,-64L64,128c0,-35.3 28.7,-64 64,-64h416.3c35.3,0 64,28.7 64,64v288.3zM608.3,480.3v64c0,35.3 -28.7,64 -64,64L480.3,608.3v256c0,17.9 14.3,31.7 31.7,31.7h352.3c17.4,0 31.7,-14.3 31.7,-31.7L896,512c0,-17.4 -14.3,-31.7 -31.7,-31.7h-256zM128,159.7L128,512c0,17.4 14.3,31.7 31.7,31.7L512,543.7c17.4,0 31.7,-14.3 31.7,-31.7L543.7,160.3c0,-17.4 -14.3,-31.7 -31.7,-32.3L160.3,128c-17.9,0 -32.3,14.3 -32.3,31.7zM192,404.5L192,243.2h112.6L304.6,176.1h46.6c6.7,1 9.7,2 9.7,2.6 0,1.5 -0.5,3.1 -1.5,4.1 -2.6,7.2 -4.1,15.9 -4.1,26.1v34.3h119.8v156.7h-50.7v-20.5L355.8,379.4v118.3h-49.7L306.2,379.4L238.6,379.4L238.6,404.5h-46.6zM238.6,282.1v60.4h67.6L306.2,282.1L238.6,282.1zM424.4,342.5L424.4,282.1L355.8,282.1v60.4h68.6zM628.2,830.5h-52.2l92.2,-254.5h64.5l89.6,254.5h-54.8l-19.5,-53.8h-100.4l-19.5,53.8zM661,734.2h72.7l-34.3,-108.5h-1.5l-36.9,108.5zM896,320h-64c0,-70.7 -57.3,-128 -128,-128L704,128c106,0 192,86 192,192zM128,704h64c0,70.7 57.3,128 128,128L320,896C214,896 128,810 128,704z"
 8 |       android:fillColor="#ffffff"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_item_troop_group_72dp.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:width="72dp"
 3 |     android:height="72dp"
 4 |     android:viewportWidth="1024"
 5 |     android:viewportHeight="1024">
 6 |   <path
 7 |       android:pathData="M320.4,960.7c-15.9,0 -31.8,-4.6 -45.4,-13.9l-50.8,-34.4 -33,27.8c-17.1,14.4 -41.4,17.6 -61.7,8.2C109.1,939 96,918.4 96,896L96,197.9c0,-75.2 61.1,-136.3 136.3,-136.3h559.4c75.2,0 136.3,61.1 136.3,136.3v700.9c0,21.7 -12,41.4 -31.2,51.4 -19.3,10 -42.2,8.4 -60,-4.1l-47.6,-33.6 -36.4,29.1c-28.5,22.8 -69,23.7 -98.5,2.1L610,911.2l-52,35.5c-27.8,18.9 -64.8,18.7 -92.3,-0.7l-49.5,-34.8 -48.9,34.7c-14,9.9 -30.4,14.8 -46.9,14.8zM888.7,872.6h0.2,-0.2zM416.1,819.3c16.3,0 32.7,4.9 46.6,14.7l49.6,34.9 52.2,-35.6c28.3,-19.3 65.9,-18.7 93.5,1.6l43.8,32.1 36.3,-29c28,-22.4 68.1,-23.6 97.4,-2.9l2.4,1.7L837.9,197.9c0,-25.6 -20.8,-46.4 -46.4,-46.4L232.3,151.5c-25.6,0 -46.4,20.8 -46.4,46.4v631.6c26,-13.5 58.1,-12.2 83,4.7l51.3,34.7 49,-34.7c14.1,-9.9 30.5,-14.9 46.9,-14.9z"
 8 |       android:fillColor="#4d4d4d"/>
 9 |   <path
10 |       android:pathData="M680.6,425.3H346.1c-24.8,0 -45,-20.1 -45,-45s20.1,-45 45,-45h334.5c24.8,0 45,20.1 45,45s-20.1,45 -45,45zM503.5,637.6H346.1c-24.8,0 -45,-20.1 -45,-45s20.1,-45 45,-45h157.4c24.8,0 45,20.1 45,45s-20.2,45 -45,45z"
11 |       android:fillColor="#4d4d4d"/>
12 | </vector>
13 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launch_28dp_light.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:autoMirrored="true"
 3 |     android:height="28dp"
 4 |     android:width="28dp"
 5 |     android:tint="@color/hostShareSheetActionIconForegroundColorLight"
 6 |     android:viewportHeight="24"
 7 |     android:viewportWidth="24">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launch_28dp_night.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:autoMirrored="true"
 3 |     android:height="28dp"
 4 |     android:width="28dp"
 5 |     android:tint="@color/hostShareSheetActionIconForegroundColorNight"
 6 |     android:viewportHeight="24"
 7 |     android:viewportWidth="24">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_recall_28dp_black.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:autoMirrored="true"
 3 |     android:height="28dp"
 4 |     android:width="28dp"
 5 |     android:tint="#FF000000"
 6 |     android:viewportHeight="24"
 7 |     android:viewportWidth="24">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M 5.1,15.5 H 3 L 6,19 8.9,15.5 H 6.8 V 5.7 H 17.8 V 20.13 h 1.8 V 5.5 C 19.6,5.27 19.5,4.873 19.414,4.71 19.33,4.54 19.1,4.314 19,4.2 18.83,4.07 18.5,4 18.33,4 L 6.362,4 C 5.9,4 5.66,4.16 5.46,4.41 5.25,4.73 5.17,5 5.15,5.3 V 15.5 Z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_recall_28dp_white.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:autoMirrored="true"
 3 |     android:height="28dp"
 4 |     android:width="28dp"
 5 |     android:tint="#FFFFFFFF"
 6 |     android:viewportHeight="24"
 7 |     android:viewportWidth="24">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M 5.1,15.5 H 3 L 6,19 8.9,15.5 H 6.8 V 5.7 H 17.8 V 20.13 h 1.8 V 5.5 C 19.6,5.27 19.5,4.873 19.414,4.71 19.33,4.54 19.1,4.314 19,4.2 18.83,4.07 18.5,4 18.33,4 L 6.362,4 C 5.9,4 5.66,4.16 5.46,4.41 5.25,4.73 5.17,5 5.15,5.3 V 15.5 Z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_refresh_24.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:height="24dp"
 4 |     android:tint="?attr/colorControlNormal"
 5 |     android:viewportHeight="24"
 6 |     android:viewportWidth="24"
 7 |     android:width="24dp">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_search_baseline.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:height="24dp"
 4 |     android:tint="?attr/colorControlNormal"
 5 |     android:viewportHeight="24"
 6 |     android:viewportWidth="24"
 7 |     android:width="24dp">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_send_outline_24.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24"
 7 |     android:tint="?attr/colorControlNormal"
 8 |     android:autoMirrored="true">
 9 |     <path
10 |         android:fillColor="@android:color/white"
11 |         android:pathData="M4.01,6.03l7.51,3.22 -7.52,-1 0.01,-2.22m7.5,8.72L4,17.97v-2.22l7.51,-1M2.01,3L2,10l15,2 -15,2 0.01,7L23,12 2.01,3z" />
12 | </vector>
13 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_share_baseline_24.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24"
 7 |     android:tint="?attr/colorControlNormal">
 8 |     <path
 9 |         android:fillColor="@android:color/white"
10 |         android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sort_24.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:height="24dp"
 4 |     android:tint="?attr/colorControlNormal"
 5 |     android:viewportHeight="24"
 6 |     android:viewportWidth="24"
 7 |     android:width="24dp">
 8 |     <path
 9 |         android:fillColor="#000000"
10 |         android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z" />
11 | </vector>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_success_white.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |         android:height="24dp"
 4 |         android:width="24dp"
 5 |         android:viewportHeight="24"
 6 |         android:viewportWidth="24">
 7 |     <path android:fillColor="#FFFFFFFF"
 8 |           android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm4.59-12.42L10 14.17l-2.59-2.58L6 13l4 4 8-8z"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_warn.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:width="24dp"
 4 |     android:height="24dp"
 5 |     android:viewportWidth="24"
 6 |     android:viewportHeight="24">
 7 |   <path
 8 |       android:pathData="M12,2 L1,21H23M12,6l7.53,13H4.47M11,10v4h2V10m-2,6v2h2V16"
 9 |       android:fillColor="#fff"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_warn_filled.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:height="24dp"
 3 |     android:viewportHeight="24"
 4 |     android:viewportWidth="24"
 5 |     android:width="24dp">
 6 |     <path
 7 |         android:fillColor="@android:color/white"
 8 |         android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z" />
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/input.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_like.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_like.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_pack_set_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_pack_set_icon.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_panel_input_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_panel_input_icon.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_panel_like_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_panel_like_icon.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_panel_recent_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_panel_recent_icon.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_panel_round_bg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
3 |     <corners android:topLeftRadius="16dp"
4 |         android:topRightRadius="16dp"/>
5 |     <solid android:color="@color/global_background_color"/>
6 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_panen_set_button_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_panen_set_button_icon.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sticker_recent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/app/src/main/res/drawable/sticker_recent.png


--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_clickable_item.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="wrap_content"
 6 |     android:padding="3dp"
 7 |     android:gravity="left|top"
 8 |     android:orientation="horizontal"
 9 |     tools:ignore="HardcodedText,RtlHardcoded"
10 |     tools:viewBindingIgnore="true">
11 | 
12 |     <TextView
13 |         android:id="@+id/dialogClickableItemTitle"
14 |         style="@android:style/TextAppearance.Holo"
15 |         android:layout_width="wrap_content"
16 |         android:layout_height="wrap_content"
17 |         android:layout_marginRight="3dp"
18 |         android:padding="1dp"
19 |         android:paddingRight="3dp"
20 |         android:text="Title"
21 |         android:textSize="16sp" />
22 | 
23 |     <TextView
24 |         android:id="@+id/dialogClickableItemValue"
25 |         style="@android:style/TextAppearance.Holo"
26 |         android:layout_width="match_parent"
27 |         android:layout_height="wrap_content"
28 |         android:padding="1dp"
29 |         android:paddingLeft="3dp"
30 |         android:background="@drawable/bg_ripple_rect"
31 |         android:clickable="true"
32 |         android:focusable="true"
33 |         android:text="Value"
34 |         android:textSize="16sp" />
35 | 
36 | </LinearLayout>
37 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/sticker_panel_impl_input_from_local.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:orientation="vertical"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="wrap_content">
 6 | 
 7 |     <TextView
 8 |         android:layout_width="wrap_content"
 9 |         android:layout_height="wrap_content"
10 |         android:layout_gravity="center_horizontal"
11 |         android:id="@+id/btn_input_from_local"
12 |         android:text="输入表情包路径或ID导入"/>
13 |     <EditText
14 |         android:layout_width="match_parent"
15 |         android:layout_height="wrap_content"
16 |         android:id="@+id/input_path"/>
17 |     <LinearLayout
18 |         android:layout_width="match_parent"
19 |         android:layout_gravity="center_horizontal"
20 |         android:gravity="center_horizontal"
21 |         android:layout_height="wrap_content">
22 |         <Button
23 |             android:id="@+id/btn_pick"
24 |             android:text="浏览..."
25 |             android:layout_width="wrap_content"
26 |             android:layout_height="wrap_content" />
27 |         <Button
28 |             android:layout_width="wrap_content"
29 |             android:layout_height="wrap_content"
30 |             android:layout_gravity="center_horizontal"
31 |             android:id="@+id/btn_confirm_input"
32 |             android:text="从本地导入"/>
33 |     </LinearLayout>
34 | 
35 | 
36 | 
37 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/sticker_panel_plus_main.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:background="@color/global_background_color"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="match_parent">
 6 |     <HorizontalScrollView
 7 |         android:id="@+id/Sticker_Pack_Select_Bar_Container"
 8 |         android:layout_width="match_parent"
 9 |         android:scrollbars="none"
10 |         android:layout_height="51dp">
11 |         <LinearLayout
12 |             android:id="@+id/Sticker_Pack_Select_Bar"
13 |             android:layout_width="wrap_content"
14 |             android:layout_height="match_parent"
15 |             android:orientation="horizontal" />
16 |     </HorizontalScrollView>
17 |     <ScrollView
18 |         android:layout_below="@+id/Sticker_Pack_Select_Bar_Container"
19 |         android:background="#22000000"
20 |         android:id="@+id/sticker_panel_pack_container"
21 |         android:layout_width="match_parent"
22 |         android:layout_height="match_parent">
23 |     </ScrollView>
24 | </RelativeLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/sticker_panel_plus_pack_item.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:clickable="true"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="wrap_content">
 6 |     <TextView
 7 |         android:layout_width="wrap_content"
 8 |         android:layout_height="wrap_content"
 9 |         android:text="这是表情包的名字"
10 |         android:layout_marginLeft="10dp"
11 |         android:id="@+id/Sticker_Panel_Item_Name"
12 |         android:layout_marginBottom="10dp"
13 |         android:layout_marginTop="3dp"
14 |         android:textSize="16sp"
15 |         android:textColor="@color/global_font_color"/>
16 |     <ImageButton
17 |         android:layout_width="22dp"
18 |         android:layout_height="22dp"
19 |         android:background="@drawable/sticker_panen_set_button_icon"
20 |         android:id="@+id/Sticker_Panel_Set_Item"
21 |         android:layout_marginTop="5dp"
22 |         android:layout_marginRight="10dp"
23 |         android:layout_alignParentRight="true"/>
24 |     <LinearLayout
25 |         android:layout_below="@+id/Sticker_Panel_Item_Name"
26 |         android:layout_width="match_parent"
27 |         android:layout_height="wrap_content"
28 |         android:orientation="vertical"
29 |         android:id="@+id/Sticker_Item_Container"/>
30 | 
31 | 
32 | </RelativeLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/sticker_pre_save.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:orientation="vertical"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_gravity="center_horizontal"
 6 |     android:gravity="center_horizontal"
 7 |     android:layout_height="match_parent">
 8 |     <TextView
 9 |         android:layout_width="match_parent"
10 |         android:layout_height="wrap_content"
11 |         android:text="是否保存如下图片"
12 |         android:textColor="@color/global_font_color"
13 |         android:gravity="center_horizontal"
14 |         android:textSize="16sp"/>
15 |     <ImageView
16 |         android:id="@+id/emo_pre_container"
17 |         android:layout_width="160dp"
18 |         android:layout_height="160dp"/>
19 |     <ScrollView
20 |         android:layout_marginStart="12dp"
21 |         android:layout_marginEnd="12dp"
22 |         android:layout_width="match_parent"
23 |         android:layout_height="200dp">
24 |         <RadioGroup
25 |             android:layout_width="match_parent"
26 |             android:layout_height="wrap_content"
27 |             android:orientation="vertical"
28 |             android:id="@+id/emo_pre_list_choser"/>
29 | 
30 |     </ScrollView>
31 |     <Button
32 |         android:id="@+id/createNew"
33 |         android:layout_width="160dp"
34 |         android:layout_height="40dp"
35 |         android:text="新建项目"/>
36 | 
37 | 
38 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/sticker_share_root.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:orientation="vertical"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="match_parent">
 6 | 
 7 |     <LinearLayout
 8 |         android:layout_width="match_parent"
 9 |         android:background="@color/sticker_share_root_tab_back"
10 |         android:layout_height="50dp">
11 |         <TextView
12 |             android:layout_width="match_parent"
13 |             android:layout_height="match_parent"/>
14 |     </LinearLayout>
15 | 
16 | </RelativeLayout>


--------------------------------------------------------------------------------
/app/src/main/res/menu/database_file_list_options.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/menu_refresh"
 6 |         android:icon="@drawable/ic_refresh_24"
 7 |         android:title="@string/action_refresh"
 8 |         app:showAsAction="ifRoom" />
 9 | </menu>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/database_view_options.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/menu_database_filter"
 6 |         android:icon="@drawable/ic_filter_list"
 7 |         android:title="@string/action_filter_items"
 8 |         app:showAsAction="ifRoom" />
 9 |     <item
10 |         android:id="@+id/menu_calculate_size"
11 |         android:icon="@drawable/ic_data_usage"
12 |         android:title="@string/action_calculate_size"
13 |         app:showAsAction="ifRoom" />
14 | </menu>
15 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/exfriend_list_fragment_options.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/menu_item_add_record"
 6 |         android:title="添加"
 7 |         app:showAsAction="never" />
 8 |     <item
 9 |         android:id="@+id/menu_item_clear_all_record"
10 |         android:title="清空记录"
11 |         app:showAsAction="never" />
12 |     <item
13 |         android:id="@+id/menu_item_edit_exclusion_list"
14 |         android:title="配置排除列表"
15 |         app:showAsAction="never" />
16 | </menu>
17 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/func_status_details.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/menu_item_copy_all"
 6 |         android:icon="@drawable/ic_copy"
 7 |         android:title="@string/action_copy_all"
 8 |         app:showAsAction="ifRoom" />
 9 |     <item
10 |         android:id="@+id/menu_item_share_as_file"
11 |         android:icon="@drawable/ic_share_baseline_24"
12 |         android:title="@string/action_share_as_file"
13 |         app:showAsAction="ifRoom" />
14 |     <item
15 |         android:id="@+id/menu_item_save_as_file"
16 |         android:title="@string/action_save_as_file"
17 |         app:showAsAction="never" />
18 | </menu>
19 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/host_about_fragment_options.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
4 |     <item
5 |         android:id="@+id/menu_item_show_config_v2_activity"
6 |         android:title="ConfigV2Activity in Host"
7 |         app:showAsAction="never" />
8 | </menu>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/host_main_v2_options.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/menu_item_nativeLibVariantInfo"
 6 |         android:title="原生库信息"
 7 |         app:showAsAction="never" />
 8 |     <item
 9 |         android:id="@+id/menu_item_changeTheme"
10 |         android:title="切换主题"
11 |         app:showAsAction="never" />
12 |     <item
13 |         android:id="@+id/menu_item_test_pcm2silk"
14 |         android:title="PCM2SILK"
15 |         app:showAsAction="never" />
16 |     <item
17 |         android:id="@+id/menu_item_switch_to_module_process"
18 |         android:title="切换到模块进程"
19 |         app:showAsAction="never" />
20 | </menu>
21 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/main_settings_toolbar.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <item
 6 |         android:id="@+id/menu_item_action_search"
 7 |         android:icon="@drawable/ic_search_baseline"
 8 |         android:title="@string/action_search"
 9 |         app:showAsAction="collapseActionView|ifRoom"
10 |         app:actionViewClass="androidx.appcompat.widget.SearchView" />
11 | </menu>
12 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/main_v2_toolbar.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/menu_item_nativeLibVariantInfo"
 6 |         android:title="原生库信息"
 7 |         app:showAsAction="never" />
 8 |     <item
 9 |         android:id="@+id/menu_item_changeTheme"
10 |         android:title="切换主题"
11 |         app:showAsAction="never" />
12 |     <item
13 |         android:id="@+id/menu_item_test_pcm2silk"
14 |         android:title="PCM2SILK"
15 |         app:showAsAction="never" />
16 |     <item
17 |         android:id="@+id/menu_item_about"
18 |         android:title="关于"
19 |         app:showAsAction="never" />
20 | </menu>
21 | 


--------------------------------------------------------------------------------
/app/src/main/res/values-night/bool.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <bool name="is_night_mode">true</bool>
4 |     <bool name="is_not_night_mode">false</bool>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <resources>
 3 |     <color name="colorPrimary">#03A9F4</color>
 4 |     <color name="colorPrimaryDark">#FF82A8E7</color>
 5 |     <color name="colorAccent">#2D88FF</color>
 6 | 
 7 |     <color name="black">#FF000000</color>
 8 |     <color name="white">#FFFFFFFF</color>
 9 | 
10 |     <!-- Text Colors -->
11 |     <color name="firstTextColor">#FFFFFFFF</color>
12 |     <color name="secondTextColor">#DEFFFFFF</color>
13 |     <color name="thirdTextColor">#99FFFFFF</color>
14 |     <color name="whiteTextColor">#FFFFFFFF</color>
15 |     <color name="rippleColor">#14FFFFFF</color>
16 |     <color name="divideColor">#14FFFFFF</color>
17 | 
18 |     <color name="global_font_color">@color/white</color>
19 |     <color name="global_background_color">@color/black</color>
20 | 
21 |     <color name="sticker_share_root_tab_back">#555555</color>
22 |     <color name="sticker_share_root_tab_back_selected">#885555</color>
23 | 
24 |     <color name="defaultThemeBackgroundColor">#FF303030</color>
25 |     <color name="defaultThemeBackgroundColorAlpha80">#CC303030</color>
26 | 
27 | 
28 |     <color name="font_plugin">#FFFFFFFF</color>
29 |     <color name="bg_plugin">#FF3C3C3C</color>
30 | </resources>
31 | 


--------------------------------------------------------------------------------
/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 | 
4 |     <style name="Theme.MaiTungTMDesign.DayNight" parent="Theme.MaiTungTMDesign.Night" />
5 | 
6 |     <style name="Theme.MaiTungTMDesign.DayNight.Blue" parent="Theme.MaiTungTMDesign.Night.Blue" />
7 | 
8 | </resources>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <resources>
 3 |     <string-array name="xposedscope">
 4 |         <item>com.tencent.mobileqq</item>
 5 |         <item>com.tencent.tim</item>
 6 |         <item>com.tencent.qqlite</item>
 7 |         <item>com.tencent.minihd.qq</item>
 8 |     </string-array>
 9 | </resources>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <resources>
 3 | 
 4 |     <!-- MaiTung Style Theme Attributes -->
 5 |     <attr format="color" name="whiteBackgroundColor" />
 6 |     <attr format="color" name="themeIconColor" />
 7 |     <attr format="color" name="themeColor" />
 8 |     <attr format="color" name="usableColor" />
 9 |     <attr format="color" name="unusableColor" />
10 |     <attr format="color" name="warnColor" />
11 |     <attr format="color" name="lineColor" />
12 |     <attr format="color" name="backgroundColor" />
13 |     <attr format="color" name="backgroundColorAlphaTitle" />
14 | 
15 | </resources>
16 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/bool.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <bool name="is_night_mode">false</bool>
4 |     <bool name="is_not_night_mode">true</bool>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/build-logic/convention/src/main/kotlin/Utils.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2023 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the qwq233 Universal License
 8 |  * as published on https://github.com/qwq233/license; either
 9 |  * version 2 of the License, or any later version and our EULA as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the qwq233 Universal License for more details.
16 |  *
17 |  * See
18 |  * <https://github.com/qwq233/license>
19 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
20 |  */
21 | 
22 | import org.gradle.api.Plugin
23 | import org.gradle.api.Project
24 | import org.gradle.api.plugins.ExtensionAware
25 | 
26 | fun <T : Any> ExtensionAware.configure(name: String, block: T.() -> Unit) =
27 |     extensions.configure(name, block)
28 | 
29 | fun Project.withAndroidApplication(block: Plugin<in Any>.() -> Unit) =
30 |     plugins.withId("com.android.application", block)
31 | 


--------------------------------------------------------------------------------
/build-logic/convention/src/main/kotlin/build-logic.android.application.gradle.kts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | plugins {
24 |     id("com.android.application")
25 |     id("build-logic.android.base")
26 | }
27 | 
28 | configureAppSigningConfigsForRelease()
29 | 


--------------------------------------------------------------------------------
/build-logic/convention/src/main/kotlin/build-logic.android.library.gradle.kts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | plugins {
24 |     id("com.android.library")
25 |     id("build-logic.android.base")
26 | }
27 | 


--------------------------------------------------------------------------------
/build-logic/convention/src/main/kotlin/build-logic.root-project.gradle.kts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | require(project == rootProject) {
24 |     "This script must be apply to the root project."
25 | }
26 | 


--------------------------------------------------------------------------------
/build-logic/gradle.properties:
--------------------------------------------------------------------------------
1 | ../gradle.properties


--------------------------------------------------------------------------------
/build-logic/settings.gradle.kts:
--------------------------------------------------------------------------------
 1 | enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
 2 | 
 3 | dependencyResolutionManagement {
 4 |     repositories {
 5 |         google()
 6 |         mavenCentral()
 7 |     }
 8 |     versionCatalogs {
 9 |         create("libs") {
10 |             from(files("../gradle/libs.versions.toml"))
11 |         }
12 |     }
13 | }
14 | 
15 | include(":convention")
16 | rootProject.name = "build-logic"
17 | 


--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | plugins {
24 |     id("build-logic.root-project")
25 |     alias(libs.plugins.kotlin.jvm) apply false
26 | }
27 | 
28 | tasks.register<Delete>("clean").configure {
29 |     delete(rootProject.buildDir)
30 | }
31 | 


--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
 1 | org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 -XX:+UseParallelGC
 2 | org.gradle.caching=true
 3 | org.gradle.parallel=true
 4 | 
 5 | android.useAndroidX=true
 6 | android.nonTransitiveRClass=true
 7 | android.injected.testOnly=false
 8 | android.includeDependencyInfoInApks=false
 9 | android.enableBuildConfigAsBytecode=true
10 | android.enableResourceOptimizations=false
11 | 
12 | kotlin.code.style=official
13 | kotlin.daemon.useFallbackStrategy=false
14 | 


--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cinit/QAuxiliary/7ac911561c6e016c9772263a613db305bf80b274/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 | 


--------------------------------------------------------------------------------
/libs/dexkit/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <!--
 2 |   ~ QAuxiliary - An Xposed module for QQ/TIM
 3 |   ~ Copyright (C) 2019-2023 QAuxiliary developers
 4 |   ~ https://github.com/cinit/QAuxiliary
 5 |   ~
 6 |   ~ This software is non-free but opensource software: you can redistribute it
 7 |   ~ and/or modify it under the terms of the GNU Affero General Public License
 8 |   ~ as published by the Free Software Foundation; either
 9 |   ~ version 3 of the License, or any later version and our eula as published
10 |   ~ by QAuxiliary contributors.
11 |   ~
12 |   ~ This software is distributed in the hope that it will be useful,
13 |   ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |   ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |   ~ Affero General Public License for more details.
16 |   ~
17 |   ~ You should have received a copy of the GNU Affero General Public License
18 |   ~ and eula along with this software.  If not, see
19 |   ~ <https://www.gnu.org/licenses/>
20 |   ~ <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |   -->
22 | 
23 | <manifest>
24 | </manifest>


--------------------------------------------------------------------------------
/libs/dexkit/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2022 qwq233@qwq2333.top
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is non-free but opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the GNU Affero General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version and our eula as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |  * Affero General Public License for more details.
16 |  *
17 |  * You should have received a copy of the GNU Affero General Public License
18 |  * and eula along with this software.  If not, see
19 |  * <https://www.gnu.org/licenses/>
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | @file:Suppress("UnstableApiUsage")
24 | 
25 | plugins {
26 |     id("build-logic.android.library")
27 | }
28 | 
29 | android {
30 |     namespace = "org.luckypray.dexkit"
31 |     sourceSets {
32 |         val main by getting
33 |         main.apply {
34 |             manifest.srcFile("AndroidManifest.xml")
35 |             java.setSrcDirs(listOf("DexKit/dexkit/src/main/java"))
36 |         }
37 |     }
38 | }
39 | 
40 | dependencies {
41 |     implementation(libs.flatbuffers.java)
42 | }
43 | 


--------------------------------------------------------------------------------
/libs/ezxhelper/src/main/java/com/github/kyuubiran/ezxhelper/init/InitFields.kt:
--------------------------------------------------------------------------------
 1 | package com.github.kyuubiran.ezxhelper.init
 2 | 
 3 | import android.content.Context
 4 | import android.content.res.Resources
 5 | import io.github.qauxv.util.hostInfo
 6 | 
 7 | object InitFields {
 8 |     /**
 9 |      * 宿主全局AppContext
10 |      */
11 |     val appContext: Context
12 |         get() = hostInfo.application
13 | 
14 |     /**
15 |      * 调用本库加载类函数时使用的类加载器
16 |      */
17 |     lateinit var ezXClassLoader: ClassLoader
18 |         internal set
19 | 
20 | }
21 | 


--------------------------------------------------------------------------------
/libs/ezxhelper/src/main/java/com/github/kyuubiran/ezxhelper/utils/AndroidUtils.kt:
--------------------------------------------------------------------------------
 1 | package com.github.kyuubiran.ezxhelper.utils
 2 | 
 3 | import android.content.Context
 4 | import android.content.res.Resources
 5 | import android.os.Handler
 6 | import android.os.Looper
 7 | import android.widget.Toast
 8 | 
 9 | val mainHandler: Handler by lazy {
10 |     Handler(Looper.getMainLooper())
11 | }
12 | 
13 | val runtimeProcess: Runtime by lazy {
14 |     Runtime.getRuntime()
15 | }
16 | 
17 | /**
18 |  * 扩展函数 将函数放到主线程执行 如UI更新、显示Toast等
19 |  */
20 | fun Runnable.postOnMainThread() {
21 |     if (Looper.myLooper() == Looper.getMainLooper()) {
22 |         this.run()
23 |     } else {
24 |         mainHandler.post(this)
25 |     }
26 | }
27 | 
28 | fun runOnMainThread(runnable: Runnable) {
29 |     runnable.postOnMainThread()
30 | }
31 | 
32 | /**
33 |  * 扩展函数 显示一个Toast
34 |  * @param msg Toast显示的消息
35 |  * @param length Toast显示的时长
36 |  */
37 | fun Context.showToast(msg: String, length: Int = Toast.LENGTH_SHORT) = runOnMainThread {
38 |     Toast.makeText(this, msg, length).show()
39 | }
40 | 
41 | /**
42 |  * 扩展函数 显示一个Toast
43 |  * @param msg Toast显示的消息
44 |  * @param args 格式化的参数
45 |  * @param length Toast显示的时长
46 |  */
47 | fun Context.showToast(msg: String, vararg args: Any?, length: Int = Toast.LENGTH_SHORT) = runOnMainThread {
48 |     Toast.makeText(this, msg.format(args), length).show()
49 | }
50 | 


--------------------------------------------------------------------------------
/libs/ksp/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     kotlin("jvm")
 3 | }
 4 | 
 5 | dependencies {
 6 |     implementation(libs.ksp)
 7 |     implementation(libs.kotlinpoet.ksp)
 8 | }
 9 | 
10 | kotlin {
11 |     jvmToolchain(Version.java.toString().toInt())
12 | }
13 | 
14 | tasks.withType<JavaCompile> {
15 |     sourceCompatibility = Version.java.toString()
16 |     targetCompatibility = Version.java.toString()
17 | }
18 | 


--------------------------------------------------------------------------------
/libs/ksp/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider:
--------------------------------------------------------------------------------
1 | cn.lliiooll.processors.FunctionItemProvider
2 | cn.lliiooll.processors.UiItemAgentEntryProcessorProvider
3 | 


--------------------------------------------------------------------------------
/libs/libxposed/api/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest />
2 | 


--------------------------------------------------------------------------------
/libs/libxposed/api/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("build-logic.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "io.github.libxposed.api"
 7 |     sourceSets {
 8 |         val main by getting
 9 |         main.apply {
10 |             manifest.srcFile("AndroidManifest.xml")
11 |             java.setSrcDirs(listOf("api/api/src/main/java"))
12 |         }
13 |     }
14 | 
15 |     defaultConfig {
16 |         minSdk = Version.minSdk
17 |         targetSdk = Version.targetSdk
18 |         buildToolsVersion = Version.buildToolsVersion
19 |     }
20 | 
21 |     compileOptions {
22 |         sourceCompatibility = JavaVersion.VERSION_1_8
23 |         targetCompatibility = JavaVersion.VERSION_1_8
24 |     }
25 | 
26 |     dependencies {
27 |         // androidx nullability stubs
28 |         compileOnly(libs.androidx.annotation)
29 |     }
30 | 
31 | }
32 | 


--------------------------------------------------------------------------------
/libs/libxposed/service/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("build-logic.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "io.github.libxposed.service"
 7 |     sourceSets {
 8 |         val main by getting
 9 |         main.apply {
10 |             manifest.srcFile("service/service/src/main/AndroidManifest.xml")
11 |             java.setSrcDirs(listOf("service/service/src/main/java"))
12 |             aidl.setSrcDirs(listOf("service/interface/src/main/aidl"))
13 |         }
14 |     }
15 | 
16 |     defaultConfig {
17 |         minSdk = Version.minSdk
18 |         targetSdk = Version.targetSdk
19 |         buildToolsVersion = Version.buildToolsVersion
20 |     }
21 | 
22 |     // Java 17 is required by libxposed-service
23 |     compileOptions {
24 |         sourceCompatibility = JavaVersion.VERSION_17
25 |         targetCompatibility = JavaVersion.VERSION_17
26 |     }
27 | 
28 |     buildFeatures {
29 |         buildConfig = false
30 |         resValues = false
31 |         aidl = true
32 |     }
33 | 
34 |     dependencies {
35 |         compileOnly(libs.androidx.annotation)
36 |     }
37 | 
38 | }
39 | 
40 | // I don't know why but this is required to make the AGP use JDK 17 to compile the source code.
41 | // On my machine, even if I set the sourceCompatibility and targetCompatibility to JavaVersion.VERSION_17,
42 | // and run Gradle with JDK 17, the AGP still uses JDK 11 to compile the source code.
43 | java {
44 |     toolchain {
45 |         languageVersion = JavaLanguageVersion.of(17)
46 |     }
47 | }
48 | 


--------------------------------------------------------------------------------
/libs/mmkv/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/libs/mmkv/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest>
2 | </manifest>


--------------------------------------------------------------------------------
/libs/mmkv/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("build-logic.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "com.tencent.mmkv"
 7 |     defaultConfig {
 8 |         buildConfigField("String", "FLAVOR", "\"StaticCpp\"")
 9 |     }
10 | 
11 |     buildFeatures {
12 |         buildConfig = true
13 |     }
14 | 
15 |     sourceSets {
16 |         val main by getting
17 |         main.apply {
18 |             manifest.srcFile("AndroidManifest.xml")
19 |             java {
20 |                 setSrcDirs(listOf("MMKV/Android/MMKV/mmkv/src/main/java"))
21 |                 // it seems that FastNative.class is already included in the SDK 34
22 |                 (this as com.android.build.gradle.api.AndroidSourceDirectorySet).apply {
23 |                     // AGP kts DSK still not having a way to exclude files?
24 |                     filter.exclude("**/FastNative.java")
25 |                 }
26 |             }
27 |             aidl.setSrcDirs(listOf("MMKV/Android/MMKV/mmkv/src/main/aidl"))
28 |             res.setSrcDirs(listOf("MMKV/Android/MMKV/mmkv/src/main/res"))
29 |             assets.setSrcDirs(listOf("MMKV/Android/MMKV/mmkv/src/main/assets"))
30 |         }
31 |     }
32 | 
33 |     dependencies {
34 |         compileOnly(libs.androidx.annotation)
35 |     }
36 | }
37 | 


--------------------------------------------------------------------------------
/libs/silk/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.8.0)
 2 | 
 3 | enable_language(C)
 4 | 
 5 | # we only have asm files for arm, but the ldmgtia instruction makes AS unhappy
 6 | # SKP_Silk_allpass_int_arm.S:100:2: error: invalid instruction
 7 | 
 8 | # find source files silk-v3-decoder/silk/src/*.c
 9 | file(GLOB_RECURSE SILK_SRC "silk-v3-decoder/silk/src/*.c")
10 | 
11 | add_library(silk STATIC ${SILK_SRC})
12 | 
13 | target_include_directories(silk PUBLIC "silk-v3-decoder/silk/interface")
14 | 
15 | target_compile_definitions(silk PRIVATE "NO_ASM")
16 | 
17 | set_target_properties(silk PROPERTIES
18 |         C_STANDARD 11
19 |         POSITION_INDEPENDENT_CODE ON
20 |         )
21 | 


--------------------------------------------------------------------------------
/libs/silk/silk-v3-decoder/LICENSE:
--------------------------------------------------------------------------------
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2020 Karl Chen
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy
 6 | of this software and associated documentation files (the "Software"), to deal
 7 | in the Software without restriction, including without limitation the rights
 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 | 


--------------------------------------------------------------------------------
/libs/stub/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <!--
 2 |   ~ QAuxiliary - An Xposed module for QQ/TIM
 3 |   ~ Copyright (C) 2019-2023 QAuxiliary developers
 4 |   ~ https://github.com/cinit/QAuxiliary
 5 |   ~
 6 |   ~ This software is non-free but opensource software: you can redistribute it
 7 |   ~ and/or modify it under the terms of the GNU Affero General Public License
 8 |   ~ as published by the Free Software Foundation; either
 9 |   ~ version 3 of the License, or any later version and our eula as published
10 |   ~ by QAuxiliary contributors.
11 |   ~
12 |   ~ This software is distributed in the hope that it will be useful,
13 |   ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |   ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |   ~ Affero General Public License for more details.
16 |   ~
17 |   ~ You should have received a copy of the GNU Affero General Public License
18 |   ~ and eula along with this software.  If not, see
19 |   ~ <https://www.gnu.org/licenses/>
20 |   ~ <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |   -->
22 | 
23 | <manifest>
24 | </manifest>


--------------------------------------------------------------------------------
/libs/stub/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("build-logic.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "me.teble.xposed.stub"
 7 |     sourceSets {
 8 |         val main by getting
 9 |         main.apply {
10 |             manifest.srcFile("AndroidManifest.xml")
11 |             java.setSrcDirs(listOf("qq-stub/src/main/java"))
12 |             res.setSrcDirs(listOf("qq-stub/src/main/res"))
13 |         }
14 |     }
15 | 
16 |     dependencies {
17 |         // androidx nullability stubs
18 |         compileOnly(libs.androidx.annotation)
19 |     }
20 | }
21 | 


--------------------------------------------------------------------------------
/libs/xView/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <!--
 2 |   ~ QAuxiliary - An Xposed module for QQ/TIM
 3 |   ~ Copyright (C) 2019-2023 QAuxiliary developers
 4 |   ~ https://github.com/cinit/QAuxiliary
 5 |   ~
 6 |   ~ This software is non-free but opensource software: you can redistribute it
 7 |   ~ and/or modify it under the terms of the GNU Affero General Public License
 8 |   ~ as published by the Free Software Foundation; either
 9 |   ~ version 3 of the License, or any later version and our eula as published
10 |   ~ by QAuxiliary contributors.
11 |   ~
12 |   ~ This software is distributed in the hope that it will be useful,
13 |   ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |   ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 |   ~ Affero General Public License for more details.
16 |   ~
17 |   ~ You should have received a copy of the GNU Affero General Public License
18 |   ~ and eula along with this software.  If not, see
19 |   ~ <https://www.gnu.org/licenses/>
20 |   ~ <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |   -->
22 | 
23 | <manifest>
24 | </manifest>


--------------------------------------------------------------------------------
/loader/hookapi/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("com.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "io.github.qauxv.loader.hookapi"
 7 |     compileSdk = Version.compileSdkVersion
 8 | 
 9 |     defaultConfig {
10 |         minSdk = Version.minSdk
11 |     }
12 | 
13 |     compileOptions {
14 |         sourceCompatibility = JavaVersion.VERSION_1_8
15 |         targetCompatibility = JavaVersion.VERSION_1_8
16 |     }
17 | }
18 | 
19 | dependencies {
20 |     compileOnly(libs.androidx.annotation)
21 | }
22 | 


--------------------------------------------------------------------------------
/loader/sbl/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("com.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "io.github.qauxv.loader.sbl"
 7 |     compileSdk = Version.compileSdkVersion
 8 | 
 9 |     defaultConfig {
10 |         minSdk = Version.minSdk
11 | 
12 |         buildConfigField("String", "VERSION_NAME", "\"${Common.getBuildVersionName(rootProject)}\"")
13 |         buildConfigField("int", "VERSION_CODE", "${Common.getBuildVersionCode(rootProject)}")
14 |     }
15 | 
16 |     compileOptions {
17 |         sourceCompatibility = JavaVersion.VERSION_1_8
18 |         targetCompatibility = JavaVersion.VERSION_1_8
19 |     }
20 | 
21 |     buildFeatures {
22 |         buildConfig = true
23 |     }
24 | }
25 | 
26 | dependencies {
27 |     // Xposed API 89
28 |     compileOnly(libs.xposed.api)
29 |     // LSPosed API 100
30 |     compileOnly(projects.libs.libxposed.api)
31 |     compileOnly(libs.androidx.annotation)
32 |     implementation(projects.loader.hookapi)
33 | }
34 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/java/io/github/qauxv/loader/sbl/common/CheckUtils.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * QAuxiliary - An Xposed module for QQ/TIM
 3 |  * Copyright (C) 2019-2024 QAuxiliary developers
 4 |  * https://github.com/cinit/QAuxiliary
 5 |  *
 6 |  * This software is an opensource software: you can redistribute it
 7 |  * and/or modify it under the terms of the General Public License
 8 |  * as published by the Free Software Foundation; either
 9 |  * version 3 of the License, or any later version as published
10 |  * by QAuxiliary contributors.
11 |  *
12 |  * This software is distributed in the hope that it will be useful,
13 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 |  * See the General Public License for more details.
16 |  *
17 |  * You should have received a copy of the General Public License
18 |  * along with this software.
19 |  * If not, see
20 |  * <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>.
21 |  */
22 | 
23 | package io.github.qauxv.loader.sbl.common;
24 | 
25 | public class CheckUtils {
26 | 
27 |     private CheckUtils() {
28 |         throw new UnsupportedOperationException("No instances");
29 |     }
30 | 
31 |     public static void checkNonNull(Object obj, String message) {
32 |         if (obj == null) {
33 |             throw new NullPointerException(message);
34 |         }
35 |     }
36 | 
37 | }
38 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/java/io/github/qauxv/loader/sbl/common/TransitClassLoader.java:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.loader.sbl.common;
 2 | 
 3 | import android.content.Context;
 4 | 
 5 | public class TransitClassLoader extends ClassLoader {
 6 | 
 7 |     private static final ClassLoader sSystem = Context.class.getClassLoader();
 8 |     private static final ClassLoader sCurrent = TransitClassLoader.class.getClassLoader();
 9 | 
10 |     public TransitClassLoader() {
11 |         super(sSystem);
12 |     }
13 | 
14 |     @Override
15 |     protected Class<?> findClass(String name) throws ClassNotFoundException {
16 |         if (name != null && name.startsWith("io.github.qauxv.loader.")) {
17 |             return sCurrent.loadClass(name);
18 |         }
19 |         return super.findClass(name);
20 |     }
21 | 
22 | }
23 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/java/io/github/qauxv/loader/sbl/xp51/Xp51ExtCmd.java:
--------------------------------------------------------------------------------
 1 | package io.github.qauxv.loader.sbl.xp51;
 2 | 
 3 | import androidx.annotation.NonNull;
 4 | import androidx.annotation.Nullable;
 5 | import de.robv.android.xposed.XposedBridge;
 6 | import io.github.qauxv.loader.sbl.common.CheckUtils;
 7 | import io.github.qauxv.loader.sbl.common.ModuleLoader;
 8 | 
 9 | public class Xp51ExtCmd {
10 | 
11 |     private Xp51ExtCmd() {
12 |     }
13 | 
14 |     public static Object handleQueryExtension(@NonNull String cmd, @Nullable Object[] arg) {
15 |         CheckUtils.checkNonNull(cmd, "cmd");
16 |         switch (cmd) {
17 |             case "GetXposedBridgeClass":
18 |                 return XposedBridge.class;
19 |             case "GetLoadPackageParam":
20 |                 return Xp51HookEntry.getLoadPackageParam();
21 |             case "GetInitZygoteStartupParam":
22 |                 return Xp51HookEntry.getInitZygoteStartupParam();
23 |             case "GetInitErrors":
24 |                 return ModuleLoader.getInitErrors();
25 |             default:
26 |                 return null;
27 |         }
28 |     }
29 | 
30 | }
31 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/resources/META-INF/xposed/java_init.list:
--------------------------------------------------------------------------------
1 | io.github.qauxv.loader.sbl.lsp100.Lsp100HookEntry
2 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/resources/META-INF/xposed/module.prop:
--------------------------------------------------------------------------------
1 | minApiVersion=51
2 | targetApiVersion=100
3 | staticScope=true
4 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/resources/META-INF/xposed/native_init.list:
--------------------------------------------------------------------------------
1 | libqauxv-core0.so
2 | 


--------------------------------------------------------------------------------
/loader/sbl/src/main/resources/META-INF/xposed/scope.list:
--------------------------------------------------------------------------------
1 | com.tencent.mobileqq
2 | com.tencent.tim
3 | com.tencent.qqlite
4 | com.tencent.minihd.qq
5 | 


--------------------------------------------------------------------------------
/loader/startup/build.gradle.kts:
--------------------------------------------------------------------------------
 1 | plugins {
 2 |     id("com.android.library")
 3 | }
 4 | 
 5 | android {
 6 |     namespace = "io.github.qauxv.startup"
 7 |     compileSdk = Version.compileSdkVersion
 8 | 
 9 |     defaultConfig {
10 |         minSdk = Version.minSdk
11 |     }
12 | 
13 |     compileOptions {
14 |         sourceCompatibility = JavaVersion.VERSION_1_8
15 |         targetCompatibility = JavaVersion.VERSION_1_8
16 |     }
17 | }
18 | 
19 | dependencies {
20 |     compileOnly(libs.androidx.annotation)
21 |     compileOnly(projects.loader.hookapi)
22 | }
23 | 


--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "$schema": "https://docs.renovatebot.com/renovate-schema.json",
 3 |   "extends": [
 4 |     "config:base",
 5 |     ":disableDependencyDashboard"
 6 |   ],
 7 |   "packageRules": [
 8 |     {
 9 |       "matchPackagePatterns": [
10 |         "*"
11 |       ],
12 |       "matchUpdateTypes": [
13 |         "minor",
14 |         "patch"
15 |       ],
16 |       "groupName": "all non-major dependencies",
17 |       "groupSlug": "all-minor-patch"
18 |     },
19 |     {
20 |       "matchPackageNames": [
21 |         "com.google.guava:guava"
22 |       ],
23 |       "versioning": "regex:^(?<major>\\d+)(\\.(?<minor>\\d+))?(\\.(?<patch>\\d+))?(-(?<compatibility>.*))?
quot;
24 |     },
25 |     {
26 |       "matchPackageNames": [
27 |         "com.android.library",
28 |         "com.android.application",
29 |         "com.android.tools.build:gradle",
30 |         "com.google.flatbuffers:flatbuffers-java"
31 |       ],
32 |       "enabled": false
33 |     }
34 |   ]
35 | }
36 | 


--------------------------------------------------------------------------------