├── .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 Copyright (C) 2019-&#36;{today.year} QAuxiliary developers https://github.com/cinit/QAuxiliary This software is an opensource software: you can redistribute it and/or modify it under the terms of the General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version as published by QAuxiliary contributors. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the General Public License for more details. You should have received a copy of the General Public License along with this software. If not, see <https://github.com/cinit/QAuxiliary/blob/master/LICENSE.md>." /> 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 | --------------------------------------------------------------------------------